@tocca-systems/twp-cli 0.46.0 → 0.48.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 (72) hide show
  1. package/CHANGELOG.public.md +16 -0
  2. package/README.md +59 -9
  3. package/dist/{agent-loop-RMJXHBNG.js → agent-loop-XKH5YE6A.js} +1 -1
  4. package/dist/{ai-dispatch-L6XZCCU4.js → ai-dispatch-FGVNSM6L.js} +2 -2
  5. package/dist/{analysis-KUCETWIJ.js → analysis-GAU2A3FU.js} +1 -1
  6. package/dist/{api-command-67456PBS.js → api-command-26MLBIZC.js} +2 -2
  7. package/dist/{app-7227DY7N.js → app-Y7MAQAPC.js} +2 -2
  8. package/dist/attendance-correct-5SFXA4DC.js +51 -0
  9. package/dist/{attendance-lists-NVRU2NLY.js → attendance-lists-3T7S7QF5.js} +1 -1
  10. package/dist/{backlog-XZB35X7I.js → backlog-F4EWY7MT.js} +1 -1
  11. package/dist/{budget-FOFE3YUJ.js → budget-QFUGQIPZ.js} +1 -1
  12. package/dist/{chunk-3WHD2YVF.js → chunk-4F2ONF4P.js} +35 -25
  13. package/dist/{chunk-OLBRIPOS.js → chunk-6TPGATAG.js} +1 -1
  14. package/dist/chunk-6ZB7A6VD.js +9 -0
  15. package/dist/{chunk-SBWCQAHT.js → chunk-A65V3K75.js} +1 -1
  16. package/dist/{chunk-QVZGNHRE.js → chunk-BN26WHLS.js} +1 -1
  17. package/dist/{chunk-N6AXAGS2.js → chunk-EZGN7PTO.js} +1 -1
  18. package/dist/{chunk-OVBKORPC.js → chunk-FZWRYJVM.js} +1 -1
  19. package/dist/{chunk-V24LKF3V.js → chunk-GOZCJLRA.js} +1 -1
  20. package/dist/{chunk-AKPVALTZ.js → chunk-IO5SMECE.js} +1 -1
  21. package/dist/{chunk-JYNZEZYL.js → chunk-JKL6NUVV.js} +1 -1
  22. package/dist/{chunk-G2THOTBW.js → chunk-JTJWDV5U.js} +1 -1
  23. package/dist/{chunk-HS7EKE7M.js → chunk-KS2ZUQFC.js} +1 -1
  24. package/dist/{chunk-ZE75ZDLD.js → chunk-LAXINIDA.js} +1 -1
  25. package/dist/{chunk-L25UV7DE.js → chunk-LUQ2KE6Y.js} +1 -1
  26. package/dist/{chunk-E7MUDY4P.js → chunk-MY2U3CD6.js} +1 -1
  27. package/dist/{chunk-EZMXGIGX.js → chunk-OYDF57NH.js} +1 -1
  28. package/dist/{chunk-YLXW7TIU.js → chunk-QOUDJ7XO.js} +18 -18
  29. package/dist/{chunk-ZM3MTWNT.js → chunk-SA7A5WF2.js} +1 -1
  30. package/dist/{chunk-AITUMFCH.js → chunk-TKGVAWGU.js} +1 -1
  31. package/dist/{chunk-L7IGGC7H.js → chunk-VB2CSFRO.js} +1 -1
  32. package/dist/{chunk-RMAW7KOR.js → chunk-VYT6JAXQ.js} +12 -9
  33. package/dist/{chunk-VMULCEHY.js → chunk-XQRSX2RH.js} +1 -1
  34. package/dist/cli.js +43 -7
  35. package/dist/{commands-5GP3REIU.js → commands-EIWS357Q.js} +44 -41
  36. package/dist/{company-FEXAHUPT.js → company-77JEESSV.js} +2 -2
  37. package/dist/{contract-4RALZBO5.js → contract-26SKL7XT.js} +1 -1
  38. package/dist/{department-VEXXWBZ4.js → department-IZAR2LZ4.js} +1 -1
  39. package/dist/{deposit-2AAST2DE.js → deposit-MYTKRIEX.js} +1 -1
  40. package/dist/{estimate-JQURFOCH.js → estimate-KLS7XJLD.js} +2 -2
  41. package/dist/{inquiry-YTYZYUTY.js → inquiry-52OT4HKJ.js} +1 -1
  42. package/dist/{invoice-PHYBVU6Q.js → invoice-D77PS3WU.js} +2 -2
  43. package/dist/{job-title-ORNY7A7L.js → job-title-U67Z25ZO.js} +1 -1
  44. package/dist/{knowledge-FQ32UNDW.js → knowledge-Q3QLSNDX.js} +1 -1
  45. package/dist/{leave-5V6EPGA3.js → leave-OSIABEFV.js} +1 -1
  46. package/dist/media-HDG4VHAR.js +125 -0
  47. package/dist/{notification-XARS6JH2.js → notification-MEOHWBXH.js} +1 -1
  48. package/dist/{onedrive-N4T6D2OW.js → onedrive-3OBI4B5Z.js} +15 -11
  49. package/dist/{oneshot-7BFL2VON.js → oneshot-ACV6XH5A.js} +1 -1
  50. package/dist/{position-NNJZAT3A.js → position-N7SRF3CF.js} +1 -1
  51. package/dist/{project-FDY6LETQ.js → project-YMJJDSTP.js} +1 -1
  52. package/dist/{prospect-CUWP3E5S.js → prospect-3JD7STGT.js} +1 -1
  53. package/dist/{purchase-2CZTB5H7.js → purchase-2SLZBDD6.js} +2 -2
  54. package/dist/{receivable-KV5PPNLA.js → receivable-6ZRAUHC3.js} +1 -1
  55. package/dist/{registry-NZ2HNT52.js → registry-GQ3L7PZ2.js} +1 -1
  56. package/dist/report-TUSP7RRF.js +127 -0
  57. package/dist/{run-7BS34D2P.js → run-ZPB23AZX.js} +1 -1
  58. package/dist/{sales-ai-review-SVZHVH5P.js → sales-ai-review-7NPG7KV6.js} +1 -1
  59. package/dist/{sales-master-VD6JE2P3.js → sales-master-W5MXNZQ2.js} +1 -1
  60. package/dist/{sales-numbering-P7W6N3OM.js → sales-numbering-RQV2I5G5.js} +1 -1
  61. package/dist/{schedule-command-7JGQMTQY.js → schedule-command-QCGEMBVR.js} +1 -1
  62. package/dist/{server-settings-3E7G56G7.js → server-settings-TUBJ4P57.js} +1 -1
  63. package/dist/{server-skills-OF7USNRM.js → server-skills-Z5DGCJQ7.js} +1 -1
  64. package/dist/{supplier-payment-2KPCVEPH.js → supplier-payment-TDL3IE4H.js} +1 -1
  65. package/dist/{task-MFWWP5Q7.js → task-2SHYSZBZ.js} +35 -30
  66. package/dist/{user-QG3KMK3T.js → user-YEIHSVVN.js} +2 -2
  67. package/dist/{workflow-CSYU4J4U.js → workflow-USG3ZKW6.js} +1 -1
  68. package/package.json +1 -1
  69. package/dist/attendance-K2U7RYDU.js +0 -3
  70. package/dist/chunk-B4APKONL.js +0 -9
  71. package/dist/media-BU23L547.js +0 -63
  72. package/dist/report-PCQPTRUV.js +0 -73
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{loadDomain}from"./chunk-B4APKONL.js";import{evaluateQuery}from"./chunk-ATYA6DG5.js";import{renderDocument,renderOutput}from"./chunk-MXKAEPXA.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-AUAZP2G7.js";import{JsonBodyWithView}from"./chunk-Q3B65OFC.js";import{Resolver,requireDefaultProject}from"./chunk-3WHD2YVF.js";import{ResolveError}from"./chunk-GMBJTG6A.js";import{parseOperationArgs}from"./chunk-F7K37QG6.js";import{ApiError,
3
+ import{loadDomain}from"./chunk-6ZB7A6VD.js";import{evaluateQuery}from"./chunk-ATYA6DG5.js";import{renderDocument,renderOutput}from"./chunk-MXKAEPXA.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-AUAZP2G7.js";import{JsonBodyWithView}from"./chunk-Q3B65OFC.js";import{Resolver,requireDefaultProject}from"./chunk-4F2ONF4P.js";import{ResolveError}from"./chunk-GMBJTG6A.js";import{parseOperationArgs}from"./chunk-F7K37QG6.js";import{ApiError,
4
4
  MultipartBody,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-Y5EN7RYN.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import{stringWidth}from"./chunk-WVS4W5FY.js";
5
5
  import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,positiveInteger,shellQuote}from"./chunk-IOGMOXYF.js";import{isRecord}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE,NetworkError,UsageError}from"./chunk-UFND7FBC.js";import{httpFetch}from"./chunk-J7QYPKVK.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?"":`
