@tocca-systems/twp-cli 0.75.0 → 0.76.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 +8 -0
- package/README.md +3 -0
- package/dist/{agent-loop-UTS4MYW6.js → agent-loop-ZNQJSXQV.js} +2 -2
- package/dist/{ai-dispatch-OAT752RN.js → ai-dispatch-NFFEUL6K.js} +3 -3
- package/dist/{api-command-UEJMEL6Z.js → api-command-OKQHSCD4.js} +4 -4
- package/dist/{app-UXU57NZ7.js → app-OAJTDDSR.js} +3 -3
- package/dist/{chunk-GTRKN2YS.js → chunk-4VAWX7TW.js} +1 -1
- package/dist/{chunk-UC2EYXI5.js → chunk-5VZSHYKX.js} +1 -1
- package/dist/{chunk-HOLKWMS2.js → chunk-F6LEGFID.js} +4 -3
- package/dist/chunk-JUJSF5ZG.js +19 -0
- package/dist/chunk-OG7FD7SR.js +16 -0
- package/dist/{chunk-PS5FXSKW.js → chunk-YIH36ZDI.js} +3 -3
- package/dist/cli.js +9 -6
- package/dist/{commands-ZCXAJXHW.js → commands-UMSNPM4D.js} +11 -11
- package/dist/{knowledge-4MLFTYQO.js → knowledge-W3ONOGV2.js} +68 -50
- package/dist/{media-KTKCEVUU.js → media-FDOAC5ZH.js} +1 -1
- package/dist/{oneshot-23Z6ODXV.js → oneshot-ALYKVJW2.js} +1 -1
- package/dist/plan-submit-2FSRRNIV.js +4 -0
- package/dist/{registry-SB5KZ63I.js → registry-NQZQRUDI.js} +1 -1
- package/dist/{run-RQDWPOY3.js → run-UYJP4Z5U.js} +1 -1
- package/package.json +1 -1
- package/dist/chunk-DXUFECE7.js +0 -13
- package/dist/chunk-QS5VWTI3.js +0 -16
- package/dist/plan-submit-CZRVVZZB.js +0 -4
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,14 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.76.0
|
|
15
|
+
|
|
16
|
+
`twp wiki append` で本文の末尾へ追記、`twp wiki update --section <見出し>` で1つの節だけを差し替えられるようになりました。全文を送り直さずに済みます。
|
|
17
|
+
|
|
18
|
+
`twp wiki list --keyword` の結果に本文の該当箇所(抜粋)が出るようになり、関連度の高い順に並ぶようになりました。
|
|
19
|
+
|
|
20
|
+
`twp task-loop` がサーバへ送る記録で、認証ヘッダ・Cookie・AWS の資格情報ファイルの値・途中で切れた秘密鍵も伏字にするようになりました。
|
|
21
|
+
|
|
14
22
|
## 0.75.0
|
|
15
23
|
|
|
16
24
|
資格マスタを CLI から管理できるようになりました。`twp qualification create` / `update` / `delete` で資格を作成・変更・削除でき、`twp qualification import-template` で雛形を書き出して `twp qualification import --file <CSV>` で一括登録できます(`--dry-run` で登録・スキップされる行を事前に確認できます)。資格制度の説明文は `twp qualification program get` / `set` で参照・更新できます。
|
package/README.md
CHANGED
|
@@ -1401,6 +1401,8 @@ twp wiki backlinks <ページID> # このページ
|
|
|
1401
1401
|
twp wiki linked-tasks <ページID> # このページに紐づいたタスク
|
|
1402
1402
|
twp wiki create [--project <コード|ID>] --title <件名> --content-file <パス|-> [--content-format <html|markdown>] [--parent <ページID>] [--status <draft|published>] [--tag <タグ>]... [--verified-at <日付|today>] [--evidence-task <キー>]... [--kind <種別>]
|
|
1403
1403
|
twp wiki update <ページID> [--title <件名>] [--content-file <パス|->] [--content-format <html|markdown>] [--status <draft|published>] [--tag <タグ>]... [--clear-tags] [--verified-at <日付|today>|--clear-verified-at] [--evidence-task <キー>...|--clear-evidence-tasks] [--kind <種別>|--clear-kind] [--if-version <版>]
|
|
1404
|
+
twp wiki update <ページID> --section <見出し> --content-file <パス|-> [--if-version <版>] # その節の本文だけを差し替える
|
|
1405
|
+
twp wiki append <ページID> --content-file <パス|-> [--if-version <版>] # 本文の末尾へ追記する
|
|
1404
1406
|
twp wiki move <ページID> [--parent <ページID>|root] [--sort-order <順>]
|
|
1405
1407
|
twp wiki delete <ページID> --yes
|
|
1406
1408
|
twp note list [--mine] [--favorite] [--status <draft|published>] [--visibility <private|tenant|external|public>] [--keyword <語>] [--all]
|
|
@@ -1422,6 +1424,7 @@ twp meeting get <議事録ID> --output text
|
|
|
1422
1424
|
- wiki の本文は `--content-file` のファイル(`-` で標準入力)から読み、加工せずに送ります。`--content-format` を省くと、ファイルの拡張子から形式を決めます(`.md` / `.markdown` は Markdown、`.html` / `.htm` は HTML。決めたことを stderr で知らせます)。拡張子で決まらない(標準入力・`.txt` 等)ときはプロジェクトの既定の形式(未設定なら HTML)になり、HTML のページに Markdown を渡しても変換されず記号のまま表示されます。`update` で拡張子から決めた形式がページの形式と違うときは、何も送らずに終了コード 3 で止まります(ページの形式は作成後に変えられません)。`create` で `--status` を省くと下書きになります
|
|
1423
1425
|
- ページの形式(`html` / `markdown`)は作成後に変えられません。`update` で違う形式を指定するとサーバの拒否をそのまま出して終了コード 3 です。`twp wiki get` は形式を `content_format` 列(`--output text` では「形式:」)に出し、Markdown のページの本文は Markdown のまま出します
|
|
1424
1426
|
- `twp wiki update --if-version <版>` は送る直前にページの版(`twp wiki get` の `version`)を照合し、違えば何も送らずに終了コード 3 で止まります。版照合に対応したサーバでは `expected_version` で書き込み時にも照合し、間に他の更新があれば 409(現在の版を表示)で終了コード 3 になります。対応前のサーバでは照合と送信の間の他人の更新までは防げません。`--tag` はタグを置き換え、`--clear-tags` で空にします
|
|
1427
|
+
- `twp wiki append` と `twp wiki update --section <見出し>` は全文を取得・送信せずに本文を部分的に変えます(サーバが全文を組み立て、版・版の履歴・活動履歴・リンクは全文更新と同じように更新されます)。`append` は末尾へ足し(Markdown は空行を1つ挟む)、`--section` は見出しの行を残してその節の本文だけを差し替えます。節は同じか上位の次の見出しの直前までで、下位の見出しはまとめて差し替わります。見出しは `wiki get --section` と同じ規則で探しますが、見つからない・同名が複数あるときはサーバが断り、何も変えずに終了コード 3 です。`--if-version` を付けなくてもサーバは読んだ版を条件に書くので他の更新を消しません。結果には更新後の版を出します(本文は出しません)。`--section` と一緒に使えるのは `--content-file` と `--if-version` だけです
|
|
1425
1428
|
- ナレッジの鮮度は `--verified-at`(最終実測日。`today` は日本時間の今日)・`--evidence-task`(根拠タスクのキー・複数回可・置き換え)・`--kind`(種別)でページに記録します。`twp wiki list --stale-days <N>` は最終実測日が N 日以上前のページと未設定のページを、実測日の古い順に出します(要約列は `status` / `verified_at` / `knowledge_kind` / `evidence_task_keys`)。サーバがこの属性を返さない古い版だと絞り込みが効かないので、そのときは stderr で知らせます
|
|
1426
1429
|
- 編集・移動・削除できるのはページの作成者・wiki の管理者・組織の管理者です。権限が無ければサーバの文面をそのまま出して終了コード 3 です
|
|
1427
1430
|
- ノート・議事録の書き込みはまだできません(`twp api /api/v2/notes/...`・`/api/v2/meetings/...` で到達できます)。ヘルプは `twp wiki help` / `twp note help` / `twp meeting help`
|
|
@@ -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-
|
|
4
|
-
LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,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";
|
|
3
|
+
import{stepToItem}from"./chunk-OG7FD7SR.js";import"./chunk-JUJSF5ZG.js";import{loadLocalConfig}from"./chunk-GAXJPIKO.js";import"./chunk-VYDPW2YO.js";import{loadAiConfig}from"./chunk-FABDZBDZ.js";import{parseOperations}from"./chunk-XMPHGOW4.js";import"./chunk-TTST7UDR.js";import{SKILL_PREFIX_RE,setSkillPrefix}from"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-5KAWCLYN.js";import"./chunk-LDBYJPRD.js";import"./chunk-GY7KI5E5.js";
|
|
4
|
+
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,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";
|
|
5
5
|
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\
|
|
6
6
|
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 PLAN_RESULTS=["enqueued","empty","json_not_found","ai_failed","error","skipped","gated","locked","abandoned"];var PLAN_HISTORY_COLUMNS=["plan_run_id","result","runner_id","ai_type","duration_ms","cost_usd","step_count","started_at"];var PROJECT_FLAG={name:"--pr\
|
|
7
7
|
oject",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:"<\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:"\
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-ZOOEH7ZE.js";import{detectAiClis}from"./chunk-5SONMN6K.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-DPIJF3EN.js";import"./chunk-MYBIPHZ7.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{ClaudeStreamRenderer}from"./chunk-
|
|
4
|
-
detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-FABDZBDZ.js";import"./chunk-6CS5L24D.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import"./chunk-5KAWCLYN.js";import"./chunk-GY7KI5E5.js";import"./chunk-VFPY2A23.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";
|
|
5
|
-
import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var DEFAULT_AI_TIMING={abortGraceMs:5e3,abortReapMs:2e3,pollIntervalMs:5e3};function resolveTiming(over){return{abortGraceMs:over?.abortGraceMs??DEFAULT_AI_TIMING.abortGraceMs,abortReapMs:over?.abortReapMs??DEFAULT_AI_TIMING.abortReapMs,pollIntervalMs:over?.pollIntervalMs??DEFAULT_AI_TIMING.pollIntervalMs}}var MAX_RETAINED_BYTES=4*1024*1024;function closeStream(stream){return new Promise(resolve=>{if(stream===null)return resolve();stream.once("error",()=>resolve());stream.end(()=>resolve())})}function buildArgs(req,cfg,env,workspace){
|
|
3
|
+
import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-ZOOEH7ZE.js";import{detectAiClis}from"./chunk-5SONMN6K.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-DPIJF3EN.js";import"./chunk-MYBIPHZ7.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{ClaudeStreamRenderer}from"./chunk-JUJSF5ZG.js";import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,
|
|
4
|
+
detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-FABDZBDZ.js";import"./chunk-6CS5L24D.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import"./chunk-5KAWCLYN.js";import"./chunk-LDBYJPRD.js";import"./chunk-GY7KI5E5.js";import"./chunk-VFPY2A23.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";
|
|
5
|
+
import"./chunk-5WGOHFAS.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var DEFAULT_AI_TIMING={abortGraceMs:5e3,abortReapMs:2e3,pollIntervalMs:5e3};function resolveTiming(over){return{abortGraceMs:over?.abortGraceMs??DEFAULT_AI_TIMING.abortGraceMs,abortReapMs:over?.abortReapMs??DEFAULT_AI_TIMING.abortReapMs,pollIntervalMs:over?.pollIntervalMs??DEFAULT_AI_TIMING.pollIntervalMs}}var MAX_RETAINED_BYTES=4*1024*1024;function closeStream(stream){return new Promise(resolve=>{if(stream===null)return resolve();stream.once("error",()=>resolve());stream.end(()=>resolve())})}function buildArgs(req,cfg,env,workspace){
|
|
6
6
|
const warnings=[];const requested=(req.model??"").trim();const usable=requested!==""&&isUsableModelId(requested);if(requested!==""&&!usable){warnings.push(`ai_model '${requested}' \u306F\u4F7F\u3048\u306A\u3044\u5F62\u3067\u3059 \u2192 \u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3092\u4F7F\u3044\u307E\u3059`)}const fitsRoute=!usable||!isClaudeAi(req.ai)||modelFitsRoute(requested,env);if(usable&&!fitsRoute){warnings.push(`ai_model '${requested}' \u306F\u73FE\u5728\u306E\u5B9F\u884C\u7D4C\u8DEF\u3067\u306F\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\uFF08\u3053\u306E\u6A5F\u4F53\u306F ${usesBedrock(
|
|
7
7
|
env)?"Bedrock":"Anthropic \u76F4"}\uFF09 \u2192 \u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3092\u4F7F\u3044\u307E\u3059`)}const fallback=cfg.modelFor(req.ai,req.category,env);const safeFallback=fallback===""||!isClaudeAi(req.ai)||modelFitsRoute(fallback,env)?fallback:"";if(fallback!==""&&safeFallback===""){warnings.push(`CLAUDE_MODEL '${fallback}' \u3082\u73FE\u5728\u306E\u5B9F\u884C\u7D4C\u8DEF\u3067\u306F\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093 \u2192 \u30E2\u30C7\u30EB\u3092\u6307\u5B9A\u3057\u307E\u305B\u3093`)}
|
|
8
8
|
const model=usable&&fitsRoute?requested:safeFallback;const maxTurns=cfg.maxTurnsFor(req.category,env);let effort="";switch(req.ai){case"gemini":return{file:"gemini",args:["--yolo",...model?["--model",model]:[]],env:{GEMINI_CLI_TRUST_WORKSPACE:"true"},model,effort,maxTurns,warnings};case"codex":return{file:"codex",args:["exec","-s","danger-full-access",...model?["--model",model]:[]],env:{},model,effort,maxTurns,warnings};case"copilot":{const mcp=path.join(workspace,".copilot","mcp-config.json");const args=[
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-
|
|
4
|
-
import{
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-5VZSHYKX.js";import"./chunk-YIH36ZDI.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderOutput}from"./chunk-PO35MCYP.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";
|
|
4
|
+
import{redactSecretValues,redactSecrets,withDebug}from"./chunk-LDBYJPRD.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-7APLKLQL.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";
|
|
5
|
+
import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import{ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";
|
|
6
|
+
import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-W4E4F2ZA.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
|
|
7
7
|
test(segment)?null:segment)})}parsedCache.set(routes,parsed);return parsed}function matches(route,segments){if(route.segments.length!==segments.length)return false;return route.segments.every((literal,i)=>literal===null||literal===segments[i])}function compareSpecificity(a,b){const literals=route=>route.segments.filter(segment=>segment!==null).length;const diff=literals(b)-literals(a);if(diff!==0)return diff;for(let i=0;i<a.segments.length;i+=1){const aLiteral=a.segments[i]!==null;const bLiteral=b.
|
|
8
8
|
segments[i]!==null;if(aLiteral!==bLiteral)return aLiteral?-1:1}return 0}function lookupRoute(routes,method,path){const segments=splitSegments(path);const hits=parseRoutes(routes).filter(route=>matches(route,segments));const sameMethod=hits.filter(route=>route.method===method).sort(compareSpecificity);const best=sameMethod[0];if(best!==void 0)return{kind:"matched",domain:best.domain,template:best.template};if(hits.length>0){const[top]=[...hits].sort(compareSpecificity);const template=top.template;
|
|
9
9
|
const methods=[...new Set(hits.filter(route=>route.template===template).map(route=>route.method))].sort();return{kind:"method-mismatch",template,methods}}return{kind:"unknown"}}function pickOperation(operations,method,template){return operations.find(op=>op.method===method&&op.path===template)??null}async function suggestRoutes(routes,path,limit=5){const{default:fuzzysort}=await import("./fuzzysort-DFVKV4B4.js");const parsed=parseRoutes(routes);const templates=[...new Set(parsed.map(route=>route.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-
|
|
4
|
-
diffStat}from"./chunk-VRBI2NPI.js";import"./chunk-
|
|
3
|
+
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-4VAWX7TW.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
|
|
4
|
+
diffStat}from"./chunk-VRBI2NPI.js";import"./chunk-N2UVRM3Z.js";import"./chunk-LDBYJPRD.js";import"./chunk-7APLKLQL.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-5WTFZJT7.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";
|
|
5
5
|
import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-QQCWGMZN.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-2LOT54OO.js";import"./chunk-W4E4F2ZA.js";
|
|
6
6
|
import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
|
|
7
7
|
for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
|
|
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
|
|
|
1212
1212
|
1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
|
|
1213
1213
|
`}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
|
|
1214
1214
|
`}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
|
|
1215
|
-
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-
|
|
1215
|
+
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-UYJP4Z5U.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
|
|
1216
1216
|
{},argv:parsed.domainArgv,help:parsed.domainHelp,globals,version:deps.version,io,...deps.fetchImpl!==void 0?{fetchImpl:deps.fetchImpl}:{}});return{code,out,err}}catch(e){return{code:1,out,err:`${err}${e.message}
|
|
1217
1217
|
`}}}var GIT_LOG_OUTPUT=["9f3c1a2 feat(ui): \u4E00\u89A7\u306E\u30D5\u30A3\u30EB\u30BF\u3092 URL \u30AF\u30A8\u30EA\u3068\u540C\u671F\u3059\u308B","4b8e0d7 fix(ui): \u4EEE\u60F3\u30B9\u30AF\u30ED\u30FC\u30EB\u306E\u884C\u9AD8\u3055\u3092\u5B9F\u6E2C\u5024\u306B\u5408\u308F\u305B\u308B","c15a99e refactor(api): \u4E00\u89A7\u53D6\u5F97\u306E\u30DA\u30FC\u30B8\u30F3\u30B0\u51E6\u7406\u3092\u5171\u901A\u5316\u3059\u308B","2d70f4b test: \u4E00\u89A7\u30D5\u30A3\u30EB\u30BF\u306E\u56DE\u5E30\u30C6\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
|
|
1218
1218
|
"a6e2b38 fix(api): \u7A7A\u306E\u691C\u7D22\u6761\u4EF6\u3067\u5168\u4EF6\u8FD4\u3089\u306A\u3044\u3088\u3046\u306B\u3059\u308B","7c40d51 chore(deps): \u958B\u767A\u4F9D\u5B58\u3092\u6700\u65B0\u3078\u66F4\u65B0\u3059\u308B","e83b1c6 docs: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u624B\u9806\u306B Node 22 \u306E\u524D\u63D0\u3092\u8FFD\u8A18\u3059\u308B","b91f7a4 fix(ui): \u30E2\u30FC\u30C0\u30EB\u306E\u91CD\u306A\u308A\u9806\u3092\u6307\u5B9A\u3059\u308B","5a2c8e0 perf(api): \u4E00\u89A7\u306E N+1 \u3092\u89E3\u6D88\u3059\u308B",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{redactSecretValues}from"./chunk-LDBYJPRD.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{DEFAULT_MAX_TOKENS,emptyUsage}from"./chunk-5WTFZJT7.js";import{
|
|
4
4
|
isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{configReadDirs,ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-2LOT54OO.js";
|
|
5
5
|
import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs2 from"fs";import path3 from"path";import os2 from"os";import{realpathSync}from"fs";import{homedir}from"os";import{dirname,isAbsolute,relative,resolve,sep}from"path";var PathDeniedError=class extends Error{constructor(message){super(message);this.name="PathDeniedError"}};function resolveToolPath(input,cwd,home=homedir()){if(typeof input!=="string"||input.trim()===""){throw new PathDeniedError("path must be a non-empty string")}const expanded=expandHome(input,home);const abs=isAbsolute(expanded)?resolve(expanded):resolve(cwd,expanded);const root=realOrSelf(resolve(cwd));assertInside(abs,resolve(cwd),abs);assertNotSecret(abs,home);const real=realOrSelf(abs);if(real!==
|
|
6
6
|
abs){assertInside(real,root,abs);assertNotSecret(real,home)}return abs}function realToolPath(input,cwd,home=homedir()){return realOrSelf(resolveToolPath(input,cwd,home))}function assertInside(target,root,reported){const rel=relative(root,target);const outside=rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel);if(outside){throw new PathDeniedError(`path escapes the working directory (${reported}). Only paths under ${root} can be accessed.`)}}function realOrSelf(target){let current=target;const rest=[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{loadDomain}from"./chunk-
|
|
3
|
+
import{loadDomain}from"./chunk-YIH36ZDI.js";import{JsonBodyWithView}from"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderDocument,renderOutput}from"./chunk-PO35MCYP.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-LDBYJPRD.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import{parseOperationArgs}from"./chunk-RX5HWI4L.js";import{Resolver,requireDefaultProject}from"./chunk-7APLKLQL.js";
|
|
4
4
|
import{ResolveError}from"./chunk-HVZUXLQ4.js";import{ApiError,MultipartBody,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{isRecord}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE,EXIT_WAIT_TIMEOUT,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,
|
|
5
5
|
loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-W4E4F2ZA.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-74BPZOKU.js";import{stringWidth}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var NO_REDACT_FLAG={name:"--no-redact",summary:"\u5FDC\u7B54\u306E\u4F0F\u5B57\u5316\u3092\u89E3\u9664\u3057\u3066\u751F\u306E\u5024\u3092\u51FA\u3059\uFF08\u9375\u306E\u53D7\u3051\u53D6\u308A\u7B49\uFF09",takesValue:false};var NO_REDACT_NOTICE="\u6CE8\u8A18: --no-redact \u306E\u305F\u3081\u51FA\u529B\u3092\u4F0F\u5B57\u5316\u3057\u307E\u305B\u3093\uFF08\u7AEF\u672B\u3068\u30ED\u30B0\u306B\u5E73\u6587\u3067\u6B8B\u308A\u307E\u3059\uFF09\u3002";function withCommonFlags(flags){return flags.some(flag=>flag.
|
|
6
6
|
name===NO_REDACT_FLAG.name)?flags:[...flags,NO_REDACT_FLAG]}function alignedList(entries,indent=" "){const width=entries.reduce((max,[left])=>Math.max(max,stringWidth(left)),0);return entries.map(([left,right])=>`${indent}${left}${" ".repeat(Math.max(0,width-stringWidth(left)))} ${right}`).join("\n")}function subresourcesOf(resource){return resource.subresources??[]}function renderResourceHelp(resource,path2){const subresources=subresourcesOf(resource);const operationSection=resource.operations.length===0?"":`
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{placeholderTaskKey,stepToItem}from"./chunk-
|
|
3
|
+
import{placeholderTaskKey,stepToItem}from"./chunk-OG7FD7SR.js";import{redactLoopOutput}from"./chunk-JUJSF5ZG.js";import{localDate}from"./chunk-GAXJPIKO.js";import{normalizeSkillName,skillOfItem}from"./chunk-FABDZBDZ.js";import{DEFAULT_SKILL_PREFIX,SKILL_PREFIX_RE,setSkillPrefix,skillCommand,skillPrefix}from"./chunk-6CS5L24D.js";import{describeError,pick,pickString}from"./chunk-5KAWCLYN.js";import{isTaskKey}from"./chunk-II5RVJQN.js";import{createHash,randomBytes}from"crypto";import fs2 from"fs";import path2 from"path";var INFLIGHT_STALE_HOURS=3;function staleFloorHours(aiTimeoutSec){return Math.ceil(aiTimeoutSec*2/3600)}function inflightStaleHours(aiTimeoutSec,baseHours=INFLIGHT_STALE_HOURS){const base=Number.isFinite(baseHours)&&baseHours>0?baseHours:INFLIGHT_STALE_HOURS;return Math.max(base,staleFloorHours(aiTimeoutSec))}function ageMinutesOf(item,now){for(const raw of[item.started_at,item.updated_at,item.dequeued_at,item.created_at]){if(!raw)continue;const ts=Date.parse(raw);if(Number.isNaN(ts))continue;return Math.
|
|
4
4
|
floor((now.getTime()-ts)/6e4)}return null}function inflightEntries(items,now=new Date,staleHours=INFLIGHT_STALE_HOURS){const staleMinutes=staleHours*60;const byKey=new Map;for(const item of items){const key=(item.task_key??"").trim();if(!key)continue;const ageMinutes=ageMinutesOf(item,now);if(ageMinutes!==null&&ageMinutes>staleMinutes)continue;const entry={key,runner:item.runner_id??"-",ageMinutes,label:(item.label??"").slice(0,60)};const prev=byKey.get(key);if(!prev||(entry.ageMinutes??-1)>(prev.
|
|
5
|
-
ageMinutes??-1))byKey.set(key,entry)}return[...byKey.values()].sort((a,b)=>a.key.localeCompare(b.key))}function formatInflightEntry(entry){const age=entry.ageMinutes===null?"\u4E0D\u660E":`${entry.ageMinutes}\u5206`;return`${entry.key} runner=${entry.runner} \u7D4C\u904E=${age}`}import fs from"fs";import path from"path";async function createItem(api,body){const res=await api.create(body);if(!res.ok)return{itemId:null,detail:describeError(res)};for(const p of["item_id","id","item.item_id","item.id","data.item_id","data.id"]){const v=pickString(res.json,p);if(v)return{itemId:v,detail:""}}return{itemId:null,detail:`item_id \u3092\u8AAD\u3081\u307E\u305B\u3093: ${res.raw.slice(0,200)}`}}function
|
|
6
|
-
|
|
5
|
+
ageMinutes??-1))byKey.set(key,entry)}return[...byKey.values()].sort((a,b)=>a.key.localeCompare(b.key))}function formatInflightEntry(entry){const age=entry.ageMinutes===null?"\u4E0D\u660E":`${entry.ageMinutes}\u5206`;return`${entry.key} runner=${entry.runner} \u7D4C\u904E=${age}`}import fs from"fs";import path from"path";async function createItem(api,body){const res=await api.create(redactItemBody(body));if(!res.ok)return{itemId:null,detail:describeError(res)};for(const p of["item_id","id","item.item_id","item.id","data.item_id","data.id"]){const v=pickString(res.json,p);if(v)return{itemId:v,detail:""}}return{itemId:null,detail:`item_id \u3092\u8AAD\u3081\u307E\u305B\u3093: ${res.raw.slice(0,200)}`}}function redactItemBody(body){const out={...body};for(const key of["prompt","label"]){if(typeof out[key]==="string")
|
|
6
|
+
out[key]=redactLoopOutput(out[key])}return out}function reorderSucceeded(targetId,json){if(pick(json,"result")===true)return true;const raw=Array.isArray(json)?json:pick(json,"items");if(!Array.isArray(raw)||raw.length===0)return false;const items=raw;const orderOf=it=>typeof it.sort_order==="number"?it.sort_order:Number.POSITIVE_INFINITY;const hit=items.find(it=>(it.item_id??"")===targetId);if(!hit)return false;return orderOf(hit)===Math.min(...items.map(orderOf))}function queueContainsKey(items,key){
|
|
7
|
+
const re=new RegExp(`${key.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![0-9])`);return items.some(it=>re.test(`${it.label??""}
|
|
7
8
|
${it.prompt??""}
|
|
8
9
|
${it.task_key??""}`))}function localTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");const offsetMin=-at.getTimezoneOffset();const sign=offsetMin>=0?"+":"-";const abs=Math.abs(offsetMin);return`${at.getFullYear()}-${p2(at.getMonth()+1)}-${p2(at.getDate())}T${p2(at.getHours())}:${p2(at.getMinutes())}:${p2(at.getSeconds())}${sign}${p2(Math.trunc(abs/60))}${p2(abs%60)}`}var ReleaseOutcomeLog=class{constructor(file){this.file=file}file;record(result,phase,reason,ai){const clean=reason.replace(
|
|
9
10
|
/[\t\n]/g," ").slice(0,200);const line=`${localTimestamp()} ${result} ${phase||"unknown"} ${ai||"unknown"} ${clean}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{REDACTED,redactSecrets}from"./chunk-LDBYJPRD.js";var ENV_SECRET_ASSIGNMENT=/\b([A-Z0-9_]{0,128}?(?:TOKEN|SECRET|PASSWORD|PASSWD|API_?KEY|CREDENTIALS?|PRIVATE_KEY)(?:_[A-Z0-9_]{0,128})?=)(?:\\?"(?!\$)[^"\n]+?\\?"|\\?'(?!\$)[^'\n]+?\\?'|(?![$(])[^\s"'`;&)]{8,})/g;var PEM_BEGIN=/-----BEGIN [A-Z ]{0,64}PRIVATE KEY-----/g;var PEM_END=/-----END [A-Z ]{0,64}PRIVATE KEY-----/g;var PEM_UNCLOSED_BODY=/(?:(?:\r?\n|\\(?:r\\)?n)[ \t]*(?:(?:Proc-Type|DEK-Info):[^\n\\]*|(?:[A-Za-z0-9+/]{16,}={0,2}|[A-Za-z0-9+/]*={1,2})[ \t]*(?=[\r\n"\\]|$)))*/y;function redactPemPrivateKeys(text){
|
|
4
|
+
if(!text.includes("PRIVATE KEY-----"))return text;let out="";let last=0;let end=null;let noMoreEnd=false;PEM_BEGIN.lastIndex=0;for(let begin=PEM_BEGIN.exec(text);begin!==null;begin=PEM_BEGIN.exec(text)){const after=begin.index+begin[0].length;if(!noMoreEnd&&(end===null||end.index<after)){PEM_END.lastIndex=after;end=PEM_END.exec(text);noMoreEnd=end===null}let stop;if(end!==null&&!noMoreEnd){stop=end.index+end[0].length}else{PEM_UNCLOSED_BODY.lastIndex=after;PEM_UNCLOSED_BODY.exec(text);stop=Math.
|
|
5
|
+
max(after,PEM_UNCLOSED_BODY.lastIndex)}out+=text.slice(last,begin.index)+REDACTED;last=stop;PEM_BEGIN.lastIndex=stop}return out+text.slice(last)}var KNOWN_TOKEN_PATTERNS=[/\b(?:gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|sk-ant-[A-Za-z0-9_-]{20,}|(?:AKIA|ASIA)[0-9A-Z]{16}|npm_[A-Za-z0-9]{30,}|xox[abprs]-[A-Za-z0-9-]{10,})\b/g,/\beyJ[A-Za-z0-9_-]{8,}\.eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g];var URL_USERINFO=/((?<![A-Za-z0-9+.-])[a-z][a-z0-9+.-]{0,31}:\/\/)[^\s/@:"'`]+:[^\s/"'`]+@/gi;
|
|
6
|
+
var HEADER_TOKEN="[^\\s\"'`\\\\\\u0080-\\uFFFF]+";var HEADER_SEP=`(\\\\?["']?[ \\t]*:[ \\t]*\\\\?["']?)`;var AUTH_SCHEME="(?:basic|bearer|token|digest|negotiate|ntlm|aws4-hmac-sha256)";var HEADER_SECRET=new RegExp(`(?<![\\w-])(x-api-key|x-auth-token|x-vercel-protection-bypass)${HEADER_SEP}(?![$(]|\\*\\*\\*\uFF08)${HEADER_TOKEN}`,"gi");var AUTHORIZATION_HEADER=new RegExp(`(?<![\\w-])((?:proxy-)?authorization)${HEADER_SEP}(?!(?:${AUTH_SCHEME}[ \\t]+)?(?:[$(]|\\*\\*\\*\uFF08))(${AUTH_SCHEME}[ \\t]+)\
|
|
7
|
+
?[^\\s"'\`\\\\\\u0080-\\uFFFF][^\\n"'\`\\\\\\u0080-\\uFFFF]*`,"gi");var COOKIE_TOKEN="[^\\s\"'`\\\\;\\u0080-\\uFFFF]+";var COOKIE_HEADER=new RegExp(`(?<![\\w-])((?:set-)?cookie)${HEADER_SEP}(?![$(]|\\*\\*\\*\uFF08)${COOKIE_TOKEN}(?:[ \\t]*;[ \\t]*${COOKIE_TOKEN})*`,"gi");var AWS_CREDENTIALS_FILE=/\b(aws_(?:secret_access_key|session_token|security_token)[ \t]*[=:][ \t]*["']?)(?![$(])[^\s"'`\\]+/gi;function redactLoopOutput(text){if(text==="")return text;let out=redactSecrets(text).replace(URL_USERINFO,
|
|
8
|
+
`$1${REDACTED}@`).replace(AUTHORIZATION_HEADER,(_m,name,sep,scheme)=>`${name}${sep}${scheme??""}${REDACTED}`).replace(HEADER_SECRET,`$1$2${REDACTED}`).replace(COOKIE_HEADER,`$1$2${REDACTED}`).replace(AWS_CREDENTIALS_FILE,`$1${REDACTED}`).replace(ENV_SECRET_ASSIGNMENT,(match,name)=>{const value=match.slice(name.length);const quote=/^\\?["']/.exec(value)?.[0]??"";return`${name}${quote}${REDACTED}${quote}`});for(const pattern of KNOWN_TOKEN_PATTERNS)out=out.replace(pattern,REDACTED);out=redactPemPrivateKeys(
|
|
9
|
+
out);return out}var FINAL_REPORT_BEGIN="<<<AI_FINAL_REPORT>>>";var FINAL_REPORT_END="<<<END_AI_FINAL_REPORT>>>";var ClaudeStreamRenderer=class{constructor(now=()=>new Date){this.now=now}now;toolNames=new Map;toolCount=0;result={subtype:null,isError:null,numTurns:null,costUsd:null,durationMs:null,tokensIn:null,tokensOut:null,rateLimited:false,resetsAt:null,finalText:""};push(line){const trimmed=line.trim();if(trimmed==="")return[];let event;try{const parsed=JSON.parse(trimmed);if(parsed===null||typeof parsed!=="\
|
|
10
|
+
object"||Array.isArray(parsed)){return[line]}event=parsed}catch{return[line]}switch(event["type"]){case"rate_limit_event":return this.onRateLimit(event);case"assistant":return this.onAssistant(event);case"user":return this.onUser(event);case"result":return this.onResult(event);default:return event["type"]==="system"?[]:[line]}}sawRateLimit(){return this.result.rateLimited}lastRateLimitNote="";onRateLimit(event){const info=event["rate_limit_info"];if(info===null||typeof info!=="object")return[];const rec=info;
|
|
11
|
+
const status=typeof rec["status"]==="string"?rec["status"]:"";const resets=typeof rec["resetsAt"]==="number"?rec["resetsAt"]:null;if(status==="")return[];const at=isSaneEpochSec(resets)?` resets=${new Date(resets*1e3).toISOString()}`:"";if(status.startsWith("allowed")){if(status==="allowed")return[];const seen=`${status}|${resets??""}`;if(seen===this.lastRateLimitNote)return[];this.lastRateLimitNote=seen;return[this.line(`\u2139\uFE0F \u4E0A\u9650\u306B\u63A5\u8FD1\uFF08status=${status}${at}\uFF09\u2014 \u5B9F\
|
|
12
|
+
\u884C\u306F\u7D99\u7D9A\u3057\u307E\u3059`)]}if(resets!==null)this.result.resetsAt=resets;this.result.rateLimited=true;return[this.line(`\u26A0\uFE0F \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u901A\u77E5: status=${status}${at}`)]}onAssistant(event){const out=[];for(const block of contentBlocks(event)){if(block.type==="tool_use"){const name=typeof block.name==="string"?block.name:"tool";if(typeof block.id==="string")this.toolNames.set(block.id,name);this.toolCount+=1;out.push(this.line(`>> ${name}${toolDetail(
|
|
13
|
+
name,block.input)}`))}else if(block.type==="text"&&typeof block.text==="string"&&block.text.trim()!==""){for(const l of block.text.trim().split("\n"))out.push(this.line(` \u{1F4AC} ${l}`))}}return out}onUser(event){const out=[];for(const block of contentBlocks(event)){if(block.type!=="tool_result")continue;const id=typeof block.id==="string"?block.id:"";const useId=typeof block.tool_use_id==="string"?block.tool_use_id:id;const name=this.toolNames.get(useId)??"tool";this.toolNames.delete(useId);
|
|
14
|
+
const isError=block.is_error===true;const detail=isError?firstErrorLine(block):"";out.push(this.line(`${isError?"!!":"<<"} ${name}${detail}`))}return out}onResult(event){const r=this.result;r.subtype=typeof event["subtype"]==="string"?event["subtype"]:null;r.isError=typeof event["is_error"]==="boolean"?event["is_error"]:null;r.numTurns=typeof event["num_turns"]==="number"?event["num_turns"]:null;r.costUsd=typeof event["total_cost_usd"]==="number"?event["total_cost_usd"]:null;r.durationMs=typeof event["\
|
|
15
|
+
duration_ms"]==="number"?event["duration_ms"]:null;const usage=event["usage"];if(usage!==null&&typeof usage==="object"&&!Array.isArray(usage)){const u=usage;const num=key=>typeof u[key]==="number"?u[key]:0;const hasIn=["input_tokens","cache_creation_input_tokens","cache_read_input_tokens"].some(k=>typeof u[k]==="number");r.tokensIn=hasIn?num("input_tokens")+num("cache_creation_input_tokens")+num("cache_read_input_tokens"):null;r.tokensOut=typeof u["output_tokens"]==="number"?u["output_tokens"]:null}
|
|
16
|
+
const out=[this.line(`\u5B8C\u4E86 (turns: ${r.numTurns??0}, tools: ${this.toolCount}, ${Math.round((r.durationMs??0)/1e3)}s, $${(r.costUsd??0).toFixed(3)})`)];const text=typeof event["result"]==="string"?event["result"]:"";r.finalText=text;if(text!==""){out.push(FINAL_REPORT_BEGIN,text,FINAL_REPORT_END)}return out}line(msg){const d=this.now();const ts=`${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;return` [${ts}] ${msg}`}};function firstErrorLine(block){const content=block.
|
|
17
|
+
content;const text=typeof content==="string"?content:Array.isArray(content)?content.map(c=>c!==null&&typeof c==="object"&&typeof c.text==="string"?c.text:"").join(" "):"";const first=text.trim().split("\n")[0]??"";return first===""?"":` | ${redactLoopOutput(first).slice(0,120)}`}function contentBlocks(event){const message=event["message"];if(message===null||typeof message!=="object")return[];const content=message["content"];if(!Array.isArray(content))return[];return content.filter(b=>b!==null&&typeof b===
|
|
18
|
+
"object")}function toolDetail(name,input){if(input===void 0||input===null)return"";const str=k=>typeof input[k]==="string"?input[k]:"";if(name==="Bash"){const cmd=redactLoopOutput(str("command"));return cmd===""?"":` $ ${cmd.slice(0,80)}${cmd.length>80?"...":""}`}if(name==="Read"||name==="Write"||name==="Edit"){const p=str("file_path");return p===""?"":` ${p}`}if(name==="Grep"||name==="Glob"){const p=str("pattern");return p===""?"":` '${p}'`}if(name==="Skill"){const s=str("skill");return s===""?
|
|
19
|
+
"":` /${s}`}if(name.includes("mcp__")){const args=[];for(const k of["task_id","project_id","status_id","issue_id"]){const v=str(k);if(v!=="")args.push(`${k}=${v.slice(0,16)}`)}return args.length===0?"":` (${args.slice(0,2).join(", ")})`}return""}function pad(n){return String(n).padStart(2,"0")}function isSaneEpochSec(v){return v!==null&&Number.isFinite(v)&&Math.abs(v)<864e10}export{redactLoopOutput,FINAL_REPORT_BEGIN,FINAL_REPORT_END,ClaudeStreamRenderer};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{FINAL_REPORT_BEGIN,FINAL_REPORT_END,redactLoopOutput}from"./chunk-JUJSF5ZG.js";import{skillCommand,skillPrefix}from"./chunk-6CS5L24D.js";import{normalizeRequiredPlatforms}from"./chunk-5KAWCLYN.js";import{extractLeadingTaskKey}from"./chunk-II5RVJQN.js";var LEDGER_TASK_KEY_MAX=50;var CONTROL_CHAR_RE=/[\u0000-\u001f\u007f]/;var FLAG_TOKEN_RE=/(?:^|\s)-/;function loosen(source){let t=source.replace(/^[ \t]*\/\/[^\n]*$/gm,"");t=t.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/,(\s*[}\]])/g,"$1");return t===source?null:t}function tryParsePlan(source){for(const candidate of[source,loosen(source)]){if(candidate===null)continue;try{const obj=JSON.parse(candidate);if(obj!==null&&typeof obj==="object"&&Array.isArray(obj.steps)){return obj}}catch{}}return null}
|
|
4
|
+
function fencedBlocks(text,tag){const re=new RegExp("```"+tag+"\\s*\\n([\\s\\S]*?)\\n```","g");const out=[];for(const m of text.matchAll(re)){if(m[1]!==void 0)out.push(m[1])}return out}function extractGeminiEnvelope(text){const anchor=/\{[^{}]*"session_id"[^{}]*"response"\s*:\s*"/g;for(const m of text.matchAll(anchor)){const start=m.index;if(start===void 0)continue;let depth=0;let inStr=false;let escape=false;for(let i=start;i<text.length;i++){const c=text[i];if(escape){escape=false;continue}if(c===
|
|
5
|
+
"\\"){escape=true;continue}if(c==='"'){inStr=!inStr;continue}if(inStr)continue;if(c==="{")depth++;else if(c==="}"){depth--;if(depth===0){try{const obj=JSON.parse(text.slice(start,i+1));if(obj!==null&&typeof obj==="object"&&typeof obj.response==="string"){return obj.response}}catch{}break}}}}return null}function matchingBrace(text,start){let depth=0;let inStr=false;let escape=false;for(let i=start;i<text.length;i++){const c=text[i];if(escape){escape=false;continue}if(inStr){if(c==="\\")escape=true;else if(c===
|
|
6
|
+
'"')inStr=false;continue}if(c==='"')inStr=true;else if(c==="{")depth++;else if(c==="}"){depth--;if(depth===0)return i}}return-1}var MAX_STEPS_ANCHORS=20;var MAX_OPEN_CANDIDATES=8;function lastStepsObject(text){const anchors=[...text.matchAll(/"steps"\s*:/g)].map(m=>m.index).filter(i=>i!==void 0);for(const at of anchors.reverse().slice(0,MAX_STEPS_ANCHORS)){let tried=0;for(let open=text.lastIndexOf("{",at);open>=0&&tried<MAX_OPEN_CANDIDATES;open=text.lastIndexOf("{",open-1)){tried++;const close=matchingBrace(
|
|
7
|
+
text,open);if(close>at){const plan=tryParsePlan(text.slice(open,close+1));if(plan)return plan}if(open===0)break}}return null}function finalReports(text){const re=new RegExp(`${FINAL_REPORT_BEGIN}\\n?([\\s\\S]*?)${FINAL_REPORT_END}`,"g");const out=[];for(const m of text.matchAll(re)){if(m[1]!==void 0)out.push(m[1])}return out.reverse()}function extractFrom(text){for(const tag of["json:execution-plan","json"]){for(const block of fencedBlocks(text,tag).reverse()){const plan=tryParsePlan(block);if(plan)
|
|
8
|
+
return plan}}const resp=extractGeminiEnvelope(text);if(resp!==null){for(const block of[...fencedBlocks(resp,"json:execution-plan"),...fencedBlocks(resp,"json")].reverse()){const plan2=tryParsePlan(block);if(plan2)return plan2}const plan=tryParsePlan(resp);if(plan)return plan}const whole=tryParsePlan(text.trim());if(whole)return whole;return lastStepsObject(text)}function extractPlanJson(rawText){const text=rawText.replace(/^\s*\[\d{2}:\d{2}:\d{2}\][ \t]*(?:💬 ?)?/gmu,"");for(const report of finalReports(
|
|
9
|
+
text)){const plan=extractFrom(report);if(plan)return plan}return extractFrom(text)}function ledgerTaskKey(args){const key=extractLeadingTaskKey(args);if(key.length>LEDGER_TASK_KEY_MAX)return"";if(CONTROL_CHAR_RE.test(key))return"";if(FLAG_TOKEN_RE.test(key))return"";return key}function placeholderTaskKey(args){for(const token of args.split(/\s+/)){if(token==="")continue;if(token.startsWith("-"))continue;const m=/^[A-Z]{2,}[A-Z0-9]*-([A-Za-z0-9_<>{}]*)$/.exec(token);if(!m)return null;if(/^\d+$/.test(
|
|
10
|
+
m[1]??""))return null;return token}return null}function stepToItem(step,assign,prefix=skillPrefix()){const skill=typeof step.skill==="string"?step.skill.trim():"";if(!skill)return null;const args=redactLoopOutput((step.args??"").trim());const priority=step.priority??"P2";const prompt=skillCommand(skill,args,prefix);let label=redactLoopOutput((step.label??"").trim());const own=skillCommand(skill,"",prefix);const promptLike=prefix===""?label===own||label.startsWith(`${own} `):label.startsWith(`/${prefix}`);
|
|
11
|
+
if(!label||promptLike||label.startsWith("[P"))label=prompt;const taskKey=ledgerTaskKey(args);const category=assign?.categoryForSkill(skill)??step.ai_category??"complex";const display=taskKey&&!label.includes(taskKey)?`[${priority}] ${taskKey} ${label} #ai:${category}`:`[${priority}] ${label} #ai:${category}`;const item={label:display.slice(0,200),prompt,task_key:taskKey};const platforms=normalizeRequiredPlatforms(step.required_platforms);if(platforms.length>0)item.required_platforms=platforms;if(assign!==
|
|
12
|
+
void 0){const ai=assign.selectPrimary(category,skill,priority,display);if(ai!=="")item.ai_type=ai}return item}function parsePlanExcludeKeys(prefetchSection){const m=/OPS_PLAN_EXCLUDE_KEYS\s+([^\s]*)\s+-->/.exec(prefetchSection);const keys=new Set;if(!m||!m[1])return keys;for(const raw of m[1].split(",")){const key=raw.trim();if(key!=="")keys.add(key)}return keys}function excludedKeyInArgs(args,excluded){if(excluded.size===0)return null;for(const key of[...excluded].sort()){const re=new RegExp(`(\
|
|
13
|
+
?<![A-Za-z0-9-])${key.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![0-9])`);if(re.test(args))return key}return null}function parseOpsCount(prefetchSection,field){const marker=/OPS_COUNTS\s+([^>]*?)-->/.exec(prefetchSection);if(!marker||!marker[1])return null;const escaped=field.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");const hit=new RegExp(`(?:^|\\s)${escaped}=(-?\\d+)(?:\\s|$)`).exec(marker[1]);if(!hit||hit[1]===void 0)return null;const n=Number.parseInt(hit[1],10);if(!Number.isFinite(n)||n<0)return null;
|
|
14
|
+
return n}function releaseDeployDropReason(verifyBacklog,devVerifyPlanned){if(verifyBacklog===null){return"\u52D5\u4F5C\u78BA\u8A8D\u306E\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\uFF08\u5224\u5B9A\u4E0D\u80FD\u306E\u305F\u3081\u30EA\u30EA\u30FC\u30B9\u306F\u898B\u9001\u308B\uFF09"}if(verifyBacklog>devVerifyPlanned){return`\u52D5\u4F5C\u78BA\u8A8D${verifyBacklog}\u4EF6 > \u8A08\u753B\u5185dev-verify${devVerifyPlanned}\u4EF6\uFF08Phase 1\u306E0\u4EF6\u898B\u8FBC\u307F\u304C\u7ACB\u305F\u306A\u3044\uFF09`}
|
|
15
|
+
return null}function duplicateTaskKeyDropReason(enqueuedKeys,taskKey){if(!taskKey)return null;if(!enqueuedKeys.has(taskKey))return null;return`${taskKey} \u306F\u672C\u8A08\u753B\u3067\u65E2\u306B\u6295\u5165\u6E08\u307F\uFF08\u540C\u4E00\u30AD\u30FC\u306F1\u8A08\u753B1\u4EF6\uFF09`}var NO_ZERO_TARGET_GATES={};function zeroTargetDropReasons(prefetchSection,gates=NO_ZERO_TARGET_GATES){const reasons=new Map;for(const[skill,gate]of Object.entries(gates)){const n=parseOpsCount(prefetchSection,gate.field);
|
|
16
|
+
if(n===null)reasons.set(skill,`${gate.label}\u4EF6\u6570\u304C\u5224\u5B9A\u4E0D\u80FD\u306E\u305F\u3081\u898B\u9001\u308A`);else if(n===0)reasons.set(skill,`${gate.label}0\u4EF6\u306E\u305F\u3081\u5BFE\u8C61\u306A\u3057`)}return reasons}export{extractPlanJson,placeholderTaskKey,stepToItem,parsePlanExcludeKeys,excludedKeyInArgs,parseOpsCount,releaseDeployDropReason,duplicateTaskKeyDropReason,zeroTargetDropReasons};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
var LOADERS={agent:async()=>(await import("./agent-63DPLVPG.js")).agentDomain,"agent-loop":async()=>(await import("./agent-loop-
|
|
3
|
+
var LOADERS={agent:async()=>(await import("./agent-63DPLVPG.js")).agentDomain,"agent-loop":async()=>(await import("./agent-loop-ZNQJSXQV.js")).agentLoopDomain,"ai-review-reason":async()=>(await import("./sales-ai-review-IT6X4YQB.js")).aiReviewReasonDomain,analysis:async()=>(await import("./analysis-SDYGHILR.js")).analysisDomain,announcement:async()=>(await import("./announcement-4RI2COFS.js")).announcementDomain,attendance:async()=>(await import("./attendance-correct-NJACXW3S.js")).attendanceDomainWithRecords,
|
|
4
4
|
backlog:async()=>(await import("./backlog-NQUZQSCY.js")).backlogDomain,budget:async()=>(await import("./budget-ILEQGQOA.js")).budgetDomain,"business-hours":async()=>(await import("./business-hours-I4X6YQS3.js")).businessHoursDomain,"business-place":async()=>(await import("./sales-master-QYNSMAP4.js")).businessPlaceDomain,company:async()=>(await import("./company-QFIHJ4OY.js")).companyDomain,contract:async()=>(await import("./contract-IGH7GFOM.js")).contractDomain,customer:async()=>(await import("./company-QFIHJ4OY.js")).
|
|
5
5
|
customerDomain,department:async()=>(await import("./department-TIW5YISO.js")).departmentDomain,deposit:async()=>(await import("./deposit-2YPPFQVR.js")).depositDomain,estimate:async()=>(await import("./estimate-JBQSEUJY.js")).estimateDomain,evaluation:async()=>(await import("./evaluation-4QE4L3OG.js")).evaluationDomain,expense:async()=>(await import("./expense-CFHOIO3I.js")).expenseDomain,"fiscal-year":async()=>(await import("./fiscal-year-N7POJ77K.js")).fiscalYearDomain,holiday:async()=>(await import("./holiday-WRSUBPT3.js")).
|
|
6
6
|
holidayDomain,"goal-sheet":async()=>(await import("./evaluation-4QE4L3OG.js")).goalSheetDomain,inquiry:async()=>(await import("./inquiry-6ANZ6HKD.js")).inquiryDomain,invoice:async()=>(await import("./invoice-INIF6BUD.js")).invoiceDomain,"job-title":async()=>(await import("./job-title-KOFDOB65.js")).jobTitleDomain,knowledge:async()=>(await import("./domain-knowledge-F3GKX2VI.js")).knowledgeDomain,leave:async()=>(await import("./leave-LE3CIRPT.js")).leaveDomain,license:async()=>(await import("./license-ME2GUNJQ.js")).
|
|
7
|
-
licenseDomain,media:async()=>(await import("./media-
|
|
7
|
+
licenseDomain,media:async()=>(await import("./media-FDOAC5ZH.js")).mediaDomain,meeting:async()=>(await import("./knowledge-W3ONOGV2.js")).meetingDomain,note:async()=>(await import("./knowledge-W3ONOGV2.js")).noteDomain,notification:async()=>(await import("./notification-N4FVLOPW.js")).notificationDomain,onedrive:async()=>(await import("./onedrive-ZY3GTU26.js")).onedriveDomain,outlook:async()=>(await import("./outlook-YG7GFF44.js")).outlookDomain,payee:async()=>(await import("./sales-master-QYNSMAP4.js")).
|
|
8
8
|
payeeDomain,position:async()=>(await import("./position-4C37LALY.js")).positionDomain,project:async()=>(await import("./project-DUHSOINK.js")).projectDomain,prospect:async()=>(await import("./prospect-QRTQA2R6.js")).prospectDomain,purchase:async()=>(await import("./purchase-LWRNGP3T.js")).purchaseDomain,qualification:async()=>(await import("./skill-MWETUX56.js")).qualificationDomain,receivable:async()=>(await import("./receivable-A4T74HZK.js")).receivableDomain,redmine:async()=>(await import("./redmine-X2GTGXHG.js")).
|
|
9
9
|
redmineDomain,report:async()=>(await import("./report-UNEQSKNU.js")).reportDomain,"rounding-setting":async()=>(await import("./sales-numbering-LZQCKDUM.js")).roundingSettingDomain,"seal-impression":async()=>(await import("./sales-master-QYNSMAP4.js")).sealImpressionDomain,search:async()=>(await import("./search-GZIEQYLJ.js")).searchDomain,segment:async()=>(await import("./segment-NNWN5KJB.js")).segmentDomain,shift:async()=>(await import("./attendance-lists-AUEECNJL.js")).shiftDomain,skill:async()=>(await import("./skill-MWETUX56.js")).
|
|
10
10
|
skillDomain,storage:async()=>(await import("./storage-AQDCEBDJ.js")).storageDomain,"supplier-payment":async()=>(await import("./supplier-payment-4UKRQZHS.js")).supplierPaymentDomain,support:async()=>(await import("./support-JJ7ZCJFX.js")).supportDomain,task:async()=>(await import("./task-HAVEGLQC.js")).taskDomain,teams:async()=>(await import("./teams-RLMFGND2.js")).teamsDomain,user:async()=>(await import("./user-VRMLWGQ2.js")).userDomain,"user-contract-type":async()=>(await import("./user-contract-type-ZCUMSGVP.js")).
|
|
11
|
-
userContractTypeDomain,wiki:async()=>(await import("./knowledge-
|
|
11
|
+
userContractTypeDomain,wiki:async()=>(await import("./knowledge-W3ONOGV2.js")).wikiDomain,workchange:async()=>(await import("./attendance-lists-AUEECNJL.js")).workchangeDomain,"worker-agent":async()=>(await import("./worker-agent-VCJUJDBO.js")).workerAgentDomain,workflow:async()=>(await import("./workflow-I7L476KK.js")).workflowDomain};async function loadDomain(name){return LOADERS[name]()}export{loadDomain};
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
3
3
|
const require = __twpCreateRequire(import.meta.url);
|
|
4
|
-
import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chunk-QQCWGMZN.js";import"./chunk-2LOT54OO.js";import"./chunk-W4E4F2ZA.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.
|
|
4
|
+
import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chunk-QQCWGMZN.js";import"./chunk-2LOT54OO.js";import"./chunk-W4E4F2ZA.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.76.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
|
|
5
5
|
|
|
6
6
|
\u4F7F\u3044\u65B9:
|
|
7
7
|
twp \u5BFE\u8A71 TUI \u3092\u8D77\u52D5
|
|
@@ -905,6 +905,9 @@ import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chu
|
|
|
905
905
|
twp wiki create wiki \u30DA\u30FC\u30B8\u3092\u4F5C\u6210\u3059\u308B\uFF08\u672C\u6587\u306F --content-file \u306E\u30D5\u30A1\u30A4\u30EB\u304B\u3089\uFF09
|
|
906
906
|
twp wiki update <\u30DA\u30FC\u30B8ID>
|
|
907
907
|
wiki \u30DA\u30FC\u30B8\u3092\u66F4\u65B0\u3059\u308B\uFF08--if-version \u3067\u7248\u3092\u7167\u5408\uFF09
|
|
908
|
+
--section <\u898B\u51FA\u3057> \u3067\u305D\u306E\u7BC0\u306E\u672C\u6587\u3060\u3051\u3092\u5DEE\u3057\u66FF\u3048\u308B
|
|
909
|
+
twp wiki append <\u30DA\u30FC\u30B8ID>
|
|
910
|
+
wiki \u30DA\u30FC\u30B8\u306E\u672C\u6587\u306E\u672B\u5C3E\u3078\u8FFD\u8A18\u3059\u308B\uFF08\u5168\u6587\u3092\u9001\u308A\u76F4\u3055\u306A\u3044\uFF09
|
|
908
911
|
twp wiki move <\u30DA\u30FC\u30B8ID>
|
|
909
912
|
wiki \u30DA\u30FC\u30B8\u306E\u89AA\u30DA\u30FC\u30B8\u3092\u4ED8\u3051\u66FF\u3048\u308B\uFF08root \u3067\u6700\u4E0A\u4F4D\u3078\uFF09
|
|
910
913
|
twp wiki delete <\u30DA\u30FC\u30B8ID>
|
|
@@ -1345,15 +1348,15 @@ TUI \u5185:
|
|
|
1345
1348
|
\u4F1A\u8A71\u30FB\u30ED\u30FC\u30AB\u30EB\u30C4\u30FC\u30EB\uFF08\u30D5\u30A1\u30A4\u30EB\u30FB\u30B3\u30DE\u30F3\u30C9\u30FBgit\uFF09\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u3067\u5B9F\u969B\u306B\u52D5\u304D\u307E\u3059\u3002
|
|
1346
1349
|
`;function ignoreEpipe(stream){stream.on("error",err=>{if(err.code==="EPIPE")process.exit(0);throw err})}async function main(){const nodeMajor=Number(process.versions.node.split(".")[0]);if(nodeMajor<22){process.stderr.write(`twp-cli \u306B\u306F Node.js 22 \u4EE5\u4E0A\u304C\u5FC5\u8981\u3067\u3059\uFF08\u73FE\u5728: ${process.versions.node}\uFF09
|
|
1347
1350
|
`);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-VG77U4UA.js");await runAutoUpdateWorker().catch(()=>void 0);return}const[first,...rest]=process.argv.slice(2);if(first==="__complete"||first==="completion"){const completion=await import("./completion-YBKZ3GXD.js");if(first==="completion"){process.exitCode=completion.runCompletion(rest,process.stdout,process.stderr);return}
|
|
1348
|
-
const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-
|
|
1351
|
+
const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-NQZQRUDI.js"),import("./config-3CNEQ7KN.js")]);process.exitCode=await completion.runComplete(rest,process.stdout,{loadDomain,profileNames:()=>Object.keys(loadUserConfig().profiles??{})});return}if(first==="configure"){const autoUpdate2=await import("./auto-update-YMI3F44R.js");autoUpdate2.registerRunning();autoUpdate2.onStartup(VERSION);const{runConfigure}=await import("./configure-3H3CGGBI.js");process.exitCode=
|
|
1349
1352
|
await runConfigure(rest);return}const args=parseArgv(process.argv.slice(2));if(args.command==="version"){process.stdout.write(`${VERSION}
|
|
1350
1353
|
`);return}if(args.command==="help"){process.stdout.write(HELP);return}if(args.unknown.length>0){process.stderr.write(`\u4E0D\u660E\u306A\u5F15\u6570: ${args.unknown.join(" ")}
|
|
1351
1354
|
|
|
1352
|
-
${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-YMI3F44R.js");autoUpdate.registerRunning();if(args.command==="task-loop"&&args.taskLoopAction!=="capacity"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-
|
|
1353
|
-
{},argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-
|
|
1355
|
+
${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-YMI3F44R.js");autoUpdate.registerRunning();if(args.command==="task-loop"&&args.taskLoopAction!=="capacity"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-UYJP4Z5U.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:
|
|
1356
|
+
{},argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-OKQHSCD4.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.
|
|
1354
1357
|
profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-NCAVUXSX.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-U52UBWSU.js");
|
|
1355
|
-
const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-
|
|
1358
|
+
const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-UMSNPM4D.js");process.exitCode=await runTaskLoop(
|
|
1356
1359
|
{action:args.taskLoopAction??"run",project:args.project,profile:args.profile,safe:args.safe,daemon:args.daemon,interval:args.interval,maxCycles:args.maxCycles,forceRunner:args.forceRunner,force:args.stopForce,drain:args.stopDrain,engine:args.engine,version:VERSION,verbose:args.verbose,scheduleNow:args.scheduleNow,scheduleCounts:args.scheduleCounts,scheduleGate:args.scheduleGate,scheduleOp:args.scheduleOp,scheduleConfigOp:args.scheduleConfigOp,scheduleId:args.scheduleId,charterOp:args.charterOp,charterInput:args.
|
|
1357
1360
|
charterFile,charterOutput:args.charterOut,charterRevision:args.charterRevision,settingsOp:args.settingsOp,skillOp:args.skillOp,skillName:args.skillName,skillAll:args.skillAll,skillDir:args.skillDir,skillConfig:args.skillConfig,output:args.output,query:args.query,revisionFrom:args.revisionFrom,revisionTo:args.revisionTo,planOp:args.planOp,capacityOp:args.capacityOp,planEmpty:args.planEmpty,planCheck:args.planCheck,yes:args.yes,ais:args.ais,workspace:args.workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.
|
|
1358
|
-
noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-
|
|
1361
|
+
noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-ALYKVJW2.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:{},...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}const{startTui}=await import("./app-OAJTDDSR.js");
|
|
1359
1362
|
await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
|
|
@@ -2,10 +2,11 @@ import { createRequire as __twpCreateRequire } from 'node:module';
|
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
3
|
import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-ZOOEH7ZE.js";import{claudeConfigDir,resolveDetectDeps}from"./chunk-5SONMN6K.js";import{ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-BYUV3D5Z.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import{LoopSettingsApplier,renderStepBudget}from"./chunk-J2NRDFCR.js";
|
|
4
4
|
import{ServerSkillCatalog,formatSkillOrigins}from"./chunk-DPIJF3EN.js";import"./chunk-MYBIPHZ7.js";import"./chunk-A4LFG7MW.js";import{NO_PLAN_SESSION,RECENT_ADVANCE_WINDOW_HOURS,ReleaseOutcomeLog,buildDynamicBlocks,buildRecentCandidateIndex,createItem,enqueueBlockerRecovery,enqueueDevVerifyForMerged,enqueueReleasePartialMergeRerun,enqueueReleasePhase5Recovery,fileSkillNames,findRecentCandidate,formatInflightEntry,formatPlanResultLine,formatRecentAdvance,inflightEntries,inflightStaleHours,
|
|
5
|
-
openPlanSession,parseOutcomeCode,parseReleaseResult,parseTaskStatusSnapshot,pendingTaskKeys,resolveRecentAdvance,shouldSuppressForStatus,staleFloorHours,unavailableChecks,windowStartMicros}from"./chunk-
|
|
6
|
-
import
|
|
7
|
-
import{setSkillPrefix,skillCommand,skillFromPrompt,stripSkillCommand}from"./chunk-6CS5L24D.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{AgentLoopApi,describeError,filterByStatus,isPermanent,pick,pickString}from"./chunk-5KAWCLYN.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-GY7KI5E5.js";import{ULID_RE,loopProjectIdPolicy,resolveProjectRef}from"./chunk-HVZUXLQ4.js";
|
|
8
|
-
import"./chunk-VFPY2A23.js";import{joinFor}from"./chunk-PMOUHEJQ.js";import{AuthSession}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{compareVersionCores,parseVersionCore}from"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import{effectiveApiUrl,resolveProfile}from"./chunk-4VZKNEVN.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
|
|
5
|
+
openPlanSession,parseOutcomeCode,parseReleaseResult,parseTaskStatusSnapshot,pendingTaskKeys,resolveRecentAdvance,shouldSuppressForStatus,staleFloorHours,unavailableChecks,windowStartMicros}from"./chunk-F6LEGFID.js";import"./chunk-VRBI2NPI.js";import{duplicateTaskKeyDropReason,excludedKeyInArgs,extractPlanJson,parseOpsCount,parsePlanExcludeKeys,placeholderTaskKey,releaseDeployDropReason,stepToItem,zeroTargetDropReasons}from"./chunk-OG7FD7SR.js";import{redactLoopOutput}from"./chunk-JUJSF5ZG.js";
|
|
6
|
+
import{buildLoopConfig,evaluateOwnership,exportStateDirEnv,localConfigPath,loopStateDir}from"./chunk-GAXJPIKO.js";import{CapacityReporter}from"./chunk-VYDPW2YO.js";import{exclusiveInflightEntries,formatExclusiveEntry,normalizeSkillName,spawnSyncResolved}from"./chunk-FABDZBDZ.js";import{describeOperations,evaluatePlanGate,planGateStatePath,recordPlanned}from"./chunk-XMPHGOW4.js";import{formatHookIds,formatHookWiring,runHook,runPrefetch,runPreflight}from"./chunk-TTST7UDR.js";
|
|
7
|
+
import{setSkillPrefix,skillCommand,skillFromPrompt,stripSkillCommand}from"./chunk-6CS5L24D.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{AgentLoopApi,describeError,filterByStatus,isPermanent,pick,pickString}from"./chunk-5KAWCLYN.js";import"./chunk-LDBYJPRD.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-GY7KI5E5.js";import{ULID_RE,loopProjectIdPolicy,resolveProjectRef}from"./chunk-HVZUXLQ4.js";
|
|
8
|
+
import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{joinFor}from"./chunk-PMOUHEJQ.js";import{AuthSession}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{compareVersionCores,parseVersionCore}from"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import{effectiveApiUrl,resolveProfile}from"./chunk-4VZKNEVN.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
|
|
9
|
+
import"./chunk-VSJBJXZO.js";import fs9 from"fs";import path7 from"path";import fs from"fs";import path from"path";var LoopLogger=class{constructor(runnerId,logFile,out=process.stdout,now=()=>new Date){this.runnerId=runnerId;this.out=out;this.now=now;if(logFile){fs.mkdirSync(path.dirname(logFile),{recursive:true});this.stream=fs.createWriteStream(logFile,{flags:"a"})}}runnerId;out;now;stream=null;log(message){const d=this.now();const ts=`${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;const line=`[${ts}] [${this.runnerId}] ${stripTerminalControls(
|
|
9
10
|
message)}
|
|
10
11
|
`;this.out.write(line);this.stream?.write(line)}separator(){this.log("=".repeat(60))}close(){this.stream?.end();this.stream=null}};function pad(n){return String(n).padStart(2,"0")}function rotateLogs(dir,retentionDays,now=Date.now()){if(retentionDays<=0)return;const cutoff=now-retentionDays*864e5;let entries;try{entries=fs.readdirSync(dir)}catch{return}for(const name of entries){if(!/^(agent-loop|task-loop|step|plan|schedule-enqueued)-.*\.(log|txt)$/.test(name))continue;const file=path.join(dir,
|
|
11
12
|
name);try{if(fs.statSync(file).mtimeMs<cutoff)fs.rmSync(file,{force:true})}catch{}}}import fs6 from"fs";import os2 from"os";import path4 from"path";var MAX_OUTCOME_DETAIL_LENGTH=1e3;function parseOutcomeDetail(logText){const matches=[...logText.matchAll(/\b[A-Z][A-Z0-9_]*_RESULT:[^\n]*/g)];const line=matches.at(-1)?.[0];if(line===void 0)return null;const sep=line.indexOf("|");if(sep<0)return null;const detail=line.slice(sep+1).split("|").map(s=>s.trim()).filter(s=>s!=="").join(" | ");return detail===""?null:detail.slice(0,MAX_OUTCOME_DETAIL_LENGTH)}var str=v=>typeof v==="string"&&v!==""?v:null;function toRun(v){if(v===null||typeof v!=="obje\
|
|
@@ -18,8 +19,7 @@ r.outcomeDetail)}`;const runner=r.runnerId===null?"\u4E0D\u660E":sanitizeForProm
|
|
|
18
19
|
`- ${r.skill}: \u6700\u7D42\u6210\u529F ${s.lastSuccessAt??"\u306A\u3057\uFF08\u9061\u308C\u305F\u7BC4\u56F2\u5185\uFF09"} \uFF0F \u9023\u7D9A\u5931\u6557 ${s.failureStreak}${s.streakIsLowerBound?"\u56DE\u4EE5\u4E0A":"\u56DE"}${s.streakAlert!==null?`\uFF08\u8B66\u544A\u3057\u304D\u3044\u5024 ${s.streakAlert}\uFF09`:""} \uFF0F \u6700\u7D42\u6210\u529F\u4EE5\u964D\u306E\u5951\u7D04\u884C\u306A\u3057 ${s.noContractSinceSuccess}\u4EF6${s.alerting?" \u26A0\uFE0F \u8B66\u544A\u4E2D":""}${r.truncated?"\
|
|
19
20
|
\uFF08\u8D70\u67FB\u6253\u3061\u5207\u308A: \u8B66\u544A\u306A\u3057\u3092\u300C\u7570\u5E38\u306A\u3057\u300D\u3068\u8AAD\u307E\u306A\u3044\u3053\u3068\uFF09":""}`;lines.push(head);if(s!==null&&s.streakReasons.length>0){const shown=s.streakReasons.slice(0,MAX_STREAK_REASONS_IN_PROMPT);const rest=s.streakReasons.length-shown.length;lines.push(` \u9023\u7D9A\u5931\u6557\u306E\u5185\u8A33\uFF08\u65B0\u3057\u3044\u9806${rest>0?`\u30FB\u5148\u982D${shown.length}\u4EF6`:""}\uFF09:`);lines.push(...shown.
|
|
20
21
|
map(runLine));if(rest>0)lines.push(` - \u2026\u307B\u304B ${rest} \u4EF6\uFF08\u7701\u7565\uFF09`)}lines.push(r.recent.length>0?" \u76F4\u8FD1\u306E\u5B9F\u884C\uFF08\u65B0\u3057\u3044\u9806\uFF09:":" \u76F4\u8FD1\u306E\u5B9F\u884C: \u671F\u9593\u5185\u306B\u306A\u3057");lines.push(...r.recent.map(runLine))}return lines.join("\n")}function outcomeStreakWarnings(reports){return reports.filter(r=>r.summary?.alerting===true).map(r=>{const s=r.summary;const last=s.streakReasons[0];return`${sanitizeForPrompt(
|
|
21
|
-
r.skill)} \u304C ${s.failureStreak}${s.streakIsLowerBound?"\u56DE\u4EE5\u4E0A":"\u56DE"}\u9023\u7D9A\u3067\u5931\u6557\u3057\u3066\u3044\u307E\u3059\uFF08\u5168\u6A5F\u4F53\u901A\u7B97\u30FB\u30B5\u30FC\u30D0\u96C6\u8A08\uFF09${last?.outcomeDetail?`\u3002\u76F4\u8FD1: ${sanitizeForPrompt(last.outcomeDetail)}`:""}\u3002\u6B21\u30B5\u30A4\u30AF\u30EB\u3067\u30D6\u30ED\u30C3\u30AB\u30FC\u89E3\u6D88\u3092\u6700\u512A\u5148\u3059\u308B\u3053\u3068`})}
|
|
22
|
-
var URL_USERINFO=/(\b[a-z][a-z0-9+.-]*:\/\/)[^\s/@:"'`]+:[^\s/@"'`]+@/gi;function redactLoopOutput(text){if(text==="")return text;let out=redactSecrets(text).replace(URL_USERINFO,`$1${REDACTED}@`).replace(ENV_SECRET_ASSIGNMENT,(match,name)=>{const value=match.slice(name.length);const quote=/^\\?["']/.exec(value)?.[0]??"";return`${name}${quote}${REDACTED}${quote}`});for(const pattern of KNOWN_TOKEN_PATTERNS)out=out.replace(pattern,REDACTED);return out}import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";var GIT_IDENTITY_ENV_KEYS=["GIT_AUTHOR_NAME","GIT_AUTHOR_EMAIL","GIT_COMMITTER_NAME","GIT_COMMITTER_EMAIL"];function resolveDeps(deps){return{run:deps.run??spawnSync,readdirSync:deps.readdirSync??(dir=>fs2.readdirSync(dir,{withFileTypes:true})),existsSync:deps.existsSync??fs2.existsSync,env:deps.env??process.env}}function expectedIdentity(configured,env=process.env){const pick2=(envKey,fromConfig)=>{const fromEnv=(env[envKey]??"").trim();if(fromEnv!=="")return fromEnv;return(fromConfig??"").trim()};
|
|
22
|
+
r.skill)} \u304C ${s.failureStreak}${s.streakIsLowerBound?"\u56DE\u4EE5\u4E0A":"\u56DE"}\u9023\u7D9A\u3067\u5931\u6557\u3057\u3066\u3044\u307E\u3059\uFF08\u5168\u6A5F\u4F53\u901A\u7B97\u30FB\u30B5\u30FC\u30D0\u96C6\u8A08\uFF09${last?.outcomeDetail?`\u3002\u76F4\u8FD1: ${sanitizeForPrompt(last.outcomeDetail)}`:""}\u3002\u6B21\u30B5\u30A4\u30AF\u30EB\u3067\u30D6\u30ED\u30C3\u30AB\u30FC\u89E3\u6D88\u3092\u6700\u512A\u5148\u3059\u308B\u3053\u3068`})}import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";var GIT_IDENTITY_ENV_KEYS=["GIT_AUTHOR_NAME","GIT_AUTHOR_EMAIL","GIT_COMMITTER_NAME","GIT_COMMITTER_EMAIL"];function resolveDeps(deps){return{run:deps.run??spawnSync,readdirSync:deps.readdirSync??(dir=>fs2.readdirSync(dir,{withFileTypes:true})),existsSync:deps.existsSync??fs2.existsSync,env:deps.env??process.env}}function expectedIdentity(configured,env=process.env){const pick2=(envKey,fromConfig)=>{const fromEnv=(env[envKey]??"").trim();if(fromEnv!=="")return fromEnv;return(fromConfig??"").trim()};
|
|
23
23
|
const name=pick2("TWP_GIT_IDENTITY_NAME",configured?.name);const email=pick2("TWP_GIT_IDENTITY_EMAIL",configured?.email);if(name===""||email==="")return null;return{name,email}}var GIT_IDENTITY_UNSET_LOG=' git identity \u306E\u671F\u5F85\u5024\u304C\u672A\u8A2D\u5B9A\u306E\u305F\u3081\u63C3\u3048\u307E\u305B\u3093\u3067\u3057\u305F\uFF08~/.twp/loops/<project>.json \u306E "git_identity": {"name","email"}\u3001\u307E\u305F\u306F TWP_GIT_IDENTITY_NAME / TWP_GIT_IDENTITY_EMAIL\uFF09\u3002GitHub \u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u7D10\u3065\u304B\u306A\u3044 author \u306E commit \u306F Vercel Preview \u304C BLOCKED \u306B\u306A\u308A\u307E\u3059';
|
|
24
24
|
var SKIP_DIRS=new Set(["node_modules","vendor","dist","build","target"]);function isScannable(name){return!name.startsWith(".")&&!SKIP_DIRS.has(name)}function workspaceRepos(workspace,deps={}){const d=resolveDeps(deps);if(!d.existsSync(path2.join(workspace,".git")))return[];const repos=[workspace];for(const child of childDirs(workspace,d)){if(d.existsSync(path2.join(child,".git"))){repos.push(child);continue}for(const grandchild of childDirs(child,d)){if(d.existsSync(path2.join(grandchild,".git")))
|
|
25
25
|
repos.push(grandchild)}}return repos}function childDirs(dir,d){let entries;try{entries=d.readdirSync(dir)}catch{return[]}return[...entries].filter(e=>e.isDirectory()&&isScannable(e.name)).sort((a,b)=>a.name.localeCompare(b.name)).map(e=>path2.join(dir,e.name))}function git(args,d){const options={encoding:"utf8",timeout:1e4};return spawnSyncResolved("git",args,options,{},d.run)}function gitConfigGet(repo,key,d,local){const scope=local?["--local"]:[];const r=git(["-C",repo,"config",...scope,"--get",
|
|
@@ -101,9 +101,9 @@ continue}const{run_id:runId,...rest}=redactStashedPayload(payload);const res=awa
|
|
|
101
101
|
\u884C\u3057\u307E\u3059`)}}return recorded}};var PLAN_SUPPRESS_REASONS={"step \u306E\u5F62\u304C\u4E0D\u6B63":"invalid_step","\u30BF\u30B9\u30AF\u30AD\u30FC\u304C\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0":"placeholder_key","release-deploy \u306E\u7A7A\u632F\u308A\u9632\u6B62":"release_deploy_guard","\u5BFE\u8C610\u4EF6":"zero_target","\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D":"inflight","\u65E2\u306B\u30AD\u30E5\u30FC\u5F85\u3061":"already_pending","\u540C\u4E00\u8A08\u753B\u5185\u306E\u91CD\u8907\u30AD\u30FC":"duplicate_in_\
|
|
102
102
|
plan","\u4EBA\u306B\u30DC\u30FC\u30EB\u304C\u3042\u308B":"human_ball","\u524D\u56DE\u304C\u72B6\u614B\u3092\u9032\u3081\u305F":"recently_advanced","\u6642\u9593\u5E2F\u30B2\u30FC\u30C8":"schedule_gate","\u8A08\u753B\u30ED\u30C3\u30AF\u55AA\u5931\u3067\u672A\u51E6\u7406":"lock_lost","\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C":"exclusive_skill"};var ENQUEUE_ERROR_PREFIX="\u6295\u5165\u30A8\u30E9\u30FC: ";var MAX_STEPS=100;var MAX_SCHEDULED=100;var MAX_CONTRACT_LINES=20;
|
|
103
103
|
var MAX_CONTRACT_LINE_CHARS=1e3;var MAX_LABEL_CHARS=300;var MAX_DETAIL_CHARS=500;var MAX_TASK_KEY_CHARS=64;function clip(value,max){const s=(value??"").trim();return s===""?null:s.slice(0,max)}function dropToStep(drop){const base={task_key:clip(drop.task_key,MAX_TASK_KEY_CHARS),label:clip(drop.skill,MAX_LABEL_CHARS),item_id:null};if(drop.reason.startsWith(ENQUEUE_ERROR_PREFIX)){return{...base,outcome:"error",reason:"enqueue_error",detail:clip(redactLoopOutput(drop.reason.slice(ENQUEUE_ERROR_PREFIX.
|
|
104
|
-
length)),MAX_DETAIL_CHARS)}}const code=PLAN_SUPPRESS_REASONS[drop.reason];return{...base,outcome:"suppressed",reason:code??"other",detail:code===void 0?clip(drop.reason,MAX_DETAIL_CHARS):null}}function extractContractLines(output){const lines=[...output.matchAll(/^.*\b[A-Z][A-Z0-9_]*_RESULT:.*$/gm)].map(m=>m[0].trim().slice(0,MAX_CONTRACT_LINE_CHARS)).filter(l=>l!=="");return lines.slice(-MAX_CONTRACT_LINES)}function standaloneRecord(result,scheduled){return{result,ai_type:null,
|
|
105
|
-
tokens_in:null,tokens_out:null,turns:null,duration_ms:null,final_report:null,contract_lines:[],steps:[],scheduled:scheduled.slice(0,MAX_SCHEDULED)}}function planRecord(input){const{engine,summary}=input;const metrics=engine?.metrics;const steps=[...input.enqueuedSteps.map(s=>({outcome:"enqueued",task_key:clip(s.task_key,MAX_TASK_KEY_CHARS),label:clip(s.label,MAX_LABEL_CHARS),item_id:s.item_id,reason:null,detail:null})),...(summary?.dropped??[]).map(dropToStep)];const output=redactLoopOutput(
|
|
106
|
-
output??"");return{result:input.result,ai_type:engine?.serverAiType??null,ai_model:null,cost_usd:metrics?.costUsd??null,tokens_in:metrics?.tokensIn??null,tokens_out:metrics?.tokensOut??null,turns:metrics?.turns??null,duration_ms:input.durationMs===null?null:Math.max(0,Math.trunc(input.durationMs)),final_report:output.trim()===""?null:truncateResult(output),contract_lines:extractContractLines(output),steps:steps.slice(0,MAX_STEPS),scheduled:input.scheduled.slice(0,MAX_SCHEDULED)}}var USER_ID_RE=/^[A-Za-z0-9._-]{1,64}$/;var ProjectApi=class{constructor(apiUrl,session,fetchImpl=httpFetch){this.apiUrl=apiUrl;this.session=session;this.fetchImpl=fetchImpl}apiUrl;session;fetchImpl;async resolve(ref){if(isPrivateProjectRef(ref))return this.resolvePrivate();return resolveProjectRef(ref,path8=>this.get(path8),loopProjectIdPolicy)}async resolvePrivate(){const res=await this.get("/api/v2/user");if(!res.ok){throw new Error(`\u30ED\u30B0\u30A4\u30F3\u4E2D\u306E\u30E6\u30FC\u30B6\u30FC\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
|
|
104
|
+
length)),MAX_DETAIL_CHARS)}}const code=PLAN_SUPPRESS_REASONS[drop.reason];return{...base,outcome:"suppressed",reason:code??"other",detail:code===void 0?clip(redactLoopOutput(drop.reason),MAX_DETAIL_CHARS):null}}function extractContractLines(output){const lines=[...output.matchAll(/^.*\b[A-Z][A-Z0-9_]*_RESULT:.*$/gm)].map(m=>m[0].trim().slice(0,MAX_CONTRACT_LINE_CHARS)).filter(l=>l!=="");return lines.slice(-MAX_CONTRACT_LINES)}function standaloneRecord(result,scheduled){return{result,ai_type:null,
|
|
105
|
+
ai_model:null,cost_usd:null,tokens_in:null,tokens_out:null,turns:null,duration_ms:null,final_report:null,contract_lines:[],steps:[],scheduled:scheduled.slice(0,MAX_SCHEDULED)}}function planRecord(input){const{engine,summary}=input;const metrics=engine?.metrics;const steps=[...input.enqueuedSteps.map(s=>({outcome:"enqueued",task_key:clip(s.task_key,MAX_TASK_KEY_CHARS),label:clip(s.label,MAX_LABEL_CHARS),item_id:s.item_id,reason:null,detail:null})),...(summary?.dropped??[]).map(dropToStep)];const output=redactLoopOutput(
|
|
106
|
+
engine?.output??"");return{result:input.result,ai_type:engine?.serverAiType??null,ai_model:null,cost_usd:metrics?.costUsd??null,tokens_in:metrics?.tokensIn??null,tokens_out:metrics?.tokensOut??null,turns:metrics?.turns??null,duration_ms:input.durationMs===null?null:Math.max(0,Math.trunc(input.durationMs)),final_report:output.trim()===""?null:truncateResult(output),contract_lines:extractContractLines(output),steps:steps.slice(0,MAX_STEPS),scheduled:input.scheduled.slice(0,MAX_SCHEDULED)}}var USER_ID_RE=/^[A-Za-z0-9._-]{1,64}$/;var ProjectApi=class{constructor(apiUrl,session,fetchImpl=httpFetch){this.apiUrl=apiUrl;this.session=session;this.fetchImpl=fetchImpl}apiUrl;session;fetchImpl;async resolve(ref){if(isPrivateProjectRef(ref))return this.resolvePrivate();return resolveProjectRef(ref,path8=>this.get(path8),loopProjectIdPolicy)}async resolvePrivate(){const res=await this.get("/api/v2/user");if(!res.ok){throw new Error(`\u30ED\u30B0\u30A4\u30F3\u4E2D\u306E\u30E6\u30FC\u30B6\u30FC\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
|
|
107
107
|
status}\uFF09\u3002\u500B\u4EBA\u30AD\u30E5\u30FC\u3092\u56DE\u3059\u306B\u306F \`twp login\` \u304C\u5FC5\u8981\u3067\u3059\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const userId=res.json?.user?.id;if(typeof userId!=="string"||!USER_ID_RE.test(userId)){throw new Error(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u30E6\u30FC\u30B6\u30FCID\u3092\u500B\u4EBA\u30AD\u30E5\u30FC\u306EID\u306B\u4F7F\u3048\u307E\u305B\u3093\uFF08${String(
|
|
108
108
|
userId).slice(0,60)}\uFF09\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return{id:privateProjectId(userId),code:PRIVATE_PROJECT_REF,name:"\u500B\u4EBA\u30BF\u30B9\u30AF"}}async countByStatus(projectId,statusId){const res=await this.get(`/api/v2/projects/${projectId}/tasks?status_id=${encodeURIComponent(statusId)}&limit=1`);if(!res.ok){return{total:null,error:res.status===null?res.error??"\u901A\u4FE1\u5931\u6557":`HTTP ${res.status}`}}const total=res.json?.
|
|
109
109
|
pagination?.total;if(typeof total!=="number"){return{total:null,error:"\u5FDC\u7B54\u304B\u3089 pagination.total \u3092\u8AAD\u3081\u306A\u3044"}}return{total,error:null}}async get(path8){let token;try{token=await this.session.getAccessToken()}catch(err){return{ok:false,status:null,json:null,error:err.message}}try{const res=await this.fetchImpl(`${this.apiUrl}${path8}`,{headers:{Authorization:`Bearer ${token}`,"Content-Type":"application/json",Accept:"application/json"}});const raw=await res.text();
|
|
@@ -290,10 +290,10 @@ const startedAtMs=now();let warned="";let done=false;const check=()=>{if(done)re
|
|
|
290
290
|
decision.key)return;warned=decision.key;handlers.onWarn(decision.reason);return}done=true;const recorded=writeRestartAttempt(opts.stateDir,opts.projectKey,{from:decision.from,to:decision.to,at:new Date(now()).toISOString()},opts.store);if(!recorded){handlers.onWarn(`\u518D\u8D77\u52D5\u8A18\u9332\u3092\u66F8\u3051\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${restartAttemptPath(opts.stateDir,opts.projectKey)}\uFF09\u3002\u540C\u3058\u7248\u30C9\u30EA\u30D5\u30C8\u304C\u89E3\u6D88\u3057\u306A\u3044\u5834\u5408\u3001\u518D\u8D77\u52D5\u3092\u7E70\u308A\u8FD4\u3059\u9632\u6CE2\u5824\u304C\u52B9\u304D\u307E\u305B\u3093`)}
|
|
291
291
|
handlers.onRestart({from:decision.from,to:decision.to})};const timer=setInterval(check,opts.intervalMs??DRIFT_POLL_MS);timer.unref?.();return{stop:()=>{done=true;clearInterval(timer)},check}}import fs8 from"fs";import path6 from"path";var POLL_MS=1e3;var MAX_STOP_BYTES=4096;var MAX_AT_LENGTH=64;function markerPath(lockDir2,kind){return path6.join(lockDir2,kind)}function requestMarker(lockDir2,kind,pid,deps={}){const target=markerPath(lockDir2,kind);const write=deps.writeFileSync??((p,d)=>fs8.writeFileSync(p,d,{flag:"wx",mode:384}));const now=deps.now??(()=>new Date);clearMarker(lockDir2,kind,deps);try{write(target,`${JSON.stringify({pid,at:now().toISOString()})}
|
|
292
292
|
`);return{ok:true}}catch(err){const e=err;return{ok:false,reason:e.code??"UNKNOWN"}}}function readMarker(lockDir2,kind,deps={}){const target=markerPath(lockDir2,kind);const read=deps.readFileSync??(p=>fs8.readFileSync(p,"utf8"));const size=deps.statSize??(p=>fs8.statSync(p).size);let raw;try{if(size(target)>MAX_STOP_BYTES)return null;raw=read(target)}catch{return null}if(raw.length>MAX_STOP_BYTES)return null;try{const parsed=JSON.parse(raw);if(typeof parsed!=="object"||parsed===null)return null;const pid=parsed.pid;const at=parsed.at;if(typeof pid!=="number"||!Number.isInteger(pid)||
|
|
293
|
-
pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs8.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-
|
|
293
|
+
pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs8.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-NFFEUL6K.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-NFFEUL6K.js");const extraHosts=config.
|
|
294
294
|
operations.preflightHosts;return new DispatchEngine(config.ai,log,{workspace:config.workspace,charterFile:config.charterFile??void 0,charterEnabled:config.charterEnabled,...config.charterPrefix===null?{}:{charterPrefix:config.charterPrefix},...config.charterSuffix===null?{}:{charterSuffix:config.charterSuffix},serverPrompts:()=>config.serverPrompts??{},compileCommand:config.compileCommand??void 0,skillOverlayDir:path7.join(config.stateDir,"skill-overlay",projectFileKey(config.projectId)),launcherBin:config.
|
|
295
295
|
claudeLauncher.bin,...extraHosts.length>0?{preflightHosts:[...DEFAULT_PREFLIGHT_HOSTS,...extraHosts]}:{}})}function lockDir(config){return path7.join(config.stateDir,`task-loop-${projectFileKey(config.projectId)}.lock.d`)}function runnerIdPersisted(stateDir,env=process.env){if((env.RUNNER_ID?.trim()??"")!=="")return true;const file=env.RUNNER_ID_FILE&&env.RUNNER_ID_FILE.trim()!==""?env.RUNNER_ID_FILE:path7.join(stateDir,"runner-id");return fs9.existsSync(file)}async function runTaskLoop(opts){if(opts.
|
|
296
|
-
action==="stop")return await stopLoop(opts);if(opts.action==="plan"){if(opts.planOp!=="submit"){process.stderr.write("plan \u306B\u306F submit \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}const{runPlanSubmit}=await import("./plan-submit-
|
|
296
|
+
action==="stop")return await stopLoop(opts);if(opts.action==="plan"){if(opts.planOp!=="submit"){process.stderr.write("plan \u306B\u306F submit \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}const{runPlanSubmit}=await import("./plan-submit-2FSRRNIV.js");return runPlanSubmit({file:opts.charterInput,empty:opts.planEmpty===true,check:opts.planCheck===true},{env:process.env,readStdin:()=>fs9.readFileSync(0,"utf8"),stdout:s=>process.stdout.write(s),stderr:s=>process.stderr.write(s)})}
|
|
297
297
|
const profile=resolveProfile(opts.profile);let creds;try{creds=new AuthSession(profile.name,profile.apiUrl).loadOrThrow()}catch(err){process.stderr.write(`${err.message}
|
|
298
298
|
`);return 1}const apiUrl=effectiveApiUrl(profile,creds.api_url);const session=new AuthSession(profile.name,apiUrl);const projectRef=opts.project??process.env.TWP_PROJECT??"";if(projectRef===""){process.stderr.write("--project <\u30AD\u30FC|UUID> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08TWP_PROJECT \u3067\u3082\u53EF\uFF09\n");return 2}const projectApi=new ProjectApi(apiUrl,session);let project;try{project=await projectApi.resolve(projectRef)}catch(err){process.stderr.write(`${err.
|
|
299
299
|
message}
|
|
@@ -4,17 +4,18 @@ import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{composeDocument,
|
|
|
4
4
|
import"./chunk-7APLKLQL.js";import{ResolveError,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";
|
|
5
5
|
import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import path from"path";var WIKI_PATH="/api/v2/wiki";var WIKI_SUMMARY_FIELDS="summary";function withoutContent(page){const rest={...page};delete rest["content"];return rest}var NOTES_PATH="/api/v2/notes";var MEETINGS_PATH="/api/v2/meetings";var ROOT_PARENT="root";var WIKI_STATUSES=["draft","published"];var WIKI_CONTENT_FORMATS=["html","markdown"];var NOTE_STATUSES=["draft","published"];var NOTE_VISIBILITIES=["private","tenant","external","public"];var NOTE_SORTS=["manual","created_at","updated_at","view_count","comment\
|
|
6
6
|
_count","reaction_count"];var MEETING_STATUSES=["draft","published","archived"];var MEETING_TYPES=["regular","client","internal","retrospective","decision","one_on_one"];var MEETING_SORTS=["meeting_date","created_at","updated_at","title"];var SORT_ORDERS=["asc","desc"];var MEETING_TAGS_MAX=20;var MEETING_TAG_MAX_CHARS=50;var DATE_FLOOR="0000-01-01";var DATE_CEIL="9999-12-31";var WIKI_LIST_COLUMNS=["id","title","status","parent_page_id","updated_at","updated_by_name"];var WIKI_STALE_COLUMNS=["id",
|
|
7
|
-
"title","status","verified_at","knowledge_kind","evidence_task_keys","updated_at"];var WIKI_CHILD_COLUMNS=["id","title","status","child_count","updated_at","updated_by_name"];var WIKI_GET_COLUMNS=["id","title","status","content_format","parent_page_id","version","tags","verified_at","evidence_task_keys","knowledge_kind","updated_at","updated_by_name"];var NOTE_LIST_COLUMNS=["id","title","status","
|
|
8
|
-
id","title","status","visibility","content_type","category_name","tags","created_by_name","updated_at","view_count"];var MEETING_LIST_COLUMNS=["id","meeting_date","title","meeting_type","status","project_name","created_by_name"];var MEETING_GET_COLUMNS=["id","title","meeting_date","meeting_type","status","project_name","category_name","created_by_name","updated_at"];var TEXT_OUTPUT_HELP="--output text
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
`${label}\u306E\u5FDC\u7B54\
|
|
14
|
-
|
|
15
|
-
\
|
|
16
|
-
"\u30DA\u30FC\u30B8\u306E
|
|
17
|
-
|
|
7
|
+
"title","status","verified_at","knowledge_kind","evidence_task_keys","updated_at"];var WIKI_CHILD_COLUMNS=["id","title","status","child_count","updated_at","updated_by_name"];var WIKI_SEARCH_COLUMNS=["id","title","status","search_excerpt","updated_at","updated_by_name"];var WIKI_GET_COLUMNS=["id","title","status","content_format","parent_page_id","version","tags","verified_at","evidence_task_keys","knowledge_kind","updated_at","updated_by_name"];var NOTE_LIST_COLUMNS=["id","title","status","visi\
|
|
8
|
+
bility","created_by_name","updated_at","comment_count","reaction_count"];var NOTE_GET_COLUMNS=["id","title","status","visibility","content_type","category_name","tags","created_by_name","updated_at","view_count"];var MEETING_LIST_COLUMNS=["id","meeting_date","title","meeting_type","status","project_name","created_by_name"];var MEETING_GET_COLUMNS=["id","title","meeting_date","meeting_type","status","project_name","category_name","created_by_name","updated_at"];var TEXT_OUTPUT_HELP="--output text\
|
|
9
|
+
\u306F\u672C\u6587\u3092\u8AAD\u3080\u305F\u3081\u306E\u6587\u66F8\uFF08\u898B\u51FA\u3057\u30FB\u30E1\u30BF\u60C5\u5831\u30FB\u672C\u6587\uFF09\u3092\u51FA\u3057\u307E\u3059\u3002HTML \u3068\u5171\u540C\u7DE8\u96C6\u30A8\u30C7\u30A3\u30BF\u306E JSON \u306F\n\u5E73\u6587\u3078\u5909\u63DB\u3057\u3001\u898B\u51FA\u3057\u30FB\u7B87\u6761\u66F8\u304D\u30FB\u30EA\u30F3\u30AF\u306F Markdown \u98A8\u306B\u6B8B\u3057\u307E\u3059\u3002--output json \u306F\u30B5\u30FC\u30D0\u306E\u539F\u6587\u306E\u307E\u307E\u3067\u3059\u3002";
|
|
10
|
+
function noArgs(input,command){if(input.args.length>0){throw new UsageError(`${command} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`${command} help`)}}function singleId(input,command,label,where){const[raw,...rest]=input.args;const id=raw?.trim()??"";if(id==="")throw new UsageError(`${label}\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,`${command} help`);if(rest.length>0)throw new UsageError(`${command} \u304C\u53D7\u3051\u53D6\u308C\u308B${label}\
|
|
11
|
+
ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,`${command} help`);if(!isSafePathSegment(id))throw new UsageError(`${label}\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${id}`,`${label}\u306E ID \u306F ${where} \u306E id \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`);return id}function oneOf(input,flag,allowed){const raw=nonEmpty(input.flags,flag);if(raw===void 0)return void 0;const value=raw.trim();if(!allowed.includes(value)){throw new UsageError(
|
|
12
|
+
`${flag} \u306B\u6307\u5B9A\u3067\u304D\u306A\u3044\u5024\u3067\u3059: ${raw}`,`\u6307\u5B9A\u3067\u304D\u308B\u5024: ${allowed.join(" / ")}`)}return value}function pageLimit(input){const limit=positiveInteger(input.flags,"--limit");if(limit!==void 0&&limit>500){throw new UsageError(`--limit \u306F 1\u301C500 \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${limit}`,"\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\u304C500\u4EF6\u3067\u3059\u3002\u5168\u4EF6\u306F --all \u3067\u8FBF\u308C\u307E\u3059\u3002")}
|
|
13
|
+
return limit}function record(body,key,label){const row=isRecord(body)&&body["result"]===true?body[key]:void 0;if(!isRecord(row)||typeof row["id"]!=="string"){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306B ${key} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return row}function envelopeRows(body,paging,label){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\
|
|
14
|
+
\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return paging.items(body)}function scanTruncatedNote(label){return body=>isRecord(body)&&body["scan_truncated"]===true?[`\u30B5\u30FC\u30D0\u304C\u8D70\u67FB\u3059\u308B\u4EF6\u6570\u306E\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u3001\u3053\u306E${label}\u306B\u306F\u6761\u4EF6\u306B\u5408\u3046\u306E\u306B\u51FA\u3066\u3053\u306A\u3044\u884C\u304C\u3042\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`]:[]}var WIKI_LABEL="wiki \u30DA\u30FC\u30B8";
|
|
15
|
+
var wikiPaging=envelopePaging({label:`${WIKI_LABEL}\u4E00\u89A7`});var PARENT_EXCLUSIVE=["--status","--tag","--keyword","--stale-days","--limit","--cursor","--all","--max-pages","--max-items"];function parentRef(input){const raw=nonEmpty(input.flags,"--parent");if(raw===void 0)return void 0;const parent=raw.trim();const clash=PARENT_EXCLUSIVE.filter(flag=>input.flags.has(flag));if(clash.length>0){throw new UsageError(`--parent \u306F ${clash.join(" / ")} \u3068\u4F75\u7528\u3067\u304D\u307E\u305B\u3093`,
|
|
16
|
+
"--parent \u306F\u30DA\u30FC\u30B8\u306E\u89AA\u5B50\u69CB\u9020\uFF08\u5168\u30DA\u30FC\u30B8\uFF09\u304B\u3089\u76F4\u4E0B\u306E\u5B50\u3092\u9078\u3076\u306E\u3067\u3001\u30B5\u30FC\u30D0\u5074\u306E\u7D5E\u308A\u8FBC\u307F\u30FB\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u4F7F\u3048\u307E\u305B\u3093\u3002")}if(parent!==ROOT_PARENT&&!isSafePathSegment(parent)){throw new UsageError(`\u89AA\u30DA\u30FC\u30B8\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${parent}`,"\u30DA\u30FC\u30B8\u306E ID \u306F \
|
|
17
|
+
twp wiki list \u306E id \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}return parent}var WIKI_STALE_DAYS_MAX=36500;var STALE_VIEW="__stale_view";function staleDays(input){const raw=nonEmpty(input.flags,"--stale-days");if(raw===void 0)return void 0;const value=raw.trim();if(!/^\d+$/.test(value)||Number(value)>WIKI_STALE_DAYS_MAX){throw new UsageError(`--stale-days \u306F 0\u301C${WIKI_STALE_DAYS_MAX} \u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: -\
|
|
18
|
+
-stale-days 30\uFF0830\u65E5\u4EE5\u4E0A\u5B9F\u6E2C\u3055\u308C\u3066\u3044\u306A\u3044\u30DA\u30FC\u30B8\uFF09")}return Number(value)}function staleDaysNotes(body,input){if(staleDays(input)===void 0||!isRecord(body)||!Array.isArray(body["items"]))return[];const unaware=body["items"].some(row=>isRecord(row)&&!("verified_at"in row));return unaware?["\u63A5\u7D9A\u5148\u306E\u30B5\u30FC\u30D0\u306F\u6700\u7D42\u5B9F\u6E2C\u65E5\uFF08verified_at\uFF09\u3092\u8FD4\u3057\u3066\u3044\u307E\u305B\u3093\u3002--stale-days \u304C\u52B9\u304B\u305A\u3001\u5168\u30DA\u30FC\u30B8\u304C\u51FA\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u304C\u9BAE\u5EA6\u5C5E\u6027\u306B\u672A\u5BFE\u5FDC\u306E\u7248\uFF09\u3002"]:
|
|
18
19
|
[]}function wikiListQuery(input){return{project_id:requireResolved(input,"project"),status:oneOf(input,"--status",WIKI_STATUSES),stale_days:staleDays(input),tag:nonEmpty(input.flags,"--tag"),keyword:nonEmpty(input.flags,"--keyword"),limit:pageLimit(input),cursor:nonEmpty(input.flags,"--cursor"),fields:WIKI_SUMMARY_FIELDS}}function childrenOf(body,parent){const tree=isRecord(body)&&body["result"]===true?body["tree"]:void 0;if(!Array.isArray(tree))throw new ApiResponseError(`${WIKI_LABEL}\u306E\u30C4\u30EA\u30FC\u306E\u5FDC\u7B54\u306B \
|
|
19
20
|
tree \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);const find=roots=>{const stack=[...roots];while(stack.length>0){const node=stack.pop();if(!isRecord(node))continue;const children2=Array.isArray(node["children"])?node["children"]:[];if(node["id"]===parent)return children2;for(const child of children2)stack.push(child)}return void 0};const children=parent===ROOT_PARENT?tree:find(tree);if(children===void 0){throw new ResolveError(
|
|
20
21
|
`\u89AA\u30DA\u30FC\u30B8 ${parent} \u306F\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E wiki \u306B\u898B\u3064\u304B\u308A\u307E\u305B\u3093\uFF08\u524A\u9664\u6E08\u307F\u30FB\u4ED6\u4EBA\u306E\u4E0B\u66F8\u304D\u30FB\u5225\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30DA\u30FC\u30B8\u306F\u898B\u3048\u307E\u305B\u3093\uFF09`,404)}return children.filter(isRecord).map(node=>{const{children:grand,...page}=node;return{...withoutContent(page),child_count:Array.isArray(grand)?grand.length:0}})}
|
|
@@ -24,32 +25,40 @@ var wikiList={name:"list",summary:`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E${W
|
|
|
24
25
|
\u4E0B\u66F8\u304D\u306F\u4F5C\u6210\u8005\u3068 wiki \u306E\u7BA1\u7406\u8005\u306B\u3057\u304B\u898B\u3048\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u306E\u5224\u5B9A\uFF09\u3002
|
|
25
26
|
--stale-days <N> \u306F\u3001\u6700\u7D42\u5B9F\u6E2C\u65E5\uFF08create / update \u306E --verified-at\uFF09\u304C N \u65E5\u4EE5\u4E0A\u524D\u306E\u30DA\u30FC\u30B8\u3068\u3001\u5B9F\u6E2C\u65E5\u304C\u672A\u8A2D\u5B9A\u306E\u30DA\u30FC\u30B8\u3060\u3051\u3092\u3001\u5B9F\u6E2C\u65E5\u306E\u53E4\u3044\u9806\uFF08\u672A\u8A2D\u5B9A\u304C\u5148\u982D\uFF09\u306B\u51FA\u3057\u307E\u3059\u3002\u65E5\u4ED8\u306F\u65E5\u672C\u6642\u9593\u3067\u6570\u3048\u307E\u3059\u3002
|
|
26
27
|
|
|
28
|
+
--keyword \u306F\u30BF\u30A4\u30C8\u30EB\u30FB\u672C\u6587\u3092\u691C\u7D22\u7D22\u5F15\u3067\u5F15\u304D\u3001\u95A2\u9023\u5EA6\u306E\u9AD8\u3044\u9806\u306B\u8FD4\u3057\u307E\u3059\uFF08\u66F4\u65B0\u65E5\u6642\u9806\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002
|
|
29
|
+
--output table / text / tsv \u3067\u306F\u672C\u6587\u306E\u8A72\u5F53\u7B87\u6240\u3092 search_excerpt \u5217\u306B\u51FA\u3057\u307E\u3059\uFF08${WIKI_SEARCH_COLUMNS.join(" / ")}\uFF09\u3002
|
|
30
|
+
\u7D22\u5F15\u3078\u306E\u53CD\u6620\u306F\u975E\u540C\u671F\u306A\u306E\u3067\u3001\u4F5C\u6210\u30FB\u66F4\u65B0\u3057\u305F\u76F4\u5F8C\uFF08\u76EE\u5B89\u306F\u6570\u5341\u79D2\uFF09\u306E\u30DA\u30FC\u30B8\u306F\u307E\u3060\u51FA\u306A\u3044\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002
|
|
31
|
+
\u76F4\u5F8C\u306B\u78BA\u304B\u3081\u305F\u3044\u3068\u304D\u306F --keyword \u3092\u5916\u3057\u305F\u4E00\u89A7\u304B twp wiki get <ID> \u3067\u5F15\u3044\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u3061\u3089\u306F\u5373\u6642\u3067\u3059\uFF09\u3002
|
|
32
|
+
\u7D22\u5F15\u304C\u4F7F\u3048\u306A\u3044\u3068\u304D\u306F\u30B5\u30FC\u30D0\u304C\u5F93\u6765\u306E\u90E8\u5206\u4E00\u81F4\uFF08\u66F4\u65B0\u65E5\u6642\u9806\u30FB\u629C\u7C8B\u306A\u3057\uFF09\u306B\u5207\u308A\u66FF\u3048\u3001\u305D\u306E\u65E8\u3092 stderr \u3067\u8A00\u3044\u307E\u3059\u3002
|
|
33
|
+
|
|
27
34
|
--output json \u306F API \u304C\u8FD4\u3059\u30D5\u30A3\u30FC\u30EB\u30C9\u304B\u3089\u672C\u6587 content \u3092\u9664\u3044\u305F\u3082\u306E\u3067\u3001\u4EE3\u308F\u308A\u306B\u5192\u982D\u306E\u8981\u7D04 summary\uFF08\u5E73\u6587\u3067\u5148\u982D200\u6587\u5B57\uFF09\u3068\u672C\u6587\u306E\u6587\u5B57\u6570 content_length \u304C\u5165\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u304C\u5BFE\u5FDC\u3057\u3066\u3044\u308C\u3070\uFF09\u3002
|
|
28
35
|
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${WIKI_LIST_COLUMNS.join(" / ")}\u3002--parent \u3067\u306F parent_page_id \u306E\u4EE3\u308F\u308A\u306B child_count\u3001--stale-days \u3067\u306F ${WIKI_STALE_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002\u672C\u6587\u306F twp wiki get \u3067\u8AAD\u3081\u307E\u3059\u3002
|
|
29
36
|
|
|
30
37
|
`+LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u304B ID\u3002\u7701\u7565\u6642\u306F\u65E2\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"},{name:"--parent",summary:`\u89AA\u30DA\u30FC\u30B8\u306E ID\uFF08\u76F4\u4E0B\u306E\u5B50\u3060\u3051\u3092\u51FA\u3059\uFF09\u3002${ROOT_PARENT} \u3067\u6700\u4E0A\u4F4D`,takesValue:true,placeholder:"<\u30DA\u30FC\u30B8ID>|root"},
|
|
31
|
-
{name:"--status",summary:`\u72B6\u614B\u3067\u7D5E\u308A\u8FBC\u3080\uFF08${WIKI_STATUSES.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u72B6\u614B>"},{name:"--tag",summary:"\u30BF\u30B0\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u30BF\u30B0>"},{name:"--keyword",summary:"\u30AD\u30FC\u30EF\u30FC\u30C9\u3067\
|
|
32
|
-
takesValue:true,placeholder:"<\u65E5\u6570>"}],paging:wikiPaging,async prepare(input,ctx){noArgs(input,"twp wiki list");parentRef(input);oneOf(input,"--status",WIKI_STATUSES);staleDays(input);pageLimit(input);return withResolved(input,{project:await ctx.projectId(
|
|
33
|
-
input);if(parent===void 0){return staleDays(input)!==void 0&&isRecord(body)?{...body,[STALE_VIEW]:true}:body}return{result:true,items:childrenOf(body,parent),has_more:false,next_cursor:null}},
|
|
34
|
-
body,wikiPaging,`${WIKI_LABEL}\u4E00\u89A7`).
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
\
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
GET",path:`${WIKI_PATH}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
38
|
+
{name:"--status",summary:`\u72B6\u614B\u3067\u7D5E\u308A\u8FBC\u3080\uFF08${WIKI_STATUSES.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u72B6\u614B>"},{name:"--tag",summary:"\u30BF\u30B0\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u30BF\u30B0>"},{name:"--keyword",summary:"\u30AD\u30FC\u30EF\u30FC\u30C9\u3067\u691C\u7D22\u3059\u308B\uFF08\u95A2\u9023\u5EA6\u9806\u30FB\u629C\u7C8B\u3064\u304D\u3002\u4F5C\u6210\u76F4\u5F8C\u306E\u30DA\u30FC\u30B8\u306F\u51FA\u306A\u3044\u3053\u3068\u304C\u3042\u308B\uFF09",
|
|
39
|
+
takesValue:true,placeholder:"<\u8A9E>"},{name:"--stale-days",summary:"\u6700\u7D42\u5B9F\u6E2C\u65E5\u304C N \u65E5\u4EE5\u4E0A\u524D\uFF08\u672A\u8A2D\u5B9A\u3092\u542B\u3080\uFF09\u306E\u30DA\u30FC\u30B8\u3060\u3051\u30FB\u53E4\u3044\u9806",takesValue:true,placeholder:"<\u65E5\u6570>"}],paging:wikiPaging,async prepare(input,ctx){noArgs(input,"twp wiki list");parentRef(input);oneOf(input,"--status",WIKI_STATUSES);staleDays(input);pageLimit(input);return withResolved(input,{project:await ctx.projectId(
|
|
40
|
+
input.flags.get("--project"))})},plan(input){return parentRef(input)!==void 0?{method:"GET",path:`${WIKI_PATH}/tree`,query:wikiTreeQuery(input)}:{method:"GET",path:WIKI_PATH,query:wikiListQuery(input)}},narrow(body,input){const parent=parentRef(input);if(parent===void 0){return staleDays(input)!==void 0&&isRecord(body)?{...body,[STALE_VIEW]:true}:body}return{result:true,items:childrenOf(body,parent),has_more:false,next_cursor:null}},notes:(body,input)=>[...staleDaysNotes(body,input),...isRecord(
|
|
41
|
+
body)&&body["search_mode"]==="in_memory"?["\u691C\u7D22\u7D22\u5F15\u304C\u4F7F\u3048\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u30B5\u30FC\u30D0\u306F\u5F93\u6765\u306E\u90E8\u5206\u4E00\u81F4\uFF08\u66F4\u65B0\u65E5\u6642\u9806\u30FB\u629C\u7C8B\u306A\u3057\uFF09\u3067\u7D5E\u308A\u8FBC\u307F\u307E\u3057\u305F\u3002"]:[]],summarize:body=>{const rows=envelopeRows(body,wikiPaging,`${WIKI_LABEL}\u4E00\u89A7`);const columns=rows.some(row=>isRecord(row)&&"child_count"in row)?WIKI_CHILD_COLUMNS:isRecord(
|
|
42
|
+
body)&&body[STALE_VIEW]===true?WIKI_STALE_COLUMNS:rows.some(row=>isRecord(row)&&"search_excerpt"in row)?WIKI_SEARCH_COLUMNS:WIKI_LIST_COLUMNS;return rows.map(row=>pick(row,columns))},raw:body=>envelopeRows(body,wikiPaging,`${WIKI_LABEL}\u4E00\u89A7`).map(row=>isRecord(row)?withoutContent(row):row)};function wikiTreeQuery(input){return{project_id:requireResolved(input,"project"),fields:WIKI_SUMMARY_FIELDS}}function wikiDocument(body){const view=wikiGetView(body);if(view!==void 0)return wikiViewDocument(
|
|
43
|
+
view);const page=record(body,"page",WIKI_LABEL);return composeDocument(page["title"],[...metaLine("\u72B6\u614B",page["status"]),...metaLine("\u5F62\u5F0F",page["content_format"]),...metaLine("\u30BF\u30B0",page["tags"]),...metaLine("\u89AA\u30DA\u30FC\u30B8",page["parent_page_id"]),...metaLine("\u6700\u7D42\u5B9F\u6E2C\u65E5",page["verified_at"]),...metaLine("\u6839\u62E0\u30BF\u30B9\u30AF",page["evidence_task_keys"]),...metaLine("\u7A2E\u5225",page["knowledge_kind"]),...metaLine("\u7248",page["\
|
|
44
|
+
version"]),...metaLine("\u66F4\u65B0",page["updated_at"]),...metaLine("\u66F4\u65B0\u8005",page["updated_by_name"]),...metaLine("ID",page["id"])],[{body:wikiContentToText(page["content"],page["content_format"])}])}var WIKI_GET_USAGE="twp wiki get <\u30DA\u30FC\u30B8ID> [<\u30DA\u30FC\u30B8ID> ...] | --path <\u89AA\u4EF6\u540D/\u5B50\u4EF6\u540D> [--project <\u30B3\u30FC\u30C9|ID>]\uFF081\u4EF6\u306E\u3068\u304D\u306F [--outline | --section <\u898B\u51FA\u3057>] \u3082\u4ED8\u3051\u3089\u308C\u308B\uFF09";
|
|
45
|
+
function wikiPathSegments(raw){const text2=raw.trim().replace(/^\//,"");const segments=[];let current="";for(let i=0;i<text2.length;i++){const ch=text2[i];const next=text2[i+1];if(ch==="\\"&&(next==="/"||next==="\\")){current+=next;i++}else if(ch==="/"){segments.push(current);current=""}else{current+=ch}}segments.push(current);if(segments.some(segment=>segment.trim()==="")){throw new UsageError(`--path \u306B\u7A7A\u306E\u4EF6\u540D\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059: ${raw}`,"\u300C\u89AA\u4EF6\u540D/\
|
|
46
|
+
\u5B50\u4EF6\u540D\u300D\u306E\u5F62\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4EF6\u540D\u306E\u4E2D\u306E / \u306F \\/ \u3068\u66F8\u304D\u307E\u3059\uFF09\u3002")}return segments}function wikiPathRef(input){const raw=input.flags.get("--path");if(raw===void 0){if(input.flags.has("--project")){throw new UsageError("--project \u306F --path \u3068\u4E00\u7DD2\u306B\u3060\u3051\u6307\u5B9A\u3067\u304D\u307E\u3059","\u30DA\u30FC\u30B8 ID \u3067\u53D6\u308B\u3068\u304D\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u6307\u5B9A\u306F\u8981\u308A\u307E\u305B\u3093\u3002")}
|
|
47
|
+
return void 0}if(input.args.length>0){throw new UsageError(`\u30DA\u30FC\u30B8 ID\uFF08${input.args.join(" ")}\uFF09\u3068 --path \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,WIKI_GET_USAGE)}if(raw.trim()==="")throw new UsageError("--path \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093",WIKI_GET_USAGE);return wikiPathSegments(raw)}function foldTitle(value){return typeof value==="string"?value.trim().toLowerCase():void 0}function wikiPathNodes(nodes,trail){
|
|
48
|
+
return nodes.filter(isRecord).map(page=>({page,trail:[...trail,typeof page["title"]==="string"?page["title"]:""],children:Array.isArray(page["children"])?page["children"]:[]}))}function formatTrail(trail){return trail.map(title=>title.replace(/\\/g,"\\\\").replace(/\//g,"\\/")).join("/")}function describeNode(node){return`${formatTrail(node.trail)}\uFF08${String(node.page["id"])}\uFF09`}function listNodes(nodes,limit=10){const shown=nodes.slice(0,limit).map(describeNode).join(" / ");return nodes.
|
|
49
|
+
length>limit?`${shown} \u2026\uFF08\u5168 ${nodes.length} \u4EF6\uFF09`:shown}function nodesTitled(tree,title){const needle=foldTitle(title);const found=[];const stack=wikiPathNodes(tree,[]).reverse();while(stack.length>0){const node=stack.pop();if(foldTitle(node.page["title"])===needle)found.push(node);stack.push(...wikiPathNodes(node.children,node.trail).reverse())}return found}function resolveWikiPath(body,segments,raw){const tree=isRecord(body)&&body["result"]===true?body["tree"]:void 0;if(!Array.
|
|
50
|
+
isArray(tree))throw new ApiResponseError(`${WIKI_LABEL}\u306E\u30C4\u30EA\u30FC\u306E\u5FDC\u7B54\u306B tree \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);let frontier=wikiPathNodes(tree,[]);for(const[depth,segment]of segments.entries()){const needle=foldTitle(segment);const hits=frontier.filter(node=>foldTitle(node.page["title"])===needle&&typeof node.page["id"]==="string");if(hits.length===0){const where=depth===
|
|
51
|
+
0?"\u6700\u4E0A\u4F4D":`\u300C${formatTrail(segments.slice(0,depth))}\u300D\u306E\u76F4\u4E0B`;const elsewhere=nodesTitled(tree,segment);const titles=[...new Set(frontier.map(node=>node.trail.at(-1)??""))].filter(title=>title!=="");const hint=elsewhere.length>0?`\u540C\u3058\u4EF6\u540D\u306E\u30DA\u30FC\u30B8\u306F\u5225\u306E\u5834\u6240\u306B\u3042\u308A\u307E\u3059: ${listNodes(elsewhere)}`:titles.length>0?`${where}\u306E\u4EF6\u540D: ${titles.slice(0,10).join(" / ")}${titles.length>10?` \u2026\uFF08\u5168\
|
|
52
|
+
${titles.length} \u4EF6\uFF09`:""}`:`${where}\u306B\u30DA\u30FC\u30B8\u306F\u3042\u308A\u307E\u305B\u3093\u3002`;throw new UsageError(`--path \u306E\u300C${raw}\u300D\u306B\u4E00\u81F4\u3059\u308B ${WIKI_LABEL}\u304C\u3042\u308A\u307E\u305B\u3093\uFF08${where}\u306B\u300C${segment}\u300D\u3068\u3044\u3046\u4EF6\u540D\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u524A\u9664\u6E08\u307F\u30FB\u4ED6\u4EBA\u306E\u4E0B\u66F8\u304D\u306F\u898B\u3048\u307E\u305B\u3093\uFF09`,hint)}
|
|
53
|
+
if(depth===segments.length-1){if(hits.length===1)return String(hits[0]?.page["id"]);throw new UsageError(`--path \u306E\u300C${raw}\u300D\u304C ${WIKI_LABEL}${hits.length}\u4EF6\u306B\u4E00\u81F4\u3057\u307E\u3059: ${listNodes(hits)}`,"\u30DA\u30FC\u30B8 ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp wiki get <\u30DA\u30FC\u30B8ID>\uFF09\u3002")}frontier=hits.flatMap(node=>wikiPathNodes(node.children,node.trail))}throw new Error("\u5185\u90E8\u30A8\u30E9\u30FC: --path \u306E\u4EF6\u540D\u304C\u7A7A\u3067\u3059")}
|
|
54
|
+
function isWikiPages(body){return isRecord(body)&&Array.isArray(body["pages"])}function wikiGetIds(input){const ids=input.args.map(raw=>raw.trim());if(ids.length===0||ids.every(id=>id===""))throw new UsageError("\u30DA\u30FC\u30B8\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp wiki get help");for(const id of ids){if(!isSafePathSegment(id))throw new UsageError(`\u30DA\u30FC\u30B8\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${id===""?"(\u7A7A)":id}`,
|
|
55
|
+
"\u30DA\u30FC\u30B8\u306E ID \u306F twp wiki list \u306E id \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}return ids}function wikiPagePlan(id){return{method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(id)}`}}function isPageFailure(err){return err instanceof ApiError&&err.status!==401&&err.status!==429}async function wikiGetMany(input,ctx){const ids=wikiGetIds(input);if(ids.length===1)return ctx.send(wikiPagePlan(ids[0]));const pages=[];const failed=[];for(const id of ids){let body;try{
|
|
56
|
+
body=await ctx.send(wikiPagePlan(id))}catch(err){if(!isPageFailure(err))throw err;failed.push({target:id,error:err});continue}pages.push(record(body,"page",WIKI_LABEL))}const result={result:true,pages,failed};return result}function wikiGetPlan(input){return wikiPathRef(input)!==void 0?{method:"GET",path:`${WIKI_PATH}/tree`,query:wikiTreeQuery(input)}:wikiPagePlan(wikiGetIds(input)[0])}var WIKI_VIEW_KEY="twp_wiki_view";var WIKI_SECTION_CANDIDATES_MAX=50;var WIKI_VIEW_PAGE_FIELDS=["id","title","ve\
|
|
57
|
+
rsion","content_format","updated_at"];function wikiGetView(body){const view=isRecord(body)?body[WIKI_VIEW_KEY]:void 0;return isRecord(view)?view:void 0}function wikiGetMode(input){const outline=input.flags.has("--outline");const raw=input.flags.get("--section");if(outline&&raw!==void 0){throw new UsageError("--outline \u3068 --section \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093",'\u898B\u51FA\u3057\u306E\u4E00\u89A7\u306F --outline\u30011\u3064\u306E\u7BC0\u306F --section "<\u898B\u51FA\u3057>" \u3067\u3059\u3002')}
|
|
58
|
+
if(raw!==void 0&&raw.replace(/^#+/,"").trim()===""){throw new UsageError("--section \u306B\u898B\u51FA\u3057\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","\u898B\u51FA\u3057\u306F twp wiki get <\u30DA\u30FC\u30B8ID> --outline \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}if((outline||raw!==void 0)&&wikiPathRef(input)===void 0&&wikiGetIds(input).length>1){throw new UsageError("--outline / --section \u306F\u30DA\u30FC\u30B8 ID \u30921\u3064\u3060\u3051\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
59
|
+
"\u8907\u6570\u306E\u30DA\u30FC\u30B8\u306F1\u4EF6\u305A\u3064 twp wiki get <\u30DA\u30FC\u30B8ID> --outline \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{outline,section:raw}}function wikiGetNarrow(body,outline,section){const page=record(body,"page",WIKI_LABEL);const text2=wikiContentToText(page["content"],page["content_format"]);const summary=pick(page,WIKI_VIEW_PAGE_FIELDS);const options={markdown:page["content_format"]==="markdown"};if(outline)return{result:true,[WIKI_VIEW_KEY]:{
|
|
60
|
+
kind:"outline",page:summary,outline:textOutline(text2,options)}};const found=textSection(text2,section??"",options);if(found===void 0){const titles=textOutline(text2,options).map(h=>`${"#".repeat(h.level)} ${oneLine(h.title)}`);const shown=titles.slice(0,WIKI_SECTION_CANDIDATES_MAX);const rest=titles.length-shown.length;throw new UsageError(`\u898B\u51FA\u3057\u300C${oneLine(section??"")}\u300D\u306F\u30DA\u30FC\u30B8 ${String(page["id"])} \u306B\u3042\u308A\u307E\u305B\u3093`,titles.length===0?
|
|
61
|
+
"\u3053\u306E\u30DA\u30FC\u30B8\u306B\u306F\u898B\u51FA\u3057\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u5168\u6587\u306F --section \u3092\u5916\u3057\u3066\u8AAD\u3081\u307E\u3059\u3002":`\u30DA\u30FC\u30B8\u306E\u898B\u51FA\u3057:
|
|
53
62
|
${shown.join("\n ")}${rest>0?`
|
|
54
63
|
\u2026\u307B\u304B ${rest} \u4EF6\uFF08\u5168\u4EF6\u306F --outline\uFF09`:""}`)}return{result:true,[WIKI_VIEW_KEY]:{kind:"section",page:summary,section:{level:found.level,title:found.title,content:found.text,matches:found.matches}}}}async function wikiGetExecute(input,ctx){const{outline,section}=wikiGetMode(input);const segments=wikiPathRef(input);const narrow=outline||section!==void 0;if(segments===void 0&&!narrow)return wikiGetMany(input,ctx);const id=segments===void 0?wikiGetIds(input)[0]:
|
|
55
64
|
resolveWikiPath(await ctx.send(wikiGetPlan(input)),segments,input.flags.get("--path")?.trim()??"");const body=await ctx.send(wikiPagePlan(id));return narrow?wikiGetNarrow(body,outline,section):body}function wikiViewDocument(view){const meta=[...metaLine("\u7248",view.page["version"]),...metaLine("ID",view.page["id"])];if(view.kind==="outline"){const lines=view.outline.map(h=>`${" ".repeat(h.level-1)}${"#".repeat(h.level)} ${h.title}\uFF08${h.chars}\u5B57\uFF09`);return composeDocument(view.page["\
|
|
@@ -151,11 +160,11 @@ status_id \u306F\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u306E ID
|
|
|
151
160
|
|
|
152
161
|
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${WIKI_LINKED_TASK_COLUMNS.join(" / ")}\uFF09\u3001--output json \u306F\u30EA\u30F3\u30AF\u306E\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\uFF08task \u306E\u5165\u308C\u5B50\u3092\u542B\u3080\uFF09\u3067\u3059\u3002`,flags:[],plan:input=>({method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(singleId(input,"twp wiki linked-tasks","\u30DA\u30FC\u30B8","twp wiki list"))}/linked-tasks`}),summarize:body=>arrayField(body,"linked_tasks",`${WIKI_LABEL}\
|
|
153
162
|
\u306E\u95A2\u9023\u30BF\u30B9\u30AF`).map(linkedTaskRow),raw:body=>arrayField(body,"linked_tasks",`${WIKI_LABEL}\u306E\u95A2\u9023\u30BF\u30B9\u30AF`)};var WIKI_CONTENT_MAX_CHARS=4e5;var WIKI_TITLE_MAX_CHARS=255;var WIKI_TAG_MAX_CHARS=50;var WIKI_CREATE_USAGE="twp wiki create --project <\u30B3\u30FC\u30C9|ID> --title <\u4EF6\u540D> --content-file <\u30D1\u30B9|-> [--content-format <html|markdown>] [--parent <\u30DA\u30FC\u30B8ID>] [--status <draft|published>] [--tag <\u30BF\u30B0>]... [--verified-at <\u65E5\u4ED8|today>] [--evidence-task <\u30AD\u30FC>]... [--kind <\u7A2E\u5225>]";
|
|
154
|
-
var WIKI_UPDATE_USAGE="twp wiki update <\u30DA\u30FC\u30B8ID> [--title <\u4EF6\u540D>] [--content-file <\u30D1\u30B9|->] [--content-format <html|markdown>] [--status <draft|published>] [--tag <\u30BF\u30B0>]... [--clear-tags] [--verified-at <\u65E5\u4ED8|today>|--clear-verified-at] [--evidence-task <\u30AD\u30FC>...|--clear-evidence-tasks] [--kind <\u7A2E\u5225>|--clear-kind] [--if-version <\u7248>]
|
|
155
|
-
var CONTENT_FILE_FLAG={name:"--content-file",summary:"\u672C\u6587\u3092\u8AAD\u3080\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u52A0\u5DE5\u305B\u305A\u306B\u9001\u308B",takesValue:true,placeholder:"<\u30D1\u30B9|->"};var WIKI_CONTENT_FORMAT_FLAG={
|
|
156
|
-
|
|
157
|
-
var WIKI_TAG_FLAG={name:"--tag",summary:`\u30BF\u30B0\uFF08\u8907\u6570\u56DE\u53EF\u30FB${WIKI_TAG_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\uFF09`,takesValue:true,placeholder:"<\u30BF\u30B0>",repeatable:true};var WIKI_WRITE_HELP="\u672C\u6587\u306F --content-file \u306E\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u304B\u3089\u8AAD\u307F\u3001\u52A0\u5DE5\u305B\u305A\u306B\u9001\u308A\u307E\u3059\uFF08\u5148\u982D\u306E BOM \u3060\u3051\u843D\u3068\u3057\u307E\u3059\uFF09\u3002\n\u672C\u6587\u306E\u5F62\u5F0F\u306F --
|
|
158
|
-
format \u3067\u8A2D\u5B9A\uFF09\u3002\nHTML \u306E\u30DA\u30FC\u30B8\u306B Markdown \u3092\u9001\u3063\u3066\u3082\u5909\u63DB\u3057\u306A\u3044\u306E\u3067\u3001\u753B\u9762\u3067\u306F\u8A18\u53F7\u306E\u307E\u307E\u8868\u793A\u3055\u308C\u307E\u3059\u3002\n\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\u306F\u4F5C\u6210\u5F8C\u306B\u5909\u3048\u3089\u308C\u307E\u305B\u3093\uFF08update \u3067\u9055\u3046\u5F62\u5F0F\u3092\u6307\u5B9A\u3059\u308B\u3068\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF09\u3002update \u3067\u5F62\u5F0F\u3092\u62E1\u5F35\u5B50\u304B\u3089\u6C7A\u3081\u305F\u3068\u304D\u306F\u3001\u9001\u308B\u524D\u306B\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\u3068\u7167\u5408\u3057\u3001\u9055\u3048\u3070\u4F55\u3082\u9001\u3089\u305A\u306B\u6B62\u307E\u308A\u307E\u3059\u3002\n\u7DE8\u96C6\u30FB\u79FB\u52D5\u30FB\u524A\u9664\u3067\u304D\u308B\u306E\u306F\u3001\u30DA\u30FC\u30B8\u306E\u4F5C\u6210\u8005\u30FBwiki \u306E\u7BA1\u7406\u8005\u30FB\u7D44\u7E54\u306E\u7BA1\u7406\u8005\u3067\u3059\uFF08\u6A29\u9650\u304C\u7121\u3051\u308C\u3070\u30B5\u30FC\u30D0\u306E 403 \u306E\u6587\u9762\u3092\u305D\u306E\u307E\u307E\u51FA\u3057\u307E\u3059\uFF09\u3002";
|
|
163
|
+
var WIKI_UPDATE_USAGE="twp wiki update <\u30DA\u30FC\u30B8ID> [--title <\u4EF6\u540D>] [--content-file <\u30D1\u30B9|->] [--content-format <html|markdown>] [--status <draft|published>] [--tag <\u30BF\u30B0>]... [--clear-tags] [--verified-at <\u65E5\u4ED8|today>|--clear-verified-at] [--evidence-task <\u30AD\u30FC>...|--clear-evidence-tasks] [--kind <\u7A2E\u5225>|--clear-kind] [--if-version <\u7248>]\n twp wiki update <\u30DA\u30FC\u30B8ID> --section <\u898B\u51FA\u3057> --content-file <\u30D1\u30B9|-> [--if-version <\u7248>]";
|
|
164
|
+
var WIKI_APPEND_USAGE="twp wiki append <\u30DA\u30FC\u30B8ID> --content-file <\u30D1\u30B9|-> [--if-version <\u7248>]";var WIKI_MOVE_USAGE="twp wiki move <\u30DA\u30FC\u30B8ID> [--parent <\u30DA\u30FC\u30B8ID>|root] [--sort-order <\u9806>]";var CONTENT_FILE_FLAG={name:"--content-file",summary:"\u672C\u6587\u3092\u8AAD\u3080\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u52A0\u5DE5\u305B\u305A\u306B\u9001\u308B",takesValue:true,placeholder:"<\u30D1\u30B9|->"};var WIKI_CONTENT_FORMAT_FLAG={
|
|
165
|
+
name:"--content-format",summary:`\u672C\u6587\u306E\u5F62\u5F0F\uFF08${WIKI_CONTENT_FORMATS.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u5F62\u5F0F>"};var WIKI_FORMAT_BY_EXTENSION={".md":"markdown",".markdown":"markdown",".html":"html",".htm":"html"};function inferredWikiFormat(input){if(input.flags.has("--content-format"))return void 0;const file=input.flags.get("--content-file");if(file===void 0||file==="-")return void 0;const extension=path.extname(file).toLowerCase();const format=WIKI_FORMAT_BY_EXTENSION[extension];
|
|
166
|
+
return format===void 0?void 0:{format,extension}}var WIKI_STATUS_FLAG={name:"--status",summary:`\u72B6\u614B\uFF08${WIKI_STATUSES.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u72B6\u614B>"};var WIKI_TAG_FLAG={name:"--tag",summary:`\u30BF\u30B0\uFF08\u8907\u6570\u56DE\u53EF\u30FB${WIKI_TAG_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\uFF09`,takesValue:true,placeholder:"<\u30BF\u30B0>",repeatable:true};var WIKI_WRITE_HELP="\u672C\u6587\u306F --content-file \u306E\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u304B\u3089\u8AAD\u307F\u3001\u52A0\u5DE5\u305B\u305A\u306B\u9001\u308A\u307E\u3059\uFF08\u5148\u982D\u306E BOM \u3060\u3051\u843D\u3068\u3057\u307E\u3059\uFF09\u3002\n\u672C\u6587\u306E\u5F62\u5F0F\u306F --cont\
|
|
167
|
+
ent-format\uFF08html / markdown\uFF09\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\u7701\u304F\u3068 --content-file \u306E\u62E1\u5F35\u5B50\u3067\u6C7A\u3081\u307E\u3059\uFF08.md / .markdown \u306F markdown\u3001.html / .htm \u306F html\uFF09\u3002\u62E1\u5F35\u5B50\u3067\u6C7A\u307E\u3089\u306A\u3051\u308C\u3070\u5F62\u5F0F\u3092\u9001\u3089\u305A\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u65E2\u5B9A\u306E\u5F62\u5F0F\u306B\u306A\u308A\u307E\u3059\uFF08\u672A\u8A2D\u5B9A\u306A\u3089 HTML\u3002\u65E2\u5B9A\u306F twp project update --wiki-default-format \u3067\u8A2D\u5B9A\uFF09\u3002\nHTML \u306E\u30DA\u30FC\u30B8\u306B Markdown \u3092\u9001\u3063\u3066\u3082\u5909\u63DB\u3057\u306A\u3044\u306E\u3067\u3001\u753B\u9762\u3067\u306F\u8A18\u53F7\u306E\u307E\u307E\u8868\u793A\u3055\u308C\u307E\u3059\u3002\n\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\u306F\u4F5C\u6210\u5F8C\u306B\u5909\u3048\u3089\u308C\u307E\u305B\u3093\uFF08update \u3067\u9055\u3046\u5F62\u5F0F\u3092\u6307\u5B9A\u3059\u308B\u3068\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF09\u3002update \u3067\u5F62\u5F0F\u3092\u62E1\u5F35\u5B50\u304B\u3089\u6C7A\u3081\u305F\u3068\u304D\u306F\u3001\u9001\u308B\u524D\u306B\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\u3068\u7167\u5408\u3057\u3001\u9055\u3048\u3070\u4F55\u3082\u9001\u3089\u305A\u306B\u6B62\u307E\u308A\u307E\u3059\u3002\n\u7DE8\u96C6\u30FB\u79FB\u52D5\u30FB\u524A\u9664\u3067\u304D\u308B\u306E\u306F\u3001\u30DA\u30FC\u30B8\u306E\u4F5C\u6210\u8005\u30FBwiki \u306E\u7BA1\u7406\u8005\u30FB\u7D44\u7E54\u306E\u7BA1\u7406\u8005\u3067\u3059\uFF08\u6A29\u9650\u304C\u7121\u3051\u308C\u3070\u30B5\u30FC\u30D0\u306E 403 \u306E\u6587\u9762\u3092\u305D\u306E\u307E\u307E\u51FA\u3057\u307E\u3059\uFF09\u3002";
|
|
159
168
|
async function wikiContent(input,usage){return readBody(input,{flag:"--content",fileFlag:"--content-file",label:"wiki \u306E\u672C\u6587",maxChars:WIKI_CONTENT_MAX_CHARS,usage})}function wikiTitle(input){const raw=input.flags.get("--title");if(raw===void 0)return void 0;if(raw.trim()==="")throw new UsageError("--title \u304C\u7A7A\u3067\u3059","\u4EF6\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");const count=charCount(raw);if(count>WIKI_TITLE_MAX_CHARS){throw new UsageError(
|
|
160
169
|
`--title \u304C\u9577\u3059\u304E\u307E\u3059\uFF08${count} \u6587\u5B57\u30FB\u4E0A\u9650 ${WIKI_TITLE_MAX_CHARS} \u6587\u5B57\uFF09`,"\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\u304C255\u6587\u5B57\u3067\u3059\u3002")}return raw}function wikiTags(input){const tags=repeatedValues(input,"--tag").map(tag=>tag.trim());const clear=input.flags.has("--clear-tags");if(clear&&tags.length>0){throw new UsageError("--tag \u3068 --clear-tags \u306F\u4F75\u7528\u3067\u304D\u307E\u305B\u3093","--tag \u306F\u30BF\u30B0\u3092\u307E\u308B\u3054\u3068\u7F6E\u304D\u63DB\u3048\u307E\u3059\
|
|
161
170
|
\u3002\u6D88\u3059\u3060\u3051\u306A\u3089 --clear-tags \u3060\u3051\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}if(clear)return[];if(tags.length===0)return void 0;for(const tag of tags){if(tag==="")throw new UsageError("--tag \u304C\u7A7A\u3067\u3059","\u30BF\u30B0\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");if(charCount(tag)>WIKI_TAG_MAX_CHARS){throw new UsageError(`--tag \u304C\u9577\u3059\u304E\u307E\u3059\uFF08${tag}\u30FB\u4E0A\u9650 ${WIKI_TAG_MAX_CHARS}\
|
|
@@ -184,30 +193,39 @@ input,"--content-format",WIKI_CONTENT_FORMATS);wikiTags(input);wikiParent(input,
|
|
|
184
193
|
false);const contentFormat=oneOf(input,"--content-format",WIKI_CONTENT_FORMATS)??inferredWikiFormat(input)?.format;return{method:"POST",path:WIKI_PATH,body:{project_id:requireResolved(input,"project"),title:wikiTitle(input),content:requireResolved(input,"content"),...contentFormat!==void 0?{content_format:contentFormat}:{},...oneOf(input,"--status",WIKI_STATUSES)!==void 0?{status:oneOf(input,"--status",WIKI_STATUSES)}:{},...parent!==void 0?{parent_page_id:parent}:{},...wikiTags(input)!==void 0?{
|
|
185
194
|
tags:wikiTags(input)}:{},...wikiFreshnessBody(input)}}},plannedNotes:input=>[...input.flags.has("--status")?[]:["--status \u3092\u7701\u3044\u305F\u306E\u3067\u4E0B\u66F8\u304D\uFF08draft\uFF09\u3067\u4F5C\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\uFF09\u3002"],...wikiCreateFormatNotes(input)],summarize:body=>pick(pageFrom(body),WIKI_GET_COLUMNS),raw:pageFrom};function wikiCreateFormatNotes(input){if(input.flags.has("--content-format"))return[];const inferred=inferredWikiFormat(
|
|
186
195
|
input);if(inferred!==void 0){return[`--content-format \u3092\u7701\u3044\u305F\u306E\u3067\u3001--content-file \u306E\u62E1\u5F35\u5B50\uFF08${inferred.extension}\uFF09\u304B\u3089 ${inferred.format} \u306E\u30DA\u30FC\u30B8\u3068\u3057\u3066\u4F5C\u308A\u307E\u3059\u3002\u9055\u3046\u5F62\u5F0F\u306B\u3059\u308B\u306A\u3089 --content-format \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`]}return["--content-format \u3092\u7701\u304D\u3001\u62E1\u5F35\u5B50\u304B\u3089\u3082\u5F62\u5F0F\u304C\u6C7A\u307E\u3089\u306A\u3044\u306E\u3067\u5F62\u5F0F\u3092\u9001\u308A\u307E\u305B\u3093\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u65E2\u5B9A\u306E\u5F62\u5F0F\u3067\u4F5C\u308A\u307E\u3059\uFF08\u672A\u8A2D\u5B9A\u306A\u3089 HTML\u3002twp projec\
|
|
187
|
-
t get \u306E wiki_default_content_format \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002"]}async function previewWikiUpdate(input,ctx){const expected=positiveInteger(input.flags,"--if-version");const inferred=inferredWikiFormat(input);if(expected===void 0&&inferred===void 0)return{notes:[],warnings:[]};const id=singleId(input,
|
|
188
|
-
if(expected!==void 0){const current=page["version"];if(current!==expected){throw new ApiRejectedError(`\u30DA\u30FC\u30B8 ${id} \u306E\u7248\u304C ${String(current)} \u3067\u3059\uFF08--if-version ${expected}\uFF09\u3002\u4ED6\u306E\u66F4\u65B0\u3068\u885D\u7A81\u3057\u305F\u306E\u3067\u4F55\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093\u3002twp wiki get \u3067\u6700\u65B0\u306E\u672C\u6587\u3092\u8AAD\u307F\u3001\u53CD\u6620\u3057\u76F4\u3057\u3066\u304B\u3089 --if-version \u3092\u4ED8\u3051\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
196
|
+
t get \u306E wiki_default_content_format \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002"]}async function previewWikiUpdate(input,ctx){return previewWikiWrite(input,ctx,"twp wiki update")}async function previewWikiWrite(input,ctx,command){const expected=positiveInteger(input.flags,"--if-version");const inferred=inferredWikiFormat(input);if(expected===void 0&&inferred===void 0)return{notes:[],warnings:[]};const id=singleId(input,command,"\u30DA\u30FC\u30B8","twp wiki list");const page=pageFrom(
|
|
197
|
+
await ctx.send({method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(id)}`}));const notes=[];if(expected!==void 0){const current=page["version"];if(current!==expected){throw new ApiRejectedError(`\u30DA\u30FC\u30B8 ${id} \u306E\u7248\u304C ${String(current)} \u3067\u3059\uFF08--if-version ${expected}\uFF09\u3002\u4ED6\u306E\u66F4\u65B0\u3068\u885D\u7A81\u3057\u305F\u306E\u3067\u4F55\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093\u3002twp wiki get \u3067\u6700\u65B0\u306E\u672C\u6587\u3092\u8AAD\u307F\u3001\u53CD\u6620\u3057\u76F4\u3057\u3066\u304B\u3089 --if-version \u3092\u4ED8\u3051\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
189
198
|
notes.push(`\u7248 ${expected} \u3092\u78BA\u8A8D\u3057\u307E\u3057\u305F\uFF08\u7248\u7167\u5408\u306B\u5BFE\u5FDC\u3057\u305F\u30B5\u30FC\u30D0\u3067\u306F\u9001\u4FE1\u6642\u306B\u3082\u7167\u5408\u3057\u3001\u9593\u306B\u4ED6\u306E\u66F4\u65B0\u304C\u3042\u308C\u3070 409 \u3067\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002`)}if(inferred!==void 0){const pageFormat=typeof page["content_format"]==="string"&&page["content_format"]!==""?page["content_format"]:"html";if(pageFormat!==inferred.format){throw new ApiRejectedError(
|
|
190
199
|
`\u30DA\u30FC\u30B8 ${id} \u306E\u5F62\u5F0F\u306F ${pageFormat} \u3067\u3059\u304C\u3001--content-file \u306E\u62E1\u5F35\u5B50\uFF08${inferred.extension}\uFF09\u306F ${inferred.format} \u3067\u3059\u3002\u4F55\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093\u3002\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\u306F\u4F5C\u6210\u5F8C\u306B\u5909\u3048\u3089\u308C\u307E\u305B\u3093\u3002\u672C\u6587\u3092 ${pageFormat} \u3067\u66F8\u304D\u76F4\u3059\u304B\u3001${inferred.format} \u3067\u65B0\u3057\u3044\u30DA\u30FC\u30B8\u3092\u4F5C\u3063\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u306E\u672C\u6587\u3092\u305D\u306E\u307E\u307E\u9001\u308B\
|
|
191
|
-
\u306A\u3089 --content-format ${pageFormat} \u3092\u660E\u793A\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002`)}notes.push(`--content-file \u306E\u62E1\u5F35\u5B50\uFF08${inferred.extension}\uFF09\u304C\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\uFF08${pageFormat}\uFF09\u3068\u4E00\u81F4\u3059\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u307E\u3057\u305F\u3002`)}return{notes,warnings:[]}}var
|
|
192
|
-
|
|
200
|
+
\u306A\u3089 --content-format ${pageFormat} \u3092\u660E\u793A\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002`)}notes.push(`--content-file \u306E\u62E1\u5F35\u5B50\uFF08${inferred.extension}\uFF09\u304C\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\uFF08${pageFormat}\uFF09\u3068\u4E00\u81F4\u3059\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u307E\u3057\u305F\u3002`)}return{notes,warnings:[]}}var WIKI_SECTION_FLAG={name:"--section",summary:"\u3053\u306E\u898B\u51FA\u3057\u306E\u7BC0\u306E\u672C\u6587\u3060\u3051\u3092\u5DEE\u3057\u66FF\u3048\u308B\uFF08--content-file \u3068 --if-version \u3060\u3051\u3068\u4F75\u7528\u3067\u304D\u308B\uFF09",
|
|
201
|
+
takesValue:true,placeholder:"<\u898B\u51FA\u3057>"};var WIKI_PARTIAL_COLUMNS=["id","title","version","content_format","updated_at"];function wikiSectionHeading(input){const raw=input.flags.get("--section");if(raw===void 0)return void 0;if(raw.trim().replace(/^#+/,"").trim()===""){throw new UsageError("--section \u306B\u898B\u51FA\u3057\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","\u898B\u51FA\u3057\u306F twp wiki get <\u30DA\u30FC\u30B8ID> --outline \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}
|
|
202
|
+
return raw}var WIKI_PARTIAL_EXCLUSIVE_FLAGS=["--title","--content-format","--status","--tag","--clear-tags","--verified-at","--clear-verified-at","--evidence-task","--clear-evidence-tasks","--kind","--clear-kind"];async function prepareWikiPartial(input,usage){const extra=WIKI_PARTIAL_EXCLUSIVE_FLAGS.filter(flag=>input.flags.has(flag));if(extra.length>0){throw new UsageError(`--section \u3068 ${extra.join(" / ")} \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u7BC0\u306E\u5DEE\u3057\u66FF\u3048\u3067\u306F\u672C\u6587\uFF08--c\
|
|
203
|
+
ontent-file\uFF09\u3068 --if-version \u3060\u3051\u3092\u9001\u308A\u307E\u3059\u3002
|
|
204
|
+
${usage}`)}positiveInteger(input.flags,"--if-version");const content=await wikiContent(input,usage);if(content===void 0)throw new UsageError("\u672C\u6587\u3092 --content-file \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",usage);return withResolved(input,{content})}function wikiPartialPlan(input,id,method,action,extra){const expectedVersion=positiveInteger(input.flags,"--if-version");return{method,path:`${WIKI_PATH}/${encodeURIComponent(id)}/${action}`,
|
|
205
|
+
body:{...extra,content:input.resolved?.["content"],...expectedVersion!==void 0?{expected_version:expectedVersion}:{}}}}function wikiPartialResult(body){return record(body,"data",WIKI_LABEL)}var wikiUpdate={name:"update",summary:`${WIKI_LABEL}\u3092\u66F4\u65B0\u3059\u308B\uFF08\u4EF6\u540D\u30FB\u672C\u6587\u30FB\u72B6\u614B\u30FB\u30BF\u30B0\uFF09`,usage:WIKI_UPDATE_USAGE,description:`${WIKI_WRITE_HELP}
|
|
193
206
|
\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u9001\u308A\u307E\u3059\u3002--tag \u306F\u30BF\u30B0\u3092\u307E\u308B\u3054\u3068\u7F6E\u304D\u63DB\u3048\u3001--clear-tags \u306F\u30BF\u30B0\u3092\u7A7A\u306B\u3057\u307E\u3059\u3002
|
|
194
207
|
--content-file \u306E\u62E1\u5F35\u5B50\u304B\u3089\u5F62\u5F0F\u304C\u6C7A\u307E\u308B\u3068\u304D\uFF08--content-format \u3092\u7701\u3044\u305F\u3068\u304D\uFF09\u306F\u3001\u9001\u308B\u524D\u306B\u30DA\u30FC\u30B8\u3092\u53D6\u5F97\u3057\u3066\u5F62\u5F0F\u3092\u7167\u5408\u3057\u307E\u3059\u3002
|
|
195
208
|
--if-version <\u7248> \u3092\u4ED8\u3051\u308B\u3068\u3001\u30DA\u30FC\u30B8\u306E\u7248\uFF08twp wiki get \u306E version\uFF09\u304C\u4E00\u81F4\u3059\u308B\u3068\u304D\u3060\u3051\u66F4\u65B0\u3057\u307E\u3059\u3002
|
|
196
209
|
\u7248\u7167\u5408\u306B\u5BFE\u5FDC\u3057\u305F\u30B5\u30FC\u30D0\uFF08TWP-6838 \u4EE5\u964D\uFF09\u306F\u66F8\u304D\u8FBC\u307F\u306E\u6642\u70B9\u3067\u3082\u7167\u5408\u3057\u3001\u4ED6\u306E\u66F4\u65B0\u3068\u885D\u7A81\u3059\u308B\u3068\u4F55\u3082\u5909\u3048\u305A\u306B\u7D42\u4E86\u30B3\u30FC\u30C9 3 \u3067\u6B62\u307E\u308A\u307E\u3059\uFF08\u73FE\u5728\u306E\u7248\u3092\u8868\u793A\u3057\u307E\u3059\uFF09\u3002
|
|
197
210
|
\u5BFE\u5FDC\u524D\u306E\u30B5\u30FC\u30D0\u3067\u306F\u9001\u308B\u76F4\u524D\u306E\u7167\u5408\u3060\u3051\u306B\u306A\u308A\u3001\u7167\u5408\u3068\u9001\u4FE1\u306E\u9593\u306E\u4ED6\u4EBA\u306E\u66F4\u65B0\u307E\u3067\u306F\u9632\u3052\u307E\u305B\u3093\u3002\u7248\u304C\u4E0A\u304C\u308B\u306E\u306F\u672C\u6587\u304B\u4EF6\u540D\u3092\u5909\u3048\u305F\u3068\u304D\u3060\u3051\u3067\u3059\u3002
|
|
198
211
|
\u89AA\u30DA\u30FC\u30B8\u306E\u4ED8\u3051\u66FF\u3048\u306F twp wiki move \u3067\u3059\u3002
|
|
212
|
+
--section <\u898B\u51FA\u3057> \u3092\u4ED8\u3051\u308B\u3068\u3001\u305D\u306E\u898B\u51FA\u3057\u306E\u7BC0\u306E\u672C\u6587\u3060\u3051\u3092 --content-file \u306E\u5185\u5BB9\u306B\u5DEE\u3057\u66FF\u3048\u307E\u3059\uFF08\u5168\u6587\u3092\u9001\u308A\u76F4\u3057\u307E\u305B\u3093\uFF09\u3002\u898B\u51FA\u3057\u306E\u884C\u306F\u6B8B\u308A\u3001\u7BC0\u306F\u540C\u3058\u304B\u4E0A\u4F4D\u306E\u6B21\u306E\u898B\u51FA\u3057\u306E\u76F4\u524D\u307E\u3067\u3067\u3059\uFF08\u4E0B\u4F4D\u306E\u898B\u51FA\u3057\u306F\u7BC0\u306B\u542B\u307E\u308C\u3001\u307E\u3068\u3081\u3066\u5DEE\u3057\u66FF\u308F\u308A\u307E\u3059\uFF09\u3002\u898B\u51FA\u3057\u306E\u63A2\u3057\u65B9\u306F twp wiki get --section \u3068\u540C\u3058\u3067\u3059\u304C\u3001\u540C\u540D\u306E\u898B\u51FA\u3057\u304C\u8907\u6570\u3042\u308B\u3068\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\u3002--section \u3068\u4E00\u7DD2\u306B\u4F7F\u3048\u308B\u306E\u306F --content-file \u3068 --if-version \u3060\u3051\u3067\u3059\u3002--if-version \u3092\u4ED8\u3051\u306A\u304F\u3066\u3082\u3001\u30B5\u30FC\u30D0\u306F\u8AAD\u3093\u3060\u7248\u3092\u6761\u4EF6\u306B\u66F8\u304F\u306E\u3067\u4ED6\u306E\u66F4\u65B0\u3092\u6D88\u3057\u307E\u305B\u3093\u3002
|
|
199
213
|
${WIKI_FRESHNESS_HELP}
|
|
200
214
|
--evidence-task \u306F\u6839\u62E0\u30BF\u30B9\u30AF\u3092\u307E\u308B\u3054\u3068\u7F6E\u304D\u63DB\u3048\u307E\u3059\u3002--clear-verified-at / --clear-evidence-tasks / --clear-kind \u306F\u305D\u308C\u305E\u308C\u3092\u672A\u8A2D\u5B9A\u306B\u623B\u3057\u307E\u3059\u3002\u9BAE\u5EA6\u5C5E\u6027\u3060\u3051\u3092\u5909\u3048\u3066\u3082\u7248\u306F\u4E0A\u304C\u308A\u307E\u305B\u3093\u3002
|
|
201
215
|
|
|
202
216
|
\u4F8B:
|
|
203
217
|
twp wiki update 0f8b2c6e-... --content-file notes.html --if-version 3
|
|
204
|
-
twp wiki update 0f8b2c6e-... --verified-at today --evidence-task PRJ-123
|
|
218
|
+
twp wiki update 0f8b2c6e-... --verified-at today --evidence-task PRJ-123
|
|
219
|
+
twp wiki update 0f8b2c6e-... --section \u624B\u9806 --content-file steps.md --if-version 3`,flags:[{name:"--title",summary:`\u4EF6\u540D\uFF08${WIKI_TITLE_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\uFF09`,takesValue:true,placeholder:"<\u4EF6\u540D>"},CONTENT_FILE_FLAG,WIKI_CONTENT_FORMAT_FLAG,WIKI_STATUS_FLAG,WIKI_TAG_FLAG,{name:"--clear-tags",summary:"\u30BF\u30B0\u3092\u7A7A\u306B\u3059\u308B",takesValue:false},...WIKI_FRESHNESS_FLAGS,{name:"--clear-verified-at",summary:"\u6700\u7D42\u5B9F\u6E2C\u65E5\u3092\u672A\u8A2D\u5B9A\u306B\u623B\u3059",
|
|
205
220
|
takesValue:false},{name:"--clear-evidence-tasks",summary:"\u6839\u62E0\u30BF\u30B9\u30AF\u3092\u7A7A\u306B\u3059\u308B",takesValue:false},{name:"--clear-kind",summary:"\u7A2E\u5225\u3092\u672A\u8A2D\u5B9A\u306B\u623B\u3059",takesValue:false},{name:"--if-version",summary:"\u4E00\u81F4\u3059\u308B\u3068\u304D\u3060\u3051\u66F4\u65B0\u3059\u308B\u7248\uFF08\u9001\u308B\u524D\u3068\u3001\u5BFE\u5FDC\u30B5\u30FC\u30D0\u3067\u306F\u66F8\u304D\u8FBC\u307F\u6642\u306B\u3082\u7167\u5408\u3057\u3001\u9055\u3048\u3070\u4F55\u3082\u5909\u3048\u306A\u3044\uFF09",
|
|
206
|
-
takesValue:true,placeholder:"<\u7248>"}],async prepare(input){singleId(input,"twp wiki update","\u30DA\u30FC\u30B8","twp wiki list");const title=wikiTitle(input);const status=oneOf(input,"--status",WIKI_STATUSES);const contentFormat=oneOf(input,"--content-format",WIKI_CONTENT_FORMATS);const tags=wikiTags(input);positiveInteger(input.flags,"--if-version");const freshness=wikiFreshnessBody(input);
|
|
207
|
-
content===void 0&&contentFormat===void 0&&Object.keys(freshness).length===0){throw new UsageError("\u66F4\u65B0\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093",`--title / --content-file / --content-format / --status / --tag / --clear-tags / --verified-at / --evidence-task / --kind\uFF08\u3068\u5404 --clear-*\uFF09\u306E\u3069\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
208
|
-
${WIKI_UPDATE_USAGE}`)}return content===void 0?input:withResolved(input,{content})},preview:previewWikiUpdate,plan(input){const id=singleId(input,"twp wiki update","\u30DA\u30FC\u30B8","twp wiki list");const title=wikiTitle(input);const status=oneOf(input,"--status",WIKI_STATUSES);const tags=wikiTags(input);const content=input.resolved?.["content"];const contentFormat=oneOf(input,
|
|
209
|
-
PUT",path:`${WIKI_PATH}/${encodeURIComponent(id)}`,body:{...title!==void 0?{title}:{},...content!==void 0?{content}:{},...contentFormat!==void 0?{content_format:contentFormat}:{},...status!==void 0?{status}:{},...tags!==void 0?{tags}:{},...expectedVersion!==void 0?{expected_version:expectedVersion}:{},...wikiFreshnessBody(input)}}},summarize:body=>
|
|
210
|
-
|
|
221
|
+
takesValue:true,placeholder:"<\u7248>"},WIKI_SECTION_FLAG],async prepare(input){singleId(input,"twp wiki update","\u30DA\u30FC\u30B8","twp wiki list");if(wikiSectionHeading(input)!==void 0)return prepareWikiPartial(input,WIKI_UPDATE_USAGE);const title=wikiTitle(input);const status=oneOf(input,"--status",WIKI_STATUSES);const contentFormat=oneOf(input,"--content-format",WIKI_CONTENT_FORMATS);const tags=wikiTags(input);positiveInteger(input.flags,"--if-version");const freshness=wikiFreshnessBody(input);
|
|
222
|
+
const content=await wikiContent(input,WIKI_UPDATE_USAGE);if(title===void 0&&status===void 0&&tags===void 0&&content===void 0&&contentFormat===void 0&&Object.keys(freshness).length===0){throw new UsageError("\u66F4\u65B0\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093",`--title / --content-file / --content-format / --status / --tag / --clear-tags / --verified-at / --evidence-task / --kind\uFF08\u3068\u5404 --clear-*\uFF09\u306E\u3069\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
223
|
+
${WIKI_UPDATE_USAGE}`)}return content===void 0?input:withResolved(input,{content})},preview:previewWikiUpdate,plan(input){const id=singleId(input,"twp wiki update","\u30DA\u30FC\u30B8","twp wiki list");const heading=wikiSectionHeading(input);if(heading!==void 0)return wikiPartialPlan(input,id,"PUT","section",{heading});const title=wikiTitle(input);const status=oneOf(input,"--status",WIKI_STATUSES);const tags=wikiTags(input);const content=input.resolved?.["content"];const contentFormat=oneOf(input,
|
|
224
|
+
"--content-format",WIKI_CONTENT_FORMATS);const expectedVersion=positiveInteger(input.flags,"--if-version");return{method:"PUT",path:`${WIKI_PATH}/${encodeURIComponent(id)}`,body:{...title!==void 0?{title}:{},...content!==void 0?{content}:{},...contentFormat!==void 0?{content_format:contentFormat}:{},...status!==void 0?{status}:{},...tags!==void 0?{tags}:{},...expectedVersion!==void 0?{expected_version:expectedVersion}:{},...wikiFreshnessBody(input)}}},summarize:body=>isRecord(body)&&isRecord(body["\
|
|
225
|
+
data"])?pick(wikiPartialResult(body),WIKI_PARTIAL_COLUMNS):pick(pageFrom(body),WIKI_GET_COLUMNS),raw:body=>isRecord(body)&&isRecord(body["data"])?wikiPartialResult(body):pageFrom(body)};var wikiAppend={name:"append",summary:`${WIKI_LABEL}\u306E\u672C\u6587\u306E\u672B\u5C3E\u3078\u8FFD\u8A18\u3059\u308B\uFF08\u5168\u6587\u3092\u9001\u308A\u76F4\u3055\u306A\u3044\uFF09`,usage:WIKI_APPEND_USAGE,description:'--content-file \u306E\u5185\u5BB9\u3092\u30DA\u30FC\u30B8\u306E\u672C\u6587\u306E\u672B\u5C3E\u3078\u8DB3\u3057\u307E\u3059\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u5168\u6587\u3092\u53D6\u5F97\u30FB\u9001\u4FE1\u3057\u306A\u3044\u306E\u3067\u30011\u884C\u8DB3\u3059\u3060\u3051\u306A\u3089 update \u3088\u308A\u8EFD\u304F\u6E08\u307F\u307E\u3059\u3002\nMarkdown\
|
|
226
|
+
\u306E\u30DA\u30FC\u30B8\u306F\u7A7A\u884C\u30921\u3064\u631F\u3093\u3067\u8DB3\u3057\u3001HTML \u306E\u30DA\u30FC\u30B8\u306F\u305D\u306E\u307E\u307E\u5F8C\u308D\u3078\u3064\u306A\u3052\u307E\u3059\u3002\u672C\u6587\u306E\u5F62\u5F0F\u306F\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\u306E\u307E\u307E\u3067\u3001\u5909\u63DB\u3057\u307E\u305B\u3093\u3002\n--content-file \u306E\u62E1\u5F35\u5B50\u304B\u3089\u5F62\u5F0F\u304C\u6C7A\u307E\u308B\u3068\u304D\u306F\u3001\u9001\u308B\u524D\u306B\u30DA\u30FC\u30B8\u3092\u53D6\u5F97\u3057\u3066\u5F62\u5F0F\u3092\u7167\u5408\u3057\u3001\u9055\u3048\u3070\u4F55\u3082\u9001\u3089\u305A\u306B\u6B62\u307E\u308A\u307E\u3059\u3002\n--if-version <\u7248> \u3092\u4ED8\u3051\u308B\u3068\u3001\u30DA\u30FC\u30B8\u306E\u7248\u304C\u4E00\u81F4\u3059\u308B\u3068\u304D\u3060\u3051\u8FFD\u8A18\u3057\u307E\u3059\uFF08\u9055\u3048\u3070\u4F55\u3082\u5909\u3048\u305A\u306B\u7D42\u4E86\u30B3\u30FC\u30C9 3\uFF09\u3002\u4ED8\u3051\u306A\u304F\u3066\u3082\u3001\u30B5\u30FC\u30D0\u306F\u8AAD\u3093\u3060\u7248\u3092\u6761\u4EF6\u306B\u66F8\u304F\u306E\u3067\u3001\u540C\u6642\u306B\u5165\u3063\u305F\u4ED6\u306E\u66F4\u65B0\u3092\u6D88\u3057\u307E\u305B\u3093\u3002\n\u7248\u306F\u672C\u6587\u304C\u5909\u308F\u308B\u306E\u30671\u3064\u4E0A\u304C\u308A\u3001\u7248\u306E\u5C65\u6B74\u30FB\u6D3B\u52D5\u5C65\u6B74\u306B\u3082\u5168\u6587\u66F4\u65B0\u3068\u540C\u3058\u3088\u3046\u306B\u6B8B\u308A\u307E\u3059\u3002\u7D50\u679C\u306B\u306F\u66F4\u65B0\u5F8C\u306E\u7248\u3092\u51FA\u3057\u307E\u3059\uFF08\u672C\u6587\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09\u3002\n\u7DE8\u96C6\u3067\u304D\u308B\u306E\u306F\u3001\u30DA\u30FC\u30B8\u306E\u4F5C\u6210\u8005\u30FBwiki \u306E\u7BA1\u7406\u8005\u30FB\u7D44\u7E54\u306E\u7BA1\u7406\u8005\u3067\u3059\u3002\n\n\u4F8B:\n twp wiki append 0f8b2c6e-... --content-file note.md\n echo "- 2026-10-08 \u8FFD\u8A18" | twp wiki append 0f8b2c6e-... --content-file - --if-version 3',
|
|
227
|
+
flags:[CONTENT_FILE_FLAG,{name:"--if-version",summary:"\u4E00\u81F4\u3059\u308B\u3068\u304D\u3060\u3051\u8FFD\u8A18\u3059\u308B\u7248\uFF08\u9055\u3048\u3070\u4F55\u3082\u5909\u3048\u306A\u3044\uFF09",takesValue:true,placeholder:"<\u7248>"}],async prepare(input){singleId(input,"twp wiki append","\u30DA\u30FC\u30B8","twp wiki list");return prepareWikiPartial(input,WIKI_APPEND_USAGE)},preview:(input,ctx)=>previewWikiWrite(input,ctx,"twp wiki append"),plan(input){return wikiPartialPlan(input,singleId(
|
|
228
|
+
input,"twp wiki append","\u30DA\u30FC\u30B8","twp wiki list"),"POST","append",{})},summarize:body=>pick(wikiPartialResult(body),WIKI_PARTIAL_COLUMNS),raw:wikiPartialResult};var wikiMove={name:"move",summary:`${WIKI_LABEL}\u306E\u89AA\u30DA\u30FC\u30B8\u3092\u4ED8\u3051\u66FF\u3048\u308B\uFF08root \u3067\u6700\u4E0A\u4F4D\u3078\uFF09`,usage:WIKI_MOVE_USAGE,description:`--parent ${ROOT_PARENT} \u3067\u6700\u4E0A\u4F4D\u3078\u79FB\u3057\u307E\u3059\u3002\u81EA\u5206\u81EA\u8EAB\u3084\u81EA\u5206\u306E\u5B50\u5B6B\u306E\u4E0B\u3078\u306F\u79FB\u305B\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u304C 422 \u3067\u65AD\u308A\u307E\u3059\uFF09\u3002
|
|
211
229
|
--sort-order \u306F\u5144\u5F1F\u306E\u4E2D\u3067\u306E\u8868\u793A\u9806\uFF080 \u4EE5\u4E0A\u306E\u6574\u6570\uFF09\u3067\u3059\u3002--sort-order \u3060\u3051\u306A\u3089\u89AA\u306F\u305D\u306E\u307E\u307E\u3067\u4E26\u3079\u66FF\u3048\u307E\u3059\u3002`,flags:[{name:"--parent",summary:`\u79FB\u52D5\u5148\u306E\u89AA\u30DA\u30FC\u30B8\u306E ID\uFF08${ROOT_PARENT} \u3067\u6700\u4E0A\u4F4D\uFF09`,takesValue:true,placeholder:"<\u30DA\u30FC\u30B8ID>|root"},{name:"--sort-order",summary:"\u8868\u793A\u9806\uFF080 \u4EE5\u4E0A\u306E\u6574\
|
|
212
230
|
\u6570\uFF09",takesValue:true,placeholder:"<\u9806>"}],plan(input){const id=singleId(input,"twp wiki move","\u30DA\u30FC\u30B8","twp wiki list");const parent=wikiParent(input,true);const sortRaw=nonEmpty(input.flags,"--sort-order");let sortOrder;if(sortRaw!==void 0){sortOrder=/^\d+$/.test(sortRaw.trim())?Number(sortRaw.trim()):Number.NaN;if(!Number.isSafeInteger(sortOrder))throw new UsageError(`--sort-order \u306F 0 \u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${sortRaw}`,
|
|
213
231
|
WIKI_MOVE_USAGE)}if(parent===void 0&&sortOrder===void 0){throw new UsageError(`--parent \u304B --sort-order \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6700\u4E0A\u4F4D\u3078\u79FB\u3059\u306A\u3089 --parent ${ROOT_PARENT}\uFF09`,WIKI_MOVE_USAGE)}return{method:"PUT",path:`${WIKI_PATH}/${encodeURIComponent(id)}/move`,body:{...parent!==void 0?{parent_page_id:parent}:{},...sortOrder!==void 0?{sort_order:sortOrder}:{}}}},summarize:body=>pick(pageFrom(body),WIKI_GET_COLUMNS),raw:pageFrom};
|
|
@@ -259,5 +277,5 @@ ine"]],["\u72B6\u614B",status]])}`]}).join("\n")}function attendeeNames(value,ke
|
|
|
259
277
|
|
|
260
278
|
--output table / tsv \u306F\u8981\u7D04\u5217\uFF08${MEETING_GET_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002
|
|
261
279
|
\u95B2\u89A7\u3067\u304D\u306A\u3044\u8B70\u4E8B\u9332\u306F\u300C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u300D\u306B\u306A\u308A\u307E\u3059\uFF08\u516C\u958B\u7BC4\u56F2\u306E\u5224\u5B9A\u306F\u30B5\u30FC\u30D0\uFF09\u3002`,flags:[],plan:input=>({method:"GET",path:`${MEETINGS_PATH}/${encodeURIComponent(singleId(input,"twp meeting get","\u8B70\u4E8B\u9332","twp meeting list"))}`}),summarize:body=>pick(record(body,"meeting",MEETING_LABEL),MEETING_GET_COLUMNS),raw:body=>record(body,"meeting",
|
|
262
|
-
MEETING_LABEL),document:meetingDocument};var wikiDomain={name:"wiki",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E wiki\uFF08\u4E00\u89A7\u30FB\u672C\u6587\u30FB\u69CB\u9020\u30FB\u30BF\u30B0\u30FB\u7248\u306E\u5C65\u6B74\u3068\u5DEE\u5206\u30FB\u88AB\u30EA\u30F3\u30AF\u30FB\u95A2\u9023\u30BF\u30B9\u30AF\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u79FB\u52D5\u30FB\u524A\u9664\uFF09",operations:[wikiList,wikiGet,wikiTree,wikiTagList,wikiDigest,wikiVersions,wikiVersion,wikiDiff,
|
|
263
|
-
wikiLinkedTasks,wikiCreate,wikiUpdate,wikiMove,wikiDelete]};var noteDomain={name:"note",summary:"\u30CE\u30FC\u30C8\uFF08\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\uFF09",operations:[noteList,noteGet]};var meetingDomain={name:"meeting",summary:"\u8B70\u4E8B\u9332\uFF08\u671F\u9593\u3067\u306E\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\uFF09",operations:[meetingList,meetingGet]};export{digestSummary,fitDigest,meetingDomain,noteDomain,resolveWikiPath,wikiDomain};
|
|
280
|
+
MEETING_LABEL),document:meetingDocument};var wikiDomain={name:"wiki",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E wiki\uFF08\u4E00\u89A7\u30FB\u672C\u6587\u30FB\u69CB\u9020\u30FB\u30BF\u30B0\u30FB\u7248\u306E\u5C65\u6B74\u3068\u5DEE\u5206\u30FB\u88AB\u30EA\u30F3\u30AF\u30FB\u95A2\u9023\u30BF\u30B9\u30AF\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u8FFD\u8A18\u30FB\u79FB\u52D5\u30FB\u524A\u9664\uFF09",operations:[wikiList,wikiGet,wikiTree,wikiTagList,wikiDigest,wikiVersions,wikiVersion,wikiDiff,
|
|
281
|
+
wikiBacklinks,wikiLinkedTasks,wikiCreate,wikiUpdate,wikiAppend,wikiMove,wikiDelete]};var noteDomain={name:"note",summary:"\u30CE\u30FC\u30C8\uFF08\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\uFF09",operations:[noteList,noteGet]};var meetingDomain={name:"meeting",summary:"\u8B70\u4E8B\u9332\uFF08\u671F\u9593\u3067\u306E\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\uFF09",operations:[meetingList,meetingGet]};export{digestSummary,fitDigest,meetingDomain,noteDomain,resolveWikiPath,wikiDomain};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{checkOutTarget}from"./chunk-
|
|
3
|
+
import{checkOutTarget}from"./chunk-5VZSHYKX.js";import"./chunk-YIH36ZDI.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import"./chunk-PO35MCYP.js";import{contentTypeFor,inspectLocalFile}from"./chunk-5KJ5OIKI.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import"./chunk-LDBYJPRD.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,
|
|
4
4
|
nonEmpty,positiveInteger,readEnvelopeCursor,shellQuote}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-7APLKLQL.js";import{collapsesInUrlPath,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{
|
|
5
5
|
acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import"./chunk-PECIBNFD.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-W4E4F2ZA.js";import"./chunk-QQRJLH6B.js";import"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";
|
|
6
6
|
import"./chunk-VSJBJXZO.js";import crypto2 from"crypto";import fs2 from"fs";import path from"path";var SCOPE_PERSONAL="personal";var SCOPE_PROJECT="project";var UUID=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var FORBIDDEN_NAME=/[/\\:*?"<>|]/;var NAME_MAX=255;var ROW_COLUMNS=["id","path","name","file_count","subfolder_count","parent_id","updated_at"];var TRASH_COLUMNS=["id","path","name","file_count","subfolder_count","parent_id","deleted_at"];function folderRows(raw){return raw.map(row=>{const id=row["id"];const name=row["name"];const parentId=row["parent_id"];if(typeof id!==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-
|
|
3
|
+
import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-4VAWX7TW.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-N2UVRM3Z.js";import"./chunk-LDBYJPRD.js";import"./chunk-7APLKLQL.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";
|
|
4
4
|
import{RelayError,createRuntime,pickModel}from"./chunk-5WTFZJT7.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,enforceMinSupportedVersion,floorNeedsRefresh}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import{getMode}from"./chunk-2LOT54OO.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";async function runOneShot(opts,deps={}){const out=deps.out??(text=>void process.stdout.write(stripTerminalControls(text)));const err=deps.err??(text=>void process.stderr.write(stripTerminalControls(text)));activateModeFiles(err);const permissionLayers=activatePermissionSettings(err,{...opts.allowedTools?{allowedTools:opts.allowedTools}:{},...opts.disallowedTools?{disallowedTools:opts.disallowedTools}:{}});const prompt=opts.fromStdin?await(deps.readStdin??readStdin)():opts.prompt;if(prompt.trim()===
|
|
5
5
|
""){err('\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u7A7A\u3067\u3059\u3002`twp -p "\u8CEA\u554F"`\uFF08`-p -` \u3067\u6A19\u6E96\u5165\u529B\uFF09\n');return 2}const runtime=deps.runtime??createRuntime({...opts.profile!==void 0?{profile:opts.profile}:{},...opts.model!==void 0?{model:opts.model}:{},cliVersion:opts.version});const cachedFloor=runtime.loadCachedFloor();if(await checkMinSupportedVersion({current:opts.version,cachedFloor:cachedFloor.minSupportedVersion,refresh:async()=>(await runtime.loadCatalog()).
|
|
6
6
|
minSupportedVersion,write:err})){return 1}if(!runtime.loggedIn){err("\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002`twp login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n");return 1}let model=runtime.configuredModel??"";let catalog=null;if(model===""){catalog=await runtime.loadCatalog();const picked=pickModel(catalog,void 0);model=picked.model;if(catalog.source!=="server"){err(`\u26A0 \u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081 ${model}\
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{NO_PLAN_SESSION,PLAN_DIR_ENV,PLAN_TOKEN_ENV,checkPlan,fileSkillNames,formatCheck,openPlanSession,runPlanSubmit}from"./chunk-F6LEGFID.js";import"./chunk-OG7FD7SR.js";import"./chunk-JUJSF5ZG.js";import"./chunk-GAXJPIKO.js";import"./chunk-VYDPW2YO.js";import"./chunk-FABDZBDZ.js";import"./chunk-XMPHGOW4.js";import"./chunk-TTST7UDR.js";import"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-5KAWCLYN.js";import"./chunk-LDBYJPRD.js";
|
|
4
|
+
import"./chunk-GY7KI5E5.js";import"./chunk-II5RVJQN.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";export{NO_PLAN_SESSION,PLAN_DIR_ENV,PLAN_TOKEN_ENV,checkPlan,fileSkillNames,formatCheck,openPlanSession,runPlanSubmit};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{loadDomain}from"./chunk-
|
|
3
|
+
import{loadDomain}from"./chunk-YIH36ZDI.js";import"./chunk-VSJBJXZO.js";export{loadDomain};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-
|
|
3
|
+
import{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-5VZSHYKX.js";import"./chunk-YIH36ZDI.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import"./chunk-PO35MCYP.js";import"./chunk-LDBYJPRD.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-7APLKLQL.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";
|
|
4
4
|
import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-PECIBNFD.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-W4E4F2ZA.js";import"./chunk-QQRJLH6B.js";import"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain};
|
package/package.json
CHANGED
package/dist/chunk-DXUFECE7.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
-
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
var FINAL_REPORT_BEGIN="<<<AI_FINAL_REPORT>>>";var FINAL_REPORT_END="<<<END_AI_FINAL_REPORT>>>";var ClaudeStreamRenderer=class{constructor(now=()=>new Date){this.now=now}now;toolNames=new Map;toolCount=0;result={subtype:null,isError:null,numTurns:null,costUsd:null,durationMs:null,tokensIn:null,tokensOut:null,rateLimited:false,resetsAt:null,finalText:""};push(line){const trimmed=line.trim();if(trimmed==="")return[];let event;try{const parsed=JSON.parse(trimmed);if(parsed===null||typeof parsed!=="\
|
|
4
|
-
object"||Array.isArray(parsed)){return[line]}event=parsed}catch{return[line]}switch(event["type"]){case"rate_limit_event":return this.onRateLimit(event);case"assistant":return this.onAssistant(event);case"user":return this.onUser(event);case"result":return this.onResult(event);default:return event["type"]==="system"?[]:[line]}}sawRateLimit(){return this.result.rateLimited}lastRateLimitNote="";onRateLimit(event){const info=event["rate_limit_info"];if(info===null||typeof info!=="object")return[];const rec=info;
|
|
5
|
-
const status=typeof rec["status"]==="string"?rec["status"]:"";const resets=typeof rec["resetsAt"]==="number"?rec["resetsAt"]:null;if(status==="")return[];const at=isSaneEpochSec(resets)?` resets=${new Date(resets*1e3).toISOString()}`:"";if(status.startsWith("allowed")){if(status==="allowed")return[];const seen=`${status}|${resets??""}`;if(seen===this.lastRateLimitNote)return[];this.lastRateLimitNote=seen;return[this.line(`\u2139\uFE0F \u4E0A\u9650\u306B\u63A5\u8FD1\uFF08status=${status}${at}\uFF09\u2014 \u5B9F\
|
|
6
|
-
\u884C\u306F\u7D99\u7D9A\u3057\u307E\u3059`)]}if(resets!==null)this.result.resetsAt=resets;this.result.rateLimited=true;return[this.line(`\u26A0\uFE0F \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u901A\u77E5: status=${status}${at}`)]}onAssistant(event){const out=[];for(const block of contentBlocks(event)){if(block.type==="tool_use"){const name=typeof block.name==="string"?block.name:"tool";if(typeof block.id==="string")this.toolNames.set(block.id,name);this.toolCount+=1;out.push(this.line(`>> ${name}${toolDetail(
|
|
7
|
-
name,block.input)}`))}else if(block.type==="text"&&typeof block.text==="string"&&block.text.trim()!==""){for(const l of block.text.trim().split("\n"))out.push(this.line(` \u{1F4AC} ${l}`))}}return out}onUser(event){const out=[];for(const block of contentBlocks(event)){if(block.type!=="tool_result")continue;const id=typeof block.id==="string"?block.id:"";const useId=typeof block.tool_use_id==="string"?block.tool_use_id:id;const name=this.toolNames.get(useId)??"tool";this.toolNames.delete(useId);
|
|
8
|
-
const isError=block.is_error===true;const detail=isError?firstErrorLine(block):"";out.push(this.line(`${isError?"!!":"<<"} ${name}${detail}`))}return out}onResult(event){const r=this.result;r.subtype=typeof event["subtype"]==="string"?event["subtype"]:null;r.isError=typeof event["is_error"]==="boolean"?event["is_error"]:null;r.numTurns=typeof event["num_turns"]==="number"?event["num_turns"]:null;r.costUsd=typeof event["total_cost_usd"]==="number"?event["total_cost_usd"]:null;r.durationMs=typeof event["\
|
|
9
|
-
duration_ms"]==="number"?event["duration_ms"]:null;const usage=event["usage"];if(usage!==null&&typeof usage==="object"&&!Array.isArray(usage)){const u=usage;const num=key=>typeof u[key]==="number"?u[key]:0;const hasIn=["input_tokens","cache_creation_input_tokens","cache_read_input_tokens"].some(k=>typeof u[k]==="number");r.tokensIn=hasIn?num("input_tokens")+num("cache_creation_input_tokens")+num("cache_read_input_tokens"):null;r.tokensOut=typeof u["output_tokens"]==="number"?u["output_tokens"]:null}
|
|
10
|
-
const out=[this.line(`\u5B8C\u4E86 (turns: ${r.numTurns??0}, tools: ${this.toolCount}, ${Math.round((r.durationMs??0)/1e3)}s, $${(r.costUsd??0).toFixed(3)})`)];const text=typeof event["result"]==="string"?event["result"]:"";r.finalText=text;if(text!==""){out.push(FINAL_REPORT_BEGIN,text,FINAL_REPORT_END)}return out}line(msg){const d=this.now();const ts=`${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;return` [${ts}] ${msg}`}};function firstErrorLine(block){const content=block.
|
|
11
|
-
content;const text=typeof content==="string"?content:Array.isArray(content)?content.map(c=>c!==null&&typeof c==="object"&&typeof c.text==="string"?c.text:"").join(" "):"";const first=text.trim().split("\n")[0]??"";return first===""?"":` | ${first.slice(0,120)}`}function contentBlocks(event){const message=event["message"];if(message===null||typeof message!=="object")return[];const content=message["content"];if(!Array.isArray(content))return[];return content.filter(b=>b!==null&&typeof b==="object")}
|
|
12
|
-
function toolDetail(name,input){if(input===void 0||input===null)return"";const str=k=>typeof input[k]==="string"?input[k]:"";if(name==="Bash"){const cmd=str("command");return cmd===""?"":` $ ${cmd.slice(0,80)}${cmd.length>80?"...":""}`}if(name==="Read"||name==="Write"||name==="Edit"){const p=str("file_path");return p===""?"":` ${p}`}if(name==="Grep"||name==="Glob"){const p=str("pattern");return p===""?"":` '${p}'`}if(name==="Skill"){const s=str("skill");return s===""?"":` /${s}`}if(name.includes(
|
|
13
|
-
"mcp__")){const args=[];for(const k of["task_id","project_id","status_id","issue_id"]){const v=str(k);if(v!=="")args.push(`${k}=${v.slice(0,16)}`)}return args.length===0?"":` (${args.slice(0,2).join(", ")})`}return""}function pad(n){return String(n).padStart(2,"0")}function isSaneEpochSec(v){return v!==null&&Number.isFinite(v)&&Math.abs(v)<864e10}export{FINAL_REPORT_BEGIN,FINAL_REPORT_END,ClaudeStreamRenderer};
|
package/dist/chunk-QS5VWTI3.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
-
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{FINAL_REPORT_BEGIN,FINAL_REPORT_END}from"./chunk-DXUFECE7.js";import{skillCommand,skillPrefix}from"./chunk-6CS5L24D.js";import{normalizeRequiredPlatforms}from"./chunk-5KAWCLYN.js";import{extractLeadingTaskKey}from"./chunk-II5RVJQN.js";var LEDGER_TASK_KEY_MAX=50;var CONTROL_CHAR_RE=/[\u0000-\u001f\u007f]/;var FLAG_TOKEN_RE=/(?:^|\s)-/;function loosen(source){let t=source.replace(/^[ \t]*\/\/[^\n]*$/gm,"");t=t.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/,(\s*[}\]])/g,"$1");return t===source?null:t}function tryParsePlan(source){for(const candidate of[source,loosen(source)]){if(candidate===null)continue;try{const obj=JSON.parse(candidate);if(obj!==null&&typeof obj==="object"&&Array.isArray(obj.steps)){return obj}}catch{}}return null}
|
|
4
|
-
function fencedBlocks(text,tag){const re=new RegExp("```"+tag+"\\s*\\n([\\s\\S]*?)\\n```","g");const out=[];for(const m of text.matchAll(re)){if(m[1]!==void 0)out.push(m[1])}return out}function extractGeminiEnvelope(text){const anchor=/\{[^{}]*"session_id"[^{}]*"response"\s*:\s*"/g;for(const m of text.matchAll(anchor)){const start=m.index;if(start===void 0)continue;let depth=0;let inStr=false;let escape=false;for(let i=start;i<text.length;i++){const c=text[i];if(escape){escape=false;continue}if(c===
|
|
5
|
-
"\\"){escape=true;continue}if(c==='"'){inStr=!inStr;continue}if(inStr)continue;if(c==="{")depth++;else if(c==="}"){depth--;if(depth===0){try{const obj=JSON.parse(text.slice(start,i+1));if(obj!==null&&typeof obj==="object"&&typeof obj.response==="string"){return obj.response}}catch{}break}}}}return null}function matchingBrace(text,start){let depth=0;let inStr=false;let escape=false;for(let i=start;i<text.length;i++){const c=text[i];if(escape){escape=false;continue}if(inStr){if(c==="\\")escape=true;else if(c===
|
|
6
|
-
'"')inStr=false;continue}if(c==='"')inStr=true;else if(c==="{")depth++;else if(c==="}"){depth--;if(depth===0)return i}}return-1}var MAX_STEPS_ANCHORS=20;var MAX_OPEN_CANDIDATES=8;function lastStepsObject(text){const anchors=[...text.matchAll(/"steps"\s*:/g)].map(m=>m.index).filter(i=>i!==void 0);for(const at of anchors.reverse().slice(0,MAX_STEPS_ANCHORS)){let tried=0;for(let open=text.lastIndexOf("{",at);open>=0&&tried<MAX_OPEN_CANDIDATES;open=text.lastIndexOf("{",open-1)){tried++;const close=matchingBrace(
|
|
7
|
-
text,open);if(close>at){const plan=tryParsePlan(text.slice(open,close+1));if(plan)return plan}if(open===0)break}}return null}function finalReports(text){const re=new RegExp(`${FINAL_REPORT_BEGIN}\\n?([\\s\\S]*?)${FINAL_REPORT_END}`,"g");const out=[];for(const m of text.matchAll(re)){if(m[1]!==void 0)out.push(m[1])}return out.reverse()}function extractFrom(text){for(const tag of["json:execution-plan","json"]){for(const block of fencedBlocks(text,tag).reverse()){const plan=tryParsePlan(block);if(plan)
|
|
8
|
-
return plan}}const resp=extractGeminiEnvelope(text);if(resp!==null){for(const block of[...fencedBlocks(resp,"json:execution-plan"),...fencedBlocks(resp,"json")].reverse()){const plan2=tryParsePlan(block);if(plan2)return plan2}const plan=tryParsePlan(resp);if(plan)return plan}const whole=tryParsePlan(text.trim());if(whole)return whole;return lastStepsObject(text)}function extractPlanJson(rawText){const text=rawText.replace(/^\s*\[\d{2}:\d{2}:\d{2}\][ \t]*(?:💬 ?)?/gmu,"");for(const report of finalReports(
|
|
9
|
-
text)){const plan=extractFrom(report);if(plan)return plan}return extractFrom(text)}function ledgerTaskKey(args){const key=extractLeadingTaskKey(args);if(key.length>LEDGER_TASK_KEY_MAX)return"";if(CONTROL_CHAR_RE.test(key))return"";if(FLAG_TOKEN_RE.test(key))return"";return key}function placeholderTaskKey(args){for(const token of args.split(/\s+/)){if(token==="")continue;if(token.startsWith("-"))continue;const m=/^[A-Z]{2,}[A-Z0-9]*-([A-Za-z0-9_<>{}]*)$/.exec(token);if(!m)return null;if(/^\d+$/.test(
|
|
10
|
-
m[1]??""))return null;return token}return null}function stepToItem(step,assign,prefix=skillPrefix()){const skill=typeof step.skill==="string"?step.skill.trim():"";if(!skill)return null;const args=(step.args??"").trim();const priority=step.priority??"P2";const prompt=skillCommand(skill,args,prefix);let label=(step.label??"").trim();const own=skillCommand(skill,"",prefix);const promptLike=prefix===""?label===own||label.startsWith(`${own} `):label.startsWith(`/${prefix}`);if(!label||promptLike||label.
|
|
11
|
-
startsWith("[P"))label=prompt;const taskKey=ledgerTaskKey(args);const category=assign?.categoryForSkill(skill)??step.ai_category??"complex";const display=taskKey&&!label.includes(taskKey)?`[${priority}] ${taskKey} ${label} #ai:${category}`:`[${priority}] ${label} #ai:${category}`;const item={label:display.slice(0,200),prompt,task_key:taskKey};const platforms=normalizeRequiredPlatforms(step.required_platforms);if(platforms.length>0)item.required_platforms=platforms;if(assign!==void 0){const ai=assign.
|
|
12
|
-
selectPrimary(category,skill,priority,display);if(ai!=="")item.ai_type=ai}return item}function parsePlanExcludeKeys(prefetchSection){const m=/OPS_PLAN_EXCLUDE_KEYS\s+([^\s]*)\s+-->/.exec(prefetchSection);const keys=new Set;if(!m||!m[1])return keys;for(const raw of m[1].split(",")){const key=raw.trim();if(key!=="")keys.add(key)}return keys}function excludedKeyInArgs(args,excluded){if(excluded.size===0)return null;for(const key of[...excluded].sort()){const re=new RegExp(`(?<![A-Za-z0-9-])${key.replace(
|
|
13
|
-
/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![0-9])`);if(re.test(args))return key}return null}function parseOpsCount(prefetchSection,field){const marker=/OPS_COUNTS\s+([^>]*?)-->/.exec(prefetchSection);if(!marker||!marker[1])return null;const escaped=field.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");const hit=new RegExp(`(?:^|\\s)${escaped}=(-?\\d+)(?:\\s|$)`).exec(marker[1]);if(!hit||hit[1]===void 0)return null;const n=Number.parseInt(hit[1],10);if(!Number.isFinite(n)||n<0)return null;return n}function releaseDeployDropReason(verifyBacklog,devVerifyPlanned){
|
|
14
|
-
if(verifyBacklog===null){return"\u52D5\u4F5C\u78BA\u8A8D\u306E\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\uFF08\u5224\u5B9A\u4E0D\u80FD\u306E\u305F\u3081\u30EA\u30EA\u30FC\u30B9\u306F\u898B\u9001\u308B\uFF09"}if(verifyBacklog>devVerifyPlanned){return`\u52D5\u4F5C\u78BA\u8A8D${verifyBacklog}\u4EF6 > \u8A08\u753B\u5185dev-verify${devVerifyPlanned}\u4EF6\uFF08Phase 1\u306E0\u4EF6\u898B\u8FBC\u307F\u304C\u7ACB\u305F\u306A\u3044\uFF09`}return null}function duplicateTaskKeyDropReason(enqueuedKeys,taskKey){
|
|
15
|
-
if(!taskKey)return null;if(!enqueuedKeys.has(taskKey))return null;return`${taskKey} \u306F\u672C\u8A08\u753B\u3067\u65E2\u306B\u6295\u5165\u6E08\u307F\uFF08\u540C\u4E00\u30AD\u30FC\u306F1\u8A08\u753B1\u4EF6\uFF09`}var NO_ZERO_TARGET_GATES={};function zeroTargetDropReasons(prefetchSection,gates=NO_ZERO_TARGET_GATES){const reasons=new Map;for(const[skill,gate]of Object.entries(gates)){const n=parseOpsCount(prefetchSection,gate.field);if(n===null)reasons.set(skill,`${gate.label}\u4EF6\u6570\u304C\u5224\u5B9A\u4E0D\u80FD\u306E\u305F\u3081\u898B\u9001\u308A`);else if(n===
|
|
16
|
-
0)reasons.set(skill,`${gate.label}0\u4EF6\u306E\u305F\u3081\u5BFE\u8C61\u306A\u3057`)}return reasons}export{extractPlanJson,placeholderTaskKey,stepToItem,parsePlanExcludeKeys,excludedKeyInArgs,parseOpsCount,releaseDeployDropReason,duplicateTaskKeyDropReason,zeroTargetDropReasons};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
-
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{NO_PLAN_SESSION,PLAN_DIR_ENV,PLAN_TOKEN_ENV,checkPlan,fileSkillNames,formatCheck,openPlanSession,runPlanSubmit}from"./chunk-HOLKWMS2.js";import"./chunk-QS5VWTI3.js";import"./chunk-DXUFECE7.js";import"./chunk-GAXJPIKO.js";import"./chunk-VYDPW2YO.js";import"./chunk-FABDZBDZ.js";import"./chunk-XMPHGOW4.js";import"./chunk-TTST7UDR.js";import"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-5KAWCLYN.js";import"./chunk-GY7KI5E5.js";
|
|
4
|
-
import"./chunk-II5RVJQN.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";export{NO_PLAN_SESSION,PLAN_DIR_ENV,PLAN_TOKEN_ENV,checkPlan,fileSkillNames,formatCheck,openPlanSession,runPlanSubmit};
|