@psnext/slingcli 2.5.20260724-1 → 2.5.20260727-1

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 (391) hide show
  1. package/bin/sling.js +1 -1
  2. package/node_modules/@aws-sdk/core/dist-cjs/submodules/httpAuthSchemes/index.js +66 -28
  3. package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +133 -15
  4. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.js +7 -2
  5. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.js +28 -14
  6. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.js +1 -0
  7. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.js +3 -0
  8. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.js +8 -0
  9. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/index.js +1 -1
  10. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.js +3 -3
  11. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/index.browser.js +9 -0
  12. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/index.js +5 -1
  13. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getDateHeader.js +1 -0
  14. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.js +12 -6
  15. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/index.js +2 -1
  16. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/isClockSkewed.js +1 -1
  17. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeDeserializer.js +10 -1
  18. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeSerializer.js +10 -0
  19. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/detectBufferParsing.js +18 -0
  20. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.js +13 -15
  21. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/ByteJsonShapeSerializer.js +27 -17
  22. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/jsonReviver.js +22 -3
  23. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/needsReviver.js +41 -0
  24. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/parseJsonBody.js +33 -13
  25. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/writeKey.js +3 -0
  26. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeDeserializer.js +4 -0
  27. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +2 -1
  28. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +6 -0
  29. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +7 -0
  30. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +13 -0
  31. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/index.d.ts +1 -1
  32. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +22 -6
  33. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/index.browser.d.ts +11 -0
  34. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/index.d.ts +7 -1
  35. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +4 -0
  36. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +22 -6
  37. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/index.d.ts +2 -1
  38. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/detectBufferParsing.d.ts +1 -0
  39. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +0 -2
  40. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/needsReviver.d.ts +11 -0
  41. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/parseJsonBody.d.ts +7 -2
  42. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/writeKey.d.ts +4 -0
  43. package/node_modules/@aws-sdk/core/dist-types/ts3.4/api-extractor-type-index.d.ts +7 -4
  44. package/node_modules/@aws-sdk/core/dist-types/ts3.4/index.d.ts +21 -61
  45. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.d.ts +27 -13
  46. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConstants.d.ts +16 -4
  47. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.d.ts +14 -5
  48. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/index.d.ts +5 -16
  49. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/emitWarningIfUnsupportedVersion.d.ts +11 -4
  50. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.browser.d.ts +47 -107
  51. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.d.ts +39 -112
  52. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.native.d.ts +48 -107
  53. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/longPollMiddleware.d.ts +14 -13
  54. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-host-header/hostHeaderMiddleware.d.ts +35 -25
  55. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-logger/loggerMiddleware.d.ts +4 -14
  56. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/configuration.d.ts +6 -2
  57. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.browser.d.ts +5 -2
  58. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.d.ts +5 -2
  59. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.browser.d.ts +6 -2
  60. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.d.ts +10 -2
  61. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.native.d.ts +6 -2
  62. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/check-features.d.ts +20 -16
  63. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/configurations.d.ts +44 -21
  64. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/constants.d.ts +7 -7
  65. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/encode-features.d.ts +5 -2
  66. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/user-agent-middleware.d.ts +18 -18
  67. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/awsRegionConfig.d.ts +11 -8
  68. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/extensions.d.ts +16 -14
  69. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.browser.d.ts +4 -1
  70. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.d.ts +14 -7
  71. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.native.d.ts +4 -1
  72. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setCredentialFeature.d.ts +7 -6
  73. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setFeature.d.ts +12 -6
  74. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setTokenFeature.d.ts +7 -6
  75. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/aws.d.ts +2 -2
  76. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/isVirtualHostableS3Bucket.d.ts +5 -4
  77. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/parseArn.d.ts +7 -2
  78. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partition.d.ts +38 -28
  79. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partitions.d.ts +638 -647
  80. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/isIpAddress.d.ts +1 -1
  81. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveDefaultAwsRegionalEndpointsConfig.d.ts +56 -29
  82. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveEndpoint.d.ts +1 -1
  83. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointError.d.ts +1 -1
  84. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointRuleObject.d.ts +1 -6
  85. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/ErrorRuleObject.d.ts +1 -1
  86. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/RuleSetObject.d.ts +1 -1
  87. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/TreeRuleObject.d.ts +1 -1
  88. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/shared.d.ts +1 -12
  89. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/configurations.d.ts +7 -4
  90. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/createUserAgentStringParsingProvider.d.ts +14 -7
  91. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.browser.d.ts +2 -7
  92. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.d.ts +27 -18
  93. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.native.d.ts +18 -13
  94. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/crt-availability.d.ts +8 -3
  95. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/defaultUserAgent.d.ts +28 -17
  96. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/getRuntimeUserAgentPair.d.ts +6 -2
  97. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/is-crt-available.d.ts +5 -2
  98. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/nodeAppIdConfigOptions.d.ts +13 -4
  99. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.d.ts +10 -9
  100. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +44 -37
  101. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/NODE_AUTH_SCHEME_PREFERENCE_OPTIONS.d.ts +5 -2
  102. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +6 -0
  103. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +7 -0
  104. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +13 -0
  105. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/index.d.ts +7 -23
  106. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.d.ts +38 -13
  107. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +133 -56
  108. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.browser.d.ts +11 -0
  109. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.d.ts +9 -24
  110. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getArrayForCommaSeparatedString.d.ts +8 -1
  111. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getBearerTokenEnvKey.d.ts +6 -1
  112. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +8 -1
  113. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.d.ts +8 -1
  114. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +26 -4
  115. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/index.d.ts +4 -3
  116. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/isClockSkewed.d.ts +9 -1
  117. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ConfigurableSerdeContext.d.ts +8 -5
  118. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ProtocolLib.d.ts +74 -40
  119. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/UnionSerde.d.ts +24 -9
  120. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.d.ts +25 -36
  121. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/coercing-serializers.d.ts +18 -3
  122. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/common.d.ts +2 -5
  123. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/index.d.ts +22 -27
  124. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_0Protocol.d.ts +22 -21
  125. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_1Protocol.d.ts +22 -21
  126. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +29 -49
  127. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsRestJsonProtocol.d.ts +36 -49
  128. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonCodec.d.ts +19 -13
  129. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeDeserializer.d.ts +13 -13
  130. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeSerializer.d.ts +28 -18
  131. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/awsExpectUnion.d.ts +7 -1
  132. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/detectBufferParsing.d.ts +1 -0
  133. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.d.ts +29 -14
  134. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +57 -30
  135. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReplacer.d.ts +21 -7
  136. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReviver.d.ts +15 -7
  137. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/needsReviver.d.ts +11 -0
  138. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/parseJsonBody.d.ts +22 -9
  139. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsEc2QueryProtocol.d.ts +27 -18
  140. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsQueryProtocol.d.ts +49 -57
  141. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QuerySerializerSettings.d.ts +13 -7
  142. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QueryShapeSerializer.d.ts +16 -21
  143. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/writeKey.d.ts +4 -0
  144. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/AwsRestXmlProtocol.d.ts +31 -47
  145. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlCodec.d.ts +14 -17
  146. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeDeserializer.d.ts +20 -15
  147. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeSerializer.d.ts +21 -21
  148. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/parseXmlBody.d.ts +13 -4
  149. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/simpleFormatXml.d.ts +6 -1
  150. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +3 -3
  151. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-arn-parser/arn.d.ts +32 -14
  152. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-format-url/format-url.d.ts +2 -4
  153. package/node_modules/@aws-sdk/core/package.json +10 -6
  154. package/node_modules/@aws-sdk/credential-provider-env/package.json +3 -3
  155. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/package.json +2 -2
  156. package/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
  157. package/node_modules/@aws-sdk/credential-provider-ini/package.json +11 -11
  158. package/node_modules/@aws-sdk/credential-provider-login/package.json +4 -4
  159. package/node_modules/@aws-sdk/credential-provider-node/package.json +9 -9
  160. package/node_modules/@aws-sdk/credential-provider-process/package.json +3 -3
  161. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +4 -4
  162. package/node_modules/@aws-sdk/credential-provider-sso/package.json +5 -5
  163. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +4 -4
  164. package/node_modules/@aws-sdk/eventstream-handler-node/package.json +2 -2
  165. package/node_modules/@aws-sdk/middleware-eventstream/package.json +2 -2
  166. package/node_modules/@aws-sdk/middleware-websocket/package.json +5 -5
  167. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  168. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  169. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  170. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  171. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  172. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.browser.d.ts +2 -0
  173. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.d.ts +2 -0
  174. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.native.d.ts +2 -0
  175. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.browser.d.ts +2 -0
  176. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.d.ts +2 -0
  177. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.native.d.ts +2 -0
  178. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.browser.d.ts +2 -0
  179. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.d.ts +2 -0
  180. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.native.d.ts +2 -0
  181. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.browser.d.ts +2 -0
  182. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.d.ts +2 -0
  183. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.native.d.ts +2 -0
  184. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +2 -0
  185. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +2 -0
  186. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +2 -0
  187. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.browser.d.ts +2 -0
  188. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.d.ts +2 -0
  189. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.native.d.ts +2 -0
  190. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.browser.d.ts +2 -0
  191. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.d.ts +2 -0
  192. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.native.d.ts +2 -0
  193. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.browser.d.ts +2 -0
  194. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.d.ts +2 -0
  195. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.native.d.ts +2 -0
  196. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.browser.d.ts +2 -0
  197. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.d.ts +2 -0
  198. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.native.d.ts +2 -0
  199. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +2 -0
  200. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +2 -0
  201. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +2 -0
  202. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/package.json +2 -2
  203. package/node_modules/@aws-sdk/nested-clients/package.json +6 -6
  204. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +2 -2
  205. package/node_modules/@aws-sdk/xml-builder/dist-cjs/index.js +14 -4
  206. package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +14 -4
  207. package/node_modules/@aws-sdk/xml-builder/package.json +1 -1
  208. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +17 -4
  209. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +8 -2
  210. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +118 -11
  211. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js +132 -0
  212. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js +386 -0
  213. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +95 -0
  214. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js +46 -0
  215. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js +106 -0
  216. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js +5 -0
  217. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js +26 -0
  218. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +110 -0
  219. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js +2 -0
  220. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +31 -0
  221. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +90 -35
  222. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +10 -4
  223. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -0
  224. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -2
  225. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +26 -10
  226. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +21 -8
  227. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +25 -13
  228. package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +100 -0
  229. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +7 -11
  230. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +17 -3
  231. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +7 -11
  232. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +13 -9
  233. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +68 -27
  234. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +131 -34
  235. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +173 -66
  236. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +29 -7
  237. package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js +8 -3
  238. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +5 -0
  239. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js +222 -0
  240. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.js +37 -35
  241. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +11 -1
  242. package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +2 -0
  243. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +9 -3
  244. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +15 -0
  245. package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js +4 -0
  246. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +5 -3
  247. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +2 -1
  248. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +2 -1
  249. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +30 -3
  250. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +2 -1
  251. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +2 -1
  252. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +2 -1
  253. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +2 -1
  254. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +2 -1
  255. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  256. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  257. package/node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +1 -1
  258. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  259. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  260. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
  261. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  262. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  263. package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
  264. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  265. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  266. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -1
  267. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
  268. package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
  269. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  270. package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
  271. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
  272. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
  273. package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
  274. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
  275. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
  276. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  277. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  278. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  279. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  280. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  281. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  282. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
  283. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
  284. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  285. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  286. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
  287. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
  288. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
  289. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
  290. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +1 -1
  291. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  292. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  293. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -1
  294. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -1
  295. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +2 -1
  296. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +2 -1
  297. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +2 -1
  298. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +2 -1
  299. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +2 -1
  300. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +2 -1
  301. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +2 -1
  302. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +2 -1
  303. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +2 -1
  304. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +2 -1
  305. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +2 -1
  306. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +2 -1
  307. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +2 -1
  308. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +2 -1
  309. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +2 -1
  310. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +2 -1
  311. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js +10 -2
  312. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +10 -2
  313. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +2 -1
  314. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +2 -1
  315. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +2 -1
  316. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +2 -1
  317. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +2 -1
  318. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +2 -1
  319. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +2 -1
  320. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +2 -1
  321. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +2 -1
  322. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +2 -1
  323. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +2 -1
  324. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +2 -1
  325. package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js +8 -3
  326. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +94 -0
  327. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +3 -0
  328. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  329. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +1 -0
  330. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.js +1 -1
  331. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js +1 -1
  332. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +7 -8
  333. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +11 -3
  334. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +4 -0
  335. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-config.js +6 -0
  336. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +2 -2
  337. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +20 -3
  338. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-runtime.js +3 -5
  339. package/node_modules/@earendil-works/pi-coding-agent/dist/core/remote-catalog-provider.js +24 -11
  340. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +3 -0
  341. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +1 -1
  342. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +34 -5
  343. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js +3 -1
  344. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.js +7 -2
  345. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.js +10 -2
  346. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +16 -46
  347. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +22 -13
  348. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/external-editor.js +37 -0
  349. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +67 -74
  350. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -0
  351. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard.js +19 -8
  352. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.js +3 -1
  353. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +16 -15
  354. package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -4
  355. package/node_modules/@earendil-works/pi-server/package.json +2 -2
  356. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +15 -12
  357. package/node_modules/@earendil-works/pi-tui/dist/tui.js +6 -3
  358. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  359. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +1 -0
  360. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +1 -0
  361. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.browser.js +2 -2
  362. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.js +2 -2
  363. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.native.js +2 -2
  364. package/node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/constants.js +1 -0
  365. package/node_modules/@smithy/core/dist-es/submodules/serde/value/NumericValue.js +2 -2
  366. package/node_modules/@smithy/core/dist-types/submodules/retry/service-error-classification/constants.d.ts +1 -0
  367. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/retry/service-error-classification/constants.d.ts +1 -0
  368. package/node_modules/@smithy/core/package.json +1 -1
  369. package/node_modules/@smithy/credential-provider-imds/package.json +2 -2
  370. package/node_modules/@smithy/fetch-http-handler/package.json +2 -2
  371. package/node_modules/@smithy/signature-v4/package.json +2 -2
  372. package/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  373. package/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  374. package/node_modules/gaxios/package.json +1 -1
  375. package/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  376. package/node_modules/google-auth-library/package.json +1 -1
  377. package/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  378. package/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  379. package/node_modules/undici/lib/core/request.js +12 -1
  380. package/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
  381. package/node_modules/undici/lib/handler/cache-handler.js +246 -64
  382. package/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
  383. package/node_modules/undici/lib/handler/retry-handler.js +24 -0
  384. package/node_modules/undici/lib/interceptor/cache.js +159 -52
  385. package/node_modules/undici/lib/util/cache.js +324 -62
  386. package/node_modules/undici/lib/util/date.js +23 -6
  387. package/node_modules/undici/lib/web/cookies/util.js +79 -9
  388. package/node_modules/undici/package.json +1 -1
  389. package/package.json +7 -7
  390. package/sling-default-packages.json +2 -1
  391. package/slingshot/index.js +337 -339