@@ -51,15 +51,18 @@ void 0&&(operationName===HELP_TOKEN||options.help&&operationName===void 0)){out(
51
51
  operation.flags));const noRedact=input.flags.has("--no-redact");if(!globals.dryRun&&requiresYes(operation,globals.yes)){throw new UsageError(`twp ${path2} ${operation.name} \u306F${operation.confirmation??"\u7834\u58CA\u7684\u306A\u64CD\u4F5C"}\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u306B\u306F --yes \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002`)}const paging=resolvePaging(operation,path2,input);const downloadTarget=operation.download===void 0?void 0:resolveDownloadTarget(operation.
52
52
  download,path2,operation.name,input);const stored=loadCredentials(profile.name);const apiUrl=effectiveApiUrl(profile,stored?.api_url);const transport=options.fetchImpl??httpFetch;const fetchImpl=globals.debug?withDebug(transport,{write:errOut,...operation.sensitiveBody!==void 0?{omitBodies:operation.sensitiveBody}:{}}):transport;const session=new AuthSession(profile.name,apiUrl,process.env,fetchImpl);const client=new TwpApiClient(apiUrl,session,fetchImpl,options.version);const ctx=buildPrepareContext(
53
53
  {resolver:new Resolver(client,{profile:profile.name,refresh:globals.refresh,...profileAliases(profile.name)}),profileName:profile.name,env:process.env,cwd:process.cwd()});const prepared=operation.prepare===void 0?input:await operation.prepare(input,ctx);const plan=operation.plan(prepared);if(operation.execute!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.fetchCached!==void 0)){throw new Error(`twp ${path2} ${operation.name}: execute \u306F download / paging / fetchCache\
54
- d \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.narrow!==void 0&&(operation.execute!==void 0||operation.download!==void 0||operation.fetchCached!==void 0)){throw new Error(`twp ${path2} ${operation.name}: narrow \u306F execute / download / fetchCached \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.invalidates!==void 0&&(operation.fetchCached!==
55
- void 0||plan.method==="GET")){throw new Error(`twp ${path2} ${operation.name}: invalidates \u306F\u66F8\u304D\u8FBC\u307F\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.fetchCached!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.destructive===true||plan.method!=="GET")){throw new Error(`twp ${path2} ${operation.name}: fetchCached \u306F\u9001\u4FE1\u3057\u306A\u3044\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}
56
- for(const note of operation.plannedNotes?.(prepared)??[])errOut(`${safeText(note)}
54
+ d \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.narrow!==void 0&&(operation.execute!==void 0||operation.download!==void 0||operation.fetchCached!==void 0)){throw new Error(`twp ${path2} ${operation.name}: narrow \u306F execute / download / fetchCached \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.preview!==void 0&&(operation.fetchCached!==void 0||
55
+ operation.download!==void 0||plan.method==="GET")){throw new Error(`twp ${path2} ${operation.name}: preview \u306F\u66F8\u304D\u8FBC\u307F\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.invalidates!==void 0&&(operation.fetchCached!==void 0||plan.method==="GET")){throw new Error(`twp ${path2} ${operation.name}: invalidates \u306F\u66F8\u304D\u8FBC\u307F\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}
56
+ if(operation.fetchCached!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.destructive===true||plan.method!=="GET")){throw new Error(`twp ${path2} ${operation.name}: fetchCached \u306F\u9001\u4FE1\u3057\u306A\u3044\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}for(const note of operation.plannedNotes?.(prepared)??[])errOut(`${safeText(note)}
57
57
  `);if(noRedact)errOut(`${NO_REDACT_NOTICE}
58
- `);if(globals.dryRun){out(line(renderOutput(dryRunValue(apiUrl,plan,noRedact?void 0:operation.sensitiveBody),format,noRedact)));return EXIT_OK}let body;let paged;try{if(operation.execute!==void 0){const executeCtx={send:next=>send(client,apiUrl,next),putSigned:(url,bytes,contentType)=>putSigned(fetchImpl,url,bytes,contentType),putRange:(url,bytes,start,total)=>putRange(fetchImpl,url,bytes,start,total),warn:text=>errOut(`${safeText(text)}
59
- `)};body=await operation.execute(prepared,executeCtx)}else if(operation.fetchCached!==void 0){body=await operation.fetchCached(prepared,ctx)}else if(operation.download!==void 0&&downloadTarget!==void 0){assertWritableTarget(downloadTarget,operation.download.forceFlag);const signedUrl=operation.download.signedUrl;body=await download({client,apiUrl,plan,target:downloadTarget,...signedUrl===void 0?{}:{signed:{fetchImpl,signedUrl}},...operation.download.captureHeaders===void 0?{}:{captureHeaders:operation.
60
- download.captureHeaders}})}else if(paging.all&&operation.paging!==void 0){paged=await fetchAllPages({client,apiUrl,plan,paging:operation.paging,maxPages:paging.maxPages,maxItems:paging.maxItems,warn:errOut});body=paged.body}else{body=await send(client,apiUrl,plan)}}finally{try{operation.invalidates?.(prepared,ctx)}catch{}}if(operation.narrow!==void 0)body=operation.narrow(body,prepared);if(paged!==void 0&&operation.paging!==void 0){paged={...paged,count:operation.paging.items(body).length}}const visible=noRedact?
61
- body:redactSecretValues(body);const document=globals.query===void 0&&format==="text"&&operation.document!==void 0?operation.document(visible):void 0;const value=document!==void 0?void 0:globals.query!==void 0?await evaluateQuery(globals.query,operation.raw(visible)):outputValue(operation,format,visible);out(line(document!==void 0?renderDocument(document,noRedact):renderOutput(value,format,noRedact)));if(paged!==void 0){errOut(`--all: ${paged.pages} \u30DA\u30FC\u30B8\u3092\u8FBF\u3063\u3066 ${paged.
62
- count} \u4EF6\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002
58
+ `);const executeCtx={send:next=>send(client,apiUrl,next),putSigned:(url,bytes,contentType)=>putSigned(fetchImpl,url,bytes,contentType),putRange:(url,bytes,start,total)=>putRange(fetchImpl,url,bytes,start,total),warn:text=>errOut(`${safeText(text)}
59
+ `)};if(operation.preview!==void 0){const checked=await operation.preview(prepared,executeCtx);for(const note of checked.notes)errOut(`${safeText(note)}
60
+ `);for(const warning of checked.warnings)errOut(`${safeText(`\u8B66\u544A: ${warning}`)}
61
+ `);if(!globals.dryRun&&checked.warnings.length>0&&!globals.yes){throw new UsageError(`twp ${path2} ${operation.name}: \u6574\u5408\u306E\u8B66\u544A\u304C ${checked.warnings.length} \u4EF6\u3042\u308B\u305F\u3081\u9001\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5185\u5BB9\u3092\u78BA\u304B\u3081\u305F\u3046\u3048\u3067\u9001\u308B\u306A\u3089 --yes \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002`)}}if(globals.dryRun){out(line(renderOutput(dryRunValue(apiUrl,plan,noRedact?void 0:operation.
62
+ sensitiveBody),format,noRedact)));return EXIT_OK}let body;let paged;try{if(operation.execute!==void 0){body=await operation.execute(prepared,executeCtx)}else if(operation.fetchCached!==void 0){body=await operation.fetchCached(prepared,ctx)}else if(operation.download!==void 0&&downloadTarget!==void 0){assertWritableTarget(downloadTarget,operation.download.forceFlag);const signedUrl=operation.download.signedUrl;body=await download({client,apiUrl,plan,target:downloadTarget,...signedUrl===void 0?{}:
63
+ {signed:{fetchImpl,signedUrl}},...operation.download.captureHeaders===void 0?{}:{captureHeaders:operation.download.captureHeaders}})}else if(paging.all&&operation.paging!==void 0){paged=await fetchAllPages({client,apiUrl,plan,paging:operation.paging,maxPages:paging.maxPages,maxItems:paging.maxItems,warn:errOut});body=paged.body}else{body=await send(client,apiUrl,plan)}}finally{try{operation.invalidates?.(prepared,ctx)}catch{}}if(operation.narrow!==void 0)body=operation.narrow(body,prepared);if(paged!==
64
+ void 0&&operation.paging!==void 0){paged={...paged,count:operation.paging.items(body).length}}const visible=noRedact?body:redactSecretValues(body);const document=globals.query===void 0&&format==="text"&&operation.document!==void 0?operation.document(visible):void 0;const value=document!==void 0?void 0:globals.query!==void 0?await evaluateQuery(globals.query,operation.raw(visible)):outputValue(operation,format,visible);out(line(document!==void 0?renderDocument(document,noRedact):renderOutput(value,
65
+ format,noRedact)));if(paged!==void 0){errOut(`--all: ${paged.pages} \u30DA\u30FC\u30B8\u3092\u8FBF\u3063\u3066 ${paged.count} \u4EF6\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002
63
66
  `)}const pagingNotes=operation.paging===void 0?[]:nextPageNotes(body,prepared,{command:`twp ${path2} ${operation.name}`,flags:operation.flags,profile:globals.profile,readCursor:operation.paging.readCursor});for(const note of[...pagingNotes,...operation.notes?.(visible,prepared)??[]]){errOut(`${safeText(note)}
64
67
  `)}return EXIT_OK}catch(caught){const err=withRejectedGuidance(withForbiddenGuidance(caught,forbidden),rejected);const code=exitCodeFor(err);reportError(err,format,code,errOut);return code}}function withForbiddenGuidance(err,forbidden){if(forbidden===void 0||!(err instanceof ApiError)||err.status!==403)return err;const guidance=typeof forbidden==="function"?forbidden(err.body):forbidden;if(guidance===void 0)return err;const server=err.body?.error_description??err.body?.message;const wrapped=new ApiError(
65
68
  err.status,err.body,"","");wrapped.message=server!==void 0&&server!==""?`${guidance}\uFF08\u30B5\u30FC\u30D0\u306E\u5FDC\u7B54: ${server}\uFF09`:guidance;return wrapped}function withRejectedGuidance(err,guidance){if(guidance===void 0||!(err instanceof ApiError)||err.status!==422)return err;const description=err.body?.error_description;const fallback=err.body?.message;const server=(typeof description==="string"&&description!==""?description:void 0)??(typeof fallback==="string"?fallback:"");const extra=guidance(
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-IXFMXUNT.js";import{MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,manhourNotes,manhourQuery,manhourRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-E7MUDY4P.js";import{boundedText,isoDate}from"./chunk-XDHLO54T.js";import{readBody}from"./chunk-ORUDW52G.js";import{PROJECT_MEMBERS_LIMIT,resolveNamed}from"./chunk-3WHD2YVF.js";import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";
3
+ import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-IXFMXUNT.js";import{MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,manhourNotes,manhourQuery,manhourRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-MY2U3CD6.js";import{boundedText,isoDate}from"./chunk-XDHLO54T.js";import{readBody}from"./chunk-ORUDW52G.js";import{PROJECT_MEMBERS_LIMIT,resolveNamed}from"./chunk-4F2ONF4P.js";import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";
4
4
  import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.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\
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __twpCreateRequire } from 'node:module';
3
3
  const require = __twpCreateRequire(import.meta.url);
4
- import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{parseArgv}from"./chunk-4OSCQLZT.js";import"./chunk-NAUH75MM.js";import"./chunk-Y5EN7RYN.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.46.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
4
+ import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{parseArgv}from"./chunk-4OSCQLZT.js";import"./chunk-NAUH75MM.js";import"./chunk-Y5EN7RYN.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.48.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
5
5
 
6
6
  \u4F7F\u3044\u65B9:
7
7
  twp \u5BFE\u8A71 TUI \u3092\u8D77\u52D5
@@ -164,12 +164,33 @@ import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{parseArgv}from"./chu
164
164
  \u30B4\u30DF\u7BB1\u3078\u79FB\u3059\uFF08--yes \u304C\u8981\u308B\u30FB--permanent \u3067\u30B4\u30DF\u7BB1\u304B\u3089\u5B8C\u5168\u524A\u9664\uFF09
165
165
  twp media bulk-download <\u30D5\u30A1\u30A4\u30EBID>...
166
166
  ZIP \u306B\u307E\u3068\u3081\u3066\u66F8\u304D\u51FA\u3059\uFF08--out \u5FC5\u9808\u30FB50\u4EF6\u307E\u3067\uFF09
167
+ twp media folder list \u30D5\u30A9\u30EB\u30C0\u3092\u4E00\u89A7\u3059\u308B\uFF08--tree \u3067\u5168\u968E\u5C64\u30FB--trash \u3067\u30B4\u30DF\u7BB1\uFF09
168
+ twp media folder get <ID|\u30D1\u30B9>
169
+ \u30D5\u30A9\u30EB\u30C01\u4EF6\u306E\u8A73\u7D30\uFF08\u30D1\u30B9\u306F\u300C\u89AA/\u5B50\u300D\u306E\u5F62\uFF09
170
+ twp media folder create <\u540D\u524D>
171
+ \u30D5\u30A9\u30EB\u30C0\u3092\u4F5C\u308B\uFF08--parent \u3067\u89AA\u3092\u6307\u5B9A\uFF09
172
+ twp media folder update <ID|\u30D1\u30B9>
173
+ \u30D5\u30A9\u30EB\u30C0\u306E\u540D\u524D\u3092\u5909\u3048\u308B\uFF08--name \u5FC5\u9808\uFF09
174
+ twp media folder move <ID|\u30D1\u30B9>
175
+ \u30D5\u30A9\u30EB\u30C0\u3092\u79FB\u3059\uFF08--parent \u304B --root\uFF09
176
+ twp media folder delete <ID|\u30D1\u30B9>
177
+ \u30B4\u30DF\u7BB1\u3078\u79FB\u3059\uFF08--yes \u304C\u8981\u308B\u30FB\u4E2D\u8EAB\u3054\u3068\u306F --recursive\u30FB--permanent \u3067\u5B8C\u5168\u524A\u9664\uFF09
178
+ twp media folder restore <ID>
179
+ \u30B4\u30DF\u7BB1\u306E\u30D5\u30A9\u30EB\u30C0\u3092\u4E2D\u8EAB\u3054\u3068\u623B\u3059
167
180
  twp storage get \u30C6\u30CA\u30F3\u30C8\u306E\u30B9\u30C8\u30EC\u30FC\u30B8\u4F7F\u7528\u91CF\u30FB\u4E0A\u9650\u30FB\u6B8B\u91CF\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09
168
181
  twp attendance status \u3044\u307E\u306E\u6253\u523B\u72B6\u614B\u3068\u3001\u6B21\u306B\u6253\u3066\u308B\u6253\u523B\u3092\u8868\u793A\u3059\u308B
169
182
  twp attendance list \u6253\u523B\u306E\u5C65\u6B74\u3092\u4E00\u89A7\u3059\u308B\uFF08--month / --date\uFF09
170
183
  twp attendance timesheet
171
184
  \u6708\u306E\u52E4\u6020\u8868\uFF08\u65E5\u5225\u3068\u6708\u306E\u5408\u8A08\u30FB--month\uFF09
172
185
  twp attendance punch \u6253\u523B\u3059\u308B\uFF08clock-in / clock-out / break-start / break-end / switch\u3002\u7DE0\u3081\u6E08\u307F\u306E\u6708\u306F\u9001\u3089\u306A\u3044\uFF09
186
+ twp attendance record create
187
+ \u904E\u53BB\u306E\u6642\u523B\u3067\u6253\u523B\u3059\u308B\uFF08--date / --time / --type\u3002\u9001\u308B\u524D\u306B\u7DE0\u3081\u30FB\u6574\u5408\u3092\u78BA\u304B\u3081\u308B\uFF09
188
+ twp attendance record update
189
+ \u6253\u523B\u8A18\u9332\u306E\u30E1\u30E2\u3092\u5909\u3048\u308B
190
+ twp attendance record delete
191
+ \u6253\u523B\u8A18\u9332\u3092\u53D6\u308A\u6D88\u3059\uFF08--reason\u30FB--yes \u5FC5\u9808\uFF09
192
+ twp attendance record move
193
+ \u6253\u523B\u8A18\u9332\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4ED8\u3051\u66FF\u3048\u308B\uFF08--project\uFF09
173
194
  twp attendance overtime \u6708\u306E\u6B8B\u696D\u30B5\u30DE\u30EA\uFF08\u793E\u54E1\u5225\u30FB--month\u30FB--agreement36 \u306736\u5354\u5B9A\u3002\u7BA1\u7406\u8005\uFF09
174
195
  twp attendance closings list
175
196
  \u6708\u306E\u7DE0\u3081\u72B6\u6CC1\uFF08\u7DE0\u3081\u6E08\u307F\u306E\u4EBA\u306E\u4E00\u89A7\u30FB--month\u3002\u7BA1\u7406\u8005\uFF09
@@ -396,6 +417,21 @@ import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{parseArgv}from"./chu
396
417
  twp report submit <\u30EC\u30DD\u30FC\u30C8ID>
397
418
  \u30EC\u30DD\u30FC\u30C8\u3092\u63D0\u51FA\u3059\u308B\uFF08\u5FC5\u9808\u9805\u76EE\u304C\u7A7A\u306A\u3089\u9001\u3089\u306A\u3044\uFF09
398
419
  twp report format list \u4F7F\u3048\u308B\u30EC\u30DD\u30FC\u30C8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3092\u4E00\u89A7\u3059\u308B
420
+ twp report inbox \u78BA\u8A8D\u8005\u3068\u3057\u3066\u898B\u3089\u308C\u308B\u30EC\u30DD\u30FC\u30C8\u3092\u4E00\u89A7\u3059\u308B\uFF08--unread\u30FB--writer\u30FB--from/--to\uFF09
421
+ twp report read <\u30EC\u30DD\u30FC\u30C8ID>
422
+ \u30EC\u30DD\u30FC\u30C8\u3092\u65E2\u8AAD\u306B\u3059\u308B\uFF08--report \u306E\u7E70\u308A\u8FD4\u3057\u3067\u8907\u6570\uFF09
423
+ twp report review <\u30EC\u30DD\u30FC\u30C8ID>
424
+ \u63D0\u51FA\u3055\u308C\u305F\u30EC\u30DD\u30FC\u30C8\u3092\u78BA\u8A8D\u6E08\u307F\u306B\u3059\u308B\uFF08--yes \u304C\u8981\u308B\uFF09
425
+ twp report unreview <\u30EC\u30DD\u30FC\u30C8ID>
426
+ \u78BA\u8A8D\u6E08\u307F\u306E\u30EC\u30DD\u30FC\u30C8\u3092\u63D0\u51FA\u6E08\u307F\u306B\u623B\u3059\uFF08\u78BA\u8A8D\u306E\u53D6\u308A\u6D88\u3057\uFF09
427
+ twp report reject <\u30EC\u30DD\u30FC\u30C8ID>
428
+ \u63D0\u51FA\u3055\u308C\u305F\u30EC\u30DD\u30FC\u30C8\u3092\u5DEE\u3057\u623B\u3059\uFF08--comment-file \u3067\u7406\u7531\u30FB--yes \u304C\u8981\u308B\uFF09
429
+ twp report comment list <\u30EC\u30DD\u30FC\u30C8ID>
430
+ \u30EC\u30DD\u30FC\u30C8\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u4E00\u89A7\u3059\u308B
431
+ twp report comment create <\u30EC\u30DD\u30FC\u30C8ID>
432
+ \u30EC\u30DD\u30FC\u30C8\u306B\u30B3\u30E1\u30F3\u30C8\u3059\u308B\uFF08--body / --body-file\uFF09
433
+ twp report advice <\u30EC\u30DD\u30FC\u30C8ID>
434
+ \u81EA\u5206\u306E\u30EC\u30DD\u30FC\u30C8\u306B AI \u306E\u30A2\u30C9\u30D0\u30A4\u30B9\u3092\u3082\u3089\u3046\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\uFF09
399
435
  twp wiki list \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E wiki \u30DA\u30FC\u30B8\u3092\u4E00\u89A7\u3059\u308B\uFF08--parent \u3067\u89AA\u30DA\u30FC\u30B8\u76F4\u4E0B\uFF09
400
436
  twp wiki get <\u30DA\u30FC\u30B8ID> wiki \u30DA\u30FC\u30B81\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08--output text \u3067\u672C\u6587\u3092\u8AAD\u3080\uFF09
401
437
  twp note list \u30C6\u30CA\u30F3\u30C8\u306E\u30CE\u30FC\u30C8\u3092\u4E00\u89A7\u3059\u308B\uFF08--mine \u3067\u81EA\u5206\u306E\u3082\u306E\uFF09
@@ -815,14 +851,14 @@ TUI \u5185:
815
851
  \u4F1A\u8A71\u30FB\u30ED\u30FC\u30AB\u30EB\u30C4\u30FC\u30EB\uFF08\u30D5\u30A1\u30A4\u30EB\u30FB\u30B3\u30DE\u30F3\u30C9\u30FBgit\uFF09\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u3067\u5B9F\u969B\u306B\u52D5\u304D\u307E\u3059\u3002
816
852
  `;function ignoreEpipe(stream){stream.on("error",err=>{if(err.code==="EPIPE")process.exit(0);throw err})}async function main(){const nodeMajor=Number(process.versions.node.split(".")[0]);if(nodeMajor<22){process.stderr.write(`twp-cli \u306B\u306F Node.js 22 \u4EE5\u4E0A\u304C\u5FC5\u8981\u3067\u3059\uFF08\u73FE\u5728: ${process.versions.node}\uFF09
817
853
  `);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-ZKODJ45K.js");await runAutoUpdateWorker().catch(()=>void 0);return}const[first,...rest]=process.argv.slice(2);if(first==="__complete"||first==="completion"){const completion=await import("./completion-YSP6UE25.js");if(first==="completion"){process.exitCode=completion.runCompletion(rest,process.stdout,process.stderr);return}
818
- const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-NZ2HNT52.js"),import("./config-3CNEQ7KN.js")]);process.exitCode=await completion.runComplete(rest,process.stdout,{loadDomain,profileNames:()=>Object.keys(loadUserConfig().profiles??{})});return}if(first==="configure"){const autoUpdate2=await import("./auto-update-PS5HUWVH.js");autoUpdate2.registerRunning();autoUpdate2.onStartup(VERSION);const{runConfigure}=await import("./configure-XH33RB27.js");process.exitCode=
854
+ const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-GQ3L7PZ2.js"),import("./config-3CNEQ7KN.js")]);process.exitCode=await completion.runComplete(rest,process.stdout,{loadDomain,profileNames:()=>Object.keys(loadUserConfig().profiles??{})});return}if(first==="configure"){const autoUpdate2=await import("./auto-update-PS5HUWVH.js");autoUpdate2.registerRunning();autoUpdate2.onStartup(VERSION);const{runConfigure}=await import("./configure-XH33RB27.js");process.exitCode=
819
855
  await runConfigure(rest);return}const args=parseArgv(process.argv.slice(2));if(args.command==="version"){process.stdout.write(`${VERSION}
820
856
  `);return}if(args.command==="help"){process.stdout.write(HELP);return}if(args.unknown.length>0){process.stderr.write(`\u4E0D\u660E\u306A\u5F15\u6570: ${args.unknown.join(" ")}
821
857
 
822
- ${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-PS5HUWVH.js");autoUpdate.registerRunning();if(args.command==="task-loop"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-7BS34D2P.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:{},argv:args.domainArgv,help:args.
823
- domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-67456PBS.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==
858
+ ${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-PS5HUWVH.js");autoUpdate.registerRunning();if(args.command==="task-loop"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-ZPB23AZX.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:{},argv:args.domainArgv,help:args.
859
+ domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-26MLBIZC.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==
824
860
  void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-EYFT7STE.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-SWR442MR.js");
825
- const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-5GP3REIU.js");process.exitCode=await runTaskLoop(
861
+ const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-EIWS357Q.js");process.exitCode=await runTaskLoop(
826
862
  {action:args.taskLoopAction??"run",project:args.project,profile:args.profile,safe:args.safe,daemon:args.daemon,interval:args.interval,maxCycles:args.maxCycles,forceRunner:args.forceRunner,force:args.stopForce,drain:args.stopDrain,engine:args.engine,version:VERSION,verbose:args.verbose,scheduleNow:args.scheduleNow,scheduleCounts:args.scheduleCounts,scheduleGate:args.scheduleGate,charterOp:args.charterOp,charterInput:args.charterFile,charterOutput:args.charterOut,charterRevision:args.charterRevision,
827
- skillOp:args.skillOp,skillName:args.skillName,skillAll:args.skillAll,skillDir:args.skillDir,yes:args.yes,ais:args.ais,workspace:args.workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-7BFL2VON.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.
828
- allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:{},...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}const{startTui}=await import("./app-7227DY7N.js");await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
863
+ skillOp:args.skillOp,skillName:args.skillName,skillAll:args.skillAll,skillDir:args.skillDir,yes:args.yes,ais:args.ais,workspace:args.workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-ACV6XH5A.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.
864
+ allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:{},...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}const{startTui}=await import("./app-Y7MAQAPC.js");await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
@@ -1,9 +1,9 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{REQUIRE_ZERO_STATUS,ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-N6AXAGS2.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import{LoopSettingsApplier,renderStepBudget}from"./chunk-ZM3MTWNT.js";import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-ZOOEH7ZE.js";import{claudeConfigDir,
4
- resolveDetectDeps}from"./chunk-T4QZO6RQ.js";import{ServerSkillCatalog,formatSkillOrigins}from"./chunk-AITUMFCH.js";import"./chunk-H3WYVFTS.js";import"./chunk-AJO4O5ZF.js";import"./chunk-VRBI2NPI.js";import{resolveProjectRef,uuidProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{AuthSession}from"./chunk-XNLIEUAW.js";import{compareVersionCores,parseVersionCore}from"./chunk-DXXFUNYN.js";import{effectiveApiUrl,resolveProfile}from"./chunk-4VZKNEVN.js";
5
- import{duplicateTaskKeyDropReason,excludedKeyInArgs,extractPlanJson,parseOpsCount,parsePlanExcludeKeys,placeholderTaskKey,releaseDeployDropReason,stepToItem,zeroTargetDropReasons}from"./chunk-L25UV7DE.js";import{CapacityReporter,buildLoopConfig,describeOperations,evaluateOwnership,formatHookIds,formatHookWiring,localDate,loopStateDir,runHook,runPrefetch,runPreflight}from"./chunk-QVPU4HHG.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{exclusiveInflightEntries,formatExclusiveEntry,
6
- normalizeSkillName,skillOfItem,spawnSyncResolved}from"./chunk-AEJHDFXB.js";import{AgentLoopApi,describeError,filterByStatus,isPermanent,pick,pickString}from"./chunk-G2THOTBW.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-GY7KI5E5.js";import{isTaskKey}from"./chunk-II5RVJQN.js";import"./chunk-UFND7FBC.js";import{joinFor}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";
3
+ import{REQUIRE_ZERO_STATUS,ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-EZGN7PTO.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import{LoopSettingsApplier,renderStepBudget}from"./chunk-SA7A5WF2.js";import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-ZOOEH7ZE.js";import{claudeConfigDir,
4
+ resolveDetectDeps}from"./chunk-T4QZO6RQ.js";import{ServerSkillCatalog,formatSkillOrigins}from"./chunk-TKGVAWGU.js";import"./chunk-H3WYVFTS.js";import"./chunk-AJO4O5ZF.js";import"./chunk-VRBI2NPI.js";import{resolveProjectRef,uuidProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{AuthSession}from"./chunk-XNLIEUAW.js";import{compareVersionCores,parseVersionCore}from"./chunk-DXXFUNYN.js";import{effectiveApiUrl,resolveProfile}from"./chunk-4VZKNEVN.js";
5
+ import{duplicateTaskKeyDropReason,excludedKeyInArgs,extractPlanJson,parseOpsCount,parsePlanExcludeKeys,placeholderTaskKey,releaseDeployDropReason,stepToItem,zeroTargetDropReasons}from"./chunk-LUQ2KE6Y.js";import{CapacityReporter,buildLoopConfig,describeOperations,evaluateOwnership,formatHookIds,formatHookWiring,localDate,loopStateDir,runHook,runPrefetch,runPreflight}from"./chunk-QVPU4HHG.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{exclusiveInflightEntries,formatExclusiveEntry,
6
+ normalizeSkillName,skillOfItem,spawnSyncResolved}from"./chunk-AEJHDFXB.js";import{AgentLoopApi,describeError,filterByStatus,isPermanent,pick,pickString}from"./chunk-JTJWDV5U.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-GY7KI5E5.js";import{isTaskKey}from"./chunk-II5RVJQN.js";import"./chunk-UFND7FBC.js";import{joinFor}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";
7
7
  import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs10 from"fs";import path8 from"path";import fs from"fs";import path from"path";var LoopLogger=class{constructor(runnerId,logFile,out=process.stdout,now=()=>new Date){this.runnerId=runnerId;this.out=out;this.now=now;if(logFile){fs.mkdirSync(path.dirname(logFile),{recursive:true});this.stream=fs.createWriteStream(logFile,{flags:"a"})}}runnerId;out;now;stream=null;log(message){const d=this.now();const ts=`${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;const line=`[${ts}] [${this.runnerId}] ${stripTerminalControls(
8
8
  message)}
9
9
  `;this.out.write(line);this.stream?.write(line)}separator(){this.log("=".repeat(60))}close(){this.stream?.end();this.stream=null}};function pad(n){return String(n).padStart(2,"0")}function rotateLogs(dir,retentionDays,now=Date.now()){if(retentionDays<=0)return;const cutoff=now-retentionDays*864e5;let entries;try{entries=fs.readdirSync(dir)}catch{return}for(const name of entries){if(!/^(agent-loop|task-loop|step|plan|schedule-enqueued)-.*\.(log|txt)$/.test(name))continue;const file=path.join(dir,
@@ -168,10 +168,10 @@ continue}const{run_id:runId,...rest}=payload;const res=await this.api.update(ite
168
168
  \u2192 \u7D50\u679C\u306F\u7834\u68C4\u3057\u307E\u3059`)}else if(res.status!==null&&res.status>=400&&res.status<500&&res.status!==408&&res.status!==429){fs6.rmSync(file,{force:true});this.log.log(` \u26D4 \u30B5\u30FC\u30D0\u306B\u6052\u4E45\u7684\u306B\u62D2\u5426\u3055\u308C\u305F\u305F\u3081\u7834\u68C4\u3057\u307E\u3059\uFF08http=${res.status}\uFF09: item=${itemId}`)}else{this.log.log(` \u26A0\uFE0F \u518D\u9001\u306B\u5931\u6557\uFF08${describeError(res)}\uFF09: item=${itemId}\u3002\u6B21\u30B5\u30A4\u30AF\u30EB\u3067\u518D\u8A66\
169
169
  \u884C\u3057\u307E\u3059`)}}return recorded}};function exitReasonFor(outcome){if(outcome==="ok")return"ok";if(outcome==="timeout")return"timeout";if(outcome==="rate-limited")return"rate_limited";if(outcome==="aborted")return"interrupted";if(outcome==="max-turns")return"max_turns";return"error"}function withFailureHint(base,output){const hint=failureHint(output);return hint===""?base:`${base} | ${hint}`}var STOP_WAIT_MAX_SEC=3600;var AI_RECOVERY_HINT="\u78BA\u8A8D: claude-auto-switch status \uFF0F \u5404AI CLI\u306E\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\uFF08twp task-loop setup \u3067\u691C\u51FA\u7D50\u679C\u304C\u51FA\u307E\u3059\uFF09";
170
170
  var ABORT_DRAIN_TIMEOUT_MS=15e3;var TaskLoop=class{constructor(deps){this.deps=deps;this.writeback=new Writeback(deps.api,deps.config,deps.log);this.schedule=new ScheduleBridge({config:deps.config,log:deps.log,api:new ScheduleApi(deps.api),fetchCount:async key=>{const statusId=Object.prototype.hasOwnProperty.call(REQUIRE_ZERO_STATUS,key)?REQUIRE_ZERO_STATUS[key]:void 0;if(!statusId)return null;const{total}=await deps.projectApi.countByStatus(deps.config.projectId,statusId);const refined=await refineCount(
171
- key,total,deps.config.operations.countHooks,deps.config.workspace);if(refined.note)deps.log.log(` ${refined.note}`);return refined.total}});this.engine=deps.engine;this.releaseLog=new ReleaseOutcomeLog(deps.config.releaseOutcomeLogPath,deps.log);this.postDeps={api:deps.api,config:deps.config,log:deps.log,releaseLog:this.releaseLog};this.planLock=new PlanLock({api:deps.api,config:deps.config,log:deps.log,runner:deps.runner,hasPendingItems:async()=>await this.hasPendingItems()&&!this.onlyBlockedBacklog,
171
+ key,total,deps.config.operations.countHooks,deps.config.workspace);if(refined.note)deps.log.log(` ${refined.note}`);return refined.total}});this.engine=deps.engine;this.releaseLog=new ReleaseOutcomeLog(deps.config.releaseOutcomeLogPath,deps.log);this.postDeps={api:deps.api,config:deps.config,log:deps.log,releaseLog:this.releaseLog};this.planLock=new PlanLock({api:deps.api,config:deps.config,log:deps.log,runner:deps.runner,hasPendingItems:async()=>await this.hasPendingItems()&&!this.nothingClaimableBacklog,
172
172
  reregister:async()=>{deps.runner.registered=false;await deps.runner.registerOrThrow()},...deps.sleepFn?{sleepFn:deps.sleepFn}:{}});this.trustGate=deps.trustGate??new TrustGate({enabled:()=>deps.config.ai.usesAi("claude"),check:()=>checkWorkspaceTrust(deps.config.workspace,{launcherBin:deps.config.claudeLauncher.bin})});this.timestamp=new Date().toISOString().replace(/[-:]/g,"").replace(/\..*$/,"");this.settings=deps.settings??new LoopSettingsApplier({api:deps.api,config:deps.config,log:m=>deps.log.
173
- log(m)});this.skills=deps.skills??new ServerSkillCatalog({api:deps.api,config:deps.config,log:m=>deps.log.log(m)})}deps;writeback;schedule;planLock;engine;releaseLog;postDeps;timestamp;deferredIds=new Set;midcycleEnqueued=0;aborting=false;draining=false;onlyBlockedBacklog=false;drainExitCode=0;drainWaiters=new Set;itemInFlight=null;ownershipLostItemId=null;abortDrained=null;cyclePreflightSection="";trustGate;settings;skills;sleep(ms){return(this.deps.sleepFn??sleep)(ms)}sleepUnlessDraining(ms){if(this.
174
- draining)return Promise.resolve();return new Promise(resolve=>{let timer=null;let settled=false;const wake=()=>{if(settled)return;settled=true;if(timer!==null)clearTimeout(timer);this.drainWaiters.delete(wake);resolve()};this.drainWaiters.add(wake);const injected=this.deps.sleepFn;if(injected)void injected(ms).then(wake);else timer=setTimeout(wake,ms)})}requestDrain(reason,exitCode=0){if(this.draining)return;this.draining=true;this.drainExitCode=exitCode;const running=this.itemInFlight;const why=reason.
173
+ log(m)});this.skills=deps.skills??new ServerSkillCatalog({api:deps.api,config:deps.config,log:m=>deps.log.log(m)})}deps;writeback;schedule;planLock;engine;releaseLog;postDeps;timestamp;deferredIds=new Set;midcycleEnqueued=0;aborting=false;draining=false;nothingClaimableBacklog=false;drainExitCode=0;drainWaiters=new Set;itemInFlight=null;ownershipLostItemId=null;abortDrained=null;cyclePreflightSection="";trustGate;settings;skills;sleep(ms){return(this.deps.sleepFn??sleep)(ms)}sleepUnlessDraining(ms){
174
+ if(this.draining)return Promise.resolve();return new Promise(resolve=>{let timer=null;let settled=false;const wake=()=>{if(settled)return;settled=true;if(timer!==null)clearTimeout(timer);this.drainWaiters.delete(wake);resolve()};this.drainWaiters.add(wake);const injected=this.deps.sleepFn;if(injected)void injected(ms).then(wake);else timer=setTimeout(wake,ms)})}requestDrain(reason,exitCode=0){if(this.draining)return;this.draining=true;this.drainExitCode=exitCode;const running=this.itemInFlight;const why=reason.
175
175
  trim()===""?"\u7406\u7531\u4E0D\u660E":reason;this.deps.log.log(running===null?`\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${why}\uFF09\u3002\u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u65B0\u3057\u3044\u30A2\u30A4\u30C6\u30E0\u3092\u53D6\u3089\u305A\u306B\u7D42\u4E86\u3057\u307E\u3059\u3002`:`\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${why}\uFF09\u3002\u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\uFF08${running}\
176
176
  \uFF09\u3092\u5B8C\u8D70\u3055\u305B\u3066\u304B\u3089\u7D42\u4E86\u3057\u307E\u3059\u3002`);const waiters=[...this.drainWaiters];this.drainWaiters.clear();for(const w of waiters)w()}cooldownNote(outcome){if(outcome!=="rate-limited")return"";const remaining=this.deps.config.ai.minCooldownRemainingSec();return remaining===null?"":`\uFF08\u6700\u77ED\u306E\u89E3\u9664\u307E\u3067\u7D04${remaining}\u79D2\uFF09`}startOwnershipWatch(itemId){const{config,log,api}=this.deps;const intervalSec=config.ownershipCheckIntervalSec;
177
177
  if(intervalSec<=0)return{stop:()=>{}};let stopped=false;let checking=false;let unknownLogged=false;const timer=setInterval(()=>{if(stopped||checking)return;checking=true;void(async()=>{try{const res=await api.getItem(itemId);const check=evaluateOwnership(res.json?.item??null,config.runnerId,config.runId);if(stopped)return;if(check.verdict==="unknown"){if(!unknownLogged){unknownLogged=true;log.log(` \u26A0\uFE0F \u6240\u6709\u6A29\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${check.
@@ -185,7 +185,7 @@ cyclePreflightSection=await runPreflight(config.preflight,config.workspace,m=>lo
185
185
  config.workspace,config.gitIdentity).logs)log.log(line);let planSkippedNoLock=false;const resent=await this.writeback.retryPending();for(const itemId of resent)await this.schedule.recordByItem(itemId,"completed");const reclaimRes=await this.deps.api.reclaim();if(!reclaimRes.ok){log.log(` \u26A0\uFE0F \u6B7B\u3093\u3060\u30E9\u30F3\u30CA\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u56DE\u53CEAPI\u304C\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${describeError(reclaimRes)}\uFF09\u3002\u53D6\u308A\u6B8B\u3057\u304C\u6B8B\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059`)}
186
186
  await this.reclaimStaleProcessing();const trust=this.trustGate.evaluate();for(const line of trust.logs)log.log(line);if(trust.note!==null){this.cyclePreflightSection=this.cyclePreflightSection===""?trust.note:`${this.cyclePreflightSection}
187
187
 
188
- ${trust.note}`}if(trust.wait){await runner.beat("waiting");if(cycle<config.maxCycles)await this.sleepUnlessDraining(config.intervalSec*1e3);continue}const pendingListed=await this.hasPendingItems();const hadPending=pendingListed&&!this.onlyBlockedBacklog;if(pendingListed&&!hadPending){log.log("pending \u306F\u524D\u63D0\u672A\u5145\u8DB3\u3067\u53D6\u308C\u306A\u3044\u3082\u306E\u3060\u3051\u3067\u3059\uFF08\u524D\u56DE\u306E claim \u306E\u5224\u5B9A\uFF09\u3002\u30AD\u30E5\u30FC\u304C\u7A7A\u306E\u3068\u304D\u3068\u540C\u3058\u304F\u8A08\u753B\u3057\u307E\u3059\u3002")}
188
+ ${trust.note}`}if(trust.wait){await runner.beat("waiting");if(cycle<config.maxCycles)await this.sleepUnlessDraining(config.intervalSec*1e3);continue}const pendingListed=await this.hasPendingItems();const hadPending=pendingListed&&!this.nothingClaimableBacklog;if(pendingListed&&!hadPending){log.log("pending \u306F\u3053\u306E\u6A5F\u4F53\u304C\u53D6\u308C\u306A\u3044\u3082\u306E\uFF08\u524D\u63D0\u672A\u5145\u8DB3\u30FB\u5225\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u5C02\u7528\uFF09\u3060\u3051\u3067\u3059\uFF08\u524D\u56DE\u306E claim \u306E\u5224\u5B9A\uFF09\u3002\u30AD\u30E5\u30FC\u304C\u7A7A\u306E\u3068\u304D\u3068\u540C\u3058\u304F\u8A08\u753B\u3057\u307E\u3059\u3002")}
189
189
  this.midcycleEnqueued=0;this.deferredIds=new Set;await this.enqueueDueScheduled(false);const planSkippedDisabled=!hadPending&&!config.planEnabled;if(hadPending){log.log("\u30AD\u30E5\u30FC\u306Bpending\u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u3059\u3002\u8A08\u753B\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u5B9F\u884C\u306B\u9032\u307F\u307E\u3059\u3002")}else if(planSkippedDisabled){log.log("\u30AD\u30E5\u30FC\u306F\u7A7A\u3067\u3059\u304C\u3001\u3053\u306E\u6A5F\u4F53\u306F\u8A08\u753B\u3092\u7ACB\u3066\u306A\u3044\u8A2D\u5B9A\u3067\u3059\uFF08plan_enabled=false\uFF09\u3002AI \u3092\u8D77\u52D5\u305B\u305A\u30AD\u30E5\u30FC\u306E\u5B9F\u884C\u3078\u9032\u307F\u307E\u3059\u3002")}else{
190
190
  log.log("\u30AD\u30E5\u30FC\u304C\u7A7A\u3067\u3059\u3002\u8A08\u753B\u3092\u7ACB\u6848\u3057\u3066\u30A8\u30F3\u30AD\u30E5\u30FC\u3057\u307E\u3059\u3002")}if(planSkippedDisabled){}else if(!hadPending&&this.draining){log.log("\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081\u3001\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u3092\u5B9F\u884C\u3057\u307E\u305B\u3093\u3002")}else if(!hadPending){const acquired=await this.planLock.acquire();if(acquired!=="acquired"){planSkippedNoLock=
191
191
  true;log.log("\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u30AD\u30E5\u30FC\u306E\u5B9F\u884C\u3078\u9032\u307F\u307E\u3059\u3002")}else{await runner.beat("plan");this.planLock.startRenewWorker();let planResult="failed";try{planResult=await this.runPlanAndEnqueue(cycle)}finally{await this.planLock.release(planResult==="ok"?"completed":"failed");this.planLock.reportIfLost()}if(planResult==="aborted"){log.log("\u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u306B\u3088\u308A\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u3092\u6253\u3061\u5207\u308A\u307E\u3057\u305F\u3002\u30EB\u30FC\u30D7\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002");
@@ -231,36 +231,39 @@ planLock.lostReasonText()}\uFF09`);log.log(" **\u30A8\u30F3\u30AD\u30E5\u30F
231
231
  steps.filter(s=>(s.skill??"").trim()==="dev-verify").length;const releaseDeployDrop=releaseDeployDropReason(verifyBacklog,devVerifyPlanned);if(releaseDeployDrop!==null&&plan.steps.some(s=>normalizeSkillName(s.skill??"")==="release-deploy")){log.log(` release-deploy \u306F\u8A08\u753B\u304B\u3089\u9664\u5916\u3057\u307E\u3059\uFF08\u7A7A\u632F\u308A\u9632\u6B62\u30AC\u30FC\u30C9\uFF09: ${releaseDeployDrop}`)}const zeroTargetDrops=zeroTargetDropReasons(prefetchSection,config.operations.zeroTargetGates);
232
232
  for(const[skill,reason]of zeroTargetDrops){if(plan.steps.some(s=>normalizeSkillName(s.skill??"")===skill)){log.log(` ${skill} \u306F\u8A08\u753B\u304B\u3089\u9664\u5916\u3057\u307E\u3059\uFF08\u5BFE\u8C61\u8AAD\u307F\u66FF\u3048\u9632\u6B62\u30AC\u30FC\u30C9\uFF09: ${reason}`)}}const processing=await this.deps.api.processingSnapshot();const inflightKeys=new Set;if(processing===null){log.log(" \u26A0\uFE0F \u51E6\u7406\u4E2D\u30A2\u30A4\u30C6\u30E0\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F");
233
233
  log.log(" \u540C\u4E00\u30BF\u30B9\u30AF\u306E\u4E8C\u91CD\u7740\u624B\u30AC\u30FC\u30C9\u306F**\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u7121\u52B9**\u3067\u3059\uFF08\u6295\u5165\u306F\u6B62\u3081\u307E\u305B\u3093\uFF09")}else{const entries=inflightEntries(processing,new Date,inflightStaleHours(config.aiTimeoutSec));for(const entry of entries)inflightKeys.add(entry.key);if(entries.length>0){log.log(" \u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D\u306E task_key\uFF08\u3053\u306E\u8A08\u753B\u304B\u3089\u306F\u9664\u5916\u3057\u307E\u3059\uFF09:");
234
- for(const entry of entries)log.log(` - ${formatInflightEntry(entry)}`)}}let exclusiveQueued=null;let exclusiveFetched=false;const exclusiveInflight=async()=>{if(exclusiveFetched)return exclusiveQueued;exclusiveFetched=true;const pending=await this.deps.api.pendingSnapshot();if(pending===null&&processing===null){log.log(" \u26A0\uFE0F \u30AD\u30E5\u30FC/\u5B9F\u884C\u4E2D\u30A2\u30A4\u30C6\u30E0\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F");log.log(" \
235
- \u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\u30AC\u30FC\u30C9\u306F**\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u7121\u52B9**\u3067\u3059\uFF08\u6295\u5165\u306F\u6B62\u3081\u307E\u305B\u3093\uFF09");return null}if(pending===null||processing===null){log.log(` \u26A0\uFE0F ${pending===null?"pending":"processing"} \u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u305D\u306E\u3076\u3093\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\u30AC\u30FC\u30C9\u306F\u7DE9\u307F\u307E\u3059`)}
236
- const entries=exclusiveInflightEntries([{status:"processing",items:processing??[]},{status:"pending",items:pending??[]}],{staleHours:inflightStaleHours(config.aiTimeoutSec)});const exclusive=entries.filter(e=>config.ai.isExclusiveSkill(e.skill));if(exclusive.length>0){log.log(" \u65E2\u306B\u30AD\u30E5\u30FC/\u5B9F\u884C\u4E2D\u306E\u6392\u4ED6\u30B9\u30AD\u30EB\uFF08\u3053\u306E\u8A08\u753B\u304B\u3089\u306F\u9664\u5916\u3057\u307E\u3059\uFF09:");for(const entry of exclusive)log.log(` - ${formatExclusiveEntry(
237
- entry)}`)}exclusiveQueued=new Set(exclusive.map(e=>e.skill));return exclusiveQueued};let recentCandidates=null;let recentFetched=false;let resultFetchBudget=5;const recentAdvanceFor=async(taskKey,skill)=>{if(!recentFetched){recentFetched=true;const items=await this.deps.api.completedSince(windowStartMicros(new Date));if(items===null){log.log(" \u26A0\uFE0F \u76F4\u8FD1\u306E\u5B9F\u884C\u53F0\u5E33\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F");log.log(" \u300C\u524D\u56DE\u304C\u72B6\u614B\u3092\u9032\u3081\u305F\u5834\u5408\u306E\u518D\
238
- \u6295\u5165\u6291\u6B62\u300D\u306F**\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u7121\u52B9**\u3067\u3059\uFF08\u6295\u5165\u306F\u6B62\u3081\u307E\u305B\u3093\uFF09")}else{recentCandidates=buildRecentCandidateIndex(items);log.log(` \u76F4\u8FD1${RECENT_ADVANCE_WINDOW_HOURS}\u6642\u9593\u306B\u540C\u4E00\u30BF\u30B9\u30AF\u3092\u6271\u3063\u305F\u5B9F\u884C: ${recentCandidates.size}\u4EF6`)}}if(recentCandidates===null)return null;const candidate=findRecentCandidate(recentCandidates,taskKey,skill);if(candidate===
239
- null)return null;return resolveRecentAdvance(candidate,async itemId=>{if(resultFetchBudget<=0)return null;resultFetchBudget-=1;const res=await this.deps.api.getItem(itemId);if(!res.ok){log.log(` \u26A0\uFE0F \u76F4\u8FD1\u30A2\u30A4\u30C6\u30E0\u306E\u7D50\u679C\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(res)}\uFF09\u3002${taskKey} \u306E\u518D\u6295\u5165\u306F\u6291\u6B62\u3057\u307E\u305B\u3093`);return null}return res.json?.item?.result??null})};
240
- const exclusiveEnqueued=new Set;const enqueuedTaskKeys=new Set;let enqueued=0;for(const step of plan.steps){const item=stepToItem(step,config.ai);if(!item)continue;if(!/^[a-z][a-z0-9-]*$/.test(step.skill)){log.log(` \u26A0\uFE0F \u30B9\u30AD\u30EB\u540D\u304C\u60F3\u5B9A\u306E\u6587\u5B57\u7A2E\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF08skill='${step.skill}'\uFF09\u3002\u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u3068\u30AB\u30C6\u30B4\u30EA\u5224\u5B9A\u304C\u52B9\u304D\u307E\u305B\u3093`)}const placeholder=placeholderTaskKey(
241
- step.args??"");if(placeholder!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u30BF\u30B9\u30AF\u30AD\u30FC\u304C\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\uFF09: ${step.skill} \u2014 args \u306B '${placeholder}' \u304C\u6B8B\u3063\u3066\u3044\u307E\u3059 | ${item.label}`);continue}const stepSkill=normalizeSkillName(step.skill??"");if(stepSkill==="release-deploy"&&releaseDeployDrop!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08release-deploy \u306E\u7A7A\u632F\u308A\u9632\u6B62\uFF09: ${releaseDeployDrop}\
242
- | ${item.label}`);continue}const zeroTargetReason=zeroTargetDrops.get(stepSkill);if(zeroTargetReason!==void 0){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u5BFE\u8C610\u4EF6\uFF09: ${step.skill} \u2014 ${zeroTargetReason} | ${item.label}`);continue}if(item.task_key&&inflightKeys.has(item.task_key)){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D\uFF09: ${step.skill} \u2014 ${item.task_key} \u306F\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D | ${item.
243
- label}`);continue}const duplicateKey=duplicateTaskKeyDropReason(enqueuedTaskKeys,item.task_key);if(duplicateKey!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u540C\u4E00\u8A08\u753B\u5185\u306E\u91CD\u8907\u30AD\u30FC\uFF09: ${step.skill} \u2014 ${duplicateKey} | ${item.label}`);continue}const excludedKey=excludedKeyInArgs(step.args??"",excludeKeys);if(excludedKey!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u4EBA\u306B\u30DC\u30FC\u30EB\u304C\u3042\u308B\uFF09: ${step.
244
- skill} \u2014 ${excludedKey} \u306F\u672A\u56DE\u7B54\u306E\u8CEA\u554F\u3092\u6301\u3064\u4EBA\u9593\u5F85\u3061\u30BF\u30B9\u30AF | ${item.label}`);continue}if(item.task_key){const advance=await recentAdvanceFor(item.task_key,step.skill);if(advance!==null){const gate2=shouldSuppressForStatus(advance,taskStatusSnapshot);if(gate2.suppress){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u524D\u56DE\u304C\u72B6\u614B\u3092\u9032\u3081\u305F\uFF09: ${step.skill} \u2014 ${item.task_key}\
245
- \u306F ${formatRecentAdvance(advance)} | ${item.label}`);continue}log.log(` \u6291\u6B62\u3092\u898B\u9001\u308A: ${step.skill} \u2014 ${item.task_key} \u306F ${formatRecentAdvance(advance)} \u3060\u304C ${gate2.reason} | ${item.label}`)}}const gate=await this.schedule.gateAllows(step.skill);if(!gate.allowed){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u6642\u9593\u5E2F\u30B2\u30FC\u30C8\uFF09: ${step.skill} \u2014 ${gate.reason} | ${item.label}`);continue}if(this.planLock.isLost()){
246
- log.log(` \u26D4 \u30A8\u30F3\u30AD\u30E5\u30FC\u4E2D\u306B\u8A08\u753B\u30ED\u30C3\u30AF\u3092\u5931\u3044\u307E\u3057\u305F\uFF08reason=${this.planLock.lostReasonText()}\uFF09\u2192 \u3053\u3053\u3067\u4E2D\u6B62\u3057\u307E\u3059\uFF08\u6295\u5165\u6E08\u307F: ${enqueued}\u4EF6\uFF09`);break}const exclusiveSkill=config.ai.isExclusiveSkill(step.skill)?normalizeSkillName(step.skill):null;if(exclusiveSkill!==null){if(exclusiveEnqueued.has(exclusiveSkill)){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\uFF09: ${step.
247
- skill} \u2014 \u540C\u3058\u8A08\u753B\u306B\u65E2\u306B1\u4EF6\u3042\u308A\u307E\u3059 | ${item.label}`);continue}const queuedSkills=await exclusiveInflight();if(queuedSkills?.has(exclusiveSkill)){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\uFF09: ${step.skill} \u2014 \u65E2\u306B\u30AD\u30E5\u30FC/\u5B9F\u884C\u4E2D\u306E\u305F\u3081\u7A4D\u307F\u307E\u305B\u3093 | ${item.label}`);continue}}const{itemId,detail}=await createItem(
248
- this.deps.api,item);if(itemId){enqueued+=1;if(exclusiveSkill!==null)exclusiveEnqueued.add(exclusiveSkill);if(item.task_key)enqueuedTaskKeys.add(item.task_key)}else{log.log(` \u8B66\u544A: \u30A8\u30F3\u30AD\u30E5\u30FC\u5931\u6557: ${item.label} \u2014 ${detail}`)}}log.log(`\u8A08\u753B\u5B8C\u4E86: ${enqueued} \u30A2\u30A4\u30C6\u30E0\u3092\u30AD\u30E5\u30FC\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F`);return"ok"}async runDequeueLoop(cycle){const{config,log,api,runner}=this.deps;log.separator();
249
- log.log("Phase 2: \u30AD\u30E5\u30FC\u304B\u3089\u30C7\u30AD\u30E5\u30FC\u3057\u3066\u9806\u6B21\u5B9F\u884C...");log.separator();let completed=0;let failed=0;let unexecuted=0;let unexecutedNeedsHuman=false;let stepNum=0;let contendedRetry=0;let undetermined=false;let stop=false;this.onlyBlockedBacklog=false;dequeue:for(;;){if(this.draining){log.log("\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081\u3001\u65B0\u3057\u3044\u30A2\u30A4\u30C6\u30E0\u306F\u53D6\u5F97\u3057\u307E\u305B\u3093\u3002Phase 2 \u3092\u7D42\u4E86\u3057\u307E\u3059\u3002");
234
+ for(const entry of entries)log.log(` - ${formatInflightEntry(entry)}`)}}let pendingCache=null;let pendingFetched=false;const pendingOnce=async()=>{if(!pendingFetched){pendingFetched=true;pendingCache=await this.deps.api.pendingSnapshot()}return pendingCache};let pendingKeys=null;let pendingKeysResolved=false;const queuedPendingKeys=async()=>{if(pendingKeysResolved)return pendingKeys;pendingKeysResolved=true;const pending=await pendingOnce();if(pending===null){log.log(" \u26A0\uFE0F pending \u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\
235
+ \u3093\u3067\u3057\u305F");log.log(" \u30AD\u30E5\u30FC\u5F85\u3061\u30AD\u30FC\u306E\u7A4D\u307F\u76F4\u3057\u6291\u6B62\u306F**\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u7121\u52B9**\u3067\u3059\uFF08\u6295\u5165\u306F\u6B62\u3081\u307E\u305B\u3093\uFF09");return null}pendingKeys=new Set(pending.map(p=>(p.task_key??"").trim()).filter(k=>k!==""));return pendingKeys};let exclusiveQueued=null;let exclusiveFetched=false;const exclusiveInflight=async()=>{if(exclusiveFetched)return exclusiveQueued;exclusiveFetched=
236
+ true;const pending=await pendingOnce();if(pending===null&&processing===null){log.log(" \u26A0\uFE0F \u30AD\u30E5\u30FC/\u5B9F\u884C\u4E2D\u30A2\u30A4\u30C6\u30E0\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F");log.log(" \u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\u30AC\u30FC\u30C9\u306F**\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u7121\u52B9**\u3067\u3059\uFF08\u6295\u5165\u306F\u6B62\u3081\u307E\u305B\u3093\uFF09");return null}if(pending===
237
+ null||processing===null){log.log(` \u26A0\uFE0F ${pending===null?"pending":"processing"} \u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u305D\u306E\u3076\u3093\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\u30AC\u30FC\u30C9\u306F\u7DE9\u307F\u307E\u3059`)}const entries=exclusiveInflightEntries([{status:"processing",items:processing??[]},{status:"pending",items:pending??[]}],{staleHours:inflightStaleHours(config.aiTimeoutSec)});
238
+ const exclusive=entries.filter(e=>config.ai.isExclusiveSkill(e.skill));if(exclusive.length>0){log.log(" \u65E2\u306B\u30AD\u30E5\u30FC/\u5B9F\u884C\u4E2D\u306E\u6392\u4ED6\u30B9\u30AD\u30EB\uFF08\u3053\u306E\u8A08\u753B\u304B\u3089\u306F\u9664\u5916\u3057\u307E\u3059\uFF09:");for(const entry of exclusive)log.log(` - ${formatExclusiveEntry(entry)}`)}exclusiveQueued=new Set(exclusive.map(e=>e.skill));return exclusiveQueued};let recentCandidates=null;let recentFetched=false;let resultFetchBudget=5;
239
+ const recentAdvanceFor=async(taskKey,skill)=>{if(!recentFetched){recentFetched=true;const items=await this.deps.api.completedSince(windowStartMicros(new Date));if(items===null){log.log(" \u26A0\uFE0F \u76F4\u8FD1\u306E\u5B9F\u884C\u53F0\u5E33\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F");log.log(" \u300C\u524D\u56DE\u304C\u72B6\u614B\u3092\u9032\u3081\u305F\u5834\u5408\u306E\u518D\u6295\u5165\u6291\u6B62\u300D\u306F**\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u7121\u52B9**\u3067\u3059\uFF08\u6295\u5165\u306F\u6B62\u3081\u307E\u305B\u3093\uFF09")}else{
240
+ recentCandidates=buildRecentCandidateIndex(items);log.log(` \u76F4\u8FD1${RECENT_ADVANCE_WINDOW_HOURS}\u6642\u9593\u306B\u540C\u4E00\u30BF\u30B9\u30AF\u3092\u6271\u3063\u305F\u5B9F\u884C: ${recentCandidates.size}\u4EF6`)}}if(recentCandidates===null)return null;const candidate=findRecentCandidate(recentCandidates,taskKey,skill);if(candidate===null)return null;return resolveRecentAdvance(candidate,async itemId=>{if(resultFetchBudget<=0)return null;resultFetchBudget-=1;const res=await this.deps.api.
241
+ getItem(itemId);if(!res.ok){log.log(` \u26A0\uFE0F \u76F4\u8FD1\u30A2\u30A4\u30C6\u30E0\u306E\u7D50\u679C\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(res)}\uFF09\u3002${taskKey} \u306E\u518D\u6295\u5165\u306F\u6291\u6B62\u3057\u307E\u305B\u3093`);return null}return res.json?.item?.result??null})};const exclusiveEnqueued=new Set;const enqueuedTaskKeys=new Set;let enqueued=0;for(const step of plan.steps){const item=stepToItem(step,config.ai);if(!item)continue;
242
+ if(!/^[a-z][a-z0-9-]*$/.test(step.skill)){log.log(` \u26A0\uFE0F \u30B9\u30AD\u30EB\u540D\u304C\u60F3\u5B9A\u306E\u6587\u5B57\u7A2E\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF08skill='${step.skill}'\uFF09\u3002\u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u3068\u30AB\u30C6\u30B4\u30EA\u5224\u5B9A\u304C\u52B9\u304D\u307E\u305B\u3093`)}const placeholder=placeholderTaskKey(step.args??"");if(placeholder!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u30BF\u30B9\u30AF\u30AD\u30FC\u304C\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\uFF09: ${step.
243
+ skill} \u2014 args \u306B '${placeholder}' \u304C\u6B8B\u3063\u3066\u3044\u307E\u3059 | ${item.label}`);continue}const stepSkill=normalizeSkillName(step.skill??"");if(stepSkill==="release-deploy"&&releaseDeployDrop!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08release-deploy \u306E\u7A7A\u632F\u308A\u9632\u6B62\uFF09: ${releaseDeployDrop} | ${item.label}`);continue}const zeroTargetReason=zeroTargetDrops.get(stepSkill);if(zeroTargetReason!==void 0){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u5BFE\u8C610\u4EF6\uFF09: ${step.
244
+ skill} \u2014 ${zeroTargetReason} | ${item.label}`);continue}if(item.task_key&&inflightKeys.has(item.task_key)){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D\uFF09: ${step.skill} \u2014 ${item.task_key} \u306F\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D | ${item.label}`);continue}if(item.task_key&&(await queuedPendingKeys())?.has(item.task_key)){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u65E2\u306B\u30AD\u30E5\u30FC\u5F85\u3061\uFF09: ${step.
245
+ skill} \u2014 ${item.task_key} \u306F pending \u306B\u5C45\u307E\u3059 | ${item.label}`);continue}const duplicateKey=duplicateTaskKeyDropReason(enqueuedTaskKeys,item.task_key);if(duplicateKey!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u540C\u4E00\u8A08\u753B\u5185\u306E\u91CD\u8907\u30AD\u30FC\uFF09: ${step.skill} \u2014 ${duplicateKey} | ${item.label}`);continue}const excludedKey=excludedKeyInArgs(step.args??"",excludeKeys);if(excludedKey!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u4EBA\u306B\u30DC\u30FC\
246
+ \u30EB\u304C\u3042\u308B\uFF09: ${step.skill} \u2014 ${excludedKey} \u306F\u672A\u56DE\u7B54\u306E\u8CEA\u554F\u3092\u6301\u3064\u4EBA\u9593\u5F85\u3061\u30BF\u30B9\u30AF | ${item.label}`);continue}if(item.task_key){const advance=await recentAdvanceFor(item.task_key,step.skill);if(advance!==null){const gate2=shouldSuppressForStatus(advance,taskStatusSnapshot);if(gate2.suppress){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u524D\u56DE\u304C\u72B6\u614B\u3092\u9032\u3081\u305F\uFF09: ${step.
247
+ skill} \u2014 ${item.task_key} \u306F ${formatRecentAdvance(advance)} | ${item.label}`);continue}log.log(` \u6291\u6B62\u3092\u898B\u9001\u308A: ${step.skill} \u2014 ${item.task_key} \u306F ${formatRecentAdvance(advance)} \u3060\u304C ${gate2.reason} | ${item.label}`)}}const gate=await this.schedule.gateAllows(step.skill);if(!gate.allowed){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u6642\u9593\u5E2F\u30B2\u30FC\u30C8\uFF09: ${step.skill} \u2014 ${gate.reason} | ${item.label}`);
248
+ continue}if(this.planLock.isLost()){log.log(` \u26D4 \u30A8\u30F3\u30AD\u30E5\u30FC\u4E2D\u306B\u8A08\u753B\u30ED\u30C3\u30AF\u3092\u5931\u3044\u307E\u3057\u305F\uFF08reason=${this.planLock.lostReasonText()}\uFF09\u2192 \u3053\u3053\u3067\u4E2D\u6B62\u3057\u307E\u3059\uFF08\u6295\u5165\u6E08\u307F: ${enqueued}\u4EF6\uFF09`);break}const exclusiveSkill=config.ai.isExclusiveSkill(step.skill)?normalizeSkillName(step.skill):null;if(exclusiveSkill!==null){if(exclusiveEnqueued.has(exclusiveSkill)){log.
249
+ log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\uFF09: ${step.skill} \u2014 \u540C\u3058\u8A08\u753B\u306B\u65E2\u306B1\u4EF6\u3042\u308A\u307E\u3059 | ${item.label}`);continue}const queuedSkills=await exclusiveInflight();if(queuedSkills?.has(exclusiveSkill)){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\uFF09: ${step.skill} \u2014 \u65E2\u306B\u30AD\u30E5\u30FC\
250
+ /\u5B9F\u884C\u4E2D\u306E\u305F\u3081\u7A4D\u307F\u307E\u305B\u3093 | ${item.label}`);continue}}const{itemId,detail}=await createItem(this.deps.api,item);if(itemId){enqueued+=1;if(exclusiveSkill!==null)exclusiveEnqueued.add(exclusiveSkill);if(item.task_key)enqueuedTaskKeys.add(item.task_key)}else{log.log(` \u8B66\u544A: \u30A8\u30F3\u30AD\u30E5\u30FC\u5931\u6557: ${item.label} \u2014 ${detail}`)}}log.log(`\u8A08\u753B\u5B8C\u4E86: ${enqueued} \u30A2\u30A4\u30C6\u30E0\u3092\u30AD\u30E5\u30FC\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F`);
251
+ return"ok"}async runDequeueLoop(cycle){const{config,log,api,runner}=this.deps;log.separator();log.log("Phase 2: \u30AD\u30E5\u30FC\u304B\u3089\u30C7\u30AD\u30E5\u30FC\u3057\u3066\u9806\u6B21\u5B9F\u884C...");log.separator();let completed=0;let failed=0;let unexecuted=0;let unexecutedNeedsHuman=false;let stepNum=0;let contendedRetry=0;let undetermined=false;let stop=false;this.nothingClaimableBacklog=false;dequeue:for(;;){if(this.draining){log.log("\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081\u3001\u65B0\u3057\u3044\u30A2\u30A4\u30C6\u30E0\u306F\u53D6\u5F97\u3057\u307E\u305B\u3093\u3002Phase 2 \u3092\u7D42\u4E86\u3057\u307E\u3059\u3002");
250
252
  stop=true;break}const claimed=await this.claimOne();if(claimed.kind==="undetermined"){undetermined=true;break}if(claimed.kind==="contended"){contendedRetry+=1;if(contendedRetry>=config.contendedMax){log.log(` \u26A0\uFE0F contended \u304C ${contendedRetry} \u56DE\u7D9A\u304D\u307E\u3057\u305F\u3002\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u3067\u306E\u53D6\u5F97\u3092\u8AE6\u3081\u307E\u3059\uFF08\u4ED6\u6A5F\u304C\u51E6\u7406\u3092\u7D9A\u3051\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u9AD8\u3044\uFF09`);
251
- undetermined=true;break}log.log(` \u2139\uFE0F \u4ED6\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u5148\u306B\u53D6\u5F97\u3057\u307E\u3057\u305F\uFF08contended\u30FB${contendedRetry}\u56DE\u76EE\uFF09\u30023\u79D2\u5F8C\u306B\u518D\u8A66\u884C\u3057\u307E\u3059`);await this.sleep(3e3);continue}contendedRetry=0;this.onlyBlockedBacklog=claimed.kind==="filtered"&&claimed.by.length>0&&claimed.by.every(b=>b==="prerequisite");if(claimed.kind==="empty"){log.log("\u30AD\u30E5\u30FC\u306Bpending\u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\u3002Phase 2 \u5B8C\u4E86\u3002");
252
- break}if(claimed.kind==="filtered"){log.log(this.onlyBlockedBacklog?"\u53D6\u308C\u308B pending \u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u524D\u63D0\u672A\u5145\u8DB3\u306E\u307F\uFF09\u3002Phase 2 \u5B8C\u4E86\u3002":"\u3053\u306E\u6A5F\u4F53\u306E\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3067\u53D6\u308C\u308B pending \u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u5225\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u5C02\u7528\u306E\u307F\uFF09\u3002Phase 2 \u5B8C\u4E86\u3002");
253
- break}const item=claimed.item;const itemId=item.item_id??"";const prompt=(item.prompt??"").trim();const label=item.label??"";if(!itemId||!prompt){log.log(`\u30C7\u30AD\u30E5\u30FC\u7D50\u679C\u306E\u30D1\u30FC\u30B9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${JSON.stringify(item).slice(0,200)}`);break}stepNum+=1;log.separator();log.log(`[${stepNum}] ${label}`);log.log(` item_id: ${itemId}`);await runner.beat("dequeue",itemId);log.log(` prompt: ${prompt}`);log.separator();const stopMatch=/^\/stop(?:\s+(\d+))?$/.
254
- exec(prompt);if(stopMatch){const res=await api.update(itemId,{status:"completed"},config.runId);if(res.status===409){log.log(" \u26A0\uFE0F /stop \u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09\u3002\u3053\u3061\u3089\u3067\u306F\u8A18\u9332\u3057\u307E\u305B\u3093")}else if(!res.ok){log.log(` \u26D4 /stop \u30A2\u30A4\u30C6\u30E0\u3092 completed \u306B\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(
255
- res)}\uFF09`);log.log(" \u3053\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u56DE\u53CE\u5F8C\u306B pending \u3078\u623B\u308B\u305F\u3081\u3001**\u6B21\u56DE\u8D77\u52D5\u6642\u3082\u5373\u505C\u6B62\u3057\u307E\u3059**");log.log(` \u5FA9\u65E7: UI \u304BAPI\u3067 item=${itemId} \u3092 completed / failed \u306B\u3057\u3066\u304F\u3060\u3055\u3044`)}completed+=1;const waitSec=stopMatch[1];if(waitSec){const requested=Number.parseInt(waitSec,10);const capped=Math.min(requested,STOP_WAIT_MAX_SEC);if(capped!==
256
- requested){log.log(` \u26A0\uFE0F /stop \u306E\u5F85\u6A5F ${requested}\u79D2 \u306F\u4E0A\u9650 ${STOP_WAIT_MAX_SEC}\u79D2 \u306B\u4E38\u3081\u307E\u3059`)}log.log(`[${stepNum}] /stop ${capped} \u2192 ${capped}\u79D2\u9593\u5F85\u6A5F\u3057\u307E\u3059...`);await this.sleepUnlessDraining(capped*1e3);log.log(`[${stepNum}] \u5F85\u6A5F\u5B8C\u4E86\u3002\u6B21\u306E\u30A2\u30A4\u30C6\u30E0\u306B\u9032\u307F\u307E\u3059\u3002`);continue}log.log(`[${stepNum}] /stop \u2192 \u30EB\u30FC\u30D7\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002`);
257
- stop=true;break}const skillName=/\/twp-([a-z][a-z0-9-]*)/.exec(prompt)?.[1]??"";const promptPlaceholder=placeholderTaskKey(prompt.replace(/^\/twp-[a-z0-9-]*\s*/,""));if(promptPlaceholder!==null){const reason=`\u30BF\u30B9\u30AF\u30AD\u30FC\u304C\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u306E\u307E\u307E\u3067\u3059\uFF08'${promptPlaceholder}'\uFF09\u3002\u8A08\u753B\u6642\u306E\u96DB\u5F62\u304C\u7F6E\u63DB\u3055\u308C\u3066\u3044\u307E\u305B\u3093`;log.log(` \u26D4 \u5B9F\u884C\u3057\u307E\u305B\u3093: ${reason}`);
258
- const res=await api.update(itemId,{status:"failed",error_message:reason},config.runId);if(res.status===409){log.log(` \u26A0\uFE0F \u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09\u3002\u3053\u3061\u3089\u3067\u306F\u8A18\u9332\u3057\u307E\u305B\u3093: item=${itemId}`)}else if(!res.ok){log.log(` \u26A0\uFE0F failed \u306B\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(res)}\uFF09: item=${itemId}`)}else{log.log(
259
- `[${stepNum}] ${label} \u2192 \u5931\u6557 [ai=-] (0s)`);await this.schedule.recordByItem(itemId,"failed")}failed+=1;continue}if(skillName){const gate=await this.schedule.gateAllows(skillName);if(!gate.allowed){stepNum-=1;if(this.deferredIds.has(itemId)){log.log(" \u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u3067\u5F85\u6A5F\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u304C\u518D\u3073\u30C7\u30AD\u30E5\u30FC\u3055\u308C\u307E\u3057\u305F\u3002\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u306EPhase 2\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002");
260
- break}const res=await api.update(itemId,{status:"pending"},config.runId);if(res.status===409){log.log(` \u26A0\uFE0F \u5F8C\u56DE\u3057\u306B\u3057\u3088\u3046\u3068\u3057\u305F\u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09: item=${itemId}`);log.log(" \u81EA\u5206\u306E claim \u306F\u5931\u52B9\u3057\u3066\u3044\u307E\u3059\u3002**\u3053\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u5B9F\u884C\u305B\u305A\u653E\u68C4\u3057\u307E\u3059**");
261
- continue}if(res.ok){this.deferredIds.add(itemId);log.log(` \u23F8 \u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u306B\u3088\u308A\u5F8C\u56DE\u3057: ${skillName} \u2014 ${gate.reason}`);continue}log.log(" \u26A0\uFE0F pending\u3078\u623B\u305B\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u3092\u7121\u8996\u3057\u3066\u3053\u306E\u307E\u307E\u5B9F\u884C\u3057\u307E\u3059");stepNum+=1}}const stepLog=path5.join(config.logDir,`step-${this.timestamp}-${cycle}-${stepNum}.lo\
262
- g`);const startedAt=Date.now();const taggedCategory=/#ai:([a-z]+)/.exec(label)?.[1];this.itemInFlight=itemId;const resolvedSkills=await this.skills.resolve(prompt);const skillOrigins=formatSkillOrigins(resolvedSkills.origins);if(skillOrigins!=="")log.log(` \u30B9\u30AD\u30EB: ${skillOrigins}`);const ownershipWatch=this.startOwnershipWatch(itemId);let result;try{result=await this.engine.run({serverSkills:resolvedSkills.bodies,prompt:buildStepPrompt(config,prompt),promptPrefix:this.cyclePreflightSection,
263
- logFile:stepLog,aiType:item.ai_type??void 0,aiModel:item.ai_model??void 0,aiEffort:item.ai_effort??void 0,timeoutSec:config.aiTimeoutSec,cwd:config.workspace,skill:skillName,...skillName===""&&taggedCategory!==void 0?{category:taggedCategory}:{}})}finally{ownershipWatch.stop();this.itemInFlight=null}writeLogFile(stepLog,skillOrigins===""?result.output:`[skill] ${skillOrigins}
253
+ undetermined=true;break}log.log(` \u2139\uFE0F \u4ED6\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u5148\u306B\u53D6\u5F97\u3057\u307E\u3057\u305F\uFF08contended\u30FB${contendedRetry}\u56DE\u76EE\uFF09\u30023\u79D2\u5F8C\u306B\u518D\u8A66\u884C\u3057\u307E\u3059`);await this.sleep(3e3);continue}contendedRetry=0;this.nothingClaimableBacklog=claimed.kind==="filtered"&&claimed.by.length>0&&claimed.by.every(b=>b==="prerequisite"||b==="platform");if(claimed.kind==="empty"){log.log("\u30AD\u30E5\u30FC\u306Bpending\u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\u3002Pha\
254
+ se 2 \u5B8C\u4E86\u3002");break}if(claimed.kind==="filtered"){const reasons=claimed.by.includes("platform")?claimed.by.includes("prerequisite")?"\u524D\u63D0\u672A\u5145\u8DB3\u30FB\u5225\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u5C02\u7528\u306E\u307F":"\u5225\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u5C02\u7528\u306E\u307F":"\u524D\u63D0\u672A\u5145\u8DB3\u306E\u307F";log.log(this.nothingClaimableBacklog?`\u3053\u306E\u6A5F\u4F53\u304C\u53D6\u308C\u308B pending \u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\uFF08${reasons}\
255
+ \uFF09\u3002Phase 2 \u5B8C\u4E86\u3002\u6B21\u30B5\u30A4\u30AF\u30EB\u306F\u8A08\u753B\u3057\u307E\u3059\u3002`:"\u3053\u306E\u6A5F\u4F53\u304C\u53D6\u308C\u308B pending \u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u7406\u7531\u3092\u5224\u5B9A\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u6B21\u30B5\u30A4\u30AF\u30EB\u3082\u8A08\u753B\u3057\u307E\u305B\u3093\uFF09\u3002Phase 2 \u5B8C\u4E86\u3002");break}const item=claimed.item;const itemId=item.item_id??"";const prompt=(item.
256
+ prompt??"").trim();const label=item.label??"";if(!itemId||!prompt){log.log(`\u30C7\u30AD\u30E5\u30FC\u7D50\u679C\u306E\u30D1\u30FC\u30B9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${JSON.stringify(item).slice(0,200)}`);break}stepNum+=1;log.separator();log.log(`[${stepNum}] ${label}`);log.log(` item_id: ${itemId}`);await runner.beat("dequeue",itemId);log.log(` prompt: ${prompt}`);log.separator();const stopMatch=/^\/stop(?:\s+(\d+))?$/.exec(prompt);if(stopMatch){const res=await api.update(itemId,
257
+ {status:"completed"},config.runId);if(res.status===409){log.log(" \u26A0\uFE0F /stop \u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09\u3002\u3053\u3061\u3089\u3067\u306F\u8A18\u9332\u3057\u307E\u305B\u3093")}else if(!res.ok){log.log(` \u26D4 /stop \u30A2\u30A4\u30C6\u30E0\u3092 completed \u306B\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(res)}\uFF09`);log.log(" \u3053\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u56DE\u53CE\u5F8C\u306B\
258
+ pending \u3078\u623B\u308B\u305F\u3081\u3001**\u6B21\u56DE\u8D77\u52D5\u6642\u3082\u5373\u505C\u6B62\u3057\u307E\u3059**");log.log(` \u5FA9\u65E7: UI \u304BAPI\u3067 item=${itemId} \u3092 completed / failed \u306B\u3057\u3066\u304F\u3060\u3055\u3044`)}completed+=1;const waitSec=stopMatch[1];if(waitSec){const requested=Number.parseInt(waitSec,10);const capped=Math.min(requested,STOP_WAIT_MAX_SEC);if(capped!==requested){log.log(` \u26A0\uFE0F /stop \u306E\u5F85\u6A5F ${requested}\u79D2 \u306F\u4E0A\u9650 ${STOP_WAIT_MAX_SEC}\
259
+ \u79D2 \u306B\u4E38\u3081\u307E\u3059`)}log.log(`[${stepNum}] /stop ${capped} \u2192 ${capped}\u79D2\u9593\u5F85\u6A5F\u3057\u307E\u3059...`);await this.sleepUnlessDraining(capped*1e3);log.log(`[${stepNum}] \u5F85\u6A5F\u5B8C\u4E86\u3002\u6B21\u306E\u30A2\u30A4\u30C6\u30E0\u306B\u9032\u307F\u307E\u3059\u3002`);continue}log.log(`[${stepNum}] /stop \u2192 \u30EB\u30FC\u30D7\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002`);stop=true;break}const skillName=/\/twp-([a-z][a-z0-9-]*)/.exec(prompt)?.[1]??"";const promptPlaceholder=placeholderTaskKey(
260
+ prompt.replace(/^\/twp-[a-z0-9-]*\s*/,""));if(promptPlaceholder!==null){const reason=`\u30BF\u30B9\u30AF\u30AD\u30FC\u304C\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u306E\u307E\u307E\u3067\u3059\uFF08'${promptPlaceholder}'\uFF09\u3002\u8A08\u753B\u6642\u306E\u96DB\u5F62\u304C\u7F6E\u63DB\u3055\u308C\u3066\u3044\u307E\u305B\u3093`;log.log(` \u26D4 \u5B9F\u884C\u3057\u307E\u305B\u3093: ${reason}`);const res=await api.update(itemId,{status:"failed",error_message:reason},config.runId);if(res.status===
261
+ 409){log.log(` \u26A0\uFE0F \u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09\u3002\u3053\u3061\u3089\u3067\u306F\u8A18\u9332\u3057\u307E\u305B\u3093: item=${itemId}`)}else if(!res.ok){log.log(` \u26A0\uFE0F failed \u306B\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(res)}\uFF09: item=${itemId}`)}else{log.log(`[${stepNum}] ${label} \u2192 \u5931\u6557 [ai=-] (0s)`);await this.schedule.recordByItem(itemId,"fa\
262
+ iled")}failed+=1;continue}if(skillName){const gate=await this.schedule.gateAllows(skillName);if(!gate.allowed){stepNum-=1;if(this.deferredIds.has(itemId)){log.log(" \u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u3067\u5F85\u6A5F\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u304C\u518D\u3073\u30C7\u30AD\u30E5\u30FC\u3055\u308C\u307E\u3057\u305F\u3002\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u306EPhase 2\u3092\u7D42\u4E86\u3057\u307E\u3059\u3002");break}const res=await api.update(itemId,{status:"pending"},config.runId);
263
+ if(res.status===409){log.log(` \u26A0\uFE0F \u5F8C\u56DE\u3057\u306B\u3057\u3088\u3046\u3068\u3057\u305F\u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09: item=${itemId}`);log.log(" \u81EA\u5206\u306E claim \u306F\u5931\u52B9\u3057\u3066\u3044\u307E\u3059\u3002**\u3053\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u5B9F\u884C\u305B\u305A\u653E\u68C4\u3057\u307E\u3059**");continue}if(res.ok){this.deferredIds.add(
264
+ itemId);log.log(` \u23F8 \u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u306B\u3088\u308A\u5F8C\u56DE\u3057: ${skillName} \u2014 ${gate.reason}`);continue}log.log(" \u26A0\uFE0F pending\u3078\u623B\u305B\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u3092\u7121\u8996\u3057\u3066\u3053\u306E\u307E\u307E\u5B9F\u884C\u3057\u307E\u3059");stepNum+=1}}const stepLog=path5.join(config.logDir,`step-${this.timestamp}-${cycle}-${stepNum}.log`);const startedAt=Date.now();const taggedCategory=/#ai:([a-z]+)/.
265
+ exec(label)?.[1];this.itemInFlight=itemId;const resolvedSkills=await this.skills.resolve(prompt);const skillOrigins=formatSkillOrigins(resolvedSkills.origins);if(skillOrigins!=="")log.log(` \u30B9\u30AD\u30EB: ${skillOrigins}`);const ownershipWatch=this.startOwnershipWatch(itemId);let result;try{result=await this.engine.run({serverSkills:resolvedSkills.bodies,prompt:buildStepPrompt(config,prompt),promptPrefix:this.cyclePreflightSection,logFile:stepLog,aiType:item.ai_type??void 0,aiModel:item.ai_model??
266
+ void 0,aiEffort:item.ai_effort??void 0,timeoutSec:config.aiTimeoutSec,cwd:config.workspace,skill:skillName,...skillName===""&&taggedCategory!==void 0?{category:taggedCategory}:{}})}finally{ownershipWatch.stop();this.itemInFlight=null}writeLogFile(stepLog,skillOrigins===""?result.output:`[skill] ${skillOrigins}
264
267
  ${result.output}`);const durationSec=Math.trunc((Date.now()-startedAt)/1e3);if(this.ownershipLostItemId===itemId){this.ownershipLostItemId=null;log.log(`[${stepNum}] ${label} \u2192 \u26A0\uFE0F \u6240\u6709\u6A29\u3092\u5931\u3063\u3066\u3044\u305F\u305F\u3081\u7D50\u679C\u3092\u7834\u68C4\u3057\u307E\u3057\u305F [ai=${result.usedAi||"-"}] (${durationSec}s)`);log.log(" \u3053\u306E\u30A2\u30A4\u30C6\u30E0\u306E\u5F8C\u51E6\u7406\uFF08\u5B9A\u671F\u67A0\u306E\u8A18\u9332\u30FB\u30EA\u30EA\u30FC\u30B9\u7D50\u679C\u306E\u8A18\u9332\u30FB\u5F8C\u7D9A\u6295\u5165\uFF09\u306F\u884C\u3044\u307E\u305B\u3093");
265
268
  this.abortDrained?.();this.abortDrained=null;continue dequeue}if(result.outcome==="aborted"){log.log(`[${stepNum}] ${label} \u2192 \u4E2D\u65AD [ai=${result.usedAi||"-"}] (${durationSec}s)`);const res=await api.update(itemId,{status:"pending",result:truncateResult(result.output),error_message:"aborted: \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u306B\u3088\u308A AI \u3092\u505C\u6B62\u3057\u307E\u3057\u305F\uFF08\u4F5C\u696D\u306F\u9014\u4E2D\u306E\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09"},
266
269
  config.runId);if(res.status===409){log.log(` \u26A0\uFE0F \u30AD\u30E5\u30FC\u3078\u8FD4\u305D\u3046\u3068\u3057\u305F\u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09: item=${itemId}`)}else if(res.ok){log.log(" \u2192 \u30A2\u30A4\u30C6\u30E0\u3092 pending \u306B\u623B\u3057\u307E\u3057\u305F\uFF08\u6B21\u306E\u8D77\u52D5\u3067\u62FE\u3044\u76F4\u3057\u307E\u3059\uFF09")}else{log.log(` \u26A0\uFE0F pending \u3078\u623B\
@@ -313,7 +316,7 @@ const startedAtMs=now();let warned="";let done=false;const check=()=>{if(done)re
313
316
  decision.key)return;warned=decision.key;handlers.onWarn(decision.reason);return}done=true;const recorded=writeRestartAttempt(opts.stateDir,opts.projectKey,{from:decision.from,to:decision.to,at:new Date(now()).toISOString()},opts.store);if(!recorded){handlers.onWarn(`\u518D\u8D77\u52D5\u8A18\u9332\u3092\u66F8\u3051\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${restartAttemptPath(opts.stateDir,opts.projectKey)}\uFF09\u3002\u540C\u3058\u7248\u30C9\u30EA\u30D5\u30C8\u304C\u89E3\u6D88\u3057\u306A\u3044\u5834\u5408\u3001\u518D\u8D77\u52D5\u3092\u7E70\u308A\u8FD4\u3059\u9632\u6CE2\u5824\u304C\u52B9\u304D\u307E\u305B\u3093`)}
314
317
  handlers.onRestart({from:decision.from,to:decision.to})};const timer=setInterval(check,opts.intervalMs??DRIFT_POLL_MS);timer.unref?.();return{stop:()=>{done=true;clearInterval(timer)},check}}import fs9 from"fs";import path7 from"path";var POLL_MS=1e3;var MAX_STOP_BYTES=4096;var MAX_AT_LENGTH=64;function markerPath(lockDir2,kind){return path7.join(lockDir2,kind)}function requestMarker(lockDir2,kind,pid,deps={}){const target=markerPath(lockDir2,kind);const write=deps.writeFileSync??((p,d)=>fs9.writeFileSync(p,d,{flag:"wx",mode:384}));const now=deps.now??(()=>new Date);clearMarker(lockDir2,kind,deps);try{write(target,`${JSON.stringify({pid,at:now().toISOString()})}
315
318
  `);return{ok:true}}catch(err){const e=err;return{ok:false,reason:e.code??"UNKNOWN"}}}function readMarker(lockDir2,kind,deps={}){const target=markerPath(lockDir2,kind);const read=deps.readFileSync??(p=>fs9.readFileSync(p,"utf8"));const size=deps.statSize??(p=>fs9.statSync(p).size);let raw;try{if(size(target)>MAX_STOP_BYTES)return null;raw=read(target)}catch{return null}if(raw.length>MAX_STOP_BYTES)return null;try{const parsed=JSON.parse(raw);if(typeof parsed!=="object"||parsed===null)return null;const pid=parsed.pid;const at=parsed.at;if(typeof pid!=="number"||!Number.isInteger(pid)||
316
- pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs9.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-L6XZCCU4.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-L6XZCCU4.js");const extraHosts=config.
319
+ pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs9.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-FGVNSM6L.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-FGVNSM6L.js");const extraHosts=config.
317
320
  operations.preflightHosts;return new DispatchEngine(config.ai,log,{workspace:config.workspace,charterFile:config.charterFile??void 0,charterEnabled:config.charterEnabled,...config.charterPrefix===null?{}:{charterPrefix:config.charterPrefix},...config.charterSuffix===null?{}:{charterSuffix:config.charterSuffix},serverPrompts:()=>config.serverPrompts??{},compileCommand:config.compileCommand??void 0,skillOverlayDir:path8.join(config.stateDir,"skill-overlay",projectFileKey(config.projectId)),launcherBin:config.
318
321
  claudeLauncher.bin,...extraHosts.length>0?{preflightHosts:[...DEFAULT_PREFLIGHT_HOSTS,...extraHosts]}:{}})}function lockDir(config){return path8.join(config.stateDir,`task-loop-${projectFileKey(config.projectId)}.lock.d`)}async function runTaskLoop(opts){if(opts.action==="stop")return await stopLoop(opts);const profile=resolveProfile(opts.profile);let creds;try{creds=new AuthSession(profile.name,profile.apiUrl).loadOrThrow()}catch(err){process.stderr.write(`${err.message}
319
322
  `);return 1}const apiUrl=effectiveApiUrl(profile,creds.api_url);const session=new AuthSession(profile.name,apiUrl);const projectRef=opts.project??process.env.TWP_PROJECT??"";if(projectRef===""){process.stderr.write("--project <\u30AD\u30FC|UUID> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08TWP_PROJECT \u3067\u3082\u53EF\uFF09\n");return 2}const projectApi=new ProjectApi(apiUrl,session);let project;try{project=await projectApi.resolve(projectRef)}catch(err){process.stderr.write(`${err.
@@ -324,7 +327,7 @@ write("charter \u306B\u306F push \u304B pull \u3092\u6307\u5B9A\u3057\u3066\u304
324
327
  charterOp,file:opts.charterInput,out:opts.charterOutput,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}if(opts.action==="skill"){if(opts.skillOp===void 0){process.stderr.write("skill \u306B\u306F push \u304B pull \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __private__\uFF09\u306B\u306F\u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");
325
328
  return 2}const{runSkillCommand}=await import("./skill-command-74MCUHFJ.js");return runSkillCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.skillOp,name:opts.skillName,all:opts.skillAll===true,dir:opts.skillDir,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const config=buildLoopConfig({projectId,projectRef,apiUrl,safeMode:opts.safe,daemon:opts.daemon,...opts.maxCycles!==void 0?{maxCycles:opts.maxCycles}:{},...opts.interval!==void 0?{intervalSec:opts.
326
329
  interval}:{},forceRunner:opts.forceRunner,...opts.engine!==void 0?{engine:opts.engine}:{},version:opts.version});const api=new AgentLoopApi({apiUrl,projectId,session});if(opts.action==="status"||opts.action==="schedule"){for(const warning of config.warnings)process.stderr.write(`\u26A0\uFE0F ${warning}
327
- `)}if(opts.action==="status")return showStatus(api,config);if(opts.action==="schedule"){const{runScheduleCommand}=await import("./schedule-command-7JGQMTQY.js");return runScheduleCommand({api,projectApi,config},{now:opts.scheduleNow,counts:opts.scheduleCounts,gate:opts.scheduleGate,verbose:opts.verbose===true})}if(config.engine===""){process.stderr.write(`${new EngineNotConfiguredError().message}
330
+ `)}if(opts.action==="status")return showStatus(api,config);if(opts.action==="schedule"){const{runScheduleCommand}=await import("./schedule-command-QCGEMBVR.js");return runScheduleCommand({api,projectApi,config},{now:opts.scheduleNow,counts:opts.scheduleCounts,gate:opts.scheduleGate,verbose:opts.verbose===true})}if(config.engine===""){process.stderr.write(`${new EngineNotConfiguredError().message}
328
331
  `);return 2}try{assertKnownEngine(config.engine)}catch(err){if(err instanceof UnknownEngineError){process.stderr.write(`${err.message}
329
332
  `);return 2}throw err}fs10.mkdirSync(config.logDir,{recursive:true,mode:448});rotateLogs(config.logDir,config.logRetentionDays);const logFile=path8.join(config.logDir,`agent-loop-${compactTimestamp()}.log`);const log=new LoopLogger(config.runnerId,logFile);for(const warning of config.warnings)log.log(`\u26A0\uFE0F ${warning}`);const lock=new InstanceLock(lockDir(config));const acquired=lock.acquire();if(!acquired.acquired){log.log(`\u274C ${acquired.reason}`);log.log(" \u610F\u56F3\u7684\u306B2\u30D7\u30ED\u30BB\u30B9\u52D5\u304B\u3059\u691C\u8A3C\u3067\u306F TWP_OP\
330
333
  S_STATE_DIR \u3068 RUNNER_ID \u3092\u5206\u3051\u3066\u304F\u3060\u3055\u3044");log.close();return 1}if(acquired.note)log.log(` \u2139\uFE0F ${acquired.note}`);const ownerError=writeLockOwner(lockDir(config),buildLockOwner({pid:process.pid,profile:profile.name,twpHome:twpHomeDir(),projectRef:config.projectRef,projectId:config.projectId}));if(ownerError!==null){log.log(` \u26A0\uFE0F \u30ED\u30C3\u30AF\u306B\u6240\u6709\u8005\u306E\u8A18\u9332\u3092\u66F8\u3051\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${ownerError}\
@@ -339,8 +342,8 @@ value:null};const shutdown=async()=>{if(shuttingDown)return;shuttingDown=true;st
339
342
  once("SIGINT",onSignal);process.once("SIGTERM",onSignal);process.once("SIGHUP",onSignal);stopWatcher=watchMarker(lockDir(config),"stop",process.pid,req=>{log.log(`\u505C\u6B62\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${req.at||"\u6642\u523B\u4E0D\u660E"}\uFF09\u3002\u7D42\u4E86\u3057\u307E\u3059...`);stopWatcher?.();drainWatcher?.();driftWatcher?.();void shutdown().catch(()=>void 0).then(()=>process.exit(130))});drainWatcher=watchMarker(lockDir(config),"drain",process.pid,
340
343
  req=>{drainWatcher?.();if(loop===null){pendingDrain.value={reason:`stop --drain\u30FB${req.at||"\u6642\u523B\u4E0D\u660E"}`,exitCode:0};log.log(`\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${req.at||"\u6642\u523B\u4E0D\u660E"}\uFF09\u3002\u8D77\u52D5\u51E6\u7406\u306E\u5B8C\u4E86\u5F8C\u306B\u53CD\u6620\u3057\u307E\u3059\u3002`);return}loop.requestDrain(`stop --drain\u30FB${req.at||"\u6642\u523B\u4E0D\u660E"}`)});if(installed!==null){const watch=watchVersionDrift(
341
344
  {runningVersion:opts.version,stateDir:config.stateDir,projectKey:projectFileKey(config.projectId),supervised:autoRestart.supervised,disabled:autoRestart.disabled},{onWarn:reason=>log.log(`\u26A0\uFE0F ${reason}`),onRestart:({from,to})=>{driftWatcher?.();log.log(`\u7248\u30C9\u30EA\u30D5\u30C8\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08${from} \u2192 ${to}\uFF09\u3002`);log.log(` \u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u3092\u5B8C\u8D70\u3055\u305B\u3066\u304B\u3089\u7D42\u4E86\u3057\u307E\u3059\uFF08\u7D42\u4E86\u30B3\u30FC\u30C9 ${EXIT_VERSION_DRIFT}\
342
- \uFF09\u3002\u518D\u8D77\u52D5\u306F systemd\uFF08Restart=always\uFF09\u304C\u884C\u3044\u307E\u3059`);const reason=`\u7248\u30C9\u30EA\u30D5\u30C8 ${from} \u2192 ${to} \u306B\u3088\u308B\u81EA\u52D5\u518D\u8D77\u52D5`;if(loop===null)pendingDrain.value={reason,exitCode:EXIT_VERSION_DRIFT};else loop.requestDrain(reason,EXIT_VERSION_DRIFT)}});driftWatcher=watch.stop}try{const{LoopSettingsApplier:LoopSettingsApplier2}=await import("./server-settings-3E7G56G7.js");const settings=new LoopSettingsApplier2(
343
- {api,config,log:m=>log.log(m)});await settings.apply();const{ServerSkillCatalog:ServerSkillCatalog2}=await import("./server-skills-OF7USNRM.js");const skills=new ServerSkillCatalog2({api,config,log:m=>log.log(m)});await skills.refresh();await runner.checkHeartbeatInterval();await runner.registerOrThrow();runner.startHeartbeatWorker();log.log(` heartbeat: ${config.heartbeatIntervalSec}\u79D2\u3054\u3068\u306B\u9001\u4FE1${runner.heartbeatTimeoutServer?`\uFF08\u30B5\u30FC\u30D0\u306E\u6B7B\u6D3B\u3057\u304D\u3044\u5024 ${runner.
345
+ \uFF09\u3002\u518D\u8D77\u52D5\u306F systemd\uFF08Restart=always\uFF09\u304C\u884C\u3044\u307E\u3059`);const reason=`\u7248\u30C9\u30EA\u30D5\u30C8 ${from} \u2192 ${to} \u306B\u3088\u308B\u81EA\u52D5\u518D\u8D77\u52D5`;if(loop===null)pendingDrain.value={reason,exitCode:EXIT_VERSION_DRIFT};else loop.requestDrain(reason,EXIT_VERSION_DRIFT)}});driftWatcher=watch.stop}try{const{LoopSettingsApplier:LoopSettingsApplier2}=await import("./server-settings-TUBJ4P57.js");const settings=new LoopSettingsApplier2(
346
+ {api,config,log:m=>log.log(m)});await settings.apply();const{ServerSkillCatalog:ServerSkillCatalog2}=await import("./server-skills-Z5DGCJQ7.js");const skills=new ServerSkillCatalog2({api,config,log:m=>log.log(m)});await skills.refresh();await runner.checkHeartbeatInterval();await runner.registerOrThrow();runner.startHeartbeatWorker();log.log(` heartbeat: ${config.heartbeatIntervalSec}\u79D2\u3054\u3068\u306B\u9001\u4FE1${runner.heartbeatTimeoutServer?`\uFF08\u30B5\u30FC\u30D0\u306E\u6B7B\u6D3B\u3057\u304D\u3044\u5024 ${runner.
344
347
  heartbeatTimeoutServer}\u79D2\uFF09`:""}`);loop=new TaskLoop({api,projectApi,config,log,runner,engine:await buildEngine(config,m=>log.log(m)),settings,skills});if(pendingDrain.value!==null){loop.requestDrain(pendingDrain.value.reason,pendingDrain.value.exitCode)}exitCode=await loop.run()}catch(err){if(err instanceof RunnerRegistrationError){exitCode=1}else{log.log(`\u26D4 \u4E88\u671F\u3057\u306A\u3044\u30A8\u30E9\u30FC\u3067\u7D42\u4E86\u3057\u307E\u3059: ${err.message}`);exitCode=1}}finally{await shutdown()}
345
348
  return exitCode}async function showStatus(api,config){const out={write:text=>process.stdout.write(stripTerminalControls(text))};out.write(`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: ${config.projectRef}\uFF08${config.projectId}\uFF09
346
349
  `);out.write(`\u63A5\u7D9A\u5148: ${config.apiUrl}
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{customerDocumentSubresources}from"./chunk-JYNZEZYL.js";import{COMPANY_FIELDS,COMPANY_LICENSE,CUSTOMER_LICENSE,customerSubresources,customerWriteOperations,dataOf,levelForbidden}from"./chunk-HS7EKE7M.js";import"./chunk-HNUBM24L.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-SBWCQAHT.js";import"./chunk-2YNZ4MRT.js";import"./chunk-OHXZO5WK.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-V24LKF3V.js";import"./chunk-XDHLO54T.js";
4
- import{CUSTOMERS_PATH,SALES_COMPANIES_PATH,isExactNumericId}from"./chunk-3WHD2YVF.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError}from"./chunk-IF2K4PM5.js";import"./chunk-XNLIEUAW.js";import"./chunk-4VZKNEVN.js";import"./chunk-QQRJLH6B.js";import"./chunk-GY7KI5E5.js";import"./chunk-II5RVJQN.js";import{LIST_FLAGS,LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,
3
+ import{customerDocumentSubresources}from"./chunk-JKL6NUVV.js";import{COMPANY_FIELDS,COMPANY_LICENSE,CUSTOMER_LICENSE,customerSubresources,customerWriteOperations,dataOf,levelForbidden}from"./chunk-KS2ZUQFC.js";import"./chunk-HNUBM24L.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-A65V3K75.js";import"./chunk-2YNZ4MRT.js";import"./chunk-OHXZO5WK.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-GOZCJLRA.js";import"./chunk-XDHLO54T.js";
4
+ import{CUSTOMERS_PATH,SALES_COMPANIES_PATH,isExactNumericId}from"./chunk-4F2ONF4P.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError}from"./chunk-IF2K4PM5.js";import"./chunk-XNLIEUAW.js";import"./chunk-4VZKNEVN.js";import"./chunk-QQRJLH6B.js";import"./chunk-GY7KI5E5.js";import"./chunk-II5RVJQN.js";import{LIST_FLAGS,LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,
5
5
  PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,envelopePaging,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";import"./chunk-J7QYPKVK.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var CUSTOMER_FLAG_FIELD={kind:"boolean",flag:"--customer",key:"customer_flg",summary:"\u9867\u5BA2\u3068\u3057\u3066\u6271\u3046\u304B\uFF08true / false\uFF09"};var FIELDS=[...COMPANY_FIELDS,CUSTOMER_FLAG_FIELD];var COLUMNS=["id","company_name","company_name_kana","company_short_name","customer_flg","supplier_flg","tel","address1"];var WRITE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u53D6\u5F15\u5148\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u306B\u306F\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u304B\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u306E\u3069\u3061\u3089\u304B\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 DELETE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u53D6\u5F15\u5148\u306E\u524A\u9664\u306B\u306F\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u304B\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u306E\u3069\u3061\u3089\u304B\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");var REF_HELP="<\u53D6\u5F15\u5148> \u306F\u4F01\u696D\u540D\u30FB\u7565\u79F0\u30FB\u30AB\u30CA\u306E\u5B8C\u5168\u4E00\u81F4\u304B\
7
7
  ID\uFF08twp company list \u306E id \u5217\u306E\u6570\u5B57\uFF09\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\u9867\u5BA2\u30FB\u4ED5\u5165\u5148\u306E\u3069\u3061\u3089\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002";function companyPath(input){const id=requireResolved(input,"companyId");if(!isExactNumericId(id))throw new UsageError(`\u53D6\u5F15\u5148 ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${id}`);return`${SALES_COMPANIES_PATH}/${id}`}async function resolveCompany(input,ctx,usage){
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{contractAiReviewResources}from"./chunk-OVBKORPC.js";import"./chunk-L7IGGC7H.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-V24LKF3V.js";import{isoDate}from"./chunk-XDHLO54T.js";import{readBody}from"./chunk-ORUDW52G.js";import{SALES_CONTRACTS_PATH,isExactNumericId,resolveNamed}from"./chunk-3WHD2YVF.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import"./chunk-IF2K4PM5.js";
3
+ import{contractAiReviewResources}from"./chunk-FZWRYJVM.js";import"./chunk-VB2CSFRO.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-GOZCJLRA.js";import{isoDate}from"./chunk-XDHLO54T.js";import{readBody}from"./chunk-ORUDW52G.js";import{SALES_CONTRACTS_PATH,isExactNumericId,resolveNamed}from"./chunk-4F2ONF4P.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import"./chunk-IF2K4PM5.js";
4
4
  import"./chunk-XNLIEUAW.js";import"./chunk-4VZKNEVN.js";import"./chunk-QQRJLH6B.js";import"./chunk-II5RVJQN.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";
5
5
  import"./chunk-J7QYPKVK.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var PATH=SALES_CONTRACTS_PATH;var SALES_FORBIDDEN=licenseForbidden(featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"));var DISAMBIGUATION="\u53D6\u5F15\u5951\u7D04\u306F\u898B\u7A4D\u304B\u3089\u4F5C\u308B\u8CA9\u58F2\u7BA1\u7406\u306E\u66F8\u985E\u3067\u3059\uFF08\u660E\u7D30\u30FB\u91D1\u984D\u3092\u6301\u3061\u3001\u627F\u8A8D\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u306B\u4E57\u308A\u307E\u3059\uFF09\u3002\n\u9867\u5BA2\u306B\u7D10\u3065\u3051\u3066\u4FDD\u7BA1\u3059\u308B\u5951\u7D04\u66F8\u306E PDF \u306F\u5225\u7269\u3067\u3001twp customer contract \u3067\u6271\u3044\u307E\u3059\u3002\n\n";
6
6
  var CONTRACT_STATUSES={new:"\u4F5C\u6210\u4E2D",create_completed:"\u4F5C\u6210\u5B8C\u4E86",in_progress:"\u7533\u8ACB\u4E2D",approved:"\u627F\u8A8D\u6E08",rejected:"\u5DEE\u3057\u623B\u3057",submitted:"\u63D0\u793A\u6E08",contracted:"\u5951\u7D04\u7DE0\u7D50\u6E08",deleted:"\u524A\u9664\u6E08"};var RENEWAL_TYPES={auto_renewal:"\u81EA\u52D5\u66F4\u65B0",application_renewal:"\u7533\u8FBC\u306B\u3088\u308B\u66F4\u65B0"};function statusName(code){return CONTRACT_STATUSES[code]??code}function tableHelp(table){
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterFields,masterItem,masterListOperation,masterRows,referencedDeleteGuidance,resolveRefFields,targetId,updateFlags}from"./chunk-SBWCQAHT.js";import"./chunk-XDHLO54T.js";import{DEPARTMENTS_PATH}from"./chunk-3WHD2YVF.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-IF2K4PM5.js";import"./chunk-4VZKNEVN.js";import"./chunk-II5RVJQN.js";import"./chunk-IOGMOXYF.js";
3
+ import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterFields,masterItem,masterListOperation,masterRows,referencedDeleteGuidance,resolveRefFields,targetId,updateFlags}from"./chunk-A65V3K75.js";import"./chunk-XDHLO54T.js";import{DEPARTMENTS_PATH}from"./chunk-4F2ONF4P.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-IF2K4PM5.js";import"./chunk-4VZKNEVN.js";import"./chunk-II5RVJQN.js";import"./chunk-IOGMOXYF.js";
4
4
  import{withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";import"./chunk-J7QYPKVK.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u90E8\u7F72";var LIST_COLUMNS=["id","code","name","parent_id","level","effective_status","valid_from","valid_to","member_count"];var GET_COLUMNS=["id","code","name","name_short","parent_id","level","sort","effective_status","valid_from","valid_to","description"];var TREE_COLUMNS=["depth","name","code","id","effective_status","valid_to"];var MEMBER_COLUMNS=["id","user_id","position_id","job_title_id","start_date","end_date","is_primary","is_current","effective_status"];var REF_FLAG={name:"\
5
5
  --department",summary:"\u5BFE\u8C61\u306E\u90E8\u7F72\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"};var REF_HELP="<\u90E8\u7F72> \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u540D\u524D\u304C\u8907\u6570\u306B\u4E00\u81F4\u3059\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002\nID \u4EE5\u5916\u306F\u90E8\u7F72\u4E00\u89A7\uFF08\u65E2\u5B9A10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u30FB--refresh \u3067\u53D6\u308A\u76F4\u3057\uFF09\u3068\u7167\u5408\u3057\u307E\u3059\u3002";
6
6
  var FIELDS=masterFields(LABEL,[{kind:"text",flag:"--name-short",key:"name_short",label:"\u7565\u79F0",maxChars:50,summary:"\u7565\u79F0"},{kind:"ref",flag:"--parent",key:"parent_id",summary:"\u89AA\u90E8\u7F72\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",placeholder:"<\u90E8\u7F72>",clearFlag:"--no-parent",clearSummary:"\u89AA\u90E8\u7F72\u3092\u5916\u3057\u3066\u6700\u4E0A\u4F4D\u306B\u3059\u308B",resolve:(ctx,ref,flag)=>ctx.resolver.department(ref,flag)},{kind:"integer",flag:"--sor\
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{depositDomain,depositIdArg,describeDeposit,excerpt,parseAllocationRows,parsePlanBody,planSkeleton,salesAdminForbidden,sendAtomic}from"./chunk-QVZGNHRE.js";import"./chunk-OHXZO5WK.js";import"./chunk-V24LKF3V.js";import"./chunk-XDHLO54T.js";import"./chunk-ORUDW52G.js";import"./chunk-3WHD2YVF.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-F7K37QG6.js";import"./chunk-IF2K4PM5.js";import"./chunk-4VZKNEVN.js";
3
+ import{depositDomain,depositIdArg,describeDeposit,excerpt,parseAllocationRows,parsePlanBody,planSkeleton,salesAdminForbidden,sendAtomic}from"./chunk-BN26WHLS.js";import"./chunk-OHXZO5WK.js";import"./chunk-GOZCJLRA.js";import"./chunk-XDHLO54T.js";import"./chunk-ORUDW52G.js";import"./chunk-4F2ONF4P.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-F7K37QG6.js";import"./chunk-IF2K4PM5.js";import"./chunk-4VZKNEVN.js";
4
4
  import"./chunk-QQRJLH6B.js";import"./chunk-II5RVJQN.js";import"./chunk-IOGMOXYF.js";import"./chunk-LXIAOCUW.js";import"./chunk-VTQAI52S.js";import"./chunk-UFND7FBC.js";import"./chunk-J7QYPKVK.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{depositDomain,depositIdArg,describeDeposit,excerpt,parseAllocationRows,parsePlanBody,planSkeleton,salesAdminForbidden,sendAtomic};
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{estimateCaseDocumentResource}from"./chunk-AKPVALTZ.js";import"./chunk-JYNZEZYL.js";import"./chunk-HS7EKE7M.js";import{contentTypeFor,inspectLocalFile,issued}from"./chunk-HNUBM24L.js";import"./chunk-SBWCQAHT.js";import{estimateNoRuleResource}from"./chunk-EZMXGIGX.js";import{estimateAiReviewResources}from"./chunk-OVBKORPC.js";import{estimatePdfOperation}from"./chunk-L7IGGC7H.js";import{checkUploadQuota}from"./chunk-2YNZ4MRT.js";import{salesAdminForbidden}from"./chunk-QVZGNHRE.js";
4
- import"./chunk-OHXZO5WK.js";import{estimateReadOperations,featureLicenseGuidance,licenseForbidden}from"./chunk-V24LKF3V.js";import"./chunk-XDHLO54T.js";import{charCount,readBody}from"./chunk-ORUDW52G.js";import{SALES_ESTIMATES_PATH,SALES_ESTIMATE_FORMATS_PATH,SALES_ESTIMATE_NO_RULES_PATH,SALES_INVOICE_NO_RULES_PATH,isExactNumericId}from"./chunk-3WHD2YVF.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import{repeatedValues}from"./chunk-F7K37QG6.js";
3
+ import{estimateCaseDocumentResource}from"./chunk-IO5SMECE.js";import"./chunk-JKL6NUVV.js";import"./chunk-KS2ZUQFC.js";import{contentTypeFor,inspectLocalFile,issued}from"./chunk-HNUBM24L.js";import"./chunk-A65V3K75.js";import{estimateNoRuleResource}from"./chunk-OYDF57NH.js";import{estimateAiReviewResources}from"./chunk-FZWRYJVM.js";import{estimatePdfOperation}from"./chunk-VB2CSFRO.js";import{checkUploadQuota}from"./chunk-2YNZ4MRT.js";import{salesAdminForbidden}from"./chunk-BN26WHLS.js";
4
+ import"./chunk-OHXZO5WK.js";import{estimateReadOperations,featureLicenseGuidance,licenseForbidden}from"./chunk-GOZCJLRA.js";import"./chunk-XDHLO54T.js";import{charCount,readBody}from"./chunk-ORUDW52G.js";import{SALES_ESTIMATES_PATH,SALES_ESTIMATE_FORMATS_PATH,SALES_ESTIMATE_NO_RULES_PATH,SALES_INVOICE_NO_RULES_PATH,isExactNumericId}from"./chunk-4F2ONF4P.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import{repeatedValues}from"./chunk-F7K37QG6.js";
5
5
  import{ApiError}from"./chunk-IF2K4PM5.js";import"./chunk-XNLIEUAW.js";import"./chunk-4VZKNEVN.js";import"./chunk-QQRJLH6B.js";import"./chunk-GY7KI5E5.js";import"./chunk-II5RVJQN.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,
6
6
  UsageError}from"./chunk-UFND7FBC.js";import"./chunk-J7QYPKVK.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var PATH=SALES_ESTIMATE_FORMATS_PATH;var LABEL="\u898B\u7A4D\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8";var CONTENT_KEYS=["format_name","start_date","end_date","default_unit","default_tax_rate","default_business_place_id","default_seal_impression_id","default_estimate_no_id","default_invoice_no_id","default_payee_id","default_terms","default_invoice_memo","default_purchase_terms","default_purchase_acceptance_terms","estimate_workflow_id","contract_workflow_id","invoice_workflow_id","purchase_workflow_\
7
7
  id","description","estimate_manage_content","contract_manage_content","invoice_manage_content","sort_order"];var FIELD_NOTES=[["format_name","\u4F5C\u6210\u3067\u5FC5\u9808\u3002\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u540D\uFF08255 \u6587\u5B57\u307E\u3067\uFF09"],["default_unit","\u4F5C\u6210\u3067\u5FC5\u9808\u3002\u660E\u7D30\u306E\u65E2\u5B9A\u306E\u5358\u4F4D\uFF08set / item / unit / hour / day / month / person / person_month / person_day\uFF09"],["default_tax_rate",'\u4F5C\u6210\u3067\u5FC5\u9808\u3002\u65E2\u5B9A\u306E\u7A0E\u7387\uFF08"10" / "8" / \