tailii-host 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +51 -0
- package/dist/apnsConfigStore.d.ts +22 -0
- package/dist/apnsConfigStore.js +50 -0
- package/dist/apnsConfigStore.js.map +1 -0
- package/dist/apnsJwtProvider.d.ts +50 -0
- package/dist/apnsJwtProvider.js +158 -0
- package/dist/apnsJwtProvider.js.map +1 -0
- package/dist/apnsSender.d.ts +69 -0
- package/dist/apnsSender.js +155 -0
- package/dist/apnsSender.js.map +1 -0
- package/dist/approvalPushNotifier.d.ts +100 -0
- package/dist/approvalPushNotifier.js +236 -0
- package/dist/approvalPushNotifier.js.map +1 -0
- package/dist/broker.d.ts +24 -0
- package/dist/broker.js +197 -0
- package/dist/broker.js.map +1 -0
- package/dist/chatTailController.d.ts +87 -0
- package/dist/chatTailController.js +292 -0
- package/dist/chatTailController.js.map +1 -0
- package/dist/claudeSessionStore.d.ts +15 -0
- package/dist/claudeSessionStore.js +201 -0
- package/dist/claudeSessionStore.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +53 -0
- package/dist/cli.js.map +1 -0
- package/dist/codexRolloutTailer.d.ts +56 -0
- package/dist/codexRolloutTailer.js +303 -0
- package/dist/codexRolloutTailer.js.map +1 -0
- package/dist/codexSessionStore.d.ts +23 -0
- package/dist/codexSessionStore.js +274 -0
- package/dist/codexSessionStore.js.map +1 -0
- package/dist/codexUsage.d.ts +16 -0
- package/dist/codexUsage.js +144 -0
- package/dist/codexUsage.js.map +1 -0
- package/dist/deviceTokenStore.d.ts +38 -0
- package/dist/deviceTokenStore.js +73 -0
- package/dist/deviceTokenStore.js.map +1 -0
- package/dist/dirLister.d.ts +9 -0
- package/dist/dirLister.js +98 -0
- package/dist/dirLister.js.map +1 -0
- package/dist/doctor.d.ts +36 -0
- package/dist/doctor.js +162 -0
- package/dist/doctor.js.map +1 -0
- package/dist/engine.d.ts +85 -0
- package/dist/engine.js +962 -0
- package/dist/engine.js.map +1 -0
- package/dist/hook.d.ts +67 -0
- package/dist/hook.js +511 -0
- package/dist/hook.js.map +1 -0
- package/dist/hookSettings.d.ts +40 -0
- package/dist/hookSettings.js +128 -0
- package/dist/hookSettings.js.map +1 -0
- package/dist/idleReaper.d.ts +13 -0
- package/dist/idleReaper.js +30 -0
- package/dist/idleReaper.js.map +1 -0
- package/dist/imageService.d.ts +53 -0
- package/dist/imageService.js +280 -0
- package/dist/imageService.js.map +1 -0
- package/dist/kick.d.ts +8 -0
- package/dist/kick.js +60 -0
- package/dist/kick.js.map +1 -0
- package/dist/launch.d.ts +107 -0
- package/dist/launch.js +396 -0
- package/dist/launch.js.map +1 -0
- package/dist/legacyHomeMigration.d.ts +1 -0
- package/dist/legacyHomeMigration.js +23 -0
- package/dist/legacyHomeMigration.js.map +1 -0
- package/dist/lineWriter.d.ts +9 -0
- package/dist/lineWriter.js +19 -0
- package/dist/lineWriter.js.map +1 -0
- package/dist/mdnsAdvertiser.d.ts +46 -0
- package/dist/mdnsAdvertiser.js +268 -0
- package/dist/mdnsAdvertiser.js.map +1 -0
- package/dist/observationLog.d.ts +54 -0
- package/dist/observationLog.js +108 -0
- package/dist/observationLog.js.map +1 -0
- package/dist/pairingCode.d.ts +60 -0
- package/dist/pairingCode.js +282 -0
- package/dist/pairingCode.js.map +1 -0
- package/dist/paths.d.ts +13 -0
- package/dist/paths.js +46 -0
- package/dist/paths.js.map +1 -0
- package/dist/permissionMode.d.ts +8 -0
- package/dist/permissionMode.js +32 -0
- package/dist/permissionMode.js.map +1 -0
- package/dist/planUsageFetcher.d.ts +35 -0
- package/dist/planUsageFetcher.js +172 -0
- package/dist/planUsageFetcher.js.map +1 -0
- package/dist/protocol.d.ts +329 -0
- package/dist/protocol.js +544 -0
- package/dist/protocol.js.map +1 -0
- package/dist/pushTokenCommand.d.ts +9 -0
- package/dist/pushTokenCommand.js +85 -0
- package/dist/pushTokenCommand.js.map +1 -0
- package/dist/pushTypes.d.ts +41 -0
- package/dist/pushTypes.js +68 -0
- package/dist/pushTypes.js.map +1 -0
- package/dist/sendLog.d.ts +14 -0
- package/dist/sendLog.js +64 -0
- package/dist/sendLog.js.map +1 -0
- package/dist/sessionActivityProvider.d.ts +7 -0
- package/dist/sessionActivityProvider.js +44 -0
- package/dist/sessionActivityProvider.js.map +1 -0
- package/dist/sessionIdleTracker.d.ts +19 -0
- package/dist/sessionIdleTracker.js +42 -0
- package/dist/sessionIdleTracker.js.map +1 -0
- package/dist/sessionListService.d.ts +27 -0
- package/dist/sessionListService.js +85 -0
- package/dist/sessionListService.js.map +1 -0
- package/dist/sessionMetadataStore.d.ts +33 -0
- package/dist/sessionMetadataStore.js +122 -0
- package/dist/sessionMetadataStore.js.map +1 -0
- package/dist/sessionSearch.d.ts +29 -0
- package/dist/sessionSearch.js +139 -0
- package/dist/sessionSearch.js.map +1 -0
- package/dist/setup.d.ts +83 -0
- package/dist/setup.js +412 -0
- package/dist/setup.js.map +1 -0
- package/dist/sleep.d.ts +4 -0
- package/dist/sleep.js +25 -0
- package/dist/sleep.js.map +1 -0
- package/dist/socketPath.d.ts +12 -0
- package/dist/socketPath.js +51 -0
- package/dist/socketPath.js.map +1 -0
- package/dist/subagentTailer.d.ts +15 -0
- package/dist/subagentTailer.js +399 -0
- package/dist/subagentTailer.js.map +1 -0
- package/dist/tmux.d.ts +62 -0
- package/dist/tmux.js +163 -0
- package/dist/tmux.js.map +1 -0
- package/dist/transcriptTailer.d.ts +61 -0
- package/dist/transcriptTailer.js +606 -0
- package/dist/transcriptTailer.js.map +1 -0
- package/dist/usageAggregator.d.ts +12 -0
- package/dist/usageAggregator.js +55 -0
- package/dist/usageAggregator.js.map +1 -0
- package/dist/version.d.ts +10 -0
- package/dist/version.js +45 -0
- package/dist/version.js.map +1 -0
- package/package.json +50 -0
package/dist/hook.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,2DAA2D;AAC3D,EAAE;AACF,mFAAmF;AACnF,EAAE;AACF,iCAAiC;AACjC,gEAAgE;AAChE,2EAA2E;AAC3E,0EAA0E;AAC1E,qDAAqD;AACrD,mDAAmD;AACnD,EAAE;AACF,6BAA6B;AAC7B,yDAAyD;AACzD,6DAA6D;AAC7D,yCAAyC;AACzC,EAAE;AACF,iEAAiE;AACjE,EAAE;AACF,sDAAsD;AACtD,6CAA6C;AAE7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,eAAe,CAAC;AAEvB,aAAa;AAEb;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAElD,iDAAiD;AACjD,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAG,CAAC;AAEvD,sCAAsC;AACtC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/F,6DAA6D;AAC7D,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AACjE,CAAC;AA+CD,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;IAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAChD,MAAM,oBAAoB,GACxB,OAAO,CAAC,2BAA2B,IAAI,mCAAmC,CAAC;IAC7E,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAElD,iCAAiC;IACjC,IAAI,MAAM,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClE,CAAC;IAED,4BAA4B;IAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAE1D,8DAA8D;IAC9D,2BAA2B;IAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,IAAI,CAAC;IAEzD,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAChC,qDAAqD;QACrD,OAAO,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,MAAM,EAAE,CAAC;QACX,4CAA4C;QAC5C,OAAO,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACrF,CAAC;IAED,4CAA4C;IAC5C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,kBAAkB,CACtB,OAAO,CAAC,QAAQ,EAChB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAC5D,OAAO,CAAC,mBAAmB,IAAI,IAAI,CACpC,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;IAC/F,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC1F,CAAC;IAED,0CAA0C;IAC1C,OAAO,IAAI,CAAC,2CAA2C,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC1F,CAAC;AAED,sDAAsD;AAEtD,KAAK,UAAU,qBAAqB,CAClC,MAAkB,EAClB,MAAwB,EACxB,OAAe,EACf,IAA0B,EAC1B,OAAuB,EACvB,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAE/B,uDAAuD;QACvD,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YAC5C,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,OAAO,GAAG,oBAAoB,CAAC;YACnC,IAAI,EAAE,kBAAkB;YACxB,CAAC,EAAE,WAAW;YACd,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,OAAO;YACP,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;QAED,oDAAoD;QACpD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACvE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,oBAAoB,CAAC,CAAC;YACvD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,CAAC;YACpD,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,sBAAsB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC5E,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AASD;;;;GAIG;AACH,SAAS,eAAe,CACtB,MAAkB,EAClB,UAAkB,EAClB,YAAoB;IAEpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5C,IAAI,GAAG,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,MAAM,GAAG,CAAC,OAAwB,EAAQ,EAAE;YAChD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC3C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC7C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC7C,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;YACrC,GAAG,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAC7D,IAAI,GAAW,CAAC;YAChB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAClC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM,CAAC,OAAO,CAAC,CAAC;oBAChB,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAElE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACpF,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,kCAAkC;YAClC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAY,EAAE,UAAkB;IACpD,0CAA0C;IAC1C,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,OAAO,CAAC,EAAE,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,OAAO,CAAC,MAAM,KAAK,SAAS;QACjC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;QACpD,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED,6CAA6C;AAE7C,qEAAqE;AACrE,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACnC,uDAAuD;YACvD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CACzB,UAAkB,EAClB,YAAoB,EACpB,eAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvE,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5C,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAChC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,uCAAuC;AAEvC,uDAAuD;AACvD,KAAK,UAAU,kBAAkB,CAC/B,QAA8B,EAC9B,OAA4B,EAC5B,WAAmB;IAEnB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,8BAA8B;AAE9B,SAAS,cAAc,CACrB,MAAwB,EACxB,OAAe,EACf,eAAmC;IAEnC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,iDAAiD;QACjD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;IAChD,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,OAAO,CAAC;IAChD,IAAI,CAAC;QACH,GAAG,CAAC,MAAM,CACR,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAC/E,OAAO,EACP,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAC9B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,qCAAqC;AAErC,iFAAiF;AACjF,SAAS,oBAAoB,CAC3B,SAAkC,EAClC,iBAAyB,EACzB,IAAY;IAEZ,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,uEAAuE;QACvE,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,SAAS,UAAU,CAAC,SAAkC;IACpD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qCAAqC;AAErC,sCAAsC;AACtC,SAAS,YAAY,CAAC,QAAgB,EAAE,SAAkC;IACxE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/E,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,eAAe,QAAQ,EAAE,CAAC;YAC1F,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,cAAc,QAAQ,EAAE,CAAC;YACzF,OAAO,aAAa,CAAC;QACvB,CAAC;QACD;YACE,OAAO,aAAa,QAAQ,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9D,CAAC;AAED,uFAAuF;AACvF,SAAS,SAAS,CAAC,QAAgB,EAAE,SAAkC;IACrE,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACjG,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;YAC1C,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;gBACzD,SAAS,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;aAC1D,CAAC;QACJ,CAAC;QACD;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAeD,4CAA4C;AAC5C,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,MAAM,GAAqB;QAC/B,SAAS,EAAE,YAAY;QACvB,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE,EAAE;QACb,GAAG,EAAE,EAAE;QACP,SAAS,EAAE,EAAE;KACd,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACjF,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1F,IAAI,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrF,MAAM,CAAC,SAAS,GAAG,SAAoC,CAAC;IAC1D,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IACtC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,MAAM,QAAQ,GAAI,QAAoC,CAAC,oBAAoB,CAAC,CAAC;QAC7E,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kCAAkC;AAElC;;;;;GAKG;AACH,SAAS,YAAY,CAAC,UAA4B,EAAE,MAAc;IAChE,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,UAAU;YAC9B,wBAAwB,EAAE,MAAM;SACjC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,MAAc;IAC3B,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,IAAI,CAAC,MAAc;IAC1B,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,uBAAuB;AAEvB;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,eAAe,GAAG,8BAA8B,CAAC;IACrD,IAAI,oBAAoB,GAAG,mCAAmC,CAAC;IAC/D,0EAA0E;IAC1E,kDAAkD;IAClD,sEAAsE;IACtE,mEAAmE;IACnE,IAAI,KAAK,GAAuB,QAAQ,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,GAAkB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5E,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,KAAK,UAAU;gBACb,SAAS,GAAG,IAAI,EAAE,CAAC;gBACnB,MAAM;YACR,KAAK,WAAW;gBACd,UAAU,GAAG,IAAI,EAAE,CAAC;gBACpB,MAAM;YACR,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;gBACnB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ;oBAAE,KAAK,GAAG,GAAG,CAAC;gBACrD,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACjE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,eAAe,GAAG,KAAK,CAAC;gBACpD,MAAM;YACR,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACjE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,oBAAoB,GAAG,KAAK,CAAC;gBACzD,MAAM;YACR,CAAC;YACD,KAAK,cAAc;gBACjB,YAAY,GAAG,IAAI,EAAE,CAAC;gBACtB,MAAM;YACR;gBACE,MAAM;QACV,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;SAAM,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC;QAC7C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,UAAU;QACV,eAAe;QACf,OAAO,EAAE,UAAU,IAAI,SAAS;QAChC,eAAe,EAAE,sBAAsB,EAAE;QACzC,iBAAiB,EACf,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,wBAAwB,EAAE;QACzF,QAAQ,EAAE,0BAA0B,EAAE;QACtC,2BAA2B,EAAE,oBAAoB;KAClD,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAyB,EAAE,MAAc;IAC1E,IAAI,KAAK,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code フックの外部タイムアウト(秒)。
|
|
3
|
+
* hook の内部デッドラインより厳密に大きい値(内部 540 < OS 600)。
|
|
4
|
+
*/
|
|
5
|
+
export declare const HOOK_EXTERNAL_TIMEOUT_SECONDS = 600;
|
|
6
|
+
/**
|
|
7
|
+
* claude 起動時に `--settings` へ渡す承認フック設定を JSON 文字列で返す。
|
|
8
|
+
*
|
|
9
|
+
* 以前は `<dir>/.claude/settings.json` に PreToolUse+PostToolUse フックを書き込んでいたが、
|
|
10
|
+
* その方式だと「同じ dir で tailii を経由せず起動した通常の claude」までフックを拾ってしまい、
|
|
11
|
+
* 承認ブローカーが居ないまま全ツール呼び出しがゲート待ちでハングする(=リポジトリを開くと
|
|
12
|
+
* バグる)。tmux で起動する claude プロセスにだけフックを効かせるため、ファイルには書かず
|
|
13
|
+
* `claude --settings '<json>'` で渡す。これならリポジトリの settings.json を汚さず、
|
|
14
|
+
* その一発の起動にだけフックが乗る。
|
|
15
|
+
*
|
|
16
|
+
* 無効化マーカー(`~/.tailii/nohook` かグローバル注入パス / `<dir>/.tailii-nohook`)が
|
|
17
|
+
* あれば `null` を返す(フック無しで起動する)。
|
|
18
|
+
*/
|
|
19
|
+
export declare function claudeHookLaunchSettings(options: {
|
|
20
|
+
dir: string;
|
|
21
|
+
binaryPath: string;
|
|
22
|
+
session: string;
|
|
23
|
+
/** グローバル無効化マーカーのパス(注入可能)。省略時は `~/.tailii/nohook`。 */
|
|
24
|
+
globalMarkerPath?: string;
|
|
25
|
+
}): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* `<dir>/.codex/hooks.json` に codex(Codex CLI)用の PreToolUse フックを書き込む(既存ならマージ)。
|
|
28
|
+
* codex はプロジェクトローカルの `.codex/hooks.json` を読み、Claude 互換スキーマ
|
|
29
|
+
* (`{ "hooks": { "PreToolUse": [...] } }`)でフックを実行する。stdin/permissionDecision も互換だが、
|
|
30
|
+
* codex は allow/ask を拒否し deny のみ有効なため、hook 側は `--agent codex` で allow を無出力にする。
|
|
31
|
+
* codex はフック完了を同期ブロックで待つので、承認プッシュ待ちがそのままゲートになる。
|
|
32
|
+
* グローバル `~/.codex/hooks.json`(ユーザーの既存フック)には触れない(非侵襲)。
|
|
33
|
+
*/
|
|
34
|
+
export declare function installCodexHookSettings(options: {
|
|
35
|
+
dir: string;
|
|
36
|
+
binaryPath: string;
|
|
37
|
+
session: string;
|
|
38
|
+
/** グローバル無効化マーカーのパス(注入可能)。省略時は `~/.tailii/nohook`。 */
|
|
39
|
+
globalMarkerPath?: string;
|
|
40
|
+
}): void;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// hookSettings.ts
|
|
2
|
+
// tailii (TS host) — claude 起動時に渡す承認フック設定の生成 + codex 用 .codex/hooks.json 書込。
|
|
3
|
+
// claude 側はファイル(settings.json)へは書かず、`claude --settings '<json>'` でこの起動プロセス
|
|
4
|
+
// 限定にフックを渡す(後述 claudeHookLaunchSettings 参照)。codex はプロジェクトローカルの
|
|
5
|
+
// .codex/hooks.json を読む仕様のため従来どおりマージ書込する。
|
|
6
|
+
import * as fs from "node:fs";
|
|
7
|
+
import * as os from "node:os";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
/**
|
|
10
|
+
* Claude Code フックの外部タイムアウト(秒)。
|
|
11
|
+
* hook の内部デッドラインより厳密に大きい値(内部 540 < OS 600)。
|
|
12
|
+
*/
|
|
13
|
+
export const HOOK_EXTERNAL_TIMEOUT_SECONDS = 600;
|
|
14
|
+
/**
|
|
15
|
+
* claude 起動時に `--settings` へ渡す承認フック設定を JSON 文字列で返す。
|
|
16
|
+
*
|
|
17
|
+
* 以前は `<dir>/.claude/settings.json` に PreToolUse+PostToolUse フックを書き込んでいたが、
|
|
18
|
+
* その方式だと「同じ dir で tailii を経由せず起動した通常の claude」までフックを拾ってしまい、
|
|
19
|
+
* 承認ブローカーが居ないまま全ツール呼び出しがゲート待ちでハングする(=リポジトリを開くと
|
|
20
|
+
* バグる)。tmux で起動する claude プロセスにだけフックを効かせるため、ファイルには書かず
|
|
21
|
+
* `claude --settings '<json>'` で渡す。これならリポジトリの settings.json を汚さず、
|
|
22
|
+
* その一発の起動にだけフックが乗る。
|
|
23
|
+
*
|
|
24
|
+
* 無効化マーカー(`~/.tailii/nohook` かグローバル注入パス / `<dir>/.tailii-nohook`)が
|
|
25
|
+
* あれば `null` を返す(フック無しで起動する)。
|
|
26
|
+
*/
|
|
27
|
+
export function claudeHookLaunchSettings(options) {
|
|
28
|
+
const { dir, binaryPath, session } = options;
|
|
29
|
+
// グローバル無効化: `~/.tailii/nohook` があれば全ディレクトリでフックを付与しない。
|
|
30
|
+
const globalMarker = options.globalMarkerPath ?? path.join(os.homedir(), ".tailii", "nohook");
|
|
31
|
+
if (fs.existsSync(globalMarker)) {
|
|
32
|
+
process.stderr.write("tailii: ~/.tailii/nohook を検出、承認フック付与を全ディレクトリでスキップ\n");
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
// 開発用エスケープハッチ: `.tailii-nohook` マーカーがある dir にはフックを付与しない。
|
|
36
|
+
if (fs.existsSync(path.join(dir, ".tailii-nohook"))) {
|
|
37
|
+
process.stderr.write(`tailii: .tailii-nohook を検出、承認フック付与をスキップ: ${dir}\n`);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
// PreToolUse(ゲート)+ PostToolUse(監査)。イベントごとに独立した配列を生成する。
|
|
41
|
+
const command = `${binaryPath} hook --session ${session}`;
|
|
42
|
+
const entry = () => [
|
|
43
|
+
{
|
|
44
|
+
matcher: "*",
|
|
45
|
+
hooks: [{ type: "command", command, timeout: HOOK_EXTERNAL_TIMEOUT_SECONDS }],
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
return JSON.stringify({ hooks: { PreToolUse: entry(), PostToolUse: entry() } });
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* `<dir>/.codex/hooks.json` に codex(Codex CLI)用の PreToolUse フックを書き込む(既存ならマージ)。
|
|
52
|
+
* codex はプロジェクトローカルの `.codex/hooks.json` を読み、Claude 互換スキーマ
|
|
53
|
+
* (`{ "hooks": { "PreToolUse": [...] } }`)でフックを実行する。stdin/permissionDecision も互換だが、
|
|
54
|
+
* codex は allow/ask を拒否し deny のみ有効なため、hook 側は `--agent codex` で allow を無出力にする。
|
|
55
|
+
* codex はフック完了を同期ブロックで待つので、承認プッシュ待ちがそのままゲートになる。
|
|
56
|
+
* グローバル `~/.codex/hooks.json`(ユーザーの既存フック)には触れない(非侵襲)。
|
|
57
|
+
*/
|
|
58
|
+
export function installCodexHookSettings(options) {
|
|
59
|
+
const { dir, binaryPath, session } = options;
|
|
60
|
+
// グローバル/ローカル無効化マーカーは claude 版と共通。
|
|
61
|
+
const globalMarker = options.globalMarkerPath ?? path.join(os.homedir(), ".tailii", "nohook");
|
|
62
|
+
if (fs.existsSync(globalMarker)) {
|
|
63
|
+
process.stderr.write("tailii: ~/.tailii/nohook を検出、codex 承認フック書込を全ディレクトリでスキップ\n");
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (fs.existsSync(path.join(dir, ".tailii-nohook"))) {
|
|
67
|
+
process.stderr.write(`tailii: .tailii-nohook を検出、codex 承認フック書込をスキップ: ${dir}\n`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const codexDir = path.join(dir, ".codex");
|
|
71
|
+
const hooksPath = path.join(codexDir, "hooks.json");
|
|
72
|
+
fs.mkdirSync(codexDir, { recursive: true });
|
|
73
|
+
let root = {};
|
|
74
|
+
if (fs.existsSync(hooksPath)) {
|
|
75
|
+
const text = fs.readFileSync(hooksPath, "utf8");
|
|
76
|
+
if (text.trim().length > 0) {
|
|
77
|
+
const parsed = JSON.parse(text);
|
|
78
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
79
|
+
throw new Error(`既存 .codex/hooks.json が JSON オブジェクトとして解釈できない: ${hooksPath}`);
|
|
80
|
+
}
|
|
81
|
+
root = parsed;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// 承認ゲート対象: シェル実行(Bash)とファイル編集(Write|Edit)。codex 実績のある matcher。
|
|
85
|
+
const command = `${binaryPath} hook --session ${session} --agent codex`;
|
|
86
|
+
const hooksObject = typeof root["hooks"] === "object" && root["hooks"] !== null && !Array.isArray(root["hooks"])
|
|
87
|
+
? root["hooks"]
|
|
88
|
+
: {};
|
|
89
|
+
const rawList = hooksObject["PreToolUse"];
|
|
90
|
+
let list = Array.isArray(rawList)
|
|
91
|
+
? rawList.filter((e) => typeof e === "object" && e !== null)
|
|
92
|
+
: [];
|
|
93
|
+
// 既存の同一 command を除去(再実行で重複しない)。
|
|
94
|
+
list = list.filter((entry) => {
|
|
95
|
+
const inner = entry["hooks"];
|
|
96
|
+
if (!Array.isArray(inner))
|
|
97
|
+
return true;
|
|
98
|
+
return !inner.some((h) => typeof h === "object" &&
|
|
99
|
+
h !== null &&
|
|
100
|
+
h["command"] === command);
|
|
101
|
+
});
|
|
102
|
+
for (const matcher of ["Bash", "Write|Edit"]) {
|
|
103
|
+
list.push({
|
|
104
|
+
matcher,
|
|
105
|
+
hooks: [{ type: "command", command, timeout: HOOK_EXTERNAL_TIMEOUT_SECONDS }],
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
hooksObject["PreToolUse"] = list;
|
|
109
|
+
root["hooks"] = hooksObject;
|
|
110
|
+
const out = JSON.stringify(sortKeysDeep(root), null, 2);
|
|
111
|
+
const tmp = hooksPath + ".tmp";
|
|
112
|
+
fs.writeFileSync(tmp, out);
|
|
113
|
+
fs.renameSync(tmp, hooksPath);
|
|
114
|
+
}
|
|
115
|
+
/** オブジェクトのキーを再帰的に辞書順へ並べ替える(Swift 版 .sortedKeys 相当)。 */
|
|
116
|
+
function sortKeysDeep(value) {
|
|
117
|
+
if (Array.isArray(value))
|
|
118
|
+
return value.map(sortKeysDeep);
|
|
119
|
+
if (typeof value === "object" && value !== null) {
|
|
120
|
+
const sorted = {};
|
|
121
|
+
for (const key of Object.keys(value).sort()) {
|
|
122
|
+
sorted[key] = sortKeysDeep(value[key]);
|
|
123
|
+
}
|
|
124
|
+
return sorted;
|
|
125
|
+
}
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=hookSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookSettings.js","sourceRoot":"","sources":["../src/hookSettings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SessionIdleTracker } from "./sessionIdleTracker.js";
|
|
2
|
+
import type { TmuxSessionManager } from "./tmux.js";
|
|
3
|
+
/**
|
|
4
|
+
* 期限切れセッションを一定間隔で kill する常駐ループ。`signal` の abort まで回り続ける。
|
|
5
|
+
* kill 失敗(既に不在等)はログのみで継続し、成否に関わらず tracker から掃除する(二重 kill 回避)。
|
|
6
|
+
*/
|
|
7
|
+
export declare function runIdleReaper(options: {
|
|
8
|
+
tracker: SessionIdleTracker;
|
|
9
|
+
sessionManager: TmuxSessionManager;
|
|
10
|
+
checkIntervalSeconds: number;
|
|
11
|
+
signal: AbortSignal;
|
|
12
|
+
now?: () => number;
|
|
13
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// idleReaper.ts
|
|
2
|
+
// tailii (TS host) — アイドル timeout kill の常駐ループ(session-list-lifecycle 4.3/4.5)
|
|
3
|
+
// Swift 版 IdleReaper.swift の移植。engine 起動時に開始し、チャネル断(abort)で停止する。
|
|
4
|
+
import { abortableSleep } from "./sleep.js";
|
|
5
|
+
/**
|
|
6
|
+
* 期限切れセッションを一定間隔で kill する常駐ループ。`signal` の abort まで回り続ける。
|
|
7
|
+
* kill 失敗(既に不在等)はログのみで継続し、成否に関わらず tracker から掃除する(二重 kill 回避)。
|
|
8
|
+
*/
|
|
9
|
+
export async function runIdleReaper(options) {
|
|
10
|
+
const { tracker, sessionManager, signal } = options;
|
|
11
|
+
const now = options.now ?? (() => Math.floor(Date.now() / 1000));
|
|
12
|
+
const intervalMs = Math.max(0.01, options.checkIntervalSeconds) * 1000;
|
|
13
|
+
while (!signal.aborted) {
|
|
14
|
+
const expired = tracker.expired(now());
|
|
15
|
+
for (const name of expired) {
|
|
16
|
+
try {
|
|
17
|
+
await sessionManager.kill(name);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
process.stderr.write(`[tailii-host engine] idle reaper kill 失敗(掃除して継続): ${name}: ${String(error)}\n`);
|
|
21
|
+
}
|
|
22
|
+
// 成否に関わらず掃除して二重 kill を避ける(メタデータ = cwd 権威記録は不変, 要件 4.7)。
|
|
23
|
+
tracker.remove(name);
|
|
24
|
+
}
|
|
25
|
+
const slept = await abortableSleep(intervalMs, signal);
|
|
26
|
+
if (!slept)
|
|
27
|
+
break; // abort
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=idleReaper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idleReaper.js","sourceRoot":"","sources":["../src/idleReaper.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,8EAA8E;AAC9E,iEAAiE;AAIjE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAMnC;IACC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IAEvE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qDAAqD,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAChF,CAAC;YACJ,CAAC;YACD,wDAAwD;YACxD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,QAAQ;IAC7B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ControlMessage } from "./protocol.js";
|
|
2
|
+
/** サムネ生成結果(サムネ画像 base64 + 原寸)。base64 は HEIC(環境非対応時は PNG)。 */
|
|
3
|
+
export interface ThumbnailResult {
|
|
4
|
+
/**
|
|
5
|
+
* サムネ画像のバイト列(base64)。既定は HEIC(PNG の約半分・アルファ保持・iOS ネイティブ
|
|
6
|
+
* デコード)、HEIC 書出し不能な環境では PNG にフォールバック。iOS 側は `UIImage(data:)` が
|
|
7
|
+
* 形式を自動判定するため、どちらでも復号できる。
|
|
8
|
+
*/
|
|
9
|
+
thumbnailBase64: string;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
}
|
|
13
|
+
/** サムネ生成の注入可能な抽象。読めない/画像でない場合は null。 */
|
|
14
|
+
export type Thumbnailer = (imagePath: string, maxPixelSize: number) => Promise<ThumbnailResult | null>;
|
|
15
|
+
export declare function mimeTypeForExtension(ext: string): string;
|
|
16
|
+
/** macOS 標準 `sips` によるサムネ生成(既定 thumbnailer)。 */
|
|
17
|
+
export declare function sipsThumbnailer(sipsPath?: string): Thumbnailer;
|
|
18
|
+
/** 画像サムネの非同期生成(pending 消費 → image_available)と id→path index 記録。 */
|
|
19
|
+
export declare class ImageService {
|
|
20
|
+
private readonly pendingBase;
|
|
21
|
+
private readonly indexBase;
|
|
22
|
+
private readonly thumbnailMaxPixelSize;
|
|
23
|
+
private readonly thumbnailer;
|
|
24
|
+
constructor(options?: {
|
|
25
|
+
pendingBase?: string;
|
|
26
|
+
indexBase?: string;
|
|
27
|
+
thumbnailMaxPixelSize?: number;
|
|
28
|
+
thumbnailer?: Thumbnailer;
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* pending キューを drain し、各エントリを `image_available` または `error` に変換する。
|
|
32
|
+
* 処理した pending エントリは(成功・失敗を問わず)キューから除去する。
|
|
33
|
+
*/
|
|
34
|
+
drainPending(): Promise<ControlMessage[]>;
|
|
35
|
+
/**
|
|
36
|
+
* `id` を index 逆引きし、原本を `image_fetch_response` の seq/eof 分割メッセージ列で返す。
|
|
37
|
+
* index に無い / 原本消失 / 読み取り不可 → `error(image_not_found)` を単一要素で返す。
|
|
38
|
+
*/
|
|
39
|
+
fetch(id: string): ControlMessage[];
|
|
40
|
+
/**
|
|
41
|
+
* 指定パスから直接 `image_available` を生成する(pending 非経由・chat 添付用)。
|
|
42
|
+
* 生成成功時は id→path を index に記録する。不存在・非画像は null(ベストエフォート)。
|
|
43
|
+
*/
|
|
44
|
+
makeAvailable(imagePath: string, imageId: string): Promise<ControlMessage | null>;
|
|
45
|
+
/** サムネ生成の中核(pending 経路と直接経路で共有)。 */
|
|
46
|
+
private generate;
|
|
47
|
+
/** pending ベース配下の `*.json` を読み、妥当なエントリだけ返す(壊れたファイルは無視)。 */
|
|
48
|
+
private readPendingEntries;
|
|
49
|
+
/** index(`<indexBase>/<id>.json` = `{id, path}`)から原本 path を逆引きする。 */
|
|
50
|
+
private readIndexPath;
|
|
51
|
+
/** id→原本 path を `<indexBase>/<id>.json` へ記録する(fetch 逆引き用)。 */
|
|
52
|
+
private writeIndex;
|
|
53
|
+
}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
// imageService.ts
|
|
2
|
+
// tailii (TS host) — 画像サムネ生成サービス(承認往復と非同期)
|
|
3
|
+
// Swift 版 ImageService.swift の移植。
|
|
4
|
+
// pending キュー(hook が投入)を drain し、低解像度サムネ(最大辺 256px, base64 inline)と
|
|
5
|
+
// 原寸 width/height を載せた `image_available` を生成する。id→原本 path を index に記録し、
|
|
6
|
+
// 原本のオンデマンド分割配信(fetch)の逆引きに用いる。
|
|
7
|
+
//
|
|
8
|
+
// Swift 版は ImageIO/CoreGraphics でサムネを作るが、Node には画像処理の標準が無いため
|
|
9
|
+
// macOS 標準の `sips` CLI を既定 thumbnailer とする(注入可能 — テスト/他OS は差し替え)。
|
|
10
|
+
import { execFile } from "node:child_process";
|
|
11
|
+
import * as fs from "node:fs";
|
|
12
|
+
import * as os from "node:os";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
import { PROTOCOL_V1 } from "./protocol.js";
|
|
15
|
+
import { ensureDirectory0700 } from "./paths.js";
|
|
16
|
+
/** 原本 fetch の分割チャンクサイズ(生バイト, ≈32KiB)。base64 化前の生バイトで数える。 */
|
|
17
|
+
const FETCH_CHUNK_SIZE = 32 * 1024;
|
|
18
|
+
/** 画像として扱う拡張子集合(小文字・ドットなし)。 */
|
|
19
|
+
const IMAGE_EXTENSIONS = new Set([
|
|
20
|
+
"png", "jpg", "jpeg", "gif", "webp", "heic", "heif", "bmp", "tiff", "tif",
|
|
21
|
+
]);
|
|
22
|
+
/** 拡張子 → mime(index に mime を持たないため拡張子起点)。 */
|
|
23
|
+
const MIME_BY_EXTENSION = {
|
|
24
|
+
png: "image/png",
|
|
25
|
+
jpg: "image/jpeg",
|
|
26
|
+
jpeg: "image/jpeg",
|
|
27
|
+
gif: "image/gif",
|
|
28
|
+
webp: "image/webp",
|
|
29
|
+
heic: "image/heic",
|
|
30
|
+
heif: "image/heif",
|
|
31
|
+
bmp: "image/bmp",
|
|
32
|
+
tiff: "image/tiff",
|
|
33
|
+
tif: "image/tiff",
|
|
34
|
+
};
|
|
35
|
+
export function mimeTypeForExtension(ext) {
|
|
36
|
+
return MIME_BY_EXTENSION[ext.toLowerCase()] ?? "application/octet-stream";
|
|
37
|
+
}
|
|
38
|
+
/** macOS 標準 `sips` によるサムネ生成(既定 thumbnailer)。 */
|
|
39
|
+
export function sipsThumbnailer(sipsPath = "/usr/bin/sips") {
|
|
40
|
+
const run = (args) => new Promise((resolve) => {
|
|
41
|
+
execFile(sipsPath, args, { maxBuffer: 4 * 1024 * 1024 }, (error, stdout) => {
|
|
42
|
+
const code = error ? (typeof error.code === "number" ? error.code : 1) : 0;
|
|
43
|
+
resolve({ code, stdout: String(stdout) });
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
return async (imagePath, maxPixelSize) => {
|
|
47
|
+
// 原寸取得。sips は非画像に非0または空プロパティを返す。
|
|
48
|
+
const probe = await run(["-g", "pixelWidth", "-g", "pixelHeight", imagePath]);
|
|
49
|
+
if (probe.code !== 0)
|
|
50
|
+
return null;
|
|
51
|
+
const width = parseSipsProperty(probe.stdout, "pixelWidth");
|
|
52
|
+
const height = parseSipsProperty(probe.stdout, "pixelHeight");
|
|
53
|
+
if (width === null || height === null || width <= 0 || height <= 0)
|
|
54
|
+
return null;
|
|
55
|
+
// 最大辺 maxPixelSize のサムネを一時ファイルへ生成する。既定は HEIC(PNG の約半分・
|
|
56
|
+
// アルファ保持)。sips が HEIC を書けない環境(write 非対応)では PNG へフォールバックする。
|
|
57
|
+
// (macOS の sips は WebP を read 専用で write 不可のため HEIC を採用。)
|
|
58
|
+
// 一時ファイルの拡張子は sips が出力フォーマット判定に使うため format と一致させる。
|
|
59
|
+
const attempt = async (format) => {
|
|
60
|
+
const tmp = path.join(os.tmpdir(), `tailii-thumb-${process.pid}-${Math.random().toString(36).slice(2)}.${format}`);
|
|
61
|
+
try {
|
|
62
|
+
const convert = await run([
|
|
63
|
+
"-s", "format", format,
|
|
64
|
+
"-Z", String(maxPixelSize),
|
|
65
|
+
imagePath,
|
|
66
|
+
"--out", tmp,
|
|
67
|
+
]);
|
|
68
|
+
if (convert.code !== 0)
|
|
69
|
+
return null;
|
|
70
|
+
return fs.readFileSync(tmp).toString("base64");
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
try {
|
|
77
|
+
fs.unlinkSync(tmp);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// 一時ファイル掃除の失敗は無視。
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const base64 = (await attempt("heic")) ?? (await attempt("png"));
|
|
85
|
+
if (base64 === null)
|
|
86
|
+
return null;
|
|
87
|
+
return { thumbnailBase64: base64, width, height };
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function parseSipsProperty(stdout, name) {
|
|
91
|
+
const match = stdout.match(new RegExp(`${name}:\\s*(\\d+)`));
|
|
92
|
+
if (!match || match[1] === undefined)
|
|
93
|
+
return null;
|
|
94
|
+
const value = Number.parseInt(match[1], 10);
|
|
95
|
+
return Number.isFinite(value) ? value : null;
|
|
96
|
+
}
|
|
97
|
+
/** 画像サムネの非同期生成(pending 消費 → image_available)と id→path index 記録。 */
|
|
98
|
+
export class ImageService {
|
|
99
|
+
pendingBase;
|
|
100
|
+
indexBase;
|
|
101
|
+
thumbnailMaxPixelSize;
|
|
102
|
+
thumbnailer;
|
|
103
|
+
constructor(options = {}) {
|
|
104
|
+
const home = os.homedir();
|
|
105
|
+
this.pendingBase = options.pendingBase ?? path.join(home, ".tailii", "images", "pending");
|
|
106
|
+
this.indexBase = options.indexBase ?? path.join(home, ".tailii", "images", "index");
|
|
107
|
+
// サムネ最大辺(px)。インライン表示は 120pt 枠なので粗めで十分。WebP と併せて転送量を抑える。
|
|
108
|
+
this.thumbnailMaxPixelSize = options.thumbnailMaxPixelSize ?? 160;
|
|
109
|
+
this.thumbnailer = options.thumbnailer ?? sipsThumbnailer();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* pending キューを drain し、各エントリを `image_available` または `error` に変換する。
|
|
113
|
+
* 処理した pending エントリは(成功・失敗を問わず)キューから除去する。
|
|
114
|
+
*/
|
|
115
|
+
async drainPending() {
|
|
116
|
+
const entries = this.readPendingEntries();
|
|
117
|
+
const results = [];
|
|
118
|
+
for (const entry of entries) {
|
|
119
|
+
results.push(await this.generate(entry.imageId, entry.path, entry.relatedApprovalId));
|
|
120
|
+
try {
|
|
121
|
+
fs.unlinkSync(entry.filePath);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// 除去失敗は無視(次回 drain で再走査されるが実害はない)。
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return results;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* `id` を index 逆引きし、原本を `image_fetch_response` の seq/eof 分割メッセージ列で返す。
|
|
131
|
+
* index に無い / 原本消失 / 読み取り不可 → `error(image_not_found)` を単一要素で返す。
|
|
132
|
+
*/
|
|
133
|
+
fetch(id) {
|
|
134
|
+
const p = this.readIndexPath(id);
|
|
135
|
+
if (p === null)
|
|
136
|
+
return [notFound(id)];
|
|
137
|
+
let data;
|
|
138
|
+
try {
|
|
139
|
+
data = fs.readFileSync(p);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return [notFound(id)];
|
|
143
|
+
}
|
|
144
|
+
const mime = mimeTypeForExtension(path.extname(p).slice(1));
|
|
145
|
+
if (data.length === 0) {
|
|
146
|
+
// 空原本でも 1 チャンク(eof:true, data 空)を返す。
|
|
147
|
+
return [{ type: "image_fetch_response", v: PROTOCOL_V1, id, seq: 0, data: "", eof: true, mime }];
|
|
148
|
+
}
|
|
149
|
+
const messages = [];
|
|
150
|
+
let offset = 0;
|
|
151
|
+
let seq = 0;
|
|
152
|
+
while (offset < data.length) {
|
|
153
|
+
const end = Math.min(offset + FETCH_CHUNK_SIZE, data.length);
|
|
154
|
+
messages.push({
|
|
155
|
+
type: "image_fetch_response",
|
|
156
|
+
v: PROTOCOL_V1,
|
|
157
|
+
id,
|
|
158
|
+
seq,
|
|
159
|
+
data: data.subarray(offset, end).toString("base64"),
|
|
160
|
+
eof: end === data.length,
|
|
161
|
+
mime,
|
|
162
|
+
});
|
|
163
|
+
offset = end;
|
|
164
|
+
seq += 1;
|
|
165
|
+
}
|
|
166
|
+
return messages;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* 指定パスから直接 `image_available` を生成する(pending 非経由・chat 添付用)。
|
|
170
|
+
* 生成成功時は id→path を index に記録する。不存在・非画像は null(ベストエフォート)。
|
|
171
|
+
*/
|
|
172
|
+
async makeAvailable(imagePath, imageId) {
|
|
173
|
+
const message = await this.generate(imageId, imagePath, null);
|
|
174
|
+
return message.type === "image_available" ? message : null;
|
|
175
|
+
}
|
|
176
|
+
/** サムネ生成の中核(pending 経路と直接経路で共有)。 */
|
|
177
|
+
async generate(imageId, imagePath, relatedApprovalId) {
|
|
178
|
+
// 不存在(またはディレクトリ)→ image_not_found
|
|
179
|
+
let stat;
|
|
180
|
+
try {
|
|
181
|
+
stat = fs.statSync(imagePath);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return { type: "error", v: PROTOCOL_V1, id: imageId, code: "image_not_found", message: "画像が見つかりません" };
|
|
185
|
+
}
|
|
186
|
+
if (stat.isDirectory()) {
|
|
187
|
+
return { type: "error", v: PROTOCOL_V1, id: imageId, code: "image_not_found", message: "画像が見つかりません" };
|
|
188
|
+
}
|
|
189
|
+
// 拡張子が画像でない → not_an_image(読み取り可否確認前の早期判定)
|
|
190
|
+
const ext = path.extname(imagePath).slice(1).toLowerCase();
|
|
191
|
+
if (!IMAGE_EXTENSIONS.has(ext)) {
|
|
192
|
+
return { type: "error", v: PROTOCOL_V1, id: imageId, code: "not_an_image", message: "画像として扱えません" };
|
|
193
|
+
}
|
|
194
|
+
// サムネ生成 + 原寸取得。読み取り不可 / 画像でない → not_an_image
|
|
195
|
+
const thumb = await this.thumbnailer(imagePath, this.thumbnailMaxPixelSize);
|
|
196
|
+
if (thumb === null) {
|
|
197
|
+
return { type: "error", v: PROTOCOL_V1, id: imageId, code: "not_an_image", message: "画像として読み取れません" };
|
|
198
|
+
}
|
|
199
|
+
// 生成成功時のみ id→path を index に記録
|
|
200
|
+
try {
|
|
201
|
+
this.writeIndex(imageId, imagePath);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// index 記録失敗は fetch 不能になるだけ(Swift 版 try? と同じ握り潰し)。
|
|
205
|
+
}
|
|
206
|
+
const message = {
|
|
207
|
+
type: "image_available",
|
|
208
|
+
v: PROTOCOL_V1,
|
|
209
|
+
id: imageId,
|
|
210
|
+
path: imagePath,
|
|
211
|
+
mime: mimeTypeForExtension(ext),
|
|
212
|
+
thumbnail: thumb.thumbnailBase64,
|
|
213
|
+
width: thumb.width,
|
|
214
|
+
height: thumb.height,
|
|
215
|
+
};
|
|
216
|
+
if (relatedApprovalId !== null) {
|
|
217
|
+
message.relatedApprovalId = relatedApprovalId;
|
|
218
|
+
}
|
|
219
|
+
return message;
|
|
220
|
+
}
|
|
221
|
+
/** pending ベース配下の `*.json` を読み、妥当なエントリだけ返す(壊れたファイルは無視)。 */
|
|
222
|
+
readPendingEntries() {
|
|
223
|
+
let names;
|
|
224
|
+
try {
|
|
225
|
+
names = fs.readdirSync(this.pendingBase);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return [];
|
|
229
|
+
}
|
|
230
|
+
const entries = [];
|
|
231
|
+
for (const name of names) {
|
|
232
|
+
if (!name.endsWith(".json") || name.startsWith("."))
|
|
233
|
+
continue;
|
|
234
|
+
const filePath = path.join(this.pendingBase, name);
|
|
235
|
+
try {
|
|
236
|
+
const raw = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
237
|
+
if (typeof raw !== "object" || raw === null)
|
|
238
|
+
continue;
|
|
239
|
+
const rec = raw;
|
|
240
|
+
if (typeof rec["imageId"] !== "string" || typeof rec["path"] !== "string")
|
|
241
|
+
continue;
|
|
242
|
+
entries.push({
|
|
243
|
+
filePath,
|
|
244
|
+
imageId: rec["imageId"],
|
|
245
|
+
path: rec["path"],
|
|
246
|
+
relatedApprovalId: typeof rec["relatedApprovalId"] === "string" ? rec["relatedApprovalId"] : null,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// 壊れたエントリは無視(対象外)。
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return entries;
|
|
254
|
+
}
|
|
255
|
+
/** index(`<indexBase>/<id>.json` = `{id, path}`)から原本 path を逆引きする。 */
|
|
256
|
+
readIndexPath(id) {
|
|
257
|
+
try {
|
|
258
|
+
const raw = JSON.parse(fs.readFileSync(path.join(this.indexBase, `${id}.json`), "utf8"));
|
|
259
|
+
if (typeof raw !== "object" || raw === null)
|
|
260
|
+
return null;
|
|
261
|
+
const p = raw["path"];
|
|
262
|
+
return typeof p === "string" ? p : null;
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/** id→原本 path を `<indexBase>/<id>.json` へ記録する(fetch 逆引き用)。 */
|
|
269
|
+
writeIndex(id, imagePath) {
|
|
270
|
+
ensureDirectory0700(this.indexBase);
|
|
271
|
+
const target = path.join(this.indexBase, `${id}.json`);
|
|
272
|
+
const tmp = target + ".tmp";
|
|
273
|
+
fs.writeFileSync(tmp, JSON.stringify({ id, path: imagePath }));
|
|
274
|
+
fs.renameSync(tmp, target);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function notFound(id) {
|
|
278
|
+
return { type: "error", v: PROTOCOL_V1, id, code: "image_not_found", message: "画像が見つかりません" };
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=imageService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageService.js","sourceRoot":"","sources":["../src/imageService.ts"],"names":[],"mappings":"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"}
|
package/dist/kick.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kick の純ロジック。tmux パスを注入できるためテスト可能。
|
|
3
|
+
* `tmux send-keys -t <session> <prompt> Enter` を実行する。指定セッションが存在しない、
|
|
4
|
+
* あるいは tmux が非0終了/起動失敗した場合は errorSink にメッセージを出して非0 を返す。
|
|
5
|
+
*/
|
|
6
|
+
export declare function kickCore(session: string, prompt: string, tmuxPath: string, errorSink: (message: string) => void): number;
|
|
7
|
+
/** kick サブコマンドの CLI エントリポイント。`--session <name>` と `--prompt <text>` を要求する。 */
|
|
8
|
+
export declare function runKickCommand(args: string[]): Promise<number>;
|