@@ -0,0 +1,37 @@
1
+ import { spawn } from "node:child_process";
2
+ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ export async function editInExternalEditor(options) {
6
+ const directory = mkdtempSync(join(tmpdir(), "sling-editor-"));
7
+ const filePath = join(directory, "prompt.md");
8
+ try {
9
+ writeFileSync(filePath, options.content, "utf-8");
10
+ const [editor, ...editorArgs] = options.command.split(" ");
11
+ process.stdout.write(`Launching external editor: ${options.command}\nPi will resume when the editor exits.\n`);
12
+ // Do not use spawnSync here. On Windows, synchronous child_process calls can keep
13
+ // Node/libuv's console input read active after the parent pauses stdin, racing
14
+ // vim/nvim for the console input buffer until Ctrl+C cancels the pending read.
15
+ const exitCode = await new Promise((resolve) => {
16
+ const child = spawn(editor, [...editorArgs, filePath], {
17
+ stdio: "inherit",
18
+ shell: process.platform === "win32",
19
+ });
20
+ child.on("error", () => resolve(null));
21
+ child.on("close", (code) => resolve(code));
22
+ });
23
+ if (exitCode !== 0) {
24
+ return { status: "failed" };
25
+ }
26
+ return { status: "complete", content: readFileSync(filePath, "utf-8").replace(/\n$/, "") };
27
+ }
28
+ finally {
29
+ try {
30
+ rmSync(directory, { recursive: true, force: true });
31
+ }
32
+ catch {
33
+ // Cleanup is best effort.
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=external-editor.js.map
@@ -17,7 +17,7 @@ import { FooterDataProvider } from "../../core/footer-data-provider.js";
17
17
  import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
18
18
  import { KeybindingsManager } from "../../core/keybindings.js";
19
19
  import { createCompactionSummaryMessage } from "../../core/messages.js";
20
- import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope } from "../../core/model-resolver.js";
20
+ import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope, resolveModelScopeWithDiagnostics, } from "../../core/model-resolver.js";
21
21
  import { DefaultPackageManager } from "../../core/package-manager.js";
22
22
  import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
23
23
  import { SessionManager, sessionEntryToContextMessages } from "../../core/session-manager.js";
@@ -30,7 +30,6 @@ import { copyToClipboard, readClipboardText } from "../../utils/clipboard.js";
30
30
  import { extensionForImageMimeType, readClipboardImage } from "../../utils/clipboard-image.js";
31
31
  import { parseGitUrl } from "../../utils/git.js";
32
32
  import { getCwdRelativePath } from "../../utils/paths.js";
33
- import { getPiUserAgent } from "../../utils/pi-user-agent.js";
34
33
  import { killTrackedDetachedChildren } from "../../utils/shell.js";
35
34
  import { ensureTool } from "../../utils/tools-manager.js";
36
35
  import { checkForNewPiVersion } from "../../utils/version-check.js";
@@ -64,6 +63,7 @@ import { TreeSelectorComponent } from "./components/tree-selector.js";
64
63
  import { TrustSelectorComponent } from "./components/trust-selector.js";
65
64
  import { UserMessageComponent } from "./components/user-message.js";
66
65
  import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
66
+ import { editInExternalEditor } from "./external-editor.js";
67
67
  import { getModelSearchText } from "./model-search.js";
68
68
  import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, onThemeChange, setRegisteredThemes, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
69
69
  import { InteractiveThemeController } from "./theme/theme-controller.js";
@@ -272,7 +272,7 @@ export class InteractiveMode {
272
272
  await this.rebindCurrentSession({ renderBeforeBind: true });
273
273
  });
