@tocca-systems/twp-cli 0.63.0 → 0.65.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.
Files changed (98) hide show
  1. package/CHANGELOG.public.md +16 -0
  2. package/README.md +90 -4
  3. package/dist/{agent-TLKSUAYA.js → agent-HM4FHCJT.js} +1 -1
  4. package/dist/{agent-loop-6FS7FFXY.js → agent-loop-VC47FGPR.js} +2 -2
  5. package/dist/{ai-dispatch-HRXPRWCT.js → ai-dispatch-GN5ZQPHC.js} +2 -2
  6. package/dist/analysis-NEZXCJGT.js +5 -0
  7. package/dist/{announcement-LNG32J6X.js → announcement-BEPIDOMO.js} +1 -1
  8. package/dist/{api-command-SFJFE2PE.js → api-command-HP3ABNDG.js} +4 -4
  9. package/dist/{app-N2ZLD6HG.js → app-C4TUNEAO.js} +4 -4
  10. package/dist/{attendance-correct-3C2BHJQG.js → attendance-correct-ZEWRXHUU.js} +2 -2
  11. package/dist/{attendance-lists-VMOIE3XO.js → attendance-lists-BXAHFZYY.js} +2 -2
  12. package/dist/{backlog-D5LZIEN4.js → backlog-UD226SVD.js} +38 -28
  13. package/dist/{budget-RENLLCYQ.js → budget-6HOZNG3E.js} +2 -2
  14. package/dist/capacity-report-command-A6RYG2NV.js +15 -0
  15. package/dist/{chunk-UVCIVMT6.js → chunk-2G6ZZPME.js} +2 -2
  16. package/dist/{chunk-T5CRU4DB.js → chunk-5AQ2JPIS.js} +1 -1
  17. package/dist/{chunk-52V2AZ7D.js → chunk-AYE4DF6J.js} +1 -1
  18. package/dist/{chunk-EWRZ4GSN.js → chunk-BTN4M7Y5.js} +2 -2
  19. package/dist/{chunk-S5DEP2HA.js → chunk-BXTAAF5F.js} +1 -1
  20. package/dist/{chunk-2B7A3OY7.js → chunk-CGHGQAEM.js} +14 -52
  21. package/dist/{chunk-7LFYDASU.js → chunk-ENVASCZU.js} +2 -2
  22. package/dist/{chunk-PIB6MGG5.js → chunk-FAHDBWW2.js} +1 -1
  23. package/dist/{chunk-4PROMNXI.js → chunk-FBBKRVVS.js} +1 -1
  24. package/dist/{chunk-LMYOCAEY.js → chunk-FTAKYID7.js} +1 -1
  25. package/dist/{chunk-WBSAJ3P2.js → chunk-G26GIBRL.js} +1 -1
  26. package/dist/chunk-G4TZFGNN.js +41 -0
  27. package/dist/{chunk-EO3M43TN.js → chunk-G6RLNOIZ.js} +1 -1
  28. package/dist/{chunk-NXWXTUU6.js → chunk-RSATLT5H.js} +1 -1
  29. package/dist/{chunk-CSXCHRYE.js → chunk-SCU74Z4U.js} +16 -13
  30. package/dist/chunk-SPZ3GBYC.js +16 -0
  31. package/dist/{chunk-QEWCTKPV.js → chunk-UODNIEO2.js} +1 -1
  32. package/dist/chunk-UUP4X3WH.js +97 -0
  33. package/dist/{chunk-4ZREAAP4.js → chunk-WG6NCT4L.js} +18 -17
  34. package/dist/{chunk-T4YEQWJO.js → chunk-WHCMWXLC.js} +2 -2
  35. package/dist/{chunk-BZJJAJGN.js → chunk-XNOZJ6T2.js} +1 -1
  36. package/dist/{chunk-SLD6FCXA.js → chunk-Y2J4M2MG.js} +1 -1
  37. package/dist/chunk-YASL34FY.js +11 -0
  38. package/dist/chunk-YYURQG4E.js +4 -0
  39. package/dist/{chunk-HEQCEFAW.js → chunk-Z2I5BGXV.js} +1 -1
  40. package/dist/{chunk-E3KMIBSP.js → chunk-ZJW3GBE5.js} +57 -18
  41. package/dist/{chunk-MYWDL3WX.js → chunk-ZSPWHEBL.js} +44 -37
  42. package/dist/cli.js +82 -10
  43. package/dist/{commands-6QNMVCU3.js → commands-2FOGOL65.js} +97 -149
  44. package/dist/{commands-WIQVCMQE.js → commands-EK3EYLQH.js} +1 -1
  45. package/dist/{company-F3IGQMOJ.js → company-MUGKJNY3.js} +2 -2
  46. package/dist/{completion-MUSSUG6N.js → completion-DGPGHQNL.js} +4 -3
  47. package/dist/{contract-OWR27GIO.js → contract-DJJQBAWX.js} +2 -2
  48. package/dist/{department-3QDHMZ5P.js → department-RMZ72N6B.js} +1 -1
  49. package/dist/{deposit-IPYESXIQ.js → deposit-45Y3POXT.js} +1 -1
  50. package/dist/{estimate-4P67OZWB.js → estimate-HTAF6FZT.js} +3 -3
  51. package/dist/{evaluation-ZA23GR7P.js → evaluation-J634U7JQ.js} +1 -1
  52. package/dist/{expense-GEOAM7B3.js → expense-EVNQ653C.js} +1 -1
  53. package/dist/fiscal-year-MVOGDAIP.js +17 -0
  54. package/dist/{inquiry-3SCMJOEM.js → inquiry-XO5R47OO.js} +1 -1
  55. package/dist/{invoice-ONTG53HY.js → invoice-WE2SOMYN.js} +3 -3
  56. package/dist/{job-title-OQQH5W6C.js → job-title-3CGRQILF.js} +1 -1
  57. package/dist/{knowledge-IX7AZIBJ.js → knowledge-X3FGXIBL.js} +1 -1
  58. package/dist/{leave-7HMMZPCR.js → leave-IFYBLQBF.js} +3 -3
  59. package/dist/{logout-guard-GQBF3GQH.js → logout-guard-S2PVXK4V.js} +1 -1
  60. package/dist/{media-4RUOR6LY.js → media-X32Y2MOY.js} +3 -3
  61. package/dist/{notification-ZT23M4R6.js → notification-MHYSQKYZ.js} +1 -1
  62. package/dist/{oneshot-4NIS4J4S.js → oneshot-VL45DNR7.js} +1 -1
  63. package/dist/{outlook-AAS5DXYQ.js → outlook-YG7GFF44.js} +1 -1
  64. package/dist/{plan-submit-AWMD7XOY.js → plan-submit-CUVVYDTN.js} +2 -1
  65. package/dist/{position-HWBHYAD2.js → position-6UC7X2BJ.js} +1 -1
  66. package/dist/{project-3ROID2HA.js → project-LG47ZCEZ.js} +1 -1
  67. package/dist/{prospect-7B5UWFLH.js → prospect-FEU3WQYN.js} +2 -2
  68. package/dist/{purchase-QVINV4TM.js → purchase-44B2NOOB.js} +3 -3
  69. package/dist/{receivable-66MYAIVR.js → receivable-NQNZ2B6B.js} +1 -1
  70. package/dist/redmine-T3JDIH37.js +35 -0
  71. package/dist/{registry-4V3YNENU.js → registry-LBL4AOZW.js} +1 -1
  72. package/dist/{report-XFTM4GCX.js → report-GJK2YXVO.js} +1 -1
  73. package/dist/{run-J7ACNZ3D.js → run-RLV6W5JA.js} +2 -2
  74. package/dist/{sales-ai-review-IVRISSWX.js → sales-ai-review-PUJCOMP6.js} +1 -1
  75. package/dist/{sales-master-BGVF2AZL.js → sales-master-GRR4WKLO.js} +3 -3
  76. package/dist/{sales-numbering-4423JWN6.js → sales-numbering-IUYAABSM.js} +1 -1
  77. package/dist/{schedule-command-R5KTFAVZ.js → schedule-command-ZX5WNSAC.js} +1 -1
  78. package/dist/{search-TMROBRYD.js → search-N5UE5CUL.js} +1 -1
  79. package/dist/segment-FQHY6DVH.js +6 -0
  80. package/dist/server-settings-77MPN3UN.js +3 -0
  81. package/dist/{server-skills-IFTDV3IQ.js → server-skills-KX236POI.js} +1 -1
  82. package/dist/{setup-MUPUY2AX.js → setup-PF2VH2TW.js} +1 -1
  83. package/dist/{skill-S7EPMW5Z.js → skill-PWCJCIQO.js} +1 -1
  84. package/dist/{supplier-payment-O7GZSKGD.js → supplier-payment-HTENSEXJ.js} +2 -2
  85. package/dist/{support-U3VY5JI5.js → support-DOWAY63P.js} +1 -1
  86. package/dist/{task-EQBPQ7H4.js → task-OMYFPWQZ.js} +3 -3
  87. package/dist/{teams-GPJ6HMIX.js → teams-AUFHZRDH.js} +1 -1
  88. package/dist/{user-XYUB54QT.js → user-C7UKUPGT.js} +2 -2
  89. package/dist/user-contract-type-DO576EHJ.js +32 -0
  90. package/dist/{worker-agent-VPRWBAWG.js → worker-agent-OBYRYPLC.js} +1 -1
  91. package/dist/{workflow-GMP6W5EF.js → workflow-C2BEVHQ2.js} +1 -1
  92. package/package.json +1 -1
  93. package/dist/analysis-XO3WRAJR.js +0 -4
  94. package/dist/chunk-AT432SCP.js +0 -15
  95. package/dist/chunk-PNLP5SXG.js +0 -10
  96. package/dist/chunk-QHX5YFMM.js +0 -23
  97. package/dist/chunk-QZBE4KC2.js +0 -4
  98. package/dist/server-settings-3YD7RR3A.js +0 -3
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{readBody}from"./chunk-6LSQCOCJ.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-MYWDL3WX.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";
4
- import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
3
+ import{repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-ZSPWHEBL.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";
4
+ import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
5
5
  eatedUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var ISSUE_JSON_SHAPE_HELP='--output json \u306E\u5F62\uFF08Backlog API \u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09:\n TWP \u30B5\u30FC\u30D0\u304C\u6574\u3048\u305F\u5F62\u3067\u8FD4\u308A\u307E\u3059\u3002Backlog API \u306E\u8AB2\u984C\u3092\u305D\u306E\u307E\u307E\u8AAD\u3080\u524D\u63D0\u3067\u66F8\u304F\u3068\u58CA\u308C\u307E\u3059\u3002\n - status / priority / resolution / issueType / assignee / createdUser / updatedUser \u306F\n \u540D\u524D\u306E\u6587\u5B57\u5217\u3067\u3059\uFF08{id, name} \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002ID \u306F statusId / issueTypeId /\n assigneeId \u2026 \u306E\u3088\u3046\u306B\u672B\u5C3E Id \u306E\u5225\u30AD\u30FC\u306B\u3042\u308A\u307E\u3059\u3002\u672A\u8A2D\u5B9A\u306A\u3089\u4E21\u65B9 null \u3067\u3059\u3002\n - category / versions / milestone \u306F {id, name} \u306E\u914D\u5217\u306E\u307E\u307E\u3067\u3059\uFF08\u8907\u6570\u4ED8\u3051\u3089\u308C\u308B\u305F\u3081\u3001\n \
6
6
  \u540D\u524D\u3068 ID \u3092\u5225\u30AD\u30FC\u3078\u5206\u3051\u308B\u3068\u5BFE\u5FDC\u304C\u5D29\u308C\u307E\u3059\uFF09\u3002customFields \u3082\u914D\u5217\u3067\u3059\u3002\n \u4F8B\uFF081\u4EF6\u30FB\u629C\u7C8B\uFF09:\n {"id": 1234, "issueKey": "PRJ-12", "summary": "\u2026",\n "statusId": 1, "status": "\u672A\u5BFE\u5FDC", "issueTypeId": 56, "issueType": "\u30BF\u30B9\u30AF",\n "assigneeId": 91, "assignee": "\u8C37 \u6A39",\n "category": [{"id": 7, "name": "\u8A2D\u8A08"}], "milestone": [], ...}\n --query \u3082\u3053\u306E\u5F62\u306B\u5F53\u305F\u308A\u307E\u3059\uFF08issue list \u306E\u4F8B: --query "[].{key: issueKey, type: issueType}"\uFF09\u3002';
7
7
  var COMMENT_COLUMNS=["id","created","createdUserId","createdUser","content","changeLog"];function commentRow(row){const source=isRecord(row)?row:{};const user=isRecord(source["createdUser"])?source["createdUser"]:{};return pick({...source,createdUserId:user["id"]??null,createdUser:user["name"]??null},COMMENT_COLUMNS)}var ATTACHMENT_COLUMNS=["id","name","size","contentType","createdUserId","createdUser","created"];var STATUS_COLUMNS=["id","name","color"];var USER_COLUMNS=["id","userId","name","ma\
@@ -27,20 +27,23 @@ throw new UsageError(`${name} \u306F yyyy-MM-dd \u306E\u5F62\u3067\u6307\u5B9A\u
27
27
  void 0){const space=await ctx.resolver.backlogDefaultSpace();return{id:space.id,defaulted:space.name}}if(ref.trim()===""){throw new UsageError("--space \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093","--space <ID|\u30B9\u30DA\u30FC\u30B9URL> \u3092\u6307\u5B9A\u3059\u308B\u304B\u3001--space \u3054\u3068\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{id:(await ctx.resolver.backlogSpace(ref)).id,defaulted:null}}function withSpace(input,space){return withResolved(
28
28
  input,{spaceId:space.id,...space.defaulted!==null?{spaceDefaulted:space.defaulted}:{}})}async function resolveNumericRefs(refs,flag,label,scope,load){if(refs.every(ref=>NUMERIC.test(ref)))return[...refs];const candidates=await load();const resolved=[];for(const ref of refs){resolved.push(NUMERIC.test(ref)?ref:(await resolveNamed(ref,candidates,{flag,label,scope})).id)}return resolved}function requireProjectForNames(refs,flag,projectIds){if(projectIds.length===1)return projectIds[0];throw new UsageError(
29
29
  projectIds.length===0?`${flag} \u3092\u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059`:`${flag} \u3092\u540D\u524D\u3067\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F --project \u304C1\u3064\u306E\u3068\u304D\u3060\u3051\u3067\u3059\uFF08\u3044\u307E\u306F ${projectIds.length} \u4EF6\uFF09`,`${flag} \u306E\u5019\u88DC\uFF08${refs.join(" / ")}\uFF09\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u3042\u308A\u307E\u305B\u3093\u3002\u6570\u5024\u306E ID \u3092\u76F4\u63A5\u6E21\u305B\u3070 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002`)}
30
- function issueRef(input,usage){const ref=singleRef(input,{flag:"--issue",label:"\u8AB2\u984C\u30AD\u30FC",usage});if(!ISSUE_REF.test(ref)){throw new UsageError(`\u8AB2\u984C\u30AD\u30FC\u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${ref}`,"Backlog \u306E\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u304B\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return ref}var UPDATE_PROJECT_FLAG={name:"--project",summary:"--status / --assignee \u3092\
31
- \u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306B\u8981\u308B Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30AD\u30FC / \u540D\u79F0 / \u6570\u5024ID\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"};function requireUpdateProject(input,flag,value){const ref=input.flags.get("--project")?.trim();if(ref===void 0||ref===""){throw new UsageError(`${flag} \u3092\u540D\u524D\uFF08${value}\uFF09\u3067\u6307\u5B9A\u3059\u308B\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059`,`${flag}\
32
- \u306E\u5019\u88DC\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u306A\u304F\u3001\u8AB2\u984C\u30AD\u30FC\u304B\u3089\u306F\u5F15\u3051\u307E\u305B\u3093\u3002twp backlog status list --project <\u30AD\u30FC> / twp backlog user list --project <\u30AD\u30FC> \u306E id \u3092 ${flag} \u306B\u76F4\u63A5\u6E21\u305B\u3070 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002`)}return ref}function readUpdateRef(input,flag,label){const raw=input.flags.get(flag);if(raw===
33
- void 0)return void 0;const value=raw.trim();if(value===""){throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`${flag} \u3054\u3068\u5916\u305B\u3070\u3001\u305D\u306E\u9805\u76EE\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3002`)}if(value.includes(",")){throw new UsageError(`${flag} \u306B\u8907\u6570\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${value}\uFF09`,`\u66F4\u65B0\u306F1\u3064\u306E\u5024\u3060\u3051\u3092\u53D7\u3051\u307E\u3059\uFF08\u7D5E\u308A\u8FBC\u307F\u306E twp\
34
- backlog issue list \u3068\u306F\u9055\u3044\u307E\u3059\uFF09\u3002`)}if(NUMERIC.test(value)&&!isExactNumericId(value)){throw new UsageError(`${flag} \u306E ID \u304C\u6570\u5024\u3068\u3057\u3066\u6271\u3048\u308B\u7BC4\u56F2\u3092\u8D85\u3048\u3066\u3044\u307E\u3059: ${value}`,`Backlog \u306E ID \u3092\u305D\u306E\u307E\u307E\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp backlog status list / user list \u306E id \u5217\uFF09\u3002`)}return{flag,label,value,projectRef:NUMERIC.test(value)?
35
- null:requireUpdateProject(input,flag,value)}}async function resolveUpdateProject(ref,load){if(isExactNumericId(ref))return ref;const resolved=await resolveNamed(ref,await load(),{flag:"--project",label:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",scope:BACKLOG_SCOPE_LABEL});if(!isExactNumericId(resolved.id)){throw new ApiResponseError(`Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u300C${ref}\u300D\u306E ID \u3092\u6570\u5024\u3068\u3057\u3066\u9001\u308C\u307E\u305B\u3093: ${JSON.stringify(resolved.
36
- id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return resolved.id}async function resolveUpdateRef(ref,projectId,load){if(ref.projectRef===null)return ref.value;if(projectId===void 0){throw new ApiResponseError(`${ref.flag} \u306E\u89E3\u6C7A\u5148\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u89E3\u6C7A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002`)}const resolved=await resolveNamed(ref.value,await load(projectId),
37
- {flag:ref.flag,label:ref.label,scope:BACKLOG_PROJECT_SCOPE_LABEL});if(!isExactNumericId(resolved.id)){throw new ApiResponseError(`${ref.label}\u300C${ref.value}\u300D\u306E ID \u3092\u6570\u5024\u3068\u3057\u3066\u9001\u308C\u307E\u305B\u3093: ${JSON.stringify(resolved.id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return resolved.id}function spaceNotes(input){const defaulted=input.resolved?.["spaceDefaulted"];return defaulted===void 0?[]:[`--space \u3092\u7701\u7565\
38
- \u3057\u305F\u305F\u3081\u3001\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u552F\u4E00\u306E Backlog \u30B9\u30DA\u30FC\u30B9 ${defaulted} \u3092\u4F7F\u3044\u307E\u3057\u305F\u3002`]}function updateNotes(input){const notes=[...spaceNotes(input)];const usedForName=input.resolved?.["projectUsed"]!==void 0;if(input.flags.get("--project")!==void 0&&!usedForName){notes.push("--project \u306F\u4F7F\u3044\u307E\u305B\u3093\u3067\u3057\u305F\uFF08--status / --assignee \u3092\u6570\u5024 ID \u3067\u6E21\u3057\u305F\u305F\u3081\u3001\u540D\u524D\u306E\u89E3\u6C7A\u304C\u8981\u308A\u307E\u305B\u3093\uFF09\u3002")}
39
- return notes}function offsetNotes(input,received,offsetFlag="--offset"){const count=integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT})??DEFAULT_COUNT;if(received<count)return[];const offset=integerFlag(input.flags,offsetFlag,{min:0})??0;return[`${received} \u4EF6\uFF08--count \u306E\u4E0A\u9650\u3061\u3087\u3046\u3069\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\u7D9A\u304D\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093: ${offsetFlag} ${offset+received} \u3092\u4ED8\u3051\u3066\u7D9A\u304D\u3092\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\
40
- \u3044\uFF08\u3053\u306E API \u306F\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`]}var spaceResource={name:"space",summary:"\u9023\u643A\u6E08\u307F Backlog \u30B9\u30DA\u30FC\u30B9",operations:[{name:"list",summary:"\u9023\u643A\u6E08\u307F\u306E Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog space list",description:"TWP \u306E\u5916\u90E8\u9023\u643A\u8A2D\u5B9A\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u308B Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3057\u307E\u3059\u3002\n\u30B9\u30DA\u30FC\u30B9\u306F**\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u30E6\u30FC\u30B6\u30FC\u3054\u3068**\u306E\u8A2D\u5B9A\u3067\u3059\
41
- \uFF08\u30C6\u30CA\u30F3\u30C8\u5171\u901A\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002\n\u3053\u3053\u306B\u51FA\u308B id / space_url \u306F\u3001\u4ED6\u306E backlog \u30B3\u30DE\u30F3\u30C9\u306E --space \u306B\u305D\u306E\u307E\u307E\u6E21\u305B\u307E\u3059\u3002\nAPI \u30AD\u30FC\u306F\u8FD4\u308A\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u5074\u3067\u30DE\u30B9\u30AF\u3055\u308C\u3066\u3044\u307E\u3059\uFF09\u3002",flags:[],plan(input){if(input.args.length>0){throw new UsageError(
42
- `list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp backlog space list help")}return{method:"GET",path:`${BACKLOG_BASE_PATH}/spaces`}},summarize:body=>listOf(body,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9\u4E00\u89A7").map(row=>pick(row,SPACE_COLUMNS)),raw:body=>listOf(body,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9\u4E00\u89A7")}]};var projectResource={name:"project",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",operations:[{name:"li\
43
- st",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog project list [--space <ID|URL>]",description:"\u3053\u3053\u306B\u51FA\u308B id\uFF08\u6570\u5024\uFF09\u306F backlog issue list --project \u306B\u3001projectKey \u306F\nbacklog status list / backlog user list \u306E --project \u306B\u6E21\u305B\u307E\u3059\u3002\n\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002",
30
+ function issueRef(input,usage){const ref=singleRef(input,{flag:"--issue",label:"\u8AB2\u984C\u30AD\u30FC",usage});if(!ISSUE_REF.test(ref)){throw new UsageError(`\u8AB2\u984C\u30AD\u30FC\u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${ref}`,"Backlog \u306E\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u304B\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return ref}var UPDATE_PROJECT_FLAG={name:"--project",summary:"--status / --assignee /\
31
+ --notify \u3092\u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306B\u8981\u308B Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30AD\u30FC / \u540D\u79F0 / \u6570\u5024ID\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"};function requireUpdateProject(input,flag,value){const ref=input.flags.get("--project")?.trim();if(ref===void 0||ref===""){throw new UsageError(`${flag} \u3092\u540D\u524D\uFF08${value}\uFF09\u3067\u6307\u5B9A\u3059\u308B\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059`,
32
+ `${flag} \u306E\u5019\u88DC\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u306A\u304F\u3001\u8AB2\u984C\u30AD\u30FC\u304B\u3089\u306F\u5F15\u3051\u307E\u305B\u3093\u3002twp backlog status list --project <\u30AD\u30FC> / twp backlog user list --project <\u30AD\u30FC> \u306E id \u3092 ${flag} \u306B\u76F4\u63A5\u6E21\u305B\u3070 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002`)}return ref}function readUpdateRef(input,flag,label){const raw=input.flags.get(flag);
33
+ return raw===void 0?void 0:updateRefOf(input,flag,label,raw)}function updateRefOf(input,flag,label,raw){const value=raw.trim();if(value===""){throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,flag===NOTIFY_FLAG.name?`${flag} \u3054\u3068\u5916\u305B\u3070\u3001\u901A\u77E5\u5148\u3092\u6307\u5B9A\u305B\u305A\u306B\u9001\u308A\u307E\u3059\u3002`:`${flag} \u3054\u3068\u5916\u305B\u3070\u3001\u305D\u306E\u9805\u76EE\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3002`)}
34
+ if(value.includes(",")){throw new UsageError(`${flag} \u306B\u8907\u6570\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${value}\uFF09`,flag===NOTIFY_FLAG.name?`\u8907\u6570\u4EBA\u306B\u901A\u77E5\u3059\u308B\u3068\u304D\u306F ${flag} \u3092\u91CD\u306D\u3066\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${flag} 91 ${flag} 92\uFF09\u3002`:`\u66F4\u65B0\u306F1\u3064\u306E\u5024\u3060\u3051\u3092\u53D7\u3051\u307E\u3059\uFF08\u7D5E\u308A\u8FBC\u307F\u306E twp backlog issue list \u3068\u306F\u9055\u3044\u307E\u3059\uFF09\u3002`)}
35
+ if(NUMERIC.test(value)&&!isExactNumericId(value)){throw new UsageError(`${flag} \u306E ID \u304C\u6570\u5024\u3068\u3057\u3066\u6271\u3048\u308B\u7BC4\u56F2\u3092\u8D85\u3048\u3066\u3044\u307E\u3059: ${value}`,`Backlog \u306E ID \u3092\u305D\u306E\u307E\u307E\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp backlog status list / user list \u306E id \u5217\uFF09\u3002`)}return{flag,label,value,projectRef:NUMERIC.test(value)?null:requireUpdateProject(input,flag,value)}}async function resolveUpdateProject(ref,load){
36
+ if(isExactNumericId(ref))return ref;const resolved=await resolveNamed(ref,await load(),{flag:"--project",label:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",scope:BACKLOG_SCOPE_LABEL});if(!isExactNumericId(resolved.id)){throw new ApiResponseError(`Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u300C${ref}\u300D\u306E ID \u3092\u6570\u5024\u3068\u3057\u3066\u9001\u308C\u307E\u305B\u3093: ${JSON.stringify(resolved.id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
37
+ return resolved.id}async function resolveUpdateRef(ref,projectId,load){if(ref.projectRef===null)return ref.value;if(projectId===void 0){throw new ApiResponseError(`${ref.flag} \u306E\u89E3\u6C7A\u5148\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u89E3\u6C7A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002`)}const resolved=await resolveNamed(ref.value,await load(projectId),{flag:ref.flag,label:ref.label,scope:BACKLOG_PROJECT_SCOPE_LABEL});if(!isExactNumericId(
38
+ resolved.id)){throw new ApiResponseError(`${ref.label}\u300C${ref.value}\u300D\u306E ID \u3092\u6570\u5024\u3068\u3057\u3066\u9001\u308C\u307E\u305B\u3093: ${JSON.stringify(resolved.id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return resolved.id}var NOTIFY_FLAG={name:"--notify",summary:"\u30B3\u30E1\u30F3\u30C8\u306E\u901A\u77E5\u5148\uFF08Backlog \u306E\u300C\u304A\u77E5\u3089\u305B\u3057\u305F\u3044\u30E6\u30FC\u30B6\u30FC\u300D\uFF09\u3002\u8907\u6570\u306A\u3089\u91CD\u306D\u3066\u6307\u5B9A\u3002\u6570\u5B57\u3060\u3051\u306E\u5024\u306F ID \u3068\u3057\u3066\u9001\u308A\u307E\u3059\uFF08\u540D\u524D\u306A\u3089 --project \u304C\u8981\u308B\uFF09",
39
+ takesValue:true,repeatable:true,placeholder:"<\u540D\u524D|ID>"};var NOTIFY_HELP="--notify <\u540D\u524D|ID> \u3067\u3001\u30B3\u30E1\u30F3\u30C8\u306E\u901A\u77E5\u5148\uFF08Backlog \u306E\u300C\u304A\u77E5\u3089\u305B\u3057\u305F\u3044\u30E6\u30FC\u30B6\u30FC\u300D\uFF09\u3092\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\n \u26A0 \u6307\u5B9A\u3057\u306A\u3044\u3068\u3001\u62C5\u5F53\u8005\u4EE5\u5916\u3078\u306F\u901A\u77E5\u304C\u5C4A\u304B\u306A\u3044\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u62C5\u5F53\u3092\u5909\u3048\u305A\u306B\u76F8\u624B\u3078\u805E\u304D\u305F\u3044\u3068\u304D\u306F\n \u62C5\u5F53\u5909\u66F4\u3067\u4EE3\u7528\u305B\u305A --notify \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u8907\u6570\u4EBA\u306A\u3089 --notify \u3092\u91CD\u306D\u3066\u6307\u5B9A\u3057\u307E\u3059\u3002\n \u6570\u5B57\u3060\u3051\u306E\u5024\u306F ID \u3068\u3057\u3066\u9001\u308A\u307E\u3059\u3002\u540D\u524D\u30FB\u30ED\u30B0\u30A4\u30F3ID\u30FB\u30E1\u30FC\u30EB\u3067\u6307\u3059\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3001\n \u7167\u5408\u306F\u5B8C\u5168\u4E00\u81F4\u3060\u3051\u3067\u3059\uFF08\u4E00\u81F4\u3057\u306A\u3051\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 2 \u3067\u6B62\u307E\u308A\u3001\u4F55\u3082\u9001\u308A\u307E\u305B\u3093\uFF09\u3002";
40
+ function readNotifyRefs(input){return repeatedValues(input,NOTIFY_FLAG.name).map(raw=>updateRefOf(input,NOTIFY_FLAG.name,"Backlog \u30E6\u30FC\u30B6\u30FC",raw))}async function resolveNotifyRefs(refs,projectId,load){if(refs.length===0)return void 0;const ids=[];for(const ref of refs){const id=await resolveUpdateRef(ref,projectId,load);if(!ids.includes(id))ids.push(id)}return ids.join(",")}function notifyBody(input,body){const ids=resolvedList(input,"notifiedUserId");if(ids!==void 0)body["notifie\
41
+ dUserId"]=ids.map(Number)}function spaceNotes(input){const defaulted=input.resolved?.["spaceDefaulted"];return defaulted===void 0?[]:[`--space \u3092\u7701\u7565\u3057\u305F\u305F\u3081\u3001\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u552F\u4E00\u306E Backlog \u30B9\u30DA\u30FC\u30B9 ${defaulted} \u3092\u4F7F\u3044\u307E\u3057\u305F\u3002`]}function updateNotes(input){const notes=[...spaceNotes(input)];const usedForName=input.resolved?.["projectUsed"]!==void 0;if(input.flags.get("--project")!==void 0&&
42
+ !usedForName){notes.push("--project \u306F\u4F7F\u3044\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u540D\u524D\u3067\u6307\u5B9A\u3057\u305F\u5024\u304C\u7121\u304F\u3001\u3059\u3079\u3066\u6570\u5024 ID \u3060\u3063\u305F\u305F\u3081\u3001\u540D\u524D\u306E\u89E3\u6C7A\u304C\u8981\u308A\u307E\u305B\u3093\uFF09\u3002")}return notes}function offsetNotes(input,received,offsetFlag="--offset"){const count=integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT})??DEFAULT_COUNT;if(received<count)return[];
43
+ const offset=integerFlag(input.flags,offsetFlag,{min:0})??0;return[`${received} \u4EF6\uFF08--count \u306E\u4E0A\u9650\u3061\u3087\u3046\u3069\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\u7D9A\u304D\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093: ${offsetFlag} ${offset+received} \u3092\u4ED8\u3051\u3066\u7D9A\u304D\u3092\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u306E API \u306F\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`]}
44
+ var spaceResource={name:"space",summary:"\u9023\u643A\u6E08\u307F Backlog \u30B9\u30DA\u30FC\u30B9",operations:[{name:"list",summary:"\u9023\u643A\u6E08\u307F\u306E Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog space list",description:"TWP \u306E\u5916\u90E8\u9023\u643A\u8A2D\u5B9A\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u308B Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3057\u307E\u3059\u3002\n\u30B9\u30DA\u30FC\u30B9\u306F**\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u30E6\u30FC\u30B6\u30FC\u3054\u3068**\u306E\u8A2D\u5B9A\u3067\u3059\uFF08\u30C6\u30CA\u30F3\u30C8\u5171\u901A\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002\n\u3053\u3053\u306B\u51FA\u308B id / space_url \u306F\u3001\u4ED6\u306E backlog \u30B3\u30DE\u30F3\u30C9\u306E --space \u306B\u305D\u306E\u307E\u307E\u6E21\u305B\u307E\u3059\u3002\nAPI \u30AD\u30FC\u306F\u8FD4\u308A\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u5074\u3067\u30DE\u30B9\u30AF\u3055\u308C\u3066\u3044\u307E\u3059\uFF09\u3002",
45
+ flags:[],plan(input){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp backlog space list help")}return{method:"GET",path:`${BACKLOG_BASE_PATH}/spaces`}},summarize:body=>listOf(body,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9\u4E00\u89A7").map(row=>pick(row,SPACE_COLUMNS)),raw:body=>listOf(body,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9\u4E00\u89A7")}]};var projectResource={name:"project",summary:"B\
46
+ acklog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",operations:[{name:"list",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog project list [--space <ID|URL>]",description:"\u3053\u3053\u306B\u51FA\u308B id\uFF08\u6570\u5024\uFF09\u306F backlog issue list --project \u306B\u3001projectKey \u306F\nbacklog status list / backlog user list \u306E --project \u306B\u6E21\u305B\u307E\u3059\u3002\n\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002",
44
47
  flags:[SPACE_FLAG],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp backlog project list help")}return withSpace(input,await resolveSpace(input,ctx))},plan(input){return{method:"GET",path:backlogSpacePath(requireSpace(input),"/projects")}},plannedNotes:spaceNotes,summarize:body=>listOf(body,"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7").map(row=>pick(
45
48
  row,PROJECT_COLUMNS)),raw:body=>listOf(body,"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7")}]};var issueResource={name:"issue",summary:"Backlog \u8AB2\u984C",operations:[{name:"list",summary:"Backlog \u8AB2\u984C\u3092\u4E00\u89A7\u30FB\u691C\u7D22\u3059\u308B",usage:"twp backlog issue list [--space <ID|URL>] [--project <\u30AD\u30FC|ID>] [--status <\u540D\u524D|ID>] [--assignee <\u540D\u524D|ID>] [--updated-since <yyyy-MM-dd>] [--count <\u4EF6\u6570>] [--offset <\u4EF6\u6570>]",
46
49
  description:"\u26A0 \u3053\u306E\u4E00\u89A7\u306E description\uFF08\u672C\u6587\uFF09\u306F\u65E2\u5B9A\u3067 1000 \u6587\u5B57\u306B\u5207\u3089\u308C\u307E\u3059\u3002\n \u5207\u3089\u308C\u305F\u8AB2\u984C\u306B\u306F descriptionTruncated: true \u304C\u4ED8\u304D\u307E\u3059\uFF08\u9ED9\u3063\u3066\u5207\u308A\u307E\u305B\u3093\uFF09\u3002\n \u5168\u6587\u304C\u8981\u308B\u306A\u3089 --description-max 0 \u3092\u4ED8\u3051\u308B\u304B\u3001twp backlog issue get \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\n \uFF08get \u306F\u5E38\u306B\u5168\u6587\u3092\u8FD4\u3057\u307E\u3059\uFF09\u3002\n\n\u7D5E\u308A\u8FBC\u307F\u306E\u8907\u6570\u6307\u5B9A\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u3059\uFF08--status \u672A\u5BFE\u5FDC,\u51E6\u7406\u4E2D\uFF09\u3002\n--project / --status / --assignee / --created-user \u306F\u540D\u524D\u3067\u3082\u6570\u5024 ID \u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\n \u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u5834\u5408\u3001--status / --assignee / --created-user \u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059\n \uFF08\u5019\u88DC\u304C Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u306A\u3044\u305F\u3081\uFF09\u3002\u6570\u5024 ID \u306A\u3089 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002\n\n\u30DA\u30FC\u30B8\u30F3\u30B0:\n \u3053\u306E API \u306F\u30AA\u30D5\u30BB\u30C3\u30C8\u65B9\u5F0F\u3067\u3059\uFF08\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all / --cursor \u306F\u3042\u308A\u307E\u305B\
@@ -58,8 +61,8 @@ word");query["updatedSince"]=dateFlag(input.flags,"--updated-since");query["coun
58
61
  "issues","\u8AB2\u984C\u4E00\u89A7").map(row=>pick(row,ISSUE_LIST_COLUMNS)),raw:body=>listOf(body,"issues","\u8AB2\u984C\u4E00\u89A7"),notes(body,input){const issues=listOf(body,"issues","\u8AB2\u984C\u4E00\u89A7");const truncated=issues.filter(row=>isRecord(row)&&row["descriptionTruncated"]===true).length;const notes=[...offsetNotes(input,issues.length)];if(truncated>0){notes.push(`${truncated} \u4EF6\u306E\u672C\u6587\u304C\u9014\u4E2D\u3067\u5207\u3089\u308C\u3066\u3044\u307E\u3059\uFF08descriptionTruncated: true\uFF09\u3002\u5168\u6587\u304C\u8981\u308B\u306A\u3089 --description-max 0 \u304B twp backlog issue get \u3092\u4F7F\u3063\u3066\u304F\
59
62
  \u3060\u3055\u3044\u3002`)}return notes}},{name:"get",summary:"Backlog \u8AB2\u984C1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08\u672C\u6587\u306F\u5168\u6587\uFF09",usage:"twp backlog issue get <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--space <ID|URL>]",description:"\u672C\u6587\uFF08description\uFF09\u306F\u5E38\u306B\u5168\u6587\u304C\u8FD4\u308A\u307E\u3059\uFF08descriptionTruncated \u306F\u5FC5\u305A false\uFF09\u3002\n\u4E00\u89A7\uFF08twp backlog issue list\uFF09\u306F\u65E2\u5B9A\u3067 1000 \u6587\u5B57\u306B\u5207\u308B\u306E\u3067\u3001\u305D\u3053\u304C\u9055\u3044\u307E\u3059\u3002\n\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u3067\u3082\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3067\u3082\u5F15\u3051\u307E\u3059\u3002\n\n"+
60
63
  ISSUE_JSON_SHAPE_HELP,flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog issue get help");return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref})},plan(input){const ref=requireResolved(input,"issueRef");return{method:"GET",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(
61
- ref)}`)}},plannedNotes:spaceNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)},{name:"update",summary:"Backlog \u8AB2\u984C\u306E\u62C5\u5F53\u30FB\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u5909\u66F4\u3059\u308B\uFF08--yes \u304C\u5FC5\u8981\uFF09",usage:"twp backlog issue update <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--assignee <\u540D\u524D|ID>] [--status <\u540D\u524D|ID>] [--comment-file <\u30D1\u30B9>] [--project <\u30AD\u30FC|ID>] --yes",description:`${EXTERNAL_WRITE_HELP}\
62
-
64
+ ref)}`)}},plannedNotes:spaceNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)},{name:"update",summary:"Backlog \u8AB2\u984C\u306E\u62C5\u5F53\u30FB\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u5909\u66F4\u3059\u308B\uFF08--yes \u304C\u5FC5\u8981\uFF09",usage:"twp backlog issue update <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--assignee <\u540D\u524D|ID>] [--status <\u540D\u524D|ID>] [--comment-file <\u30D1\u30B9>] [--notify <\u540D\u524D|ID>]... [--project <\u30AD\u30FC|ID>] --yes",
65
+ description:`${EXTERNAL_WRITE_HELP}
63
66
 
64
67
  --assignee / --status / --comment-file\uFF08--comment\uFF09\u306E\u3046\u3061\u3001\u5C11\u306A\u304F\u3068\u30821\u3064\u304C\u5FC5\u8981\u3067\u3059\u3002
65
68
  \u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u9001\u308A\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\uFF09\u3002
@@ -81,14 +84,17 @@ ref)}`)}},plannedNotes:spaceNotes,summarize:body=>pick(issueObject(body),ISSUE_G
81
84
  --comment-file \u3067\u6E21\u3057\u305F\u672C\u6587\u306F\u3001\u3053\u306E\u5909\u66F4\u306E\u7406\u7531\u3068\u3057\u3066\u540C\u3058\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u6295\u7A3F\u3055\u308C\u307E\u3059\u3002
82
85
  ${bodyHelp("--comment-file","--comment")}
83
86
 
87
+ ${NOTIFY_HELP}
88
+
84
89
  ${ORDER_HELP}`,destructive:true,flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"},UPDATE_PROJECT_FLAG,{name:"--assignee",summary:"\u62C5\u5F53\u8005\u3002\u6570\u5B57\u3060\u3051\u306E\u5024\u306F ID \u3068\u3057\u3066\u9001\u308A\u307E\u3059\uFF08\u540D\u524D\u30FB\u30ED\u30B0\u30A4\u30F3ID\u30FB\u30E1\u30FC\u30EB\u306A\u3089 --project \u304C\u8981\u308B\uFF09",takesValue:true,
85
90
  placeholder:"<\u540D\u524D|ID>"},{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08\u6570\u5024ID\u3001\u307E\u305F\u306F\u540D\u524D\u3002\u540D\u524D\u306A\u3089 --project \u304C\u8981\u308B\uFF09",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--comment-file",summary:"\u5909\u66F4\u306E\u7406\u7531\u3092\u672C\u6587\u3068\u3057\u3066\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u307F\u3001\u540C\u3058\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u6295\u7A3F\u3059\u308B\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",
86
- takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--comment",summary:"\u5909\u66F4\u306E\u7406\u7531\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--comment-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog issue update help");const assigneeRef=readUpdateRef(input,"--assignee","Backlog \u30E6\u30FC\u30B6\u30FC");const statusRef=readUpdateRef(
87
- input,"--status","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9");const comment=await readBody(input,{flag:"--comment",fileFlag:"--comment-file",label:"\u5909\u66F4\u30B3\u30E1\u30F3\u30C8",maxChars:BODY_MAX_CHARS,usage:"twp backlog issue update help"});if(comment===void 0&&assigneeRef===void 0&&statusRef===void 0){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093","--assignee <\u540D\u524D|ID> / --status <\u540D\u524D|ID> / --comment-file <\u30D1\u30B9> \u306E\u3046\u3061\u3001\u5C11\u306A\u304F\u3068\u30821\u3064\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
88
- const space=await resolveSpace(input,ctx);const resolved={issueRef:ref};const projectRef=assigneeRef?.projectRef??statusRef?.projectRef??null;const projectId=projectRef===null?void 0:await resolveUpdateProject(projectRef,()=>ctx.resolver.backlogProjects(space.id));if(projectId!==void 0)resolved["projectUsed"]=projectId;if(assigneeRef!==void 0){resolved["assigneeId"]=await resolveUpdateRef(assigneeRef,projectId,id=>ctx.resolver.backlogUsers(space.id,id))}if(statusRef!==void 0){resolved["statusId"]=
89
- await resolveUpdateRef(statusRef,projectId,id=>ctx.resolver.backlogStatuses(space.id,id))}if(comment!==void 0)resolved["comment"]=comment;return withSpace(withResolved(input,resolved),space)},plan(input){const body={};for(const key of["assigneeId","statusId"]){const value=input.resolved?.[key];if(value!==void 0)body[key]=Number(value)}const comment=input.resolved?.["comment"];if(comment!==void 0)body["comment"]=comment;return{method:"PATCH",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(
90
- requireResolved(input,"issueRef"))}`),body}},plannedNotes:updateNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)}]};var commentResource={name:"comment",summary:"Backlog \u8AB2\u984C\u306E\u30B3\u30E1\u30F3\u30C8\uFF08\u4E00\u89A7\u30FB\u6295\u7A3F\uFF09",operations:[{name:"list",summary:"Backlog \u8AB2\u984C\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog comment list <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--space <ID|URL>] [--count <\u4EF6\u6570>] [--order\
91
- <\u9806\u5E8F>]",description:`\u5404\u30B3\u30E1\u30F3\u30C8\u306B\u306F changeLog\uFF08\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u62C5\u5F53\u306E\u5909\u66F4\u5C65\u6B74\uFF09\u304C\u5FC5\u305A\u542B\u307E\u308C\u307E\u3059\u3002
91
+ takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--comment",summary:"\u5909\u66F4\u306E\u7406\u7531\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--comment-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"},NOTIFY_FLAG],async prepare(input,ctx){const ref=issueRef(input,"twp backlog issue update help");const assigneeRef=readUpdateRef(input,"--assignee","Backlog \u30E6\u30FC\u30B6\u30FC");const statusRef=readUpdateRef(
92
+ input,"--status","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9");const notifyRefs=readNotifyRefs(input);const comment=await readBody(input,{flag:"--comment",fileFlag:"--comment-file",label:"\u5909\u66F4\u30B3\u30E1\u30F3\u30C8",maxChars:BODY_MAX_CHARS,usage:"twp backlog issue update help"});if(comment===void 0&&assigneeRef===void 0&&statusRef===void 0){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093","--assignee <\u540D\u524D|ID> / --status <\u540D\u524D|ID> / --comment-file\
93
+ <\u30D1\u30B9> \u306E\u3046\u3061\u3001\u5C11\u306A\u304F\u3068\u30821\u3064\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--notify \u306F\u901A\u77E5\u5148\u306E\u6307\u5B9A\u3067\u3001\u305D\u308C\u3060\u3051\u3067\u306F\u5909\u66F4\u306B\u306A\u308A\u307E\u305B\u3093\uFF09\u3002")}const space=await resolveSpace(input,ctx);const resolved={issueRef:ref};const projectRef=assigneeRef?.projectRef??statusRef?.projectRef??notifyRefs.find(ref2=>ref2.projectRef!==null)?.projectRef??null;
94
+ const projectId=projectRef===null?void 0:await resolveUpdateProject(projectRef,()=>ctx.resolver.backlogProjects(space.id));if(projectId!==void 0)resolved["projectUsed"]=projectId;if(assigneeRef!==void 0){resolved["assigneeId"]=await resolveUpdateRef(assigneeRef,projectId,id=>ctx.resolver.backlogUsers(space.id,id))}if(statusRef!==void 0){resolved["statusId"]=await resolveUpdateRef(statusRef,projectId,id=>ctx.resolver.backlogStatuses(space.id,id))}const notified=await resolveNotifyRefs(notifyRefs,
95
+ projectId,id=>ctx.resolver.backlogUsers(space.id,id));if(notified!==void 0)resolved["notifiedUserId"]=notified;if(comment!==void 0)resolved["comment"]=comment;return withSpace(withResolved(input,resolved),space)},plan(input){const body={};for(const key of["assigneeId","statusId"]){const value=input.resolved?.[key];if(value!==void 0)body[key]=Number(value)}const comment=input.resolved?.["comment"];if(comment!==void 0)body["comment"]=comment;notifyBody(input,body);return{method:"PATCH",path:backlogSpacePath(
96
+ requireSpace(input),`/issues/${encodeURIComponent(requireResolved(input,"issueRef"))}`),body}},plannedNotes:updateNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)}]};var commentResource={name:"comment",summary:"Backlog \u8AB2\u984C\u306E\u30B3\u30E1\u30F3\u30C8\uFF08\u4E00\u89A7\u30FB\u6295\u7A3F\uFF09",operations:[{name:"list",summary:"Backlog \u8AB2\u984C\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog comment list <\u8AB2\u984C\u30AD\
97
+ \u30FC|\u8AB2\u984CID> [--space <ID|URL>] [--count <\u4EF6\u6570>] [--order <\u9806\u5E8F>]",description:`\u5404\u30B3\u30E1\u30F3\u30C8\u306B\u306F changeLog\uFF08\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u62C5\u5F53\u306E\u5909\u66F4\u5C65\u6B74\uFF09\u304C\u5FC5\u305A\u542B\u307E\u308C\u307E\u3059\u3002
92
98
  \u300C\u3044\u3064\u30FB\u8AB0\u304C\u30FB\u8AB0\u306B\u632F\u3063\u305F\u304B\u300D\u306F Backlog \u3067\u306F\u3053\u3053\u306B\u3057\u304B\u7121\u3044\u306E\u3067\u3001\u8981\u7D04\u5217\u304B\u3089\u3082\u843D\u3068\u3057\u307E\u305B\u3093\u3002
93
99
 
94
100
  \u30DA\u30FC\u30B8\u30F3\u30B0:
@@ -98,13 +104,17 @@ placeholder:"<\u4EF6\u6570>"},{name:"--order",summary:"\u4E26\u3073\u9806\uFF08a
98
104
  placeholder:"<ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog comment list help");return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref})},plan(input){const ref=requireResolved(input,"issueRef");return{method:"GET",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(ref)}/comments`),query:{count:integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT}),order:order(input.flags.get("--order")),minId:integerFlag(input.flags,"--min-\
99
105
  id",{min:0}),maxId:integerFlag(input.flags,"--max-id",{min:0})}}},plannedNotes:spaceNotes,summarize:body=>listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7").map(commentRow),raw:body=>listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7"),notes(body,input){const received=listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7").length;const count=integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT})??DEFAULT_COUNT;return received<count?[]:[`${received} \u4EF6\uFF08--count \u306E\u4E0A\u9650\u3061\u3087\u3046\
100
106
  \u3069\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\u7D9A\u304D\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093: --min-id / --max-id \u3067\u7D9A\u304D\u3092\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u306E API \u306F\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`]}},{name:"create",summary:"Backlog \u8AB2\u984C\u306B\u30B3\u30E1\u30F3\u30C8\u3092\u6295\u7A3F\u3059\u308B\uFF08--yes \u304C\u5FC5\u8981\uFF09",
101
- usage:"twp backlog comment create <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> --body-file <\u30D1\u30B9> [--space <ID|URL>] --yes",description:`${EXTERNAL_WRITE_HELP}
107
+ usage:"twp backlog comment create <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> --body-file <\u30D1\u30B9> [--notify <\u540D\u524D|ID>]... [--project <\u30AD\u30FC|ID>] [--space <ID|URL>] --yes",description:`${EXTERNAL_WRITE_HELP}
102
108
 
103
109
  ${bodyHelp("--body-file","--body")}
104
110
 
105
- ${ORDER_HELP}`,destructive:true,flags:[...BODY_FLAGS,SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog comment create help");const content=await readBody(input,{flag:"--body",fileFlag:"--body-file",label:"\u30B3\u30E1\u30F3\u30C8\u672C\u6587",maxChars:BODY_MAX_CHARS,usage:"twp backlog comment create help"});
106
- if(content===void 0){throw new UsageError("\u30B3\u30E1\u30F3\u30C8\u672C\u6587\u3092 --body-file <\u30D1\u30B9> \u304B --body <\u6587\u5B57\u5217> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp backlog comment create help")}return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref,content})},plan(input){return{method:"POST",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(requireResolved(input,"issueRef"))}/comments`),body:{content:requireResolved(
107
- input,"content")}}},plannedNotes:spaceNotes,summarize:body=>commentRow(commentObject(body)),raw:commentObject}]};function projectMasterResource(spec){return{name:spec.name,summary:spec.summary,operations:[{name:"list",summary:spec.operationSummary,usage:`twp backlog ${spec.name} list --project <\u30AD\u30FC|ID> [--space <ID|URL>]`,description:`${spec.description}
111
+ ${NOTIFY_HELP}
112
+
113
+ ${ORDER_HELP}`,destructive:true,flags:[...BODY_FLAGS,SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"},NOTIFY_FLAG,{...UPDATE_PROJECT_FLAG,summary:"--notify \u3092\u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306B\u8981\u308B Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30AD\u30FC / \u540D\u79F0 / \u6570\u5024ID\uFF09"}],async prepare(input,ctx){const ref=issueRef(
114
+ input,"twp backlog comment create help");const notifyRefs=readNotifyRefs(input);const content=await readBody(input,{flag:"--body",fileFlag:"--body-file",label:"\u30B3\u30E1\u30F3\u30C8\u672C\u6587",maxChars:BODY_MAX_CHARS,usage:"twp backlog comment create help"});if(content===void 0){throw new UsageError("\u30B3\u30E1\u30F3\u30C8\u672C\u6587\u3092 --body-file <\u30D1\u30B9> \u304B --body <\u6587\u5B57\u5217> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp backlog comment create help")}
115
+ const space=await resolveSpace(input,ctx);const resolved={issueRef:ref,content};const projectRef=notifyRefs.find(notify=>notify.projectRef!==null)?.projectRef??null;const projectId=projectRef===null?void 0:await resolveUpdateProject(projectRef,()=>ctx.resolver.backlogProjects(space.id));if(projectId!==void 0)resolved["projectUsed"]=projectId;const notified=await resolveNotifyRefs(notifyRefs,projectId,id=>ctx.resolver.backlogUsers(space.id,id));if(notified!==void 0)resolved["notifiedUserId"]=notified;
116
+ return withSpace(withResolved(input,resolved),space)},plan(input){const body={content:requireResolved(input,"content")};notifyBody(input,body);return{method:"POST",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(requireResolved(input,"issueRef"))}/comments`),body}},plannedNotes:updateNotes,summarize:body=>commentRow(commentObject(body)),raw:commentObject}]};function projectMasterResource(spec){return{name:spec.name,summary:spec.summary,operations:[{name:"list",summary:spec.
117
+ operationSummary,usage:`twp backlog ${spec.name} list --project <\u30AD\u30FC|ID> [--space <ID|URL>]`,description:`${spec.description}
108
118
  \u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002`,flags:[SPACE_FLAG,{name:"--project",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30AD\u30FC\uFF08HC_FM_ID\uFF09\u304B\u6570\u5024ID\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u3067\u306F\u5F15\u3051\u307E\u305B\u3093",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`l\
109
119
  ist \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp backlog ${spec.name} list help`)}const space=await resolveSpace(input,ctx);const refs=commaList(input.flags,"--project");if(refs===void 0){throw new UsageError("--project \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`twp backlog ${spec.name} list help`)}if(refs.length>1){throw new UsageError(`--project \u306B\u8907\u6570\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${refs.
110
120
  join(" / ")}\uFF09`,"\u3053\u306E\u4E00\u89A7\u306F1\u3064\u306E Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3057\u307E\u3059\u3002")}const ref=refs[0];return withResolved(withSpace(input,space),{projectRef:ref})},plan(input){const ref=requireResolved(input,"projectRef");if(!/^[A-Za-z0-9_]+$/.test(ref)){throw new UsageError(`--project \u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${ref}`,"Backlog \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30AD\u30FC\uFF08HC_FM_ID\uFF09\u304B\u6570\u5024 ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u3067\u306F\u5F15\u3051\u307E\u305B\u3093\uFF08twp backlog project list \u3067 proj\
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{analysisForbidden}from"./chunk-T5CRU4DB.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import"./chunk-E3KMIBSP.js";import"./chunk-EXT4AIDF.js";import"./chunk-6LSQCOCJ.js";import"./chunk-MYWDL3WX.js";import"./chunk-HVZUXLQ4.js";import{ApiError,MultipartBody}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";
4
- import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var PATH="/api/v2/budget";var ANALYSIS_FORBIDDEN=analysisForbidden("");function budgetForbidden(body){if(body?.error==="forbidden")return"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u95B2\u89A7\u3067\u304D\u307E\u305B\u3093\uFF08\u30E1\u30F3\u30D0\u30FC\u3067\u306A\u3044\u304B\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\uFF09\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
3
+ import{analysisForbidden}from"./chunk-5AQ2JPIS.js";import"./chunk-ZJW3GBE5.js";import"./chunk-EXT4AIDF.js";import"./chunk-SCU74Z4U.js";import"./chunk-JJSBBWJ5.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-ZSPWHEBL.js";import"./chunk-HVZUXLQ4.js";import{ApiError,MultipartBody}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{
4
+ requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var PATH="/api/v2/budget";var ANALYSIS_FORBIDDEN=analysisForbidden("");function budgetForbidden(body){if(body?.error==="forbidden")return"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u95B2\u89A7\u3067\u304D\u307E\u305B\u3093\uFF08\u30E1\u30F3\u30D0\u30FC\u3067\u306A\u3044\u304B\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\uFF09\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
5
5
  return ANALYSIS_FORBIDDEN(body)}var FORBIDDEN=budgetForbidden;var EDIT_HINT="\u76EE\u6A19\u306E\u8A2D\u5B9A\u30FB\u30B3\u30D4\u30FC\u30FB\u53D6\u308A\u8FBC\u307F\u306F\u3001\u5168\u4F53\u7BA1\u7406\u8005\u304B\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u306E\u4EBA\u3060\u3051\u304C\u3067\u304D\u307E\u3059\u3002\u6309\u5206\u306F\u305D\u308C\u306B\u52A0\u3048\u3066\u3001\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u3082\u3067\u304D\u307E\u3059\n\uFF08\u3069\u3061\u3089\u3082\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09\u3002";
6
6
  var YEAR_MIN=2e3;var YEAR_MAX=2100;var IMPORT_MAX_BYTES=2048*1024;var SET_FILE_MAX_BYTES=4*1024*1024;var AMOUNT_MAX=999999999999;var SHOWN_OVERWRITES=24;var BOM=new RegExp(`^${String.fromCharCode(65279)}`);function usageOf(op){return`twp budget ${op} help`}function text(value){return typeof value==="string"||typeof value==="number"?String(value):""}function yen(value){return typeof value==="number"?`${value.toLocaleString("ja-JP")} \u5186`:"\uFF08\u306A\u3057\uFF09"}function noArgs(input,op){if(input.
7
7
  args.length>0)throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,usageOf(op))}function envelope(body,what){if(!isRecord(body)||body["result"]!==true)throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return body}function dataRecord(body,what){const data=envelope(body,what)["data"];
@@ -0,0 +1,15 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{REUSE_LAST_SUCCESS_MS,capacityError,probeCapacityOutcome}from"./chunk-G4TZFGNN.js";import"./chunk-N2UVRM3Z.js";import{pick}from"./chunk-SPZ3GBYC.js";import{projectFileKey}from"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import os from"os";import path from"path";function lastSuccessPath(stateDir,projectId){return path.join(stateDir,`capacity-report-${projectFileKey(projectId)}.json`)}function readLastSuccess(file){try{const v=JSON.parse(fs.readFileSync(file,"utf8"));if(typeof v!=="object"||v===null)return null;const{payload,at}=v;if(typeof payload!=="string"||typeof at!=="number"||!Number.isFinite(at))return null;return{payload,at}}catch{return null}}function writeLastSuccess(file,value,stderr){try{fs.mkdirSync(path.dirname(file),{recursive:true,mode:448});
4
+ fs.writeFileSync(file,JSON.stringify(value),{mode:384})}catch(err){stderr(`\u26A0\uFE0F \u76F4\u524D\u306E\u6210\u529F\u5024\u3092 ${file} \u3078\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${err.message}\uFF09
5
+ `)}}async function registeredAsLoop(api,runnerId){const res=await api.runners();if(!res.ok)return false;const runners=pick(res.json,"runners");if(!Array.isArray(runners))return false;return runners.some(r=>{if(typeof r!=="object"||r===null)return false;const row=r;return row["runner_id"]===runnerId&&(row["kind"]??"loop")==="loop"})}function loopRegisteredMessage(runnerId){return`\u3053\u306E\u30DE\u30B7\u30F3\uFF08runner_id: ${runnerId}\uFF09\u306F\u540C\u3058\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u3068\u3057\u3066\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001\u9001\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002
6
+ \u30EB\u30FC\u30D7\u304C\u52D5\u3044\u3066\u3044\u308B\u9593\u306F\u3001\u67A0\u60C5\u5831\u306F\u30EB\u30FC\u30D7\u306E heartbeat \u3067\u9001\u3089\u308C\u307E\u3059\uFF08capacity_probe \u306E\u8A2D\u5B9A\u306F\u30EB\u30FC\u30D7\u3068\u5171\u901A\u3067\u3059\uFF09
7
+ `}async function runCapacityReport(input){const{api,runnerId,stdout,stderr}=input;const now=input.now??(()=>Date.now());if(input.probe===null){stdout(`capacity_probe \u304C\u672A\u8A2D\u5B9A\u306E\u305F\u3081\u3001\u4F55\u3082\u9001\u308A\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u8A2D\u5B9A\u5148: ~/.twp/loops/${input.projectId}.json\uFF09
8
+ `);return 0}if(!input.runnerIdPersisted){stderr(`\u274C runner_id \u3092\u72B6\u614B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF08${input.stateDir}\uFF09\u3078\u4FDD\u5B58\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u9001\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002
9
+ \u3053\u306E\u307E\u307E\u9001\u308B\u3068\u5B9F\u884C\u306E\u305F\u3073\u306B\u5225\u306E\u5B9F\u884C\u6A5F\u3068\u3057\u3066\u767B\u9332\u3055\u308C\u307E\u3059\u3002\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u6A29\u9650\u3092\u76F4\u3059\u304B\u3001RUNNER_ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
10
+ `);return 1}if(await registeredAsLoop(api,runnerId)){stdout(loopRegisteredMessage(runnerId));return 0}const log=message=>stderr(`${message.trimStart()}
11
+ `);const runProbe=input.runProbe??probeCapacityOutcome;let outcome;try{outcome=await runProbe(input.probe,input.cwd,log,input.env??process.env)}catch{outcome={payload:capacityError("exit_status"),ok:false}}const file=lastSuccessPath(input.stateDir,input.projectId);let capacity=outcome.payload;let reused=false;if(!outcome.ok){const last=readLastSuccess(file);if(last!==null&&now()-last.at<REUSE_LAST_SUCCESS_MS&&now()>=last.at){capacity=last.payload;reused=true;stderr("\u76F4\u524D\u306B\u53D6\u5F97\u3067\u304D\u305F\u67A0\u60C5\u5831\u3092\u9001\u308A\u307E\u3059\uFF08\u4E00\u6642\u7684\u306A\u5931\u6557\u3068\u3057\u3066\u6271\u3044\u307E\
12
+ \u3059\uFF09\n")}}const payload={runner_id:runnerId,capacity};const host=input.hostname??os.hostname();if(host)payload.hostname=host;if(input.platform!==null)payload.platform=input.platform;if(input.version)payload.version=input.version;const res=await api.capacityReport(payload);if(res.ok){if(outcome.ok)writeLastSuccess(file,{payload:outcome.payload,at:now()},stderr);const what=outcome.ok?"\u67A0\u60C5\u5831":reused?"\u76F4\u524D\u306E\u67A0\u60C5\u5831":"\u53D6\u5F97\u5931\u6557\uFF08error\uFF09";
13
+ stdout(`${what}\u3092\u9001\u308A\u307E\u3057\u305F\uFF08runner_id: ${runnerId}\uFF09
14
+ `);return 0}if(res.status===409&&pick(res.json,"reason")==="kind_mismatch"){stdout(loopRegisteredMessage(runnerId));return 0}const detail=res.transportError!==null?res.transportError:`HTTP ${res.status??"?"}${typeof pick(res.json,"message")==="string"?`: ${String(pick(res.json,"message")).slice(0,200)}`:""}`;stderr(`\u274C \u67A0\u60C5\u5831\u3092\u9001\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${detail}\uFF09
15
+ `);return 1}export{lastSuccessPath,runCapacityReport};
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{loadDomain}from"./chunk-PNLP5SXG.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderDocument,renderOutput}from"./chunk-YXVN6OCH.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-UFGJSWKU.js";import{JsonBodyWithView}from"./chunk-Q3B65OFC.js";import{parseOperationArgs}from"./chunk-RX5HWI4L.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import{Resolver,requireDefaultProject}from"./chunk-MYWDL3WX.js";
3
+ import{loadDomain}from"./chunk-YASL34FY.js";import{JsonBodyWithView}from"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderDocument,renderOutput}from"./chunk-YXVN6OCH.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-UFGJSWKU.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-ZSPWHEBL.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
- 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-QZBE4KC2.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.
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-YYURQG4E.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?"":`
7
7
  \u64CD\u4F5C:
8
8
  ${alignedList(resource.operations.map(op=>[op.name,op.summary]))}
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{repeatedValues}from"./chunk-RX5HWI4L.js";import{hoursMinutes}from"./chunk-E3KMIBSP.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var ANALYSIS_PATH="/api/v2/analysis";var ACCESSIBLE_PAGES_HINT="\u958B\u3051\u308B\u5206\u6790\u30DA\u30FC\u30B8\u306F twp api /api/v2/analysis/accessible-pages \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002";var LICENSE_GUIDANCE="\u5206\u6790\u3092\u4F7F\u3046\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u5206\u6790\u3092\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
3
+ import{hoursMinutes}from"./chunk-ZJW3GBE5.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var ANALYSIS_PATH="/api/v2/analysis";var ACCESSIBLE_PAGES_HINT="\u958B\u3051\u308B\u5206\u6790\u30DA\u30FC\u30B8\u306F twp api /api/v2/analysis/accessible-pages \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002";var LICENSE_GUIDANCE="\u5206\u6790\u3092\u4F7F\u3046\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u5206\u6790\u3092\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
4
4
  var PAGE_GUIDANCE=`\u3053\u306E\u5206\u6790\u30DA\u30FC\u30B8\u306E\u95B2\u89A7\u5BFE\u8C61\u306B\u542B\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5206\u6790\u306E\u7BA1\u7406\u8005\u306B\u5BFE\u8C61\u3078\u306E\u8FFD\u52A0\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002${ACCESSIBLE_PAGES_HINT}`;var PAGE_DENIED_MARK="\u5206\u6790\u30DA\u30FC\u30B8";function analysisForbidden(levelGuidance2){return body=>{if(body?.error==="permission_denied"){const text=body.error_description??"";
5
5
  if(text.includes(PAGE_DENIED_MARK))return PAGE_GUIDANCE;if(text.includes("\u3053\u306E\u6A5F\u80FD"))return LICENSE_GUIDANCE;return void 0}if(body?.error==="forbidden")return levelGuidance2;return void 0}}function levelGuidance(page,features){return`${page}\u3092\u958B\u304F\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u5206\u6790\u62C5\u5F53\u8005\u30D5\u30E9\u30B0\u3001\u307E\u305F\u306F${features}\u306E\u6A29\u9650\uFF08\u300C\u306A\u3057\u300D\u4EE5\u5916\uFF09\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}
6
6
  var FROM_FLAG={name:"--from",summary:"\u958B\u59CB\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var TO_FLAG={name:"--to",summary:"\u7D42\u4E86\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var MONTH_FLAG={name:"--month",summary:"1\u304B\u6708\u3060\u3051\uFF08YYYY-MM\uFF09\u3002--from / --to \u3068\u306F\u4F75\u7528\u4E0D\u53EF",takesValue:true,placeholder:"<YYYY-MM>"};var YEAR_FLAG={name:"--year",summary:"1\u5E74\u5206\uFF081\u301C12\u6708\u30FBYYYY\uFF09\u3002--from \
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{featureLicenseGuidance}from"./chunk-EO3M43TN.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{isExactNumericId}from"./chunk-MYWDL3WX.js";import{UsageError}from"./chunk-VFPY2A23.js";var PDF_PATH="/api/v2/sales/pdf";var FEATURE_DENIED="\u3053\u306E\u6A5F\u80FD\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002";function salesFeatureDenied(body){return body?.error==="permission_denied"||body?.error==="forbidden"&&body.error_description===FEATURE_DENIED}function pdfForbidden(body){if(salesFeatureDenied(body))return featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406");const reason=body?.error;if(typeof reason==="string"&&reason.endsWith(
3
+ import{featureLicenseGuidance}from"./chunk-G6RLNOIZ.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{isExactNumericId}from"./chunk-ZSPWHEBL.js";import{UsageError}from"./chunk-VFPY2A23.js";var PDF_PATH="/api/v2/sales/pdf";var FEATURE_DENIED="\u3053\u306E\u6A5F\u80FD\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002";function salesFeatureDenied(body){return body?.error==="permission_denied"||body?.error==="forbidden"&&body.error_description===FEATURE_DENIED}function pdfForbidden(body){if(salesFeatureDenied(body))return featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406");const reason=body?.error;if(typeof reason==="string"&&reason.endsWith(
4
4
  "\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093")){return`${reason}\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u304F\u66F8\u985E\u306F\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3001\u7D10\u3065\u304B\u306A\u3044\u66F8\u985E\u306F\u4F5C\u6210\u8005\u30FB\u62C5\u5F53\u8005\u3068\u7BA1\u7406\u8005\u3060\u3051\u304C\u51FA\u529B\u3067\u304D\u307E\u3059\uFF09`}return void 0}var ESTIMATE={name:"estimate",label:"\u898B\u7A4D",noExample:"EST0000063",
5
5
  defaultKind:"estimate",kinds:{estimate:{segment:"estimate",label:"\u898B\u7A4D\u66F8"},order:{segment:"order",label:"\u6CE8\u6587\u66F8"},"order-acceptance":{segment:"order-acceptance",label:"\u6CE8\u6587\u8ACB\u66F8"}}};var INVOICE={name:"invoice",label:"\u8ACB\u6C42",noExample:"INV0000170",defaultKind:"invoice",kinds:{invoice:{segment:"invoice",label:"\u8ACB\u6C42\u66F8"},delivery:{segment:"delivery",label:"\u7D0D\u54C1\u66F8"},inspection:{segment:"inspection",label:"\u691C\u53CE\u66F8"}}};var PURCHASE={
6
6
  name:"purchase",label:"\u4ED5\u5165",defaultKind:"order",kinds:{order:{segment:"purchase-order",label:"\u6CE8\u6587\u66F8"},"order-acceptance":{segment:"purchase-order-acceptance",label:"\u6CE8\u6587\u8ACB\u66F8"}}};var OUT_FLAG={name:"--out",summary:"\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\uFF08\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9.pdf>"};var FORCE_FLAG={name:"--force",summary:"\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3059\u308B",
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{createFlags,fieldBody,hasAnyField,resolveRefFields,updateFlags}from"./chunk-CSXCHRYE.js";import{boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,rangeNotes,recordOf,workloadDistributionNotes,workloadDistributionRows}from"./chunk-T5CRU4DB.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";
4
- import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-E3KMIBSP.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{PROJECT_MEMBERS_LIMIT,resolveNamed}from"./chunk-MYWDL3WX.js";import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-HVZUXLQ4.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF08\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ROLE_FLAG={name:"--role",summary:"\u5F79\u5272\uFF08member / manager \u306A\u3069\u30FB\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3059\u308B\uFF09",takesValue:true,placeholder:"<\u5F79\u5272>"};var START_DATE_FLAG={name:"\
3
+ import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,rangeNotes,recordOf,workloadDistributionNotes,workloadDistributionRows}from"./chunk-5AQ2JPIS.js";import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-ZJW3GBE5.js";import{createFlags,fieldBody,hasAnyField,resolveRefFields,updateFlags}from"./chunk-SCU74Z4U.js";import{boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{
4
+ LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{PROJECT_MEMBERS_LIMIT,resolveNamed}from"./chunk-ZSPWHEBL.js";import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-HVZUXLQ4.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF08\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ROLE_FLAG={name:"--role",summary:"\u5F79\u5272\uFF08member / manager \u306A\u3069\u30FB\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3059\u308B\uFF09",takesValue:true,placeholder:"<\u5F79\u5272>"};var START_DATE_FLAG={name:"\
5
5
  --start-date",summary:"\u53C2\u753B\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var END_DATE_FLAG={name:"--end-date",summary:"\u53C2\u753B\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var PERIOD_FILE_FLAG={name:"--period-file",summary:"\u7A3C\u50CD\u671F\u9593\uFF08assignment_periods\uFF09\u306E JSON \u914D\u5217\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"};
6
6
  var MEMO_FLAG={name:"--memo",summary:"\u30E1\u30E2\uFF0810,000 \u6587\u5B57\u307E\u3067\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"};var CLEAR_FLAG={name:"--clear",summary:"\u5225\u540D\u3092\u6D88\u3059",takesValue:false};var MEMO_MAX_CHARS=1e4;var PERIOD_FILE_MAX_CHARS=2e5;var ALIAS_MAX_CHARS=255;var PERIOD_KEYS=["id","start_date","end_date","daily_hours","total_hours","input_mode"];var PERIOD_REQUIRED=["start_date","end_date","daily_hours"];var ROLE_HELP="--role \u306E\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3057\u307E\u3059\uFF08CLI\
7
7
  \u306F\u691C\u67FB\u3057\u307E\u305B\u3093\uFF09\u30022026-10-01 \u6642\u70B9\u306E\u5024\u306F\n member\uFF08\u30E1\u30F3\u30D0\u30FC\uFF09/ manager\uFF08\u7BA1\u7406\u8005\uFF09/ approver\uFF08\u7BA1\u7406\u8005\uFF08\u627F\u8A8D\u8005\uFF09\uFF09/ manager_no_punch\uFF08\u7BA1\u7406\u8005\uFF08\u6253\u523B\u7121\uFF09\uFF09\u3067\u3059\u3002\n \u5024\u306F\u5897\u3048\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u4ECA\u306E\u30E1\u30F3\u30D0\u30FC\u306E\u5024\u306F twp project members \u306E role \u5217\u3067\u78BA\u304B\u3081\u3089\u308C\u307E\u3059\u3002";
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{describeError,normalizeRequiredPlatforms}from"./chunk-AT432SCP.js";import{httpFetch}from"./chunk-J7QYPKVK.js";var DAY_KEYS=["mon","tue","wed","thu","fri","sat","sun"];function wallClock(year,month1,day,hour=0,minute=0,second=0){return new Date(Date.UTC(year,month1-1,day,hour,minute,second,0))}function nowInZone(timezone,warn,at=new Date){try{const fmt=new Intl.DateTimeFormat("en-US",{timeZone:timezone,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"});const parts={};for(const p of fmt.formatToParts(at)){if(p.type!=="literal")parts[p.type]=p.value}
3
+ import{describeError,normalizeRequiredPlatforms}from"./chunk-SPZ3GBYC.js";import{httpFetch}from"./chunk-J7QYPKVK.js";var DAY_KEYS=["mon","tue","wed","thu","fri","sat","sun"];function wallClock(year,month1,day,hour=0,minute=0,second=0){return new Date(Date.UTC(year,month1-1,day,hour,minute,second,0))}function nowInZone(timezone,warn,at=new Date){try{const fmt=new Intl.DateTimeFormat("en-US",{timeZone:timezone,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"});const parts={};for(const p of fmt.formatToParts(at)){if(p.type!=="literal")parts[p.type]=p.value}
4
4
  const y=Number(parts["year"]);const mo=Number(parts["month"]);const d=Number(parts["day"]);const h=Number(parts["hour"]);const mi=Number(parts["minute"]);const s=Number(parts["second"]);if([y,mo,d,h,mi,s].some(v=>!Number.isFinite(v)))throw new Error("\u5F62\u5F0F\u4E0D\u660E");return wallClock(y,mo,d,h,mi,s)}catch(err){warn?.(`\u26A0\uFE0F \u30BF\u30A4\u30E0\u30BE\u30FC\u30F3 ${timezone} \u3092\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\uFF08${err.message}\uFF09\u3002\u30DE\u30B7\u30F3\u306E\u30ED\u30FC\u30AB\u30EB\u6642\u523B\u3067\u5224\u5B9A\u3057\u307E\u3059\u2014\u2014\u30B5\u30FC\u30D0\u306E\u5C65\u6B74\u3068\u305A\u308C\u308B\u3068\u67A0\u306E\u5224\u5B9A\u304C\u58CA\u308C\u307E\u3059`);
5
5
  return wallClock(at.getFullYear(),at.getMonth()+1,at.getDate(),at.getHours(),at.getMinutes(),at.getSeconds())}}function parseTs(value){if(value===null||value===void 0||value==="")return null;const text=String(value).trim().replace(/ /g,"T");const attempts=[[19,/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})$/],[16,/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2})$/],[10,/^(\d{4})-(\d{1,2})-(\d{1,2})$/]];for(const[width,re]of attempts){const m=re.exec(text.slice(0,width));if(!m)continue;
6
6
  const[,y,mo,d,h,mi,s]=m;const hh=Number(h??0);const mm=Number(mi??0);const ss=Number(s??0);if(hh>23||mm>59||ss>59)continue;const date=wallClock(Number(y),Number(mo),Number(d),hh,mm,ss);if(date.getUTCFullYear()!==Number(y)||date.getUTCMonth()+1!==Number(mo)||date.getUTCDate()!==Number(d)){continue}return date}return null}function num(value,fallback,cast="int"){if(value===null||value===void 0||value==="")return fallback;if(typeof value==="boolean")return value?1:0;if(typeof value==="number"){if(!Number.
@@ -1,54 +1,16 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{DEFAULT_CLAUDE_LAUNCHER,loadAiConfig}from"./chunk-AEJHDFXB.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{projectFileKey}from"./chunk-GY7KI5E5.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{isBoolishTrue}from"./chunk-5WGOHFAS.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";function stringField(value,key,fallback,warnings){if(value===void 0||value===null)return fallback;if(typeof value!=="string"||value.trim()===""){warnings.push(`claude_launcher.${key} \u306F\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A '${fallback}' \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}return value.trim()}function argvField(value,key,fallback,warnings,allowEmpty){if(value===void 0||value===null)return fallback;
3
+ import{DEFAULT_CLAUDE_LAUNCHER,loadAiConfig}from"./chunk-AEJHDFXB.js";import{parseCapacityProbe,runHook,validateHooks}from"./chunk-G4TZFGNN.js";import{projectFileKey}from"./chunk-GY7KI5E5.js";import{isBoolishTrue}from"./chunk-5WGOHFAS.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";function stringField(value,key,fallback,warnings){if(value===void 0||value===null)return fallback;if(typeof value!=="string"||value.trim()===""){warnings.push(`claude_launcher.${key} \u306F\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A '${fallback}' \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}return value.trim()}function argvField(value,key,fallback,warnings,allowEmpty){if(value===void 0||value===null)return fallback;
4
4
  if(!Array.isArray(value)){warnings.push(`claude_launcher.${key} \u306F\u6587\u5B57\u5217\u306E\u914D\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A [${fallback.join(", ")}] \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}for(const v of value){if(typeof v!=="string"||v.trim()===""){warnings.push(`claude_launcher.${key} \u306E\u8981\u7D20\u306F\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A [${fallback.
5
5
  join(", ")}] \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}}if(value.length===0&&!allowEmpty){warnings.push(`claude_launcher.${key} \u306F1\u3064\u4EE5\u4E0A\u306E\u5F15\u6570\u304C\u8981\u308A\u307E\u3059\uFF08\u65E2\u5B9A [${fallback.join(", ")}] \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}return value.map(v=>v.trim())}function probeMatchField(value,warnings){const raw=stringField(value,"probe_match",DEFAULT_CLAUDE_LAUNCHER.probeMatch,warnings);try{new RegExp(raw,"m")}catch(err){
6
6
  warnings.push(`claude_launcher.probe_match \u306F\u6B63\u898F\u8868\u73FE\u3068\u3057\u3066\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\uFF08${err.message}\uFF09\u3002\u65E2\u5B9A '${DEFAULT_CLAUDE_LAUNCHER.probeMatch}' \u3092\u4F7F\u3044\u307E\u3059`);return DEFAULT_CLAUDE_LAUNCHER.probeMatch}return raw}var NOT_YET_APPLIED=[{key:"probe",get:c=>c.probe},{key:"probe_match",get:c=>c.probeMatch},{key:"exec_args",get:c=>c.execArgs},{key:"active_args",get:c=>c.activeArgs}];function sameAsDefault(key,parsed){
7
7
  const entry=NOT_YET_APPLIED.find(e=>e.key===key);if(entry===void 0)return true;const a=entry.get(parsed);const b=entry.get(DEFAULT_CLAUDE_LAUNCHER);return typeof a==="string"||typeof b==="string"?a===b:a.length===b.length&&a.every((v,i)=>v===b[i])}function parseClaudeLauncher(value){const warnings=[];if(value===void 0||value===null){return{launcher:DEFAULT_CLAUDE_LAUNCHER,warnings}}if(typeof value!=="object"||Array.isArray(value)){warnings.push("claude_launcher \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A\u306E\u8D77\u52D5\u65B9\u6CD5\u3092\u4F7F\u3044\u307E\u3059\uFF09");
8
8
  return{launcher:DEFAULT_CLAUDE_LAUNCHER,warnings}}const v=value;const launcher={bin:stringField(v["bin"],"bin",DEFAULT_CLAUDE_LAUNCHER.bin,warnings),probe:argvField(v["probe"],"probe",DEFAULT_CLAUDE_LAUNCHER.probe,warnings,true),probeMatch:probeMatchField(v["probe_match"],warnings),execArgs:argvField(v["exec_args"],"exec_args",DEFAULT_CLAUDE_LAUNCHER.execArgs,warnings,false),activeArgs:argvField(v["active_args"],"active_args",DEFAULT_CLAUDE_LAUNCHER.activeArgs,warnings,false)};for(const{key}of NOT_YET_APPLIED){
9
- if(!sameAsDefault(key,launcher)){warnings.push(`claude_launcher.${key} \u306F\u307E\u3060\u9069\u7528\u3055\u308C\u307E\u305B\u3093\uFF08\u3053\u306E\u7248\u3067\u52B9\u304F\u306E\u306F bin \u3060\u3051\u3067\u3059\uFF09`)}}return{launcher,warnings}}import{randomBytes}from"crypto";import fs2 from"fs";import os from"os";import path2 from"path";import{createHash}from"crypto";import{spawn}from"child_process";function resolveHookCommand(file,env){if(process.platform!=="win32")return file;if(isWindowsDriveAbsolute(file))return file;return findExecutable(file,{env,platform:"win32"})}var DEFAULT_TIMEOUT_SEC=120;var MAX_OUTPUT_BYTES=512*1024;var HOOK_ID_RE=/^[A-Za-z0-9._:-]{1,64}$/;function validateHooks(raw,configKey="prefetch"){const warnings=[];if(raw===void 0||raw===null)return{hooks:[],warnings};if(!Array.isArray(raw)){return{hooks:[],warnings:[`${configKey} \u306F\u914D\u5217\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u30D5\u30C3\u30AF\u306F1\u3064\u3082\u5B9F\u884C\u3057\u307E\u305B\u3093`]}}
10
- const hooks=[];const seen=new Set;for(const[i,entry]of raw.entries()){if(entry===null||typeof entry!=="object"||Array.isArray(entry)){warnings.push(`${configKey}[${i}] \u304C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3053\u306E\u30D5\u30C3\u30AF\u306F\u5B9F\u884C\u3057\u307E\u305B\u3093`);continue}const e=entry;const id=typeof e["id"]==="string"?e["id"].trim():"";const command=e["command"];if(id===""){warnings.push(`${configKey}[${i}] \u306B id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u3053\u306E\u30D5\u30C3\u30AF\u306F\
11
- \u5B9F\u884C\u3057\u307E\u305B\u3093`);continue}if(!HOOK_ID_RE.test(id)){warnings.push(`${configKey}[${i}] \u306E id '${id}' \u306F64\u6587\u5B57\u4EE5\u4E0B\u306E\u82F1\u6570\u5B57\u3068 . _ : - \u3060\u3051\u3092\u4F7F\u3048\u307E\u3059\u3002\u3053\u306E\u30D5\u30C3\u30AF\u306F\u5B9F\u884C\u3057\u307E\u305B\u3093`);continue}if(seen.has(id)){warnings.push(`${configKey}[${i}] \u306E id '${id}' \u304C\u91CD\u8907\u3057\u3066\u3044\u307E\u3059\u3002\u3053\u306E\u30D5\u30C3\u30AF\u306F\u5B9F\u884C\u3057\u307E\u305B\u3093`);
12
- continue}if(!Array.isArray(command)||command.length===0||!command.every(c=>typeof c==="string")){warnings.push(`${configKey}[${i}]\uFF08${id}\uFF09\u306E command \u304C\u6587\u5B57\u5217\u306E\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u3053\u306E\u30D5\u30C3\u30AF\u306F\u5B9F\u884C\u3057\u307E\u305B\u3093`);continue}const timeout=typeof e["timeout"]==="number"&&Number.isFinite(e["timeout"])&&e["timeout"]>0?Math.trunc(e["timeout"]):DEFAULT_TIMEOUT_SEC;seen.add(id);hooks.push({id,
13
- command,timeout})}return{hooks,warnings}}async function runHook(hook,cwd,env=process.env,allowEmpty=false){const started=Date.now();const[file,...args]=hook.command;if(file===void 0){return{id:hook.id,ok:false,stdout:"",reason:"command \u304C\u7A7A\u3067\u3059",durationMs:0}}return new Promise(resolve=>{const resolved=resolveHookCommand(file,env);if(resolved===null){resolve({id:hook.id,ok:false,stdout:"",reason:`\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB ${file} \u3092 PATH \u4E0A\u3067\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08Windows \u3067\u306F bare nam\
14
- e \u3067\u8D77\u52D5\u3057\u307E\u305B\u3093\uFF09`,failure:"spawn",durationMs:0});return}let child;try{child=spawn(resolved,args,{cwd,env,detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]})}catch(e){const code=e.code??"spawn \u5931\u6557";resolve({id:hook.id,ok:false,stdout:"",reason:`\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093: ${file} (${code})`,failure:"spawn",durationMs:Date.now()-started});return}let stdout="";let stderr="";let truncated=false;let timedOut=false;const timer=setTimeout(
15
- ()=>{timedOut=true;killProcessTree(child,"SIGKILL")},(hook.timeout??DEFAULT_TIMEOUT_SEC)*1e3);child.stdout.on("data",c=>{if(stdout.length>=MAX_OUTPUT_BYTES){truncated=true;return}stdout+=c.toString("utf8");if(stdout.length>MAX_OUTPUT_BYTES){stdout=stdout.slice(0,MAX_OUTPUT_BYTES);truncated=true}});child.stderr.on("data",c=>{if(stderr.length<8192)stderr+=c.toString("utf8")});const done=(ok,reason,failure)=>{clearTimeout(timer);resolve({id:hook.id,ok,stdout:truncated?`${stdout}
16
- \u2026\uFF08\u51FA\u529B\u304C\u4E0A\u9650\u3092\u8D85\u3048\u305F\u305F\u3081\u5207\u308A\u8A70\u3081\u307E\u3057\u305F\uFF09`:stdout,reason,...failure===void 0?{}:{failure},durationMs:Date.now()-started})};child.on("error",e=>done(false,`\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093: ${e.message}`,"spawn"));child.on("close",code=>{if(timedOut)return done(false,`\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\uFF08${hook.timeout??DEFAULT_TIMEOUT_SEC}\u79D2\uFF09`,"timeout");if(code!==0)return done(false,`\u7D42\u4E86\u30B3\
17
- \u30FC\u30C9 ${code}${stderr.trim()===""?"":`: ${firstLine(stderr)}`}`,"exit");if(!allowEmpty&&stdout.trim()==="")return done(false,"\u51FA\u529B\u304C\u7A7A\u3067\u3057\u305F","empty");done(true,null)})})}async function runPrefetch(hooks,cwd,log,env=process.env){if(hooks.length===0)return"";const sections=[];for(const hook of hooks){const r=await runHook(hook,cwd,env);if(r.ok){log(` prefetch: ${r.id} \u53D6\u5F97\u5B8C\u4E86\uFF08${Math.round(r.durationMs/1e3)}s\uFF09`);sections.push(`--- pref\
18
- etch: ${r.id} ---
19
- ${r.stdout.trim()}`)}else{log(` \u26A0\uFE0F prefetch: ${r.id} \u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${r.reason}\uFF09`);sections.push(`--- prefetch: ${r.id} ---
20
- \uFF08\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${r.reason}\u3002\u3053\u306E\u60C5\u5831\u306F\u6B20\u3051\u3066\u3044\u307E\u3059\uFF09`)}}return["\u3010\u4E8B\u524D\u53D6\u5F97\u6E08\u307F\u30C7\u30FC\u30BF\u3011","\u4EE5\u4E0B\u306F\u30EB\u30FC\u30D7\u304C\u4E8B\u524D\u306B\u53D6\u5F97\u3057\u305F\u8A08\u753B\u7528\u30C7\u30FC\u30BF\u3067\u3059\u3002\u540C\u3058\u60C5\u5831\u3092\u96C6\u3081\u76F4\u3059\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002","\u300C\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u300D\u3068\u66F8\u304B\u308C\u305F\u7BC0\u3060\u3051\
21
- \u306F\u6B20\u3051\u3066\u3044\u308B\u306E\u3067\u3001\u5FC5\u8981\u306A\u3089\u305D\u306E\u5206\u3092\u81EA\u5206\u3067\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\u3044\u3002","",sections.join("\n\n")].join("\n")}async function runPreflight(hooks,cwd,log,env=process.env){if(hooks.length===0)return"";const sections=[];for(const hook of hooks){const r=await runHook(hook,cwd,env,true);if(r.ok){log(` preflight: ${r.id} \u78BA\u8A8D\u5B8C\u4E86\uFF08${Math.round(r.durationMs/1e3)}s\uFF09`);if(r.stdout.
22
- trim()!=="")sections.push(`--- preflight: ${r.id} ---
23
- ${r.stdout.trim()}`)}else{log(` \u26A0\uFE0F preflight: ${r.id} \u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${r.reason}\uFF09`);sections.push(`--- preflight: ${r.id} ---
24
- \uFF08\u78BA\u8A8D\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${r.reason}\u3002\u3053\u306E\u524D\u63D0\u6761\u4EF6\u306F\u4E0D\u660E\u3067\u3059\uFF09`)}}if(sections.length===0)return"";return["\u3010\u74B0\u5883\u306E\u524D\u63D0\u6761\u4EF6\uFF08preflight\uFF09\u3011","\u4EE5\u4E0B\u306F\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u306E\u5192\u982D\u3067\u78BA\u8A8D\u3057\u305F\u74B0\u5883\u60C5\u5831\u3067\u3059\u3002\u8A08\u753B\u3068\u5404\u30A2\u30A4\u30C6\u30E0\u306E\u5B9F\u884C\u3067\u8003\u616E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
25
- "\u5931\u6557\u3057\u305F\u30D5\u30C3\u30AF\u304C\u3042\u3063\u3066\u3082\u30B5\u30A4\u30AF\u30EB\u306F\u7D99\u7D9A\u3057\u307E\u3059\u3002\u5FC5\u8981\u306A\u62C5\u4FDD\u304C\u53D6\u308C\u306A\u3044\u5834\u5408\u306F\u3001\u305D\u306E\u4E8B\u5B9F\u3092\u660E\u8A18\u3057\u3066\u304F\u3060\u3055\u3044\u3002","",sections.join("\n\n")].join("\n")}function firstLine(s){return(s.trim().split("\n")[0]??"").slice(0,200)}function formatHookWiring(prefetch,preflight){return`LOOP_HOOKS ${formatHookIds(prefetch,
26
- preflight)}`}function formatHookIds(prefetch,preflight){const ids=hooks=>hooks.map(h=>h.id).join(",");return`prefetch=[${ids(prefetch)}] preflight=[${ids(preflight)}]`}var CAPACITY_SCHEMA="twp.capacity/v1";var CAPACITY_MAX_BYTES=8192;var CAPACITY_FORMATS=[CAPACITY_SCHEMA,"claude_auto_switch/v1"];var IDENTITY_MODES=["masked","none","full"];var DEFAULT_CAPACITY_PROBE={format:CAPACITY_SCHEMA,interval:300,timeout:15,identity:"masked"};var LOCAL_HEAD=1;var LOCAL_TAIL=2;var DOMAIN_HEAD=2;var DOMAIN_TAIL=2;var COLLAPSED="***";function maskPart(value,head,tail){if(value.length<head+tail+1)return null;return`${value.slice(0,head)}${"*".repeat(value.length-head-tail)}${value.
27
- slice(value.length-tail)}`}function maskEmail(raw){const value=raw.trim();const at=value.lastIndexOf("@");if(at<0)return maskPart(value,LOCAL_HEAD,LOCAL_TAIL)??COLLAPSED;const local=value.slice(0,at);const domain=value.slice(at+1);const maskedLocal=maskPart(local,LOCAL_HEAD,LOCAL_TAIL);const maskedDomain=maskPart(domain,DOMAIN_HEAD,DOMAIN_TAIL);if(maskedLocal===null||maskedDomain===null)return`${COLLAPSED}@${COLLAPSED}`;return`${maskedLocal}@${maskedDomain}`}function identityHash(raw){return`sha\
28
- 256:${createHash("sha256").update(raw.trim()).digest("hex").slice(0,12)}`}function applyIdentity(slot,raw,mode){if(mode==="none")return;if(typeof raw!=="string"||raw.trim()==="")return;slot.identity_masked=mode==="full"?raw.trim():maskEmail(raw);slot.identity_hash=identityHash(raw)}var CAS_METRIC_LABELS={five_hour:"5\u6642\u9593\u67A0",seven_day:"\u9031\u9593",weekly_fable:"\u9031\u9593(Fable)"};function isRecord(v){return typeof v==="object"&&v!==null&&!Array.isArray(v)}function num(v){return typeof v===
29
- "number"&&Number.isFinite(v)?v:void 0}function str(v){return typeof v==="string"&&v.trim()!==""?v.trim():void 0}function epochToIso(v){const n=num(v);if(n===void 0||n<=0)return void 0;const d=new Date(n*1e3);return Number.isNaN(d.getTime())?void 0:d.toISOString()}function toSlotState(raw,eligible){const s=str(raw);if(s==="needs_login")return"needs_login";if(eligible===false)return"excluded";if(s==="over_ceiling")return"excluded";if(s===void 0)return"unknown";return"usable"}function newestMeasuredAt(accounts){
30
- if(!Array.isArray(accounts))return null;let newest=null;for(const entry of accounts){if(!isRecord(entry))continue;const at=num(entry["metrics_fetched_at"]);if(at===void 0||at<=0||epochToIso(at)===void 0)continue;if(newest===null||at>newest)newest=at}return newest}function adaptClaudeAutoSwitch(raw,identity){if(!isRecord(raw)||!Array.isArray(raw["accounts"]))return null;const slots=[];for(const entry of raw["accounts"]){if(!isRecord(entry))continue;const name=str(entry["name"]);if(name===void 0)continue;
31
- const metrics=[];if(isRecord(entry["metrics"])){for(const[key,m]of Object.entries(entry["metrics"])){if(!isRecord(m))continue;const metric={key};const label=CAS_METRIC_LABELS[key];if(label!==void 0)metric.label=label;const utilization=num(m["utilization"]);if(utilization!==void 0)metric.utilization=utilization;const threshold=num(m["threshold"]);if(threshold!==void 0)metric.threshold=threshold;const ceiling=num(m["ceiling"]);if(ceiling!==void 0)metric.ceiling=ceiling;const resets=epochToIso(m["r\
32
- esets_at"]);if(resets!==void 0)metric.resets_at=resets;metrics.push(metric)}}const slot={name,state:toSlotState(entry["state"],entry["eligible"]),metrics};const stateLabel=str(entry["state_label"]);if(stateLabel!==void 0)slot.state_label=stateLabel;if(typeof entry["eligible"]==="boolean")slot.eligible=entry["eligible"];if(isRecord(entry["relogin"])){const deadline=str(entry["relogin"]["deadline_iso"])??epochToIso(entry["relogin"]["deadline"]);if(deadline!==void 0)slot.relogin_deadline=deadline}applyIdentity(
33
- slot,entry["email"],identity);slots.push(slot)}const report={schema:CAPACITY_SCHEMA,provider:"claude",slots};const generatedAt=epochToIso(newestMeasuredAt(raw["accounts"]))??epochToIso(raw["generated_at"]);if(generatedAt!==void 0)report.generated_at=generatedAt;const active=str(raw["active"]);if(active!==void 0)report.active_slot=active;return report}function adaptCanonical(raw,identity){if(!isRecord(raw))return null;if(str(raw["schema"])!==CAPACITY_SCHEMA)return null;const report={...raw};if(identity===
34
- "none"&&Array.isArray(report.slots)){report.slots=report.slots.map(slot=>{const stripped={...slot};delete stripped.identity_masked;delete stripped.identity_hash;return stripped})}return report}function summarize(slots){const s={total:slots.length,usable:0,excluded:0,needs_login:0,unknown:0};for(const slot of slots){const state=isRecord(slot)?slot.state:void 0;if(state==="usable"||state==="excluded"||state==="needs_login")s[state]+=1;else s.unknown+=1}return s}function capacityError(reason){return JSON.
35
- stringify({schema:CAPACITY_SCHEMA,error:"probe_failed",reason})}function encodeCapacity(report){const withSummary={...report};if(Array.isArray(withSummary.slots)&&withSummary.summary===void 0){withSummary.summary=summarize(withSummary.slots)}const full=JSON.stringify(withSummary);if(Buffer.byteLength(full,"utf8")<=CAPACITY_MAX_BYTES)return full;const compact={...withSummary,slots_omitted:true};delete compact.slots;const trimmed=JSON.stringify(compact);if(Buffer.byteLength(trimmed,"utf8")<=CAPACITY_MAX_BYTES)
36
- return trimmed;return capacityError("payload_too_large")}function parseCapacityProbe(value){const warnings=[];if(value===void 0||value===null)return{probe:null,warnings};if(!isRecord(value)){return{probe:null,warnings:["capacity_probe \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u67A0\u306E\u89B3\u6E2C\u306F\u884C\u3044\u307E\u305B\u3093"]}}const rawCommand=value["command"];if(!Array.isArray(rawCommand)||rawCommand.length===0){return{probe:null,
37
- warnings:["capacity_probe.command \u306F1\u3064\u4EE5\u4E0A\u306E\u6587\u5B57\u5217\u306E\u914D\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u67A0\u306E\u89B3\u6E2C\u306F\u884C\u3044\u307E\u305B\u3093"]}}for(const v of rawCommand){if(typeof v!=="string"||v.trim()===""){return{probe:null,warnings:["capacity_probe.command \u306E\u8981\u7D20\u306F\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u67A0\u306E\u89B3\u6E2C\u306F\u884C\u3044\u307E\u305B\u3093"]}}}
38
- let format=DEFAULT_CAPACITY_PROBE.format;const rawFormat=value["format"];if(rawFormat!==void 0&&rawFormat!==null){if(typeof rawFormat==="string"&&CAPACITY_FORMATS.includes(rawFormat.trim())){format=rawFormat.trim()}else{warnings.push(`capacity_probe.format \u306F ${CAPACITY_FORMATS.join(" / ")} \u306E\u3044\u305A\u308C\u304B\u3067\u3059\uFF08\u65E2\u5B9A '${DEFAULT_CAPACITY_PROBE.format}' \u3092\u4F7F\u3044\u307E\u3059\uFF09`)}}let identity=DEFAULT_CAPACITY_PROBE.identity;const rawIdentity=value["\
39
- identity"];if(rawIdentity!==void 0&&rawIdentity!==null){if(typeof rawIdentity==="string"&&IDENTITY_MODES.includes(rawIdentity.trim())){identity=rawIdentity.trim()}else{warnings.push(`capacity_probe.identity \u306F ${IDENTITY_MODES.join(" / ")} \u306E\u3044\u305A\u308C\u304B\u3067\u3059\uFF08\u65E2\u5B9A '${DEFAULT_CAPACITY_PROBE.identity}' \u3092\u4F7F\u3044\u307E\u3059\uFF09`)}}const interval=intField(value["interval"],"interval",DEFAULT_CAPACITY_PROBE.interval,warnings);const timeout=intField(
40
- value["timeout"],"timeout",DEFAULT_CAPACITY_PROBE.timeout,warnings,TIMEOUT_MAX_SEC);return{probe:{command:rawCommand.map(v=>v.trim()),format,interval,timeout,identity},warnings}}var TIMEOUT_MAX_SEC=60;function intField(value,key,fallback,warnings,max){if(value===void 0||value===null||value==="")return fallback;const n=typeof value==="number"?value:Number.parseInt(String(value),10);if(Number.isInteger(n)&&n>=1){if(max!==void 0&&n>max){warnings.push(`capacity_probe.${key} \u306F ${max} \u4EE5\u4E0B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\
41
- \uFF08${max} \u306B\u4E38\u3081\u307E\u3059\u3002heartbeat \u306E\u9001\u4FE1\u3092\u5F85\u305F\u305B\u308B\u6642\u9593\u3067\u3059\uFF09`);return max}return n}warnings.push(`capacity_probe.${key} \u306F1\u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A ${fallback} \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}function classify(outcome){switch(outcome.failure){case"timeout":return"timeout";case"spawn":return"spawn_failed";case"empty":
42
- return"empty_output";default:return"exit_status"}}function failed(reason){return{payload:capacityError(reason),ok:false}}async function probeCapacityOutcome(probe,cwd,log,env){const outcome=await runHook({id:"capacity_probe",command:probe.command,timeout:probe.timeout},cwd,env);if(!outcome.ok){const reason=classify(outcome);log(` \u26A0\uFE0F capacity_probe \u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${reason}: ${(outcome.reason??"\u7406\u7531\u4E0D\u660E").slice(0,200)}\uFF09\u3002\u7D9A\u884C\u3057\u307E\u3059`);return failed(reason)}let parsed;
43
- try{parsed=JSON.parse(outcome.stdout)}catch{log(" \u26A0\uFE0F capacity_probe \u306E\u51FA\u529B\u3092 JSON \u3068\u3057\u3066\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u7D9A\u884C\u3057\u307E\u3059");return failed("invalid_json")}try{const report=probe.format==="claude_auto_switch/v1"?adaptClaudeAutoSwitch(parsed,probe.identity):adaptCanonical(parsed,probe.identity);if(report===null){log(` \u26A0\uFE0F capacity_probe \u306E\u51FA\u529B\u304C ${probe.format} \u306E\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\
44
- \u7D9A\u884C\u3057\u307E\u3059`);return failed("unexpected_shape")}const payload=encodeCapacity(report);const ok=report.error===void 0&&JSON.parse(payload).error===void 0;return{payload,ok}}catch{log(` \u26A0\uFE0F capacity_probe \u306E\u51FA\u529B\u3092 ${probe.format} \u3068\u3057\u3066\u5909\u63DB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u7D9A\u884C\u3057\u307E\u3059`);return failed("unexpected_shape")}}var REUSE_LAST_SUCCESS_MS=30*60*1e3;var CapacityReporter=class{constructor(probe,cwd,log,env=process.
45
- env,now=()=>Date.now()){this.probe=probe;this.cwd=cwd;this.log=log;this.env=env;this.now=now}probe;cwd;log;env;now;cached=null;lastSuccess=null;lastSuccessAt=0;lastProbedAt=0;pending=false;running=false;async refreshIfDue(){const at=this.now();if(this.cached!==null&&at-this.lastProbedAt<this.probe.interval*1e3)return;await this.refresh()}async refresh(){if(this.running)return;this.running=true;try{const outcome=await probeCapacityOutcome(this.probe,this.cwd,this.log,this.env);const at=this.now();
46
- if(outcome.ok){this.lastSuccess=outcome.payload;this.lastSuccessAt=at}const reuse=!outcome.ok&&this.lastSuccess!==null&&at-this.lastSuccessAt<REUSE_LAST_SUCCESS_MS;this.cached=reuse?this.lastSuccess:outcome.payload;if(reuse){this.log(" \u76F4\u524D\u306B\u53D6\u5F97\u3067\u304D\u305F\u67A0\u60C5\u5831\u3092\u9001\u308A\u307E\u3059\uFF08\u4E00\u6642\u7684\u306A\u5931\u6557\u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF09")}this.lastProbedAt=this.now();this.pending=true}finally{this.running=false}}take(){
47
- if(!this.pending||this.cached===null)return null;this.pending=false;return this.cached}rearm(){if(this.cached!==null)this.pending=true}};function evaluateOwnership(item,runnerId,runId){if(!item){return{verdict:"unknown",reason:"\u30A2\u30A4\u30C6\u30E0\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F"}}if(runnerId===""||runId===""){return{verdict:"unknown",reason:"\u81EA\u5206\u306E runner_id / run_id \u304C\u7A7A\u3067\u3059"}}const status=(item.status??"").trim();if(status===""){return{verdict:"unknown",reason:"\u5FDC\u7B54\u306B status \u304C\u3042\u308A\u307E\u305B\u3093"}}if(status!=="processing"){return{verdict:"\
9
+ if(!sameAsDefault(key,launcher)){warnings.push(`claude_launcher.${key} \u306F\u307E\u3060\u9069\u7528\u3055\u308C\u307E\u305B\u3093\uFF08\u3053\u306E\u7248\u3067\u52B9\u304F\u306E\u306F bin \u3060\u3051\u3067\u3059\uFF09`)}}return{launcher,warnings}}import{randomBytes}from"crypto";import fs2 from"fs";import os from"os";import path2 from"path";function evaluateOwnership(item,runnerId,runId){if(!item){return{verdict:"unknown",reason:"\u30A2\u30A4\u30C6\u30E0\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F"}}if(runnerId===""||runId===""){return{verdict:"unknown",reason:"\u81EA\u5206\u306E runner_id / run_id \u304C\u7A7A\u3067\u3059"}}const status=(item.status??"").trim();if(status===""){return{verdict:"unknown",reason:"\u5FDC\u7B54\u306B status \u304C\u3042\u308A\u307E\u305B\u3093"}}if(status!=="processing"){return{verdict:"\
48
10
  lost",reason:`status=${status}\uFF08processing \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09`}}const itemRunner=(item.runner_id??"").trim();const itemRun=(item.run_id??"").trim();if(itemRunner===""||itemRun===""){return{verdict:"unknown",reason:"\u5FDC\u7B54\u306B runner_id / run_id \u304C\u3042\u308A\u307E\u305B\u3093"}}if(itemRunner!==runnerId){return{verdict:"lost",reason:`\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08runner=${itemRunner}\uFF09`}}
49
- if(itemRun!==runId){return{verdict:"lost",reason:`\u540C\u3058\u6A5F\u4F53\u306E\u5225\u306E\u8D77\u52D5\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08run_id \u304C\u4E00\u81F4\u3057\u307E\u305B\u3093\uFF09`}}return{verdict:"held",reason:"processing \u304B\u3064 runner_id / run_id \u304C\u4E00\u81F4"}}var OWNERSHIP_CHECK_INTERVAL_SEC=60;import{createHash as createHash2}from"crypto";import fs from"fs";import path from"path";var DEFAULT_PLAN_GATE_TIMEOUT_SEC=30;var DEFAULT_PLAN_GATE_MAX_SKIP_SEC=3600;var MAX_STATE_BYTES=4096;function parsePlanGate(value,warnings){if(value===void 0||value===null)return null;if(typeof value!=="object"||Array.isArray(value)){warnings.push("operations.plan_gate \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6BCE\u56DE\u8A08\u753B\u3057\u307E\u3059\uFF09");return null}const o=value;const entry={timeout:DEFAULT_PLAN_GATE_TIMEOUT_SEC,
11
+ if(itemRun!==runId){return{verdict:"lost",reason:`\u540C\u3058\u6A5F\u4F53\u306E\u5225\u306E\u8D77\u52D5\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08run_id \u304C\u4E00\u81F4\u3057\u307E\u305B\u3093\uFF09`}}return{verdict:"held",reason:"processing \u304B\u3064 runner_id / run_id \u304C\u4E00\u81F4"}}var OWNERSHIP_CHECK_INTERVAL_SEC=60;import{createHash}from"crypto";import fs from"fs";import path from"path";var DEFAULT_PLAN_GATE_TIMEOUT_SEC=30;var DEFAULT_PLAN_GATE_MAX_SKIP_SEC=3600;var MAX_STATE_BYTES=4096;function parsePlanGate(value,warnings){if(value===void 0||value===null)return null;if(typeof value!=="object"||Array.isArray(value)){warnings.push("operations.plan_gate \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6BCE\u56DE\u8A08\u753B\u3057\u307E\u3059\uFF09");return null}const o=value;const entry={timeout:DEFAULT_PLAN_GATE_TIMEOUT_SEC,
50
12
  ...o,id:"plan-gate"};const{hooks,warnings:w}=validateHooks([entry],"operations.plan_gate");warnings.push(...w.map(m=>`${m}\uFF08\u6BCE\u56DE\u8A08\u753B\u3057\u307E\u3059\uFF09`));const hook=hooks[0];if(!hook)return null;let maxSkipSec=DEFAULT_PLAN_GATE_MAX_SKIP_SEC;const raw=o["max_skip_sec"];if(typeof raw==="number"&&Number.isFinite(raw)&&raw>0){maxSkipSec=Math.trunc(raw)}else if(raw!==void 0&&raw!==null){warnings.push(`operations.plan_gate.max_skip_sec \u306F\u6B63\u306E\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A\u306E ${DEFAULT_PLAN_GATE_MAX_SKIP_SEC}\
51
- \u79D2\u3092\u4F7F\u3044\u307E\u3059\uFF09`)}return{hook,maxSkipSec}}function planGateStatePath(stateDir,projectKey){return path.join(stateDir,`task-loop-${projectKey}.plan-gate.json`)}function fingerprintOf(stdout){const line=stdout.split(/\r?\n/).map(l=>l.trim()).find(l=>l!=="");if(line===void 0)return null;return createHash2("sha256").update(line).digest("hex")}function readPlanGateState(statePath){try{if(fs.statSync(statePath).size>MAX_STATE_BYTES)return null;const parsed=JSON.parse(fs.readFileSync(
13
+ \u79D2\u3092\u4F7F\u3044\u307E\u3059\uFF09`)}return{hook,maxSkipSec}}function planGateStatePath(stateDir,projectKey){return path.join(stateDir,`task-loop-${projectKey}.plan-gate.json`)}function fingerprintOf(stdout){const line=stdout.split(/\r?\n/).map(l=>l.trim()).find(l=>l!=="");if(line===void 0)return null;return createHash("sha256").update(line).digest("hex")}function readPlanGateState(statePath){try{if(fs.statSync(statePath).size>MAX_STATE_BYTES)return null;const parsed=JSON.parse(fs.readFileSync(
52
14
  statePath,"utf8"));const fingerprint=parsed["fingerprint"];const plannedAtMs=parsed["planned_at_ms"];if(typeof fingerprint!=="string"||!/^[0-9a-f]{64}$/.test(fingerprint))return null;if(typeof plannedAtMs!=="number"||!Number.isFinite(plannedAtMs))return null;return{fingerprint,plannedAtMs}}catch{return null}}function recordPlanned(statePath,fingerprint,nowMs){const tmp=`${statePath}.${process.pid}.tmp`;try{fs.mkdirSync(path.dirname(statePath),{recursive:true});fs.writeFileSync(tmp,JSON.stringify(
53
15
  {fingerprint,planned_at_ms:nowMs,planned_at:new Date(nowMs).toISOString()}));fs.renameSync(tmp,statePath);return true}catch{fs.rmSync(tmp,{force:true});return false}}async function evaluatePlanGate(gate,opts){const run=opts.run??((h,cwd)=>runHook(h,cwd));const outcome=await run(gate.hook,opts.cwd);if(!outcome.ok){return{skip:false,fingerprint:null,reason:`\u30D5\u30C3\u30AF\u304C\u5931\u6557\u3057\u305F\u305F\u3081\u8A08\u753B\u3057\u307E\u3059\uFF08${outcome.reason??"\u7406\u7531\u4E0D\u660E"}\uFF09`}}
54
16
  const fingerprint=fingerprintOf(outcome.stdout);if(fingerprint===null){return{skip:false,fingerprint:null,reason:"\u30D5\u30C3\u30AF\u304C\u6307\u7D0B\u3092\u51FA\u3055\u306A\u304B\u3063\u305F\u305F\u3081\u8A08\u753B\u3057\u307E\u3059"}}const short=fingerprint.slice(0,12);const prev=readPlanGateState(opts.statePath);if(prev===null){return{skip:false,fingerprint,reason:`\u524D\u56DE\u8A08\u753B\u6642\u306E\u8A18\u9332\u304C\u7121\u3044\u305F\u3081\u8A08\u753B\u3057\u307E\u3059\uFF08\u6307\u7D0B ${short}\
@@ -88,15 +50,15 @@ env){const file=localConfigPath(projectId,env);try{const parsed=JSON.parse(fs2.r
88
50
  ${err.message}`,{cause:err})}}function resolveRunnerId(stateDir,env=process.env){const file=env.RUNNER_ID_FILE&&env.RUNNER_ID_FILE.trim()!==""?env.RUNNER_ID_FILE:path2.join(stateDir,"runner-id");let candidate=env.RUNNER_ID?.trim()??"";if(!candidate){try{candidate=fs2.readFileSync(file,"utf8").split("\n")[0]?.trim()??""}catch{candidate=""}}let warning=null;if(candidate&&!/^[A-Za-z0-9._-]+$/.test(candidate)){warning=`runner_id '${candidate}' \u306B\u4F7F\u3048\u306A\u3044\u6587\u5B57\u304C\u542B\u307E\u308C\u308B\u305F\u3081\u63A1\u756A\u3057\u76F4\u3057\u307E\u3057\u305F\uFF08[A-Za-z0-9._-] \u306E\u307F\uFF09`;
89
51
  candidate=""}if(!candidate){const host=(os.hostname()||"host").split(".")[0]??"host";const hostPart=host.replace(/[^A-Za-z0-9._-]/g,"-").slice(0,32)||"host";candidate=`${hostPart}-${randomBytes(4).toString("hex")}`;try{fs2.mkdirSync(path2.dirname(file),{recursive:true,mode:448});fs2.writeFileSync(file,`${candidate}
90
52
  `,{mode:384})}catch{warning=`runner_id \u3092 ${file} \u3078\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u8D77\u52D5\u306E\u305F\u3073\u306B\u5225\u30E9\u30F3\u30CA\u30FC\u3068\u3057\u3066\u767B\u9332\u3055\u308C\u3001\u53F0\u6570\u4E0A\u9650\u306B\u9054\u3057\u307E\u3059`}}return{runnerId:candidate,warning}}function buildRunId(runnerId,now=new Date){const stamp=now.toISOString().replace(/[-:]/g,"").replace(/\.\d+Z$/,"Z");return`${runnerId}#${stamp}#${process.pid}`}function buildLoopConfig(input){
91
- const env=input.env??process.env;const warnings=[];const num2=(raw,fallback,min=1,label="")=>{const r=sanitizeInt(raw,fallback,min);if(r.warning)warnings.push(`${label}${r.warning}`);return r.value};if(input.daemon&&input.maxCycles!==void 0){warnings.push("--daemon \u3068 --max-cycles \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08--daemon \u3092\u512A\u5148\u3057\u3001--max-cycles \u306F\u7121\u8996\u3057\u307E\u3059\uFF09")}const local=loadLocalConfig(input.projectId,env);
53
+ const env=input.env??process.env;const warnings=[];const num=(raw,fallback,min=1,label="")=>{const r=sanitizeInt(raw,fallback,min);if(r.warning)warnings.push(`${label}${r.warning}`);return r.value};if(input.daemon&&input.maxCycles!==void 0){warnings.push("--daemon \u3068 --max-cycles \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08--daemon \u3092\u512A\u5148\u3057\u3001--max-cycles \u306F\u7121\u8996\u3057\u307E\u3059\uFF09")}const local=loadLocalConfig(input.projectId,env);
92
54
  if(local.schedule_command&&local.schedule_command.length>0){warnings.push("\u30ED\u30FC\u30AB\u30EB\u8A2D\u5B9A\u306E schedule_command \u306F\u4F7F\u308F\u308C\u307E\u305B\u3093\uFF08\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u306E\u5224\u5B9A\u306F twp-cli \u5185\u3067\u884C\u3044\u307E\u3059\uFF09\u3002\u8A2D\u5B9A\u304B\u3089\u524A\u9664\u3057\u3066\u304F\u3060\u3055\u3044")}if(nonEmpty(env.TWP_TASK_LOOP_SCHEDULE_CMD)){warnings.push("TWP_TASK_LOOP_SCHEDULE_CMD \u306F\u4F7F\u308F\u308C\u307E\u305B\u3093\uFF08\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u306E\u5224\u5B9A\u306F twp-c\
93
- li \u5185\u3067\u884C\u3044\u307E\u3059\uFF09")}const stateDir=loopStateDir(env);const{runnerId,warning:runnerWarning}=resolveRunnerId(stateDir,env);if(runnerWarning)warnings.push(runnerWarning);const aiTimeoutSec=num2(env.AI_TIMEOUT??local.ai_timeout,4500,60,"AI_TIMEOUT=");const aiSoftDeadlineRatio=Math.min(num2(env.AI_SOFT_DEADLINE_RATIO??local.ai_soft_deadline_ratio,80,1,"AI_SOFT_DEADLINE_RATIO="),100);const planLockTtlSec=num2(env.PLAN_LOCK_TTL,1800,60,"PLAN_LOCK_TTL=");const workspace=nonEmpty(
55
+ li \u5185\u3067\u884C\u3044\u307E\u3059\uFF09")}const stateDir=loopStateDir(env);const{runnerId,warning:runnerWarning}=resolveRunnerId(stateDir,env);if(runnerWarning)warnings.push(runnerWarning);const aiTimeoutSec=num(env.AI_TIMEOUT??local.ai_timeout,4500,60,"AI_TIMEOUT=");const aiSoftDeadlineRatio=Math.min(num(env.AI_SOFT_DEADLINE_RATIO??local.ai_soft_deadline_ratio,80,1,"AI_SOFT_DEADLINE_RATIO="),100);const planLockTtlSec=num(env.PLAN_LOCK_TTL,1800,60,"PLAN_LOCK_TTL=");const workspace=nonEmpty(
94
56
  local.workspace)??process.cwd();const ai=loadAiConfig(local.ai,local.ai_config_file,workspace);warnings.push(...ai.warnings);const operations=parseOperations(local.operations);warnings.push(...operations.warnings);const claudeLauncher=parseClaudeLauncher(local.claude_launcher);warnings.push(...claudeLauncher.warnings);const capacityProbe=parseCapacityProbe(local.capacity_probe);warnings.push(...capacityProbe.warnings);const prefetch=validateHooks(local.prefetch);warnings.push(...prefetch.warnings);
95
- const preflight=validateHooks(local.preflight,"preflight");warnings.push(...preflight.warnings);return{projectId:input.projectId,projectRef:input.projectRef,apiUrl:input.apiUrl,runnerId,runId:buildRunId(runnerId,input.now??new Date),stateDir,logDir:nonEmpty(env.LOG_DIR)??local.log_dir??path2.join(os.homedir(),".twp-agent-loop","logs"),logRetentionDays:num2(env.LOG_RETENTION_DAYS??local.log_retention_days,7,0,"LOG_RETENTION_DAYS="),workspace,gitIdentity:local.git_identity,safeMode:input.safeMode,
96
- daemon:input.daemon,maxCycles:input.daemon?Number.MAX_SAFE_INTEGER:input.maxCycles??1,intervalSec:input.intervalSec??DEFAULT_INTERVAL_SEC,intervalSource:input.intervalSec!==void 0?"cli":"default",forceRunner:input.forceRunner,engine:nonEmpty(input.engine)??nonEmpty(local.engine)??"",aiTimeoutSec,aiSoftDeadlineRatio,planTimeoutSec:num2(env.PLAN_TIMEOUT??local.plan_timeout,900,60,"PLAN_TIMEOUT="),heartbeatIntervalSec:num2(env.AGENT_LOOP_HEARTBEAT_INTERVAL,120,1,"AGENT_LOOP_HEARTBEAT_INTERVAL="),ownershipCheckIntervalSec:num2(
97
- env.AGENT_LOOP_OWNERSHIP_CHECK_INTERVAL,OWNERSHIP_CHECK_INTERVAL_SEC,0,"AGENT_LOOP_OWNERSHIP_CHECK_INTERVAL="),contendedMax:num2(env.AGENT_LOOP_CONTENDED_MAX,10,1,"AGENT_LOOP_CONTENDED_MAX="),queueUndeterminedMax:num2(env.QUEUE_UNDETERMINED_MAX,5,1,"QUEUE_UNDETERMINED_MAX="),staleReclaimHours:num2(env.STALE_RECLAIM_HOURS,3,0,"STALE_RECLAIM_HOURS="),planLockTtlSec,planLockWaitMaxSec:num2(env.PLAN_LOCK_WAIT_MAX,planLockTtlSec,0,"PLAN_LOCK_WAIT_MAX="),planLockPollIntervalSec:num2(env.PLAN_LOCK_POLL_INTERVAL,
98
- 60,1,"PLAN_LOCK_POLL_INTERVAL="),planLockRenewIntervalSec:num2(env.PLAN_LOCK_RENEW_INTERVAL,Math.trunc(planLockTtlSec/3),1,"PLAN_LOCK_RENEW_INTERVAL="),planLockStealAttempts:num2(env.PLAN_LOCK_STEAL_ATTEMPTS,3,0,"PLAN_LOCK_STEAL_ATTEMPTS="),planLockPermanentMax:num2(env.PLAN_LOCK_PERMANENT_MAX,3,1,"PLAN_LOCK_PERMANENT_MAX="),scheduleMidcycleMax:num2(env.SCHEDULE_MIDCYCLE_MAX,6,1,"SCHEDULE_MIDCYCLE_MAX="),blockerRecoveryMaxPerDay:num2(env.BLOCKER_RECOVERY_MAX_PER_DAY,2,1,"BLOCKER_RECOVERY_MAX_PER\
99
- _DAY="),releaseRerunAutoEnqueue:env.RELEASE_RERUN_AUTOENQUEUE_ENABLED!=="false",releaseRerunMaxPerCause:num2(env.RELEASE_RERUN_MAX_PER_CAUSE,2,1,"RELEASE_RERUN_MAX_PER_CAUSE="),writebackMaxAgeDays:num2(env.AGENT_LOOP_WRITEBACK_MAX_AGE_DAYS,7,1,"AGENT_LOOP_WRITEBACK_MAX_AGE_DAYS="),scheduleTimezone:nonEmpty(env.AGENT_LOOP_SCHEDULE_TZ)??"Asia/Tokyo",counterTimezone:nonEmpty(env.AGENT_LOOP_COUNTER_TZ)??"Asia/Tokyo",compileCommand:local.compile_command!==void 0&&local.compile_command.length>0?local.
100
- compile_command:null,charterFile:nonEmpty(env.CHARTER_FILE)??nonEmpty(local.charter_file)??"CONSTITUTION.md",charterEnabled:resolveCharterEnabled(env.CHARTER_ENABLED,local.charter_enabled,m=>warnings.push(m)),charterPrefix:charterWrapper(env.CHARTER_PREFIX,local.charter_prefix,"charter_prefix",m=>warnings.push(m)),charterSuffix:charterWrapper(env.CHARTER_SUFFIX,local.charter_suffix,"charter_suffix",m=>warnings.push(m)),planEnabled:resolveBoolSetting(env.PLAN_ENABLED,local.plan_enabled,"plan_enab\
101
- led",true,"\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u3092\u5B9F\u884C\u3057\u307E\u3059",m=>warnings.push(m)),ai:ai.config,aiSource:{inline:local.ai,file:local.ai_config_file},operations:operations.operations,claudeLauncher:claudeLauncher.launcher,capacityProbe:capacityProbe.probe,prefetch:prefetch.hooks,preflight:preflight.hooks,configHash:ai.config.hash(),version:input.version,warnings,releaseOutcomeLogPath:releaseOutcomeLogPath(env,stateDir)}}function localDate(timezone,now=new Date){const fmt=new Intl.
102
- DateTimeFormat("en-CA",{timeZone:timezone,year:"numeric",month:"2-digit",day:"2-digit"});return fmt.format(now)}export{runHook,runPrefetch,runPreflight,formatHookWiring,formatHookIds,CapacityReporter,parseClaudeLauncher,evaluateOwnership,planGateStatePath,recordPlanned,evaluatePlanGate,describeOperations,DEFAULT_INTERVAL_SEC,STATE_DIR_NAME,LEGACY_STATE_DIR_NAME,loopStateDir,exportStateDirEnv,localConfigPath,loadLocalConfig,buildLoopConfig,localDate};
57
+ const preflight=validateHooks(local.preflight,"preflight");warnings.push(...preflight.warnings);return{projectId:input.projectId,projectRef:input.projectRef,apiUrl:input.apiUrl,runnerId,runId:buildRunId(runnerId,input.now??new Date),stateDir,logDir:nonEmpty(env.LOG_DIR)??local.log_dir??path2.join(os.homedir(),".twp-agent-loop","logs"),logRetentionDays:num(env.LOG_RETENTION_DAYS??local.log_retention_days,7,0,"LOG_RETENTION_DAYS="),workspace,gitIdentity:local.git_identity,safeMode:input.safeMode,daemon:input.
58
+ daemon,maxCycles:input.daemon?Number.MAX_SAFE_INTEGER:input.maxCycles??1,intervalSec:input.intervalSec??DEFAULT_INTERVAL_SEC,intervalSource:input.intervalSec!==void 0?"cli":"default",forceRunner:input.forceRunner,engine:nonEmpty(input.engine)??nonEmpty(local.engine)??"",aiTimeoutSec,aiSoftDeadlineRatio,planTimeoutSec:num(env.PLAN_TIMEOUT??local.plan_timeout,900,60,"PLAN_TIMEOUT="),heartbeatIntervalSec:num(env.AGENT_LOOP_HEARTBEAT_INTERVAL,120,1,"AGENT_LOOP_HEARTBEAT_INTERVAL="),ownershipCheckIntervalSec:num(
59
+ env.AGENT_LOOP_OWNERSHIP_CHECK_INTERVAL,OWNERSHIP_CHECK_INTERVAL_SEC,0,"AGENT_LOOP_OWNERSHIP_CHECK_INTERVAL="),contendedMax:num(env.AGENT_LOOP_CONTENDED_MAX,10,1,"AGENT_LOOP_CONTENDED_MAX="),queueUndeterminedMax:num(env.QUEUE_UNDETERMINED_MAX,5,1,"QUEUE_UNDETERMINED_MAX="),staleReclaimHours:num(env.STALE_RECLAIM_HOURS,3,0,"STALE_RECLAIM_HOURS="),planLockTtlSec,planLockWaitMaxSec:num(env.PLAN_LOCK_WAIT_MAX,planLockTtlSec,0,"PLAN_LOCK_WAIT_MAX="),planLockPollIntervalSec:num(env.PLAN_LOCK_POLL_INTERVAL,
60
+ 60,1,"PLAN_LOCK_POLL_INTERVAL="),planLockRenewIntervalSec:num(env.PLAN_LOCK_RENEW_INTERVAL,Math.trunc(planLockTtlSec/3),1,"PLAN_LOCK_RENEW_INTERVAL="),planLockStealAttempts:num(env.PLAN_LOCK_STEAL_ATTEMPTS,3,0,"PLAN_LOCK_STEAL_ATTEMPTS="),planLockPermanentMax:num(env.PLAN_LOCK_PERMANENT_MAX,3,1,"PLAN_LOCK_PERMANENT_MAX="),scheduleMidcycleMax:num(env.SCHEDULE_MIDCYCLE_MAX,6,1,"SCHEDULE_MIDCYCLE_MAX="),blockerRecoveryMaxPerDay:num(env.BLOCKER_RECOVERY_MAX_PER_DAY,2,1,"BLOCKER_RECOVERY_MAX_PER_DAY="),
61
+ releaseRerunAutoEnqueue:env.RELEASE_RERUN_AUTOENQUEUE_ENABLED!=="false",releaseRerunMaxPerCause:num(env.RELEASE_RERUN_MAX_PER_CAUSE,2,1,"RELEASE_RERUN_MAX_PER_CAUSE="),writebackMaxAgeDays:num(env.AGENT_LOOP_WRITEBACK_MAX_AGE_DAYS,7,1,"AGENT_LOOP_WRITEBACK_MAX_AGE_DAYS="),scheduleTimezone:nonEmpty(env.AGENT_LOOP_SCHEDULE_TZ)??"Asia/Tokyo",counterTimezone:nonEmpty(env.AGENT_LOOP_COUNTER_TZ)??"Asia/Tokyo",compileCommand:local.compile_command!==void 0&&local.compile_command.length>0?local.compile_command:
62
+ null,charterFile:nonEmpty(env.CHARTER_FILE)??nonEmpty(local.charter_file)??"CONSTITUTION.md",charterEnabled:resolveCharterEnabled(env.CHARTER_ENABLED,local.charter_enabled,m=>warnings.push(m)),charterPrefix:charterWrapper(env.CHARTER_PREFIX,local.charter_prefix,"charter_prefix",m=>warnings.push(m)),charterSuffix:charterWrapper(env.CHARTER_SUFFIX,local.charter_suffix,"charter_suffix",m=>warnings.push(m)),planEnabled:resolveBoolSetting(env.PLAN_ENABLED,local.plan_enabled,"plan_enabled",true,"\u8A08\u753B\u30D5\u30A7\u30FC\
63
+ \u30BA\u3092\u5B9F\u884C\u3057\u307E\u3059",m=>warnings.push(m)),ai:ai.config,aiSource:{inline:local.ai,file:local.ai_config_file},operations:operations.operations,claudeLauncher:claudeLauncher.launcher,capacityProbe:capacityProbe.probe,prefetch:prefetch.hooks,preflight:preflight.hooks,configHash:ai.config.hash(),version:input.version,warnings,releaseOutcomeLogPath:releaseOutcomeLogPath(env,stateDir)}}function localDate(timezone,now=new Date){const fmt=new Intl.DateTimeFormat("en-CA",{timeZone:timezone,
64
+ year:"numeric",month:"2-digit",day:"2-digit"});return fmt.format(now)}export{parseClaudeLauncher,evaluateOwnership,planGateStatePath,recordPlanned,evaluatePlanGate,describeOperations,DEFAULT_INTERVAL_SEC,STATE_DIR_NAME,LEGACY_STATE_DIR_NAME,loopStateDir,exportStateDirEnv,localConfigPath,loadLocalConfig,buildLoopConfig,localDate};
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{readCsvFileText}from"./chunk-QLENN5DD.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-EO3M43TN.js";import{boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{SALES_DEPOSITS_PATH,isExactNumericId,
4
- resolveNamed}from"./chunk-MYWDL3WX.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var PATH=SALES_DEPOSITS_PATH;function salesAdminForbidden(what){return body=>body?.error==="permission_denied"?featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"):`${what}\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}var FORBIDDEN=salesAdminForbidden("\u5165\u91D1");var ALLOCATION_STATUSES={
3
+ import{readCsvFileText}from"./chunk-QLENN5DD.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-G6RLNOIZ.js";import{boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{SALES_DEPOSITS_PATH,isExactNumericId,
4
+ resolveNamed}from"./chunk-ZSPWHEBL.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var PATH=SALES_DEPOSITS_PATH;function salesAdminForbidden(what){return body=>body?.error==="permission_denied"?featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"):`${what}\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}var FORBIDDEN=salesAdminForbidden("\u5165\u91D1");var ALLOCATION_STATUSES={
5
5
  allocated:"\u5F15\u5F53\u6E08",shortage:"\u672A\u5165\u91D1\u6709",excess:"\u5165\u91D1\u8D85\u904E\u6709",transfer_fee_resolved:"\u624B\u6570\u6599\u51E6\u7406\u6E08"};var EXCESS_REASONS={transfer_fee:"\u632F\u8FBC\u624B\u6570\u6599",agency_fee:"\u4EE3\u884C\u624B\u6570\u6599\uFF08\u53E3\u5EA7\u632F\u66FF \u57FA\u672C\u5229\u7528\u6599\uFF09",partial:"\u4E00\u90E8\u5165\u91D1",offset:"\u76F8\u6BBA",overpayment:"\u904E\u5165\u91D1",other:"\u305D\u306E\u4ED6"};var EXCESS_TAX_CATEGORIES={taxable_purchase_10:"\
6
6
  \u8AB2\u7A0E\u4ED5\u5165 10%",not_applicable:"\u5BFE\u8C61\u5916"};var BULK_MAX_ROWS=100;var PLAN_MAX_ITEMS=50;var PLAN_MAX_ALLOCATIONS=100;var FILE_MAX_BYTES=1024*1024;var EXCESS_NOTE_MAX_CHARS=255;var PLAN_MEMO_MAX_CHARS=1e3;var CONTENT_MAX_CHARS=1e6;var LIST_COLUMNS=["id","deposit_date","company_name","payee_name","deposit_amount","allocated_amount","unallocated_amount","allocation_status"];var GET_COLUMNS=[...LIST_COLUMNS,"memo","excess_reason","excess_amount","excess_note","excess_tax_categ\
7
7
  ory","excess_tax_amount"];var ALLOCATION_COLUMNS=["id","invoice_id","invoice_no","invoice_title","invoice_date","allocated_amount","invoice_remaining_amount"];function labelsHelp(table){return Object.entries(table).map(([code,name])=>`${code}\uFF08${name}\uFF09`).join(" / ")}function refsOf(table){return Object.entries(table).map(([code,name])=>({id:code,name,code}))}function usageOf(op){return`twp deposit ${op} help`}function yen(value){return typeof value==="number"?`${value.toLocaleString("ja\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{isValidSkillName,skillDigest}from"./chunk-YJZT3UD3.js";import{describeError}from"./chunk-AT432SCP.js";import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var SKILL_REF=/^([ \t]*)\/([a-z][a-z0-9-]*)(?=[ \t\n]|$)([ \t]+[^\n]*)?/gm;function stripFrontmatter(content){if(!content.startsWith("---"))return content;const m=/^---[ \t]*\r?\n[\s\S]*?\r?\n---[ \t]*(?:\r?\n)?/.exec(content);return m===null?content:content.slice(m[0].length)}function referencedSkills(prompt){const out=[];for(const m of prompt.matchAll(SKILL_REF)){const name=m[2]??"";if(!out.includes(name))out.push(name)}return out}function expandServerSkills(prompt,bodies){if(bodies.size===0)return prompt;
3
+ import{isValidSkillName,skillDigest}from"./chunk-YJZT3UD3.js";import{describeError}from"./chunk-SPZ3GBYC.js";import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var SKILL_REF=/^([ \t]*)\/([a-z][a-z0-9-]*)(?=[ \t\n]|$)([ \t]+[^\n]*)?/gm;function stripFrontmatter(content){if(!content.startsWith("---"))return content;const m=/^---[ \t]*\r?\n[\s\S]*?\r?\n---[ \t]*(?:\r?\n)?/.exec(content);return m===null?content:content.slice(m[0].length)}function referencedSkills(prompt){const out=[];for(const m of prompt.matchAll(SKILL_REF)){const name=m[2]??"";if(!out.includes(name))out.push(name)}return out}function expandServerSkills(prompt,bodies){if(bodies.size===0)return prompt;
4
4
  return prompt.replace(SKILL_REF,(whole,_indent,name,args)=>{const body=bodies.get(name);if(body===void 0)return whole;return stripFrontmatter(body).replaceAll("$ARGUMENTS",()=>(args??"").trim())})}function prepareSkillOverlay(root,workspace,bodies,provider){const commands=path.join(root,".claude","commands");fs.rmSync(root,{recursive:true,force:true});fs.mkdirSync(commands,{recursive:true});const src=path.join(workspace,".claude","commands");let names=[];try{names=fs.readdirSync(src).filter(f=>f.
5
5
  endsWith(".md"))}catch{}for(const f of names){const from=path.join(src,f);try{if(fs.statSync(from).isFile())fs.copyFileSync(from,path.join(commands,f))}catch{}}for(const[name,body]of bodies){if(!isValidSkillName(name))continue;fs.writeFileSync(path.join(commands,`${name}.md`),body,"utf8")}if(/^[a-z0-9-]+$/.test(provider)){const rel=path.join("scripts","agent-adapters","providers",`${provider}.md`);const from=path.join(workspace,rel);if(fs.existsSync(from)){fs.mkdirSync(path.dirname(path.join(root,
6
6
  rel)),{recursive:true});fs.copyFileSync(from,path.join(root,rel))}}}function unwrap(json,key){if(json===null||typeof json!=="object"||Array.isArray(json))return null;const top=json;const data=top["data"];if(data!==null&&typeof data==="object"&&!Array.isArray(data)&&key in data){return data}return top}function isRevision(v){return typeof v==="number"&&Number.isInteger(v)&&v>=0}function parseSkillList(res){const b=unwrap(res.json,"skills");const raw=b?.["skills"];if(!Array.isArray(raw))return null;