274
274
  this.version = VERSION;
275
- this.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());
275
+ this.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor(), getAgentDir());
276
276
  this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
277
277
  this.headerContainer = new Container();
278
278
  this.loadedResourcesContainer = new Container();
@@ -460,7 +460,7 @@ export class InteractiveMode {
460
460
  return;
461
461
  this.registerSignalHandlers();
462
462
  // Load changelog (only show new entries, skip for resumed sessions)
463
- // this.changelogMarkdown = this.getChangelogForDisplay();
463
+ //this.changelogMarkdown = this.getChangelogForDisplay();
464
464
  // Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir)
465
465
  // Both are needed: fd for autocomplete, rg for grep tool and bash commands
466
466
  const [fdPath] = await Promise.all([ensureTool("fd"), ensureTool("rg")]);
@@ -590,7 +590,7 @@ export class InteractiveMode {
590
590
  // Start version check asynchronously
591
591
  checkForNewPiVersion(this.version).then((newRelease) => {
592
592
  if (newRelease) {
593
- this.showNewVersionNotification(newRelease);
593
+ //this.showNewVersionNotification(newRelease);
594
594
  }
595
595
  });
596
596
  // Start package update check asynchronously
@@ -750,14 +750,14 @@ export class InteractiveMode {
750
750
  if (!isInstallTelemetryEnabled(this.settingsManager)) {
751
751
  return;
752
752
  }
753
- void fetch(`https://pi.dev/api/report-install?version=${encodeURIComponent(version)}`, {
754
- headers: {
755
- "User-Agent": getPiUserAgent(version),
756
- },
757
- signal: AbortSignal.timeout(5000),
758
- })
759
- .then(() => undefined)
760
- .catch(() => undefined);
753
+ // void fetch(`https://pi.dev/api/report-install?version=${encodeURIComponent(version)}`, {
754
+ // headers: {
755
+ // "User-Agent": getPiUserAgent(version),
756
+ // },
757
+ // signal: AbortSignal.timeout(5000),
758
+ // })
759
+ // .then(() => undefined)
760
+ // .catch(() => undefined);
761
761
  }
762
762
  getMarkdownThemeWithSettings() {
763
763
  return {
@@ -798,8 +798,15 @@ export class InteractiveMode {
798
798
  * Get a short path relative to the package root for display.
799
799
  */
800
800
  getShortPath(fullPath, sourceInfo) {
801
+ const normalizedFullPath = fullPath.replace(/\\/g, "/");
801
802
  const baseDir = sourceInfo?.baseDir;
802
803
  if (baseDir && this.isPackageSource(sourceInfo)) {
804
+ const normalizedBaseDir = baseDir.replace(/\\/g, "/");
805
+ const npmRootMatch = normalizedBaseDir.match(/^(.*\/node_modules)\/(@?[^/]+(?:\/[^/]+)?)$/);
806
+ // If fullPath is under the same node_modules root as baseDir, preserve that relative topology.
807
+ if (npmRootMatch?.[1] && normalizedFullPath.startsWith(`${npmRootMatch[1]}/`)) {
808
+ return path.posix.relative(normalizedBaseDir, normalizedFullPath);
809
+ }
803
810
  const relativePath = path.relative(path.resolve(baseDir), path.resolve(fullPath));
804
811
  if (relativePath &&
805
812
  relativePath !== "." &&
@@ -810,11 +817,11 @@ export class InteractiveMode {
810
817
  }
811
818
  }
812
819
  const source = sourceInfo?.source ?? "";
813
- const npmMatch = fullPath.match(/node_modules\/(@?[^/]+(?:\/[^/]+)?)\/(.*)/);
820
+ const npmMatch = normalizedFullPath.match(/node_modules\/(@?[^/]+(?:\/[^/]+)?)\/(.*)/);
814
821
  if (npmMatch && source.startsWith("npm:")) {
815
822
  return npmMatch[2];
816
823
  }
817
- const gitMatch = fullPath.match(/git\/[^/]+\/[^/]+\/(.*)/);
824
+ const gitMatch = normalizedFullPath.match(/git\/[^/]+\/[^/]+\/(.*)/);
818
825
  if (gitMatch && source.startsWith("git:")) {
819
826
  return gitMatch[1];
820
827
  }
@@ -1354,6 +1361,7 @@ export class InteractiveMode {
1354
1361
  sessionManager: this.sessionManager,
1355
1362
  modelRegistry: extensionRunner.getModelRegistry(),
1356
1363
  model: this.session.model,
1364
+ thinkingLevel: this.session.thinkingLevel,
1357
1365
  isIdle: () => this.session.isIdle,
1358
1366
  isProjectTrusted: () => this.settingsManager.isProjectTrusted(),
1359
1367
  signal: this.session.agent.signal,
@@ -2039,7 +2047,7 @@ export class InteractiveMode {
2039
2047
  this.defaultEditor.onAction("app.model.select", () => this.showModelSelector());
2040
2048
  this.defaultEditor.onAction("app.tools.expand", () => this.toggleToolOutputExpansion());
2041
2049
  this.defaultEditor.onAction("app.thinking.toggle", () => this.toggleThinkingBlockVisibility());
2042
- this.defaultEditor.onAction("app.editor.external", () => this.openExternalEditor());
2050
+ this.defaultEditor.onAction("app.editor.external", () => void this.handleOpenExternalEditor());
2043
2051
  this.defaultEditor.onAction("app.message.copy", () => void this.handleCopyCommand());
2044
2052
  this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
2045
2053
  this.defaultEditor.onAction("app.message.dequeue", () => this.handleDequeue());
@@ -2401,6 +2409,9 @@ export class InteractiveMode {
2401
2409
  }
2402
2410
  this.ui.requestRender();
2403
2411
  break;
2412
+ case "bash_execution_update":
2413
+ // The bash execution callback handles TUI output rendering.
2414
+ break;
2404
2415
  case "tool_execution_start": {
2405
2416
  let component = this.pendingTools.get(event.toolCallId);
2406
2417
  if (!component) {
@@ -2611,7 +2622,7 @@ export class InteractiveMode {
2611
2622
  case "custom": {
2612
2623
  if (message.display) {
2613
2624
  const renderer = this.session.extensionRunner.getMessageRenderer(message.customType);
2614
- const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());
2625
+ const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings(), this.outputPad);
2615
2626
  component.setExpanded(this.toolOutputExpanded);
2616
2627
  this.chatContainer.addChild(component);
2617
2628
  }
@@ -3123,51 +3134,21 @@ export class InteractiveMode {
3123
3134
  }
3124
3135
  this.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? "hidden" : "visible"}`);
3125
3136
  }
3126
- async openExternalEditor() {
3137
+ async handleOpenExternalEditor() {
3127
3138
  const editorCmd = this.settingsManager.getExternalEditorCommand();
3128
- if (!editorCmd) {
3129
- this.showWarning("No editor configured. Set externalEditor in settings.json or $VISUAL/$EDITOR.");
3130
- return;
3131
- }
3132
- const currentText = this.editor.getExpandedText?.() ?? this.editor.getText();
3133
- const tmpFile = path.join(os.tmpdir(), `sling-editor-${Date.now()}.sling.md`);
3139
+ const content = this.editor.getExpandedText?.() ?? this.editor.getText();
3140
+ this.ui.stop();
3134
3141
  try {
3135
- // Write current content to temp file
3136
- fs.writeFileSync(tmpFile, currentText, "utf-8");
3137
- // Stop TUI to release terminal
3138
- this.ui.stop();
3139
- // Split by space to support editor arguments (e.g., "code --wait")
3140
- const [editor, ...editorArgs] = editorCmd.split(" ");
3141
- process.stdout.write(`Launching external editor: ${editorCmd}\nPi will resume when the editor exits.\n`);
3142
- // Do not use spawnSync here. On Windows, synchronous child_process calls can keep
3143
- // Node/libuv's console input read active after ui.stop() pauses stdin, racing
3144
- // vim/nvim for the console input buffer until Ctrl+C cancels the pending read.
3145
- const status = await new Promise((resolve) => {
3146
- const child = spawn(editor, [...editorArgs, tmpFile], {
3147
- stdio: "inherit",
3148
- shell: process.platform === "win32",
3149
- });
3150
- child.on("error", () => resolve(null));
3151
- child.on("close", (code) => resolve(code));
3142
+ const result = await editInExternalEditor({
3143
+ command: editorCmd,
3144
+ content,
3152
3145
  });
3153
- // On successful exit (status 0), replace editor content
3154
- if (status === 0) {
3155
- const newContent = fs.readFileSync(tmpFile, "utf-8").replace(/\n$/, "");
3156
- this.editor.setText(newContent);
3146
+ if (result.status === "complete") {
3147
+ this.editor.setText(result.content);
3157
3148
  }
3158
- // On non-zero exit, keep original text (no action needed)
3159
3149
  }
3160
3150
  finally {
3161
- // Clean up temp file
3162
- try {
3163
- fs.unlinkSync(tmpFile);
3164
- }
3165
- catch {
3166
- // Ignore cleanup errors
3167
- }
3168
- // Restart TUI
3169
3151
  this.ui.start();
3170
- // Force full re-render since external editor uses alternate screen
3171
3152
  this.ui.requestRender(true);
3172
3153
  }
3173
3154
  }
@@ -3544,7 +3525,9 @@ export class InteractiveMode {
3544
3525
  this.outputPad = padding;
3545
3526
  if (this.streamingComponent || this.session.isStreaming) {
3546
3527
  for (const child of this.chatContainer.children) {
3547
- if (child instanceof AssistantMessageComponent || child instanceof UserMessageComponent) {
3528
+ if (child instanceof AssistantMessageComponent ||
3529
+ child instanceof CustomMessageComponent ||
3530
+ child instanceof UserMessageComponent) {
3548
3531
  child.setOutputPad(padding);
3549
3532
  }
3550
3533
  }
@@ -3634,15 +3617,15 @@ export class InteractiveMode {
3634
3617
  if (this.settingsManager.getWarnings().anthropicExtraUsage === false) {
3635
3618
  return;
3636
3619
  }
3637
- // if (this.anthropicSubscriptionWarningShown) {
3638
- // return;
3639
- // }
3620
+ if (this.anthropicSubscriptionWarningShown) {
3621
+ return;
3622
+ }
3640
3623
  if (!model || model.provider !== "anthropic") {
3641
3624
  return;
3642
3625
  }
3643
3626
  try {
3644
3627
  if ((await this.session.modelRuntime.checkAuth("anthropic"))?.type === "oauth") {
3645
- //this.anthropicSubscriptionWarningShown = true;
3628
+ this.anthropicSubscriptionWarningShown = true;
3646
3629
  this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);
3647
3630
  return;
3648
3631
  }
@@ -3650,7 +3633,7 @@ export class InteractiveMode {
3650
3633
  if (!isAnthropicSubscriptionAuthKey(apiKey)) {
3651
3634
  return;
3652
3635
  }
3653
- //this.anthropicSubscriptionWarningShown = true;
3636
+ this.anthropicSubscriptionWarningShown = true;
3654
3637
  this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);
3655
3638
  }
3656
3639
  catch {
@@ -3729,12 +3712,17 @@ export class InteractiveMode {
3729
3712
  // Get all available models
3730
3713
  await this.session.modelRuntime.refresh();
3731
3714
  const allModels = [...(await this.session.modelRuntime.getAvailable())];
3732
- if (allModels.length === 0) {
3715
+ const allModelIds = new Set(allModels.map((model) => `${model.provider}/${model.id}`));
3716
+ const configuredPatterns = this.settingsManager.getEnabledModels();
3717
+ const sessionScopedModels = this.session.scopedModels;
3718
+ if (allModels.length === 0 && !configuredPatterns?.length && sessionScopedModels.length === 0) {
3733
3719
  this.showStatus("No models available");
3734
3720
  return;
3735
3721
  }
3722
+ const configuredScope = configuredPatterns?.length
3723
+ ? await resolveModelScopeWithDiagnostics(configuredPatterns, this.session.modelRuntime)
3724
+ : undefined;
3736
3725
  // Check if session has scoped models (from previous session-only changes or CLI --models)
3737
- const sessionScopedModels = this.session.scopedModels;
3738
3726
  const hasSessionScope = sessionScopedModels.length > 0;
3739
3727
  // Build enabled model IDs from session state or settings
3740
3728
  let currentEnabledIds = null;
@@ -3742,18 +3730,22 @@ export class InteractiveMode {
3742
3730
  // Use current session's scoped models
3743
3731
  currentEnabledIds = sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3744
3732
  }
3745
- else {
3746
- // Fall back to settings
3747
- const patterns = this.settingsManager.getEnabledModels();
3748
- if (patterns !== undefined && patterns.length > 0) {
3749
- const scopedModels = await resolveModelScope(patterns, this.session.modelRuntime);
3750
- currentEnabledIds = scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3751
- }
3733
+ else if (configuredScope) {
3734
+ currentEnabledIds = configuredScope.scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3735
+ }
3736
+ for (const diagnostic of configuredScope?.diagnostics ?? []) {
3737
+ if (diagnostic.code !== "no-match")
3738
+ continue;
3739
+ currentEnabledIds ??= [];
3740
+ if (!currentEnabledIds.includes(diagnostic.pattern))
3741
+ currentEnabledIds.push(diagnostic.pattern);
3752
3742
  }
3753
3743
  // Helper to update session's scoped models (session-only, no persist)
3754
3744
  const updateSessionModels = async (enabledIds) => {
3755
3745
  currentEnabledIds = enabledIds === null ? null : [...enabledIds];
3756
- if (enabledIds && enabledIds.length > 0 && enabledIds.length < allModels.length) {
3746
+ const hasEnabledAvailableModel = enabledIds?.some((id) => allModelIds.has(id)) ?? false;
3747
+ const allAvailableModelsEnabled = enabledIds !== null && [...allModelIds].every((id) => enabledIds.includes(id));
3748
+ if (enabledIds && hasEnabledAvailableModel && !allAvailableModelsEnabled) {
3757
3749
  const newScopedModels = await resolveModelScope(enabledIds, this.session.modelRuntime);
3758
3750
  this.session.setScopedModels(newScopedModels.map((sm) => ({
3759
3751
  model: sm.model,
@@ -3777,9 +3769,10 @@ export class InteractiveMode {
3777
3769
  },
3778
3770
  onPersist: (enabledIds) => {
3779
3771
  // Persist to settings
3780
- const newPatterns = enabledIds === null || enabledIds.length === allModels.length
3781
- ? undefined // All enabled = clear filter
3782
- : enabledIds;
3772
+ const allEnabled = enabledIds !== null &&
3773
+ enabledIds.length === allModels.length &&
3774
+ enabledIds.every((id) => allModelIds.has(id));
3775
+ const newPatterns = enabledIds === null || allEnabled ? undefined : enabledIds;
3783
3776
  this.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);
3784
3777
  this.showStatus("Model selection saved to settings");
3785
3778
  },
@@ -437,6 +437,7 @@ export async function runRpcMode(runtimeHost) {
437
437
  case "bash": {
438
438
  const result = await session.executeBash(command.command, undefined, {
439
439
  excludeFromContext: command.excludeFromContext,
440
+ id,
440
441
  });
441
442
  return success(id, "bash", result);
442
443
  }
@@ -91,15 +91,26 @@ export async function copyToClipboard(text) {
91
91
  try {
92
92
  // Verify wl-copy exists (spawn errors are async and won't be caught)
93
93
  execSync("which wl-copy", { stdio: "ignore" });
94
- // wl-copy with execSync hangs due to fork behavior; use spawn instead
95
- const proc = spawn("wl-copy", [], { stdio: ["pipe", "ignore", "ignore"] });
96
- proc.stdin.on("error", () => {
97
- // Ignore EPIPE errors if wl-copy exits early
94
+ // wl-copy with execSync hangs due to fork behavior; use spawn instead.
95
+ // Await the exit code and only claim success on a clean exit, so a
96
+ // failed wl-copy falls through to the xclip/OSC 52 fallbacks.
97
+ const wlCopyExit = await new Promise((resolve) => {
98
+ const proc = spawn("wl-copy", [], { stdio: ["pipe", "ignore", "ignore"] });
99
+ proc.on("error", () => resolve(1));
100
+ proc.on("close", (code) => resolve(code ?? 1));
101
+ proc.stdin.on("error", () => {
102
+ // Ignore EPIPE errors if wl-copy exits early
103
+ });
104
+ proc.stdin.write(text);
105
+ proc.stdin.end();
98
106
  });
99
- proc.stdin.write(text);
100
- proc.stdin.end();
101
- proc.unref();
102
- copied = true;
107
+ if (wlCopyExit === 0) {
108
+ copied = true;
109
+ }
110
+ else if (hasX11Display) {
111
+ copyToX11Clipboard(options);
112
+ copied = true;
113
+ }
103
114
  }
104
115
  catch {
105
116
  if (hasX11Display) {
@@ -18,7 +18,7 @@ export function isNewerPackageVersion(candidateVersion, currentVersion) {
18
18
  return candidateVersion.trim() !== currentVersion.trim();
19
19
  }
20
20
  export async function getLatestPiRelease(currentVersion, options = {}) {
21
- if (process.env.PI_SKIP_VERSION_CHECK || process.env.PI_OFFLINE)
21
+ if (process.env.PI_OFFLINE)
22
22
  return undefined;
23
23
  const response = await fetch(LATEST_VERSION_URL, {
24
24
  headers: {
@@ -45,6 +45,8 @@ export async function getLatestPiVersion(currentVersion, options = {}) {
45
45
  return (await getLatestPiRelease(currentVersion, options))?.version;
46
46
  }
47
47
  export async function checkForNewPiVersion(currentVersion) {
48
+ if (process.env.PI_SKIP_VERSION_CHECK)
49
+ return undefined;
48
50
  try {
49
51
  const latestRelease = await getLatestPiRelease(currentVersion);
50
52
  if (latestRelease && isNewerPackageVersion(latestRelease.version, currentVersion)) {
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-coding-agent",
3
- "version": "0.81.1",
3
+ "version": "0.82.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@earendil-works/pi-coding-agent",
9
- "version": "0.81.1",
9
+ "version": "0.82.1",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@earendil-works/pi-agent-core": "^0.81.1",
13
- "@earendil-works/pi-ai": "^0.81.1",
14
- "@earendil-works/pi-tui": "^0.81.1",
12
+ "@earendil-works/pi-agent-core": "^0.82.1",
13
+ "@earendil-works/pi-ai": "^0.82.1",
14
+ "@earendil-works/pi-tui": "^0.82.1",
15
15
  "@silvia-odwyer/photon-node": "0.3.4",
16
16
  "chalk": "5.6.2",
17
17
  "cross-spawn": "7.0.6",
@@ -474,11 +474,12 @@
474
474
  }
475
475
  },
476
476
  "node_modules/@earendil-works/pi-agent-core": {
477
- "version": "0.81.1",
478
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.81.1.tgz",
477
+ "version": "0.82.1",
478
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.82.1.tgz",
479
479
  "license": "MIT",
480
480
  "dependencies": {
481
- "@earendil-works/pi-ai": "^0.81.1",
481
+ "@earendil-works/pi-ai": "^0.82.1",
482
+ "diff": "8.0.4",
482
483
  "ignore": "7.0.5",
483
484
  "typebox": "1.1.38",
484
485
  "yaml": "2.9.0"
@@ -488,8 +489,8 @@
488
489
  }
489
490
  },
490
491
  "node_modules/@earendil-works/pi-ai": {
491
- "version": "0.81.1",
492
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.81.1.tgz",
492
+ "version": "0.82.1",
493
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.82.1.tgz",
493
494
  "license": "MIT",
494
495
  "dependencies": {
495
496
  "@anthropic-ai/sdk": "0.91.1",
@@ -512,8 +513,8 @@
512
513
  }
513
514
  },
514
515
  "node_modules/@earendil-works/pi-tui": {
515
- "version": "0.81.1",
516
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.81.1.tgz",
516
+ "version": "0.82.1",
517
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.82.1.tgz",
517
518
  "license": "MIT",
518
519
  "dependencies": {
519
520
  "get-east-asian-width": "1.6.0",
@@ -1592,9 +1593,9 @@
1592
1593
  }
1593
1594
  },
1594
1595
  "node_modules/protobufjs": {
1595
- "version": "7.6.4",
1596
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.4.tgz",
1597
- "integrity": "sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==",
1596
+ "version": "7.6.5",
1597
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz",
1598
+ "integrity": "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==",
1598
1599
  "license": "BSD-3-Clause",
1599
1600
  "dependencies": {
1600
1601
  "@protobufjs/aspromise": "^1.1.2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-coding-agent",
3
- "version": "0.81.1",
3
+ "version": "0.82.1",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -40,9 +40,9 @@
40
40
  "prepublishOnly": "npm run clean && npm run build && npm run shrinkwrap"
41
41
  },
42
42
  "dependencies": {
43
- "@earendil-works/pi-agent-core": "^0.81.1",
44
- "@earendil-works/pi-ai": "^0.81.1",
45
- "@earendil-works/pi-tui": "^0.81.1",
43
+ "@earendil-works/pi-agent-core": "^0.82.1",
44
+ "@earendil-works/pi-ai": "^0.82.1",
45
+ "@earendil-works/pi-tui": "^0.82.1",
46
46
  "@silvia-odwyer/photon-node": "0.3.4",
47
47
  "chalk": "5.6.2",
48
48
  "cross-spawn": "7.0.6",
@@ -60,6 +60,7 @@
60
60
  "yaml": "2.9.0"
61
61
  },
62
62
  "overrides": {
63
+ "protobufjs": "7.6.5",
63
64
  "rimraf": "6.1.2",
64
65
  "gaxios": {
65
66
  "rimraf": "6.1.2"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-server",
3
- "version": "0.81.1",
3
+ "version": "0.82.1",
4
4
  "description": "experimental server package for pi",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "node": ">=22.19.0"
41
41
  },
42
42
  "dependencies": {
43
- "@earendil-works/pi-coding-agent": "^0.81.1"
43
+ "@earendil-works/pi-coding-agent": "^0.82.1"
44
44
  },
45
45
  "devDependencies": {
46
46
  "shx": "0.4.0"
@@ -3,7 +3,7 @@ import { decodePrintableKey, matchesKey } from "../keys.js";
3
3
  import { KillRing } from "../kill-ring.js";
4
4
  import { CURSOR_MARKER } from "../tui.js";
5
5
  import { UndoStack } from "../undo-stack.js";
6
- import { cjkBreakRegex, getGraphemeSegmenter, getWordSegmenter, isWhitespaceChar, truncateToWidth, visibleWidth, } from "../utils.js";
6
+ import { cjkBreakRegex, getGraphemeSegmenter, getWordSegmenter, isWhitespaceChar, sliceByColumn, visibleWidth, } from "../utils.js";
7
7
  import { findWordBackward, findWordForward } from "../word-navigation.js";
8
8
  import { SelectList } from "./select-list.js";
9
9
  const graphemeSegmenter = getGraphemeSegmenter();
@@ -178,6 +178,16 @@ function buildDebouncePattern(triggerCharacters) {
178
178
  const escapedWithoutAt = triggerCharacters.filter((character) => character !== "@").map(escapeCharacterClass);
179
179
  return new RegExp(`(?:^|[ \\t])(?:@(?:"[^"]*|[^\\s]*)|[${escapedWithoutAt.join("")}][^\\s]*)$`);
180
180
  }
181
+ function createScrollBorder(direction, hiddenLineCount, width) {
182
+ const availableWidth = Math.max(0, width);
183
+ const indicator = `─── ${direction} ${hiddenLineCount} more `;
184
+ const remaining = availableWidth - visibleWidth(indicator);
185
+ if (remaining >= 0)
186
+ return indicator + "─".repeat(remaining);
187
+ const ellipsis = "...".slice(0, availableWidth);
188
+ const indicatorWidth = availableWidth - visibleWidth(ellipsis);
189
+ return sliceByColumn(indicator, 0, indicatorWidth, true) + ellipsis;
190
+ }
181
191
  export class Editor {
182
192
  state = {
183
193
  lines: [""],
@@ -396,14 +406,8 @@ export class Editor {
396
406
  const rightPadding = leftPadding;
397
407
  // Render top border (with scroll indicator if scrolled down)
398
408
  if (this.scrollOffset > 0) {
399
- const indicator = `─── ${this.scrollOffset} more `;
400
- const remaining = width - visibleWidth(indicator);
401
- if (remaining >= 0) {
402
- result.push(this.borderColor(indicator + "─".repeat(remaining)));
403
- }
404
- else {
405
- result.push(this.borderColor(truncateToWidth(indicator, width)));
406
- }
409
+ const border = createScrollBorder("", this.scrollOffset, width);
410
+ result.push(this.borderColor(border));
407
411
  }
408
412
  else {
409
413
  result.push(horizontal.repeat(width));
@@ -453,9 +457,8 @@ export class Editor {
453
457
  // Render bottom border (with scroll indicator if more content below)
454
458
  const linesBelow = layoutLines.length - (this.scrollOffset + visibleLines.length);
455
459
  if (linesBelow > 0) {
456
- const indicator = `─── ${linesBelow} more `;
457
- const remaining = width - visibleWidth(indicator);
458
- result.push(this.borderColor(indicator + "─".repeat(Math.max(0, remaining))));
460
+ const border = createScrollBorder("", linesBelow, width);
461
+ result.push(this.borderColor(border));
459
462
  }
460
463
  else {
461
464
  result.push(horizontal.repeat(width));
@@ -133,13 +133,15 @@ export class TUI extends Container {
133
133
  pendingOsc11BackgroundQueries = [];
134
134
  terminalColorSchemeListeners = new Set();
135
135
  terminalColorSchemeNotificationsEnabled = false;
136
+ logDirectory;
136
137
  // Overlay stack for modal components rendered on top of base content
137
138
  focusOrderCounter = 0;
138
139
  overlayStack = [];
139
140
  overlayFocusRestore = { status: "inactive" };
140
- constructor(terminal, showHardwareCursor) {
141
+ constructor(terminal, showHardwareCursor, logDirectory) {
141
142
  super();
142
143
  this.terminal = terminal;
144
+ this.logDirectory = logDirectory ?? process.env.PI_CODING_AGENT_DIR ?? path.join(os.homedir(), ".pi", "agent");
143
145
  if (showHardwareCursor !== undefined) {
144
146
  this.showHardwareCursor = showHardwareCursor;
145
147
  }
@@ -1049,8 +1051,9 @@ export class TUI extends Container {
1049
1051
  const logRedraw = (reason) => {
1050
1052
  if (!debugRedraw)
1051
1053
  return;
1052
- const logPath = path.join(os.homedir(), ".pi", "agent", "pi-debug.log");
1054
+ const logPath = path.join(this.logDirectory, "pi-debug.log");
1053
1055
  const msg = `[${new Date().toISOString()}] fullRender: ${reason} (prev=${this.previousLines.length}, new=${newLines.length}, height=${height})\n`;
1056
+ fs.mkdirSync(path.dirname(logPath), { recursive: true });
1054
1057
  fs.appendFileSync(logPath, msg);
1055
1058
  };
1056
1059
  // First render - just output everything without clearing (assumes clean screen)
@@ -1229,7 +1232,7 @@ export class TUI extends Container {
1229
1232
  buffer += "\x1b[2K"; // Clear current line
1230
1233
  if (!isImage && visibleWidth(line) > width) {
1231
1234
  // Log all lines to crash file for debugging
1232
- const crashLogPath = path.join(os.homedir(), ".pi", "agent", "pi-crash.log");
1235
+ const crashLogPath = path.join(this.logDirectory, "pi-crash.log");
1233
1236
  const crashData = [
1234
1237
  `Crash at ${new Date().toISOString()}`,
1235
1238
  `Terminal width: ${width}`,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-tui",
3
- "version": "0.81.1",
3
+ "version": "0.82.1",
4
4
  "description": "Terminal User Interface library with differential rendering for efficient text-based applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -5,6 +5,7 @@ const { parseRfc7231DateTime, v4 } = require("@smithy/core/serde");
5
5
  const isStreamingPayload = (request) => request?.body instanceof ReadableStream;
6
6
 
7
7
  const CLOCK_SKEW_ERROR_CODES = [
8
+ "AccessDeniedException",
8
9
  "AuthFailure",
9
10
  "InvalidSignatureException",
10
11
  "RequestExpired",
@@ -7,6 +7,7 @@ const isStreamingPayload = (request) => request?.body instanceof Readable ||
7
7
  (typeof ReadableStream !== "undefined" && request?.body instanceof ReadableStream);
8
8
 
9
9
  const CLOCK_SKEW_ERROR_CODES = [
10
+ "AccessDeniedException",
10
11
  "AuthFailure",
11
12
  "InvalidSignatureException",
12
13
  "RequestExpired",