@openclaw/google-meet 2026.9.4 → 2026.9.6

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 (175) hide show
  1. package/assets/activity.svg +40 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/{chrome-create-PKAyxCiL.js → .setup/chrome-create-BZRBHJp9.mjs} +1 -1
  4. package/dist/{cli-BCUxht2Q.js → .setup/cli-CbxqjjTC.mjs} +68 -88
  5. package/dist/{create-Cr6rg236.js → .setup/create-CG9Pgwsb.mjs} +3 -3
  6. package/dist/{google-meet-platform-adapter-C3J-iFRE.js → .setup/google-meet-platform-adapter-DQZ74Kd5.mjs} +32 -3
  7. package/dist/{node-host-DS-lLN37.js → .setup/node-host-BUrsParx.mjs} +4 -7
  8. package/dist/{node-invoke-policy-B0gOlLJR.js → .setup/node-invoke-policy-hwXq9MfV.mjs} +2 -2
  9. package/dist/{oauth-DgBscjXK.js → .setup/oauth-22Ey-zCb.mjs} +1 -1
  10. package/dist/{plugin-helpers-RSH2DZTl.js → .setup/plugin-helpers--7X3icub.mjs} +5 -5
  11. package/dist/{plugin-registration-DLs9YDzZ.js → .setup/plugin-registration-B3LXKV4R.mjs} +32 -13
  12. package/dist/{runtime-CXfjJvPN.js → .setup/runtime-BuIZ5e3V.mjs} +8 -4
  13. package/dist/cli-metadata.js +1 -1
  14. package/dist/index.js +10 -5
  15. package/node_modules/jszip/.github/FUNDING.yml +1 -0
  16. package/node_modules/jszip/.github/actions/setup/action.yml +23 -0
  17. package/node_modules/jszip/.github/workflows/benchmark.yml +38 -0
  18. package/node_modules/jszip/.github/workflows/main.yml +55 -0
  19. package/node_modules/jszip/CHANGES.md +6 -0
  20. package/node_modules/jszip/dist/jszip.js +28 -19
  21. package/node_modules/jszip/dist/jszip.min.js +2 -2
  22. package/node_modules/jszip/index.d.ts +14 -0
  23. package/node_modules/jszip/lib/index.js +1 -1
  24. package/node_modules/jszip/lib/utils.js +26 -17
  25. package/node_modules/jszip/package.json +2 -2
  26. package/node_modules/typebox/build/compile/validator.d.mts +1 -1
  27. package/node_modules/typebox/build/compile/validator.mjs +1 -1
  28. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +7 -5
  29. package/node_modules/typebox/build/format/iri.mjs +5 -1
  30. package/node_modules/typebox/build/guard/emit.mjs +2 -4
  31. package/node_modules/typebox/build/guard/guard.mjs +6 -18
  32. package/node_modules/typebox/build/guard/string.mjs +16 -24
  33. package/node_modules/typebox/build/schema/build.mjs +2 -2
  34. package/node_modules/typebox/build/schema/check.mjs +1 -1
  35. package/node_modules/typebox/build/schema/compile.d.mts +3 -2
  36. package/node_modules/typebox/build/schema/compile.mjs +8 -8
  37. package/node_modules/typebox/build/schema/engine/_context.d.mts +6 -7
  38. package/node_modules/typebox/build/schema/engine/_context.mjs +23 -15
  39. package/node_modules/typebox/build/schema/engine/_functions.d.mts +2 -2
  40. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -1
  41. package/node_modules/typebox/build/schema/engine/_reducer.d.mts +3 -3
  42. package/node_modules/typebox/build/schema/engine/_refine.d.mts +5 -5
  43. package/node_modules/typebox/build/schema/engine/_refine.mjs +4 -7
  44. package/node_modules/typebox/build/schema/engine/_stack.d.mts +34 -16
  45. package/node_modules/typebox/build/schema/engine/_stack.mjs +148 -104
  46. package/node_modules/typebox/build/schema/engine/additionalItems.d.mts +4 -4
  47. package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +8 -8
  48. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +26 -18
  49. package/node_modules/typebox/build/schema/engine/allOf.d.mts +4 -4
  50. package/node_modules/typebox/build/schema/engine/allOf.mjs +3 -3
  51. package/node_modules/typebox/build/schema/engine/anyOf.d.mts +4 -4
  52. package/node_modules/typebox/build/schema/engine/anyOf.mjs +5 -10
  53. package/node_modules/typebox/build/schema/engine/boolean.d.mts +4 -4
  54. package/node_modules/typebox/build/schema/engine/boolean.mjs +2 -6
  55. package/node_modules/typebox/build/schema/engine/const.d.mts +4 -4
  56. package/node_modules/typebox/build/schema/engine/const.mjs +2 -6
  57. package/node_modules/typebox/build/schema/engine/contains.d.mts +4 -4
  58. package/node_modules/typebox/build/schema/engine/contains.mjs +2 -6
  59. package/node_modules/typebox/build/schema/engine/dependencies.d.mts +4 -4
  60. package/node_modules/typebox/build/schema/engine/dependencies.mjs +3 -6
  61. package/node_modules/typebox/build/schema/engine/dependentRequired.d.mts +4 -4
  62. package/node_modules/typebox/build/schema/engine/dependentRequired.mjs +2 -6
  63. package/node_modules/typebox/build/schema/engine/dependentSchemas.d.mts +4 -4
  64. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +4 -4
  65. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +11 -7
  66. package/node_modules/typebox/build/schema/engine/enum.d.mts +4 -4
  67. package/node_modules/typebox/build/schema/engine/enum.mjs +2 -6
  68. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.d.mts +4 -4
  69. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.mjs +2 -6
  70. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.d.mts +4 -4
  71. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.mjs +2 -6
  72. package/node_modules/typebox/build/schema/engine/format.d.mts +4 -4
  73. package/node_modules/typebox/build/schema/engine/format.mjs +2 -6
  74. package/node_modules/typebox/build/schema/engine/if.d.mts +4 -4
  75. package/node_modules/typebox/build/schema/engine/if.mjs +7 -15
  76. package/node_modules/typebox/build/schema/engine/items.d.mts +4 -4
  77. package/node_modules/typebox/build/schema/engine/items.mjs +1 -1
  78. package/node_modules/typebox/build/schema/engine/maxContains.d.mts +4 -4
  79. package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -6
  80. package/node_modules/typebox/build/schema/engine/maxItems.d.mts +4 -4
  81. package/node_modules/typebox/build/schema/engine/maxItems.mjs +2 -6
  82. package/node_modules/typebox/build/schema/engine/maxLength.d.mts +4 -4
  83. package/node_modules/typebox/build/schema/engine/maxLength.mjs +2 -6
  84. package/node_modules/typebox/build/schema/engine/maxProperties.d.mts +4 -4
  85. package/node_modules/typebox/build/schema/engine/maxProperties.mjs +2 -6
  86. package/node_modules/typebox/build/schema/engine/maximum.d.mts +4 -4
  87. package/node_modules/typebox/build/schema/engine/maximum.mjs +2 -6
  88. package/node_modules/typebox/build/schema/engine/minContains.d.mts +4 -4
  89. package/node_modules/typebox/build/schema/engine/minContains.mjs +2 -6
  90. package/node_modules/typebox/build/schema/engine/minItems.d.mts +5 -5
  91. package/node_modules/typebox/build/schema/engine/minItems.mjs +2 -6
  92. package/node_modules/typebox/build/schema/engine/minLength.d.mts +4 -4
  93. package/node_modules/typebox/build/schema/engine/minLength.mjs +2 -6
  94. package/node_modules/typebox/build/schema/engine/minProperties.d.mts +4 -4
  95. package/node_modules/typebox/build/schema/engine/minProperties.mjs +2 -6
  96. package/node_modules/typebox/build/schema/engine/minimum.d.mts +4 -4
  97. package/node_modules/typebox/build/schema/engine/minimum.mjs +2 -6
  98. package/node_modules/typebox/build/schema/engine/multipleOf.d.mts +4 -4
  99. package/node_modules/typebox/build/schema/engine/multipleOf.mjs +2 -6
  100. package/node_modules/typebox/build/schema/engine/not.d.mts +4 -4
  101. package/node_modules/typebox/build/schema/engine/not.mjs +4 -8
  102. package/node_modules/typebox/build/schema/engine/oneOf.d.mts +4 -4
  103. package/node_modules/typebox/build/schema/engine/oneOf.mjs +6 -11
  104. package/node_modules/typebox/build/schema/engine/pattern.d.mts +4 -4
  105. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -7
  106. package/node_modules/typebox/build/schema/engine/patternProperties.d.mts +4 -4
  107. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +1 -1
  108. package/node_modules/typebox/build/schema/engine/prefixItems.d.mts +4 -4
  109. package/node_modules/typebox/build/schema/engine/prefixItems.mjs +1 -1
  110. package/node_modules/typebox/build/schema/engine/properties.d.mts +4 -4
  111. package/node_modules/typebox/build/schema/engine/properties.mjs +1 -1
  112. package/node_modules/typebox/build/schema/engine/propertyNames.d.mts +4 -4
  113. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +4 -10
  114. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +4 -4
  115. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +11 -7
  116. package/node_modules/typebox/build/schema/engine/ref.d.mts +4 -4
  117. package/node_modules/typebox/build/schema/engine/ref.mjs +19 -15
  118. package/node_modules/typebox/build/schema/engine/required.d.mts +4 -4
  119. package/node_modules/typebox/build/schema/engine/required.mjs +2 -6
  120. package/node_modules/typebox/build/schema/engine/schema.d.mts +7 -7
  121. package/node_modules/typebox/build/schema/engine/schema.mjs +137 -133
  122. package/node_modules/typebox/build/schema/engine/type.d.mts +4 -4
  123. package/node_modules/typebox/build/schema/engine/type.mjs +2 -6
  124. package/node_modules/typebox/build/schema/engine/unevaluatedItems.d.mts +4 -4
  125. package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +5 -9
  126. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.d.mts +4 -4
  127. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +5 -9
  128. package/node_modules/typebox/build/schema/engine/uniqueItems.d.mts +4 -4
  129. package/node_modules/typebox/build/schema/engine/uniqueItems.mjs +2 -6
  130. package/node_modules/typebox/build/schema/errors.d.mts +2 -2
  131. package/node_modules/typebox/build/schema/errors.mjs +8 -14
  132. package/node_modules/typebox/build/schema/intern/index.d.mts +1 -0
  133. package/node_modules/typebox/build/schema/intern/index.mjs +1 -0
  134. package/node_modules/typebox/build/schema/intern/intern.d.mts +11 -0
  135. package/node_modules/typebox/build/schema/intern/intern.mjs +293 -0
  136. package/node_modules/typebox/build/schema/meta/draft_2019_09.d.mts +2 -0
  137. package/node_modules/typebox/build/schema/meta/draft_2019_09.mjs +288 -0
  138. package/node_modules/typebox/build/schema/meta/draft_2020_12.d.mts +2 -0
  139. package/node_modules/typebox/build/schema/meta/draft_2020_12.mjs +300 -0
  140. package/node_modules/typebox/build/schema/meta/draft_3.d.mts +2 -0
  141. package/node_modules/typebox/build/schema/meta/draft_3.mjs +143 -0
  142. package/node_modules/typebox/build/schema/meta/draft_4.d.mts +2 -0
  143. package/node_modules/typebox/build/schema/meta/draft_4.mjs +149 -0
  144. package/node_modules/typebox/build/schema/meta/draft_6.d.mts +2 -0
  145. package/node_modules/typebox/build/schema/meta/draft_6.mjs +155 -0
  146. package/node_modules/typebox/build/schema/meta/draft_7.d.mts +2 -0
  147. package/node_modules/typebox/build/schema/meta/draft_7.mjs +172 -0
  148. package/node_modules/typebox/build/schema/meta/index.d.mts +2 -0
  149. package/node_modules/typebox/build/schema/meta/index.mjs +2 -0
  150. package/node_modules/typebox/build/schema/meta/meta.d.mts +9 -0
  151. package/node_modules/typebox/build/schema/meta/meta.mjs +15 -0
  152. package/node_modules/typebox/build/schema/meta/schema.d.mts +6 -0
  153. package/node_modules/typebox/build/schema/meta/schema.mjs +1 -0
  154. package/node_modules/typebox/build/schema/parse.d.mts +1 -0
  155. package/node_modules/typebox/build/schema/parse.mjs +10 -5
  156. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +8 -3
  157. package/node_modules/typebox/build/schema/resolve/resolve.mjs +268 -139
  158. package/node_modules/typebox/build/schema/schema.d.mts +2 -0
  159. package/node_modules/typebox/build/schema/schema.mjs +2 -0
  160. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -12
  161. package/node_modules/typebox/build/value/errors/errors.mjs +2 -7
  162. package/node_modules/typebox/package.json +1 -1
  163. package/node_modules/typebox/readme.md +59 -89
  164. package/openclaw.plugin.json +33 -1
  165. package/package.json +10 -7
  166. package/node_modules/jszip/.github/workflows/pr.yaml +0 -58
  167. package/node_modules/jszip/.jekyll-metadata +0 -0
  168. package/node_modules/jszip/.travis.yml +0 -17
  169. package/node_modules/jszip/deps.js +0 -37
  170. package/node_modules/jszip/graph.svg +0 -601
  171. /package/dist/{cli-output-mode-BwH_6tH8.js → .setup/cli-output-mode-BwH_6tH8.mjs} +0 -0
  172. /package/dist/{config-C-6enWkx.js → .setup/config-C-6enWkx.mjs} +0 -0
  173. /package/dist/{google-api-errors-BDYXfKRa.js → .setup/google-api-errors-BDYXfKRa.mjs} +0 -0
  174. /package/dist/{google-meet-platform-constants-Bs5iAg3E.js → .setup/google-meet-platform-constants-Bs5iAg3E.mjs} +0 -0
  175. /package/dist/{meet-url-BP2Jlvjs.js → .setup/meet-url-BP2Jlvjs.mjs} +0 -0
@@ -0,0 +1,40 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
+ <!--
3
+ Source: simple-icons@16.31.0, icons/googlemeet.svg
4
+ https://www.npmjs.com/package/simple-icons/v/16.31.0
5
+ https://github.com/simple-icons/simple-icons
6
+
7
+ # CC0 1.0 Universal
8
+
9
+ ## Statement of Purpose
10
+
11
+ The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an “owner”) of an original work of authorship and/or a database (each, a “Work”).
12
+
13
+ Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works (“Commons”) that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
14
+
15
+ For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the “Affirmer”), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
16
+
17
+ 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights (“Copyright and Related Rights”). Copyright and Related Rights include, but are not limited to, the following:
18
+ 1. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
19
+ 2. moral rights retained by the original author(s) and/or performer(s);
20
+ 3. publicity and privacy rights pertaining to a person’s image or likeness depicted in a Work;
21
+ 4. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(i), below;
22
+ 5. rights protecting the extraction, dissemination, use and reuse of data in a Work;
23
+ 6. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
24
+ 7. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
25
+
26
+ 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the “Waiver”). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer’s heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer’s express Statement of Purpose.
27
+
28
+ 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer’s express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer’s Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the “License”). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer’s express Statement of Purpose.
29
+
30
+ 4. Limitations and Disclaimers.
31
+ 1. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
32
+ 2. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
33
+ 3. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person’s Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
34
+ 4. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
35
+
36
+ For more information, please see <https://creativecommons.org/publicdomain/zero/1.0>.
37
+ Names and marks remain the property of their respective owners.
38
+ -->
39
+ <path fill="currentColor" stroke="none" d="M5.53 2.13 0 7.75h5.53zm.398 0v5.62h7.608v3.65l5.47-4.45c-.014-1.22.031-2.25-.025-3.46-.148-1.09-1.287-1.47-2.236-1.36zM23.1 4.32c-.802.295-1.358.995-2.047 1.49-2.506 2.05-4.982 4.12-7.468 6.19 3.025 2.59 6.04 5.18 9.065 7.76 1.218.671 1.428-.814 1.328-1.64v-13a.828.828 0 0 0-.877-.825zM.038 8.15v7.7h5.53v-7.7zm13.577 8.1H6.008v5.62c3.864-.006 7.737.011 11.58-.009 1.02-.07 1.618-1.12 1.468-2.07v-2.51l-5.47-4.68v3.65zm-13.577 0c.02 1.44-.041 2.88.033 4.31.162.948 1.158 1.43 2.047 1.31h3.464v-5.62z" />
40
+ </svg>
Binary file
@@ -1,4 +1,4 @@
1
- import { r as GoogleMeetBrowserManualActionError, t as GOOGLE_MEET_BROWSER_NODE_ADAPTER } from "./google-meet-platform-constants-Bs5iAg3E.js";
1
+ import { r as GoogleMeetBrowserManualActionError, t as GOOGLE_MEET_BROWSER_NODE_ADAPTER } from "./google-meet-platform-constants-Bs5iAg3E.mjs";
2
2
  import { sleep } from "openclaw/plugin-sdk/runtime-env";
3
3
  import { asMeetingBrowserTabs, callMeetingBrowserProxyOnNode, readMeetingBrowserTab, resolveMeetingBrowserNode, resolveMeetingBrowserNodeInfo } from "openclaw/plugin-sdk/meeting-runtime";
4
4
  //#region extensions/google-meet/src/transports/chrome-browser-proxy.ts
@@ -1,7 +1,7 @@
1
- import { a as resolveGoogleMeetTokenFromParams, c as buildGoogleMeetPreflightReport, d as fetchGoogleMeetSpace, f as fetchLatestGoogleMeetConferenceRecord, i as resolveArtifactQueryFromParams, l as createGoogleMeetSpace, m as listGoogleMeetCalendarEvents, n as fetchResolvedGoogleMeetAttendance, o as resolveMeetingFromParams, p as buildGoogleMeetCalendarDayWindow, s as resolveSpaceFromParams, t as fetchResolvedGoogleMeetArtifacts, u as endGoogleMeetActiveConference } from "./plugin-helpers-RSH2DZTl.js";
2
- import { i as resolveGoogleMeetGatewayOperationTimeoutMs } from "./config-C-6enWkx.js";
3
- import { buildGoogleMeetAuthUrl, exchangeGoogleMeetAuthCode, resolveGoogleMeetAccessToken, waitForGoogleMeetAuthCode } from "./oauth-DgBscjXK.js";
4
- import { n as hasCreateSpaceConfigInput, r as resolveCreateSpaceConfig } from "./create-Cr6rg236.js";
1
+ import { a as resolveGoogleMeetTokenFromParams, c as buildGoogleMeetPreflightReport, d as fetchGoogleMeetSpace, f as fetchLatestGoogleMeetConferenceRecord, i as resolveArtifactQueryFromParams, l as createGoogleMeetSpace, m as listGoogleMeetCalendarEvents, n as fetchResolvedGoogleMeetAttendance, o as resolveMeetingFromParams, p as buildGoogleMeetCalendarDayWindow, s as resolveSpaceFromParams, t as fetchResolvedGoogleMeetArtifacts, u as endGoogleMeetActiveConference } from "./plugin-helpers--7X3icub.mjs";
2
+ import { i as resolveGoogleMeetGatewayOperationTimeoutMs } from "./config-C-6enWkx.mjs";
3
+ import { buildGoogleMeetAuthUrl, exchangeGoogleMeetAuthCode, resolveGoogleMeetAccessToken, waitForGoogleMeetAuthCode } from "./oauth-22Ey-zCb.mjs";
4
+ import { n as hasCreateSpaceConfigInput, r as resolveCreateSpaceConfig } from "./create-CG9Pgwsb.mjs";
5
5
  import { clampTimerTimeoutMs, parseStrictNonNegativeInteger, parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
6
6
  import { callGatewayFromCli, isGatewayClientRequestError, isGatewayTransportError } from "openclaw/plugin-sdk/gateway-runtime";
7
7
  import { generateHexPkceVerifierChallenge } from "openclaw/plugin-sdk/provider-auth";
@@ -254,53 +254,57 @@ function writeLeaveResult(sessionId, result) {
254
254
  }
255
255
  //#endregion
256
256
  //#region extensions/google-meet/src/cli-export.ts
257
- function writeArtifactsSummary(result) {
258
- if (result.input) writeStdoutLine("input: %s", result.input);
259
- if (result.space) writeStdoutLine("space: %s", result.space.name);
260
- writeStdoutLine("conference records: %d", result.conferenceRecords.length);
257
+ function renderArtifactsSummary(result) {
258
+ const lines = [];
259
+ if (result.input) lines.push(`input: ${result.input}`);
260
+ if (result.space) lines.push(`space: ${result.space.name}`);
261
+ lines.push(`conference records: ${result.conferenceRecords.length}`);
261
262
  for (const entry of result.artifacts) {
262
- writeStdoutLine("");
263
- writeStdoutLine("record: %s", entry.conferenceRecord.name);
264
- writeStdoutLine("started: %s", formatOptional(entry.conferenceRecord.startTime));
265
- writeStdoutLine("ended: %s", formatOptional(entry.conferenceRecord.endTime));
266
- writeStdoutLine("participants: %d", entry.participants.length);
267
- writeStdoutLine("recordings: %d", entry.recordings.length);
268
- writeStdoutLine("transcripts: %d", entry.transcripts.length);
269
- writeStdoutLine("transcript entries: %d", entry.transcriptEntries.reduce((count, transcript) => count + transcript.entries.length, 0));
270
- writeStdoutLine("smart notes: %d", entry.smartNotes.length);
271
- if (entry.smartNotesError) writeStdoutLine("smart notes warning: %s", entry.smartNotesError);
272
- for (const recording of entry.recordings) writeStdoutLine("- recording: %s", recording.name);
263
+ lines.push("");
264
+ lines.push(`record: ${entry.conferenceRecord.name}`);
265
+ lines.push(`started: ${formatOptional(entry.conferenceRecord.startTime)}`);
266
+ lines.push(`ended: ${formatOptional(entry.conferenceRecord.endTime)}`);
267
+ lines.push(`participants: ${entry.participants.length}`);
268
+ lines.push(`recordings: ${entry.recordings.length}`);
269
+ lines.push(`transcripts: ${entry.transcripts.length}`);
270
+ lines.push(`transcript entries: ${entry.transcriptEntries.reduce((count, transcript) => count + transcript.entries.length, 0)}`);
271
+ lines.push(`smart notes: ${entry.smartNotes.length}`);
272
+ if (entry.smartNotesError) lines.push(`smart notes warning: ${entry.smartNotesError}`);
273
+ for (const recording of entry.recordings) lines.push(`- recording: ${recording.name}`);
273
274
  for (const transcript of entry.transcripts) {
274
- writeStdoutLine("- transcript: %s", transcript.name);
275
- if (transcript.documentTextError) writeStdoutLine("- transcript document body warning: %s", transcript.documentTextError);
275
+ lines.push(`- transcript: ${transcript.name}`);
276
+ if (transcript.documentTextError) lines.push(`- transcript document body warning: ${transcript.documentTextError}`);
276
277
  }
277
- for (const transcriptEntries of entry.transcriptEntries) if (transcriptEntries.entriesError) writeStdoutLine("- transcript entries warning: %s: %s", transcriptEntries.transcript, transcriptEntries.entriesError);
278
+ for (const transcriptEntries of entry.transcriptEntries) if (transcriptEntries.entriesError) lines.push(`- transcript entries warning: ${transcriptEntries.transcript}: ${transcriptEntries.entriesError}`);
278
279
  for (const smartNote of entry.smartNotes) {
279
- writeStdoutLine("- smart note: %s", smartNote.name);
280
- if (smartNote.documentTextError) writeStdoutLine("- smart note document body warning: %s", smartNote.documentTextError);
280
+ lines.push(`- smart note: ${smartNote.name}`);
281
+ if (smartNote.documentTextError) lines.push(`- smart note document body warning: ${smartNote.documentTextError}`);
281
282
  }
282
283
  }
284
+ return `${lines.join("\n")}\n`;
283
285
  }
284
- function writeAttendanceSummary(result) {
285
- if (result.input) writeStdoutLine("input: %s", result.input);
286
- if (result.space) writeStdoutLine("space: %s", result.space.name);
287
- writeStdoutLine("conference records: %d", result.conferenceRecords.length);
288
- writeStdoutLine("attendance rows: %d", result.attendance.length);
286
+ function renderAttendanceSummary(result) {
287
+ const lines = [];
288
+ if (result.input) lines.push(`input: ${result.input}`);
289
+ if (result.space) lines.push(`space: ${result.space.name}`);
290
+ lines.push(`conference records: ${result.conferenceRecords.length}`);
291
+ lines.push(`attendance rows: ${result.attendance.length}`);
289
292
  for (const row of result.attendance) {
290
293
  const identity = row.displayName || row.user || row.participant;
291
- writeStdoutLine("");
292
- writeStdoutLine("participant: %s", identity);
293
- writeStdoutLine("record: %s", row.conferenceRecord);
294
- writeStdoutLine("resource: %s", row.participant);
295
- writeStdoutLine("participants merged: %d", row.participants?.length ?? 1);
296
- writeStdoutLine("first joined: %s", formatOptional(row.firstJoinTime ?? row.earliestStartTime));
297
- writeStdoutLine("last left: %s", formatOptional(row.lastLeaveTime ?? row.latestEndTime));
298
- writeStdoutLine("duration: %s", formatDuration(row.durationMs));
299
- writeStdoutLine("late: %s", row.late ? formatDuration(row.lateByMs) : "no");
300
- writeStdoutLine("early leave: %s", row.earlyLeave ? formatDuration(row.earlyLeaveByMs) : "no");
301
- writeStdoutLine("sessions: %d", row.sessions.length);
302
- for (const session of row.sessions) writeStdoutLine("- %s: %s -> %s", session.name, formatOptional(session.startTime), formatOptional(session.endTime));
294
+ lines.push("");
295
+ lines.push(`participant: ${identity}`);
296
+ lines.push(`record: ${row.conferenceRecord}`);
297
+ lines.push(`resource: ${row.participant}`);
298
+ lines.push(`participants merged: ${row.participants?.length ?? 1}`);
299
+ lines.push(`first joined: ${formatOptional(row.firstJoinTime ?? row.earliestStartTime)}`);
300
+ lines.push(`last left: ${formatOptional(row.lastLeaveTime ?? row.latestEndTime)}`);
301
+ lines.push(`duration: ${formatDuration(row.durationMs)}`);
302
+ lines.push(`late: ${row.late ? formatDuration(row.lateByMs) : "no"}`);
303
+ lines.push(`early leave: ${row.earlyLeave ? formatDuration(row.earlyLeaveByMs) : "no"}`);
304
+ lines.push(`sessions: ${row.sessions.length}`);
305
+ for (const session of row.sessions) lines.push(`- ${session.name}: ${formatOptional(session.startTime)} -> ${formatOptional(session.endTime)}`);
303
306
  }
307
+ return `${lines.join("\n")}\n`;
304
308
  }
305
309
  function writeLatestConferenceRecordSummary(result) {
306
310
  writeStdoutLine("input: %s", result.input);
@@ -666,42 +670,31 @@ function registerGoogleMeetArtifactCommands(context) {
666
670
  addGoogleMeetArtifactOptions(root.command("artifacts").description("List Meet conference records and available participant/artifact metadata")).option("--no-transcript-entries", "Skip structured transcript entry lookup").option("--include-doc-bodies", "Export linked transcript and smart-note Google Docs text").option("--format <format>", "Output format: summary or markdown", "summary").option("--output <path>", "Write output to a file instead of stdout").option("--json", "Print JSON output", false).action(async (options) => {
667
671
  const resolved = await resolveCliArtifactQuery(params, options);
668
672
  const result = await fetchResolvedGoogleMeetArtifacts(resolved);
669
- if (options.json) {
670
- await writeCliOutput(options, JSON.stringify({
671
- ...result,
672
- tokenSource: resolveTokenSource(resolved.token.refreshed)
673
- }, null, 2));
674
- return;
675
- }
676
- if (options.format === "markdown") {
677
- await writeCliOutput(options, renderArtifactsMarkdown(result));
678
- return;
679
- }
680
- if (options.format && options.format !== "summary") throw new Error("Unsupported format. Expected summary or markdown.");
681
- writeArtifactsSummary(result);
682
- writeStdoutLine("token source: %s", resolveTokenSource(resolved.token.refreshed));
673
+ const tokenSource = resolveTokenSource(resolved.token.refreshed);
674
+ let text;
675
+ if (options.json) text = JSON.stringify({
676
+ ...result,
677
+ tokenSource
678
+ }, null, 2);
679
+ else if (options.format === "markdown") text = renderArtifactsMarkdown(result);
680
+ else if (!options.format || options.format === "summary") text = `${renderArtifactsSummary(result)}token source: ${tokenSource}\n`;
681
+ else throw new Error("Unsupported format. Expected summary or markdown.");
682
+ await writeCliOutput(options, text);
683
683
  });
684
684
  addGoogleMeetArtifactOptions(root.command("attendance").description("List Meet participants and participant sessions")).option("--no-merge-duplicates", "Keep duplicate participant resources as separate rows").option("--late-after-minutes <n>", "Mark participants late after this many minutes", "5").option("--early-before-minutes <n>", "Mark early leavers before this many minutes", "5").option("--format <format>", "Output format: summary, markdown, or csv", "summary").option("--output <path>", "Write output to a file instead of stdout").option("--json", "Print JSON output", false).action(async (options) => {
685
685
  const resolved = await resolveCliArtifactQuery(params, options);
686
686
  const result = await fetchResolvedGoogleMeetAttendance(resolved);
687
- if (options.json) {
688
- await writeCliOutput(options, JSON.stringify({
689
- ...result,
690
- tokenSource: resolveTokenSource(resolved.token.refreshed)
691
- }, null, 2));
692
- return;
693
- }
694
- if (options.format === "markdown") {
695
- await writeCliOutput(options, renderAttendanceMarkdown(result));
696
- return;
697
- }
698
- if (options.format === "csv") {
699
- await writeCliOutput(options, renderAttendanceCsv(result));
700
- return;
701
- }
702
- if (options.format && options.format !== "summary") throw new Error("Unsupported format. Expected summary, markdown, or csv.");
703
- writeAttendanceSummary(result);
704
- writeStdoutLine("token source: %s", resolveTokenSource(resolved.token.refreshed));
687
+ const tokenSource = resolveTokenSource(resolved.token.refreshed);
688
+ let text;
689
+ if (options.json) text = JSON.stringify({
690
+ ...result,
691
+ tokenSource
692
+ }, null, 2);
693
+ else if (options.format === "markdown") text = renderAttendanceMarkdown(result);
694
+ else if (options.format === "csv") text = renderAttendanceCsv(result);
695
+ else if (!options.format || options.format === "summary") text = `${renderAttendanceSummary(result)}token source: ${tokenSource}\n`;
696
+ else throw new Error("Unsupported format. Expected summary, markdown, or csv.");
697
+ await writeCliOutput(options, text);
705
698
  });
706
699
  addGoogleMeetArtifactOptions(root.command("export").description("Write Meet artifacts, attendance, transcript, and raw JSON into a folder")).option("--no-transcript-entries", "Skip structured transcript entry lookup").option("--include-doc-bodies", "Export linked transcript and smart-note Google Docs text").option("--no-merge-duplicates", "Keep duplicate participant resources as separate rows").option("--late-after-minutes <n>", "Mark participants late after this many minutes", "5").option("--early-before-minutes <n>", "Mark early leavers before this many minutes", "5").option("--output <dir>", "Output directory").option("--zip", "Also write a portable .zip archive").option("--dry-run", "Fetch export data and print the manifest without writing files", false).option("--json", "Print JSON output", false).action(async (options) => {
707
700
  const resolved = await resolveCliArtifactQuery(params, options);
@@ -1040,13 +1033,7 @@ function registerGoogleMeetLifecycleCommands(context) {
1040
1033
  method: "googlemeet.leave",
1041
1034
  payload: { sessionId }
1042
1035
  });
1043
- if (delegated.ok) {
1044
- const result = delegated.payload;
1045
- if (!result.found) throw new Error("session not found");
1046
- writeLeaveResult(sessionId, result);
1047
- return;
1048
- }
1049
- const result = await (await params.ensureRuntime()).leave(sessionId);
1036
+ const result = delegated.ok ? delegated.payload : await (await params.ensureRuntime()).leave(sessionId);
1050
1037
  if (!result.found) throw new Error("session not found");
1051
1038
  writeLeaveResult(sessionId, result);
1052
1039
  });
@@ -1059,14 +1046,7 @@ function registerGoogleMeetLifecycleCommands(context) {
1059
1046
  message
1060
1047
  }
1061
1048
  });
1062
- if (delegated.ok) {
1063
- const result = delegated.payload;
1064
- if (!result.found) throw new Error("session not found");
1065
- if (!result.spoken) throw new Error(result.session?.chrome?.health?.speechBlockedMessage ?? "session has no active realtime audio bridge");
1066
- writeStdoutLine("speaking on %s", sessionId);
1067
- return;
1068
- }
1069
- const result = await (await params.ensureRuntime()).speak(sessionId, message);
1049
+ const result = delegated.ok ? delegated.payload : await (await params.ensureRuntime()).speak(sessionId, message);
1070
1050
  if (!result.found) throw new Error("session not found");
1071
1051
  if (!result.spoken) throw new Error(result.session?.chrome?.health?.speechBlockedMessage ?? "session has no active realtime audio bridge");
1072
1052
  writeStdoutLine("speaking on %s", sessionId);
@@ -1,6 +1,6 @@
1
- import { h as __exportAll, l as createGoogleMeetSpace } from "./plugin-helpers-RSH2DZTl.js";
2
- import { resolveGoogleMeetAccessToken } from "./oauth-DgBscjXK.js";
3
- import { t as createMeetWithBrowserProxyOnNode } from "./chrome-create-PKAyxCiL.js";
1
+ import { h as __exportAll, l as createGoogleMeetSpace } from "./plugin-helpers--7X3icub.mjs";
2
+ import { resolveGoogleMeetAccessToken } from "./oauth-22Ey-zCb.mjs";
3
+ import { t as createMeetWithBrowserProxyOnNode } from "./chrome-create-BZRBHJp9.mjs";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  //#region extensions/google-meet/src/create.ts
6
6
  var create_exports = /* @__PURE__ */ __exportAll({
@@ -1,14 +1,28 @@
1
- import { n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.js";
2
- import { t as normalizeMeetUrl } from "./meet-url-BP2Jlvjs.js";
3
- import { a as isSameMeetUrlForReuse, i as isRecoverableMeetTab, n as forceMeetEnglishUi, o as normalizeMeetUrlForReuse, r as isEnglishMeetTab, s as readMeetAuthUser, t as createMeetWithBrowserProxyOnNode } from "./chrome-create-PKAyxCiL.js";
1
+ import { n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.mjs";
2
+ import { t as normalizeMeetUrl } from "./meet-url-BP2Jlvjs.mjs";
3
+ import { a as isSameMeetUrlForReuse, i as isRecoverableMeetTab, n as forceMeetEnglishUi, o as normalizeMeetUrlForReuse, r as isEnglishMeetTab, s as readMeetAuthUser, t as createMeetWithBrowserProxyOnNode } from "./chrome-create-BZRBHJp9.mjs";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
6
6
  import { MeetingPlatformAdapter } from "openclaw/plugin-sdk/meeting-runtime";
7
+ import { createMeetingBrowserAudioCaptureSource } from "openclaw/plugin-sdk/meeting-page-script-runtime";
7
8
  //#region extensions/google-meet/src/transports/types.ts
8
9
  const GOOGLE_MEET_TRANSCRIPT_MAX_LINES = 2e3;
9
10
  //#endregion
10
11
  //#region extensions/google-meet/src/transports/google-meet-page-scripts.ts
11
12
  const GOOGLE_MEET_CAPTION_SETTLE_MS = 1e3;
13
+ function meetAudioCaptureScript(params) {
14
+ return createMeetingBrowserAudioCaptureSource({
15
+ ...params,
16
+ ownershipSource: `
17
+ const expectedUrl = ${JSON.stringify(normalizeMeetUrlForReuse(params.meetingUrl))};
18
+ const currentUrl = new URL(location.href);
19
+ return Boolean(expectedUrl && window.__openclawMeetAudioSession === sessionId &&
20
+ currentUrl.origin + currentUrl.pathname.toLowerCase().replace(/[/]$/, "") === expectedUrl &&
21
+ [...document.querySelectorAll("button")].some((button) =>
22
+ /leave call/i.test(button.getAttribute("aria-label") || button.textContent || "")));
23
+ `
24
+ });
25
+ }
12
26
  function meetStatusScript(params) {
13
27
  return `async () => {
14
28
  const text = (node) => (node?.innerText || node?.textContent || "").trim();
@@ -256,7 +270,21 @@ function meetStatusScript(params) {
256
270
  : null;
257
271
  if (join) join.click();
258
272
  const inCall = buttons().some((button) => /leave call/i.test(button.getAttribute('aria-label') || text(button)));
273
+ if (!readOnly && inCall && captionSessionId) {
274
+ const activeCapture = window.__openclawMeetingRemoteAudio;
275
+ if (activeCapture && activeCapture.sessionId !== captionSessionId) {
276
+ return JSON.stringify({ inCall: false, manualAction: manualActionFor("meet-session-conflict", "This Meet tab belongs to another active audio session."), url: location.href, notes });
277
+ }
278
+ window.__openclawMeetAudioSession = captionSessionId;
279
+ }
259
280
  const routeMeetAudioOutput = async () => {
281
+ const remoteCapture = window.__openclawMeetingRemoteAudio;
282
+ if (remoteCapture && remoteCapture.sessionId === captionSessionId && remoteCapture.isCurrent()) {
283
+ if (!readOnly) remoteCapture.scan();
284
+ audioOutputRouted = remoteCapture.isCurrent();
285
+ audioOutputDeviceLabel = "Isolated browser playback";
286
+ return;
287
+ }
260
288
  if (
261
289
  !allowMicrophone ||
262
290
  typeof navigator === 'undefined' ||
@@ -733,6 +761,7 @@ const GOOGLE_MEET_PLATFORM_ADAPTER = MeetingPlatformAdapter.create({
733
761
  }
734
762
  },
735
763
  browser: {
764
+ buildAudioCaptureScript: meetAudioCaptureScript,
736
765
  allowsMicrophone: MeetingPlatformAdapter.isTalkBackMode,
737
766
  buildStatusJoinScript: (params) => meetStatusScript({
738
767
  allowMicrophone: MeetingPlatformAdapter.isTalkBackMode(params.mode),
@@ -1,6 +1,6 @@
1
- import { n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.js";
2
- import { n as DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND, t as DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND } from "./config-C-6enWkx.js";
3
- import { t as GOOGLE_MEET_PLATFORM_ADAPTER } from "./google-meet-platform-adapter-C3J-iFRE.js";
1
+ import { n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.mjs";
2
+ import { n as DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND, t as DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND } from "./config-C-6enWkx.mjs";
3
+ import { t as GOOGLE_MEET_PLATFORM_ADAPTER } from "./google-meet-platform-adapter-DQZ74Kd5.mjs";
4
4
  import { MeetingPlatformAdapter } from "openclaw/plugin-sdk/meeting-runtime";
5
5
  //#region extensions/google-meet/src/node-host.ts
6
6
  function normalizeMeetKey(value) {
@@ -13,7 +13,7 @@ function normalizeMeetKey(value) {
13
13
  return value;
14
14
  }
15
15
  }
16
- const googleMeetNodeHost = MeetingPlatformAdapter.createNodeHostHandler({
16
+ const handleGoogleMeetNodeHostCommand = MeetingPlatformAdapter.createNodeHostHandler({
17
17
  commandName: GOOGLE_MEET_NODE_COMMAND,
18
18
  displayName: "Google Meet",
19
19
  browserLabel: "Meet",
@@ -42,8 +42,5 @@ const googleMeetNodeHost = MeetingPlatformAdapter.createNodeHostHandler({
42
42
  openedNotes: ["Browser page control is handled by OpenClaw browser automation when using chrome-node."]
43
43
  }
44
44
  });
45
- async function handleGoogleMeetNodeHostCommand(paramsJSON) {
46
- return await googleMeetNodeHost(paramsJSON);
47
- }
48
45
  //#endregion
49
46
  export { handleGoogleMeetNodeHostCommand };
@@ -1,5 +1,5 @@
1
- import { n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.js";
2
- import { t as GOOGLE_MEET_PLATFORM_ADAPTER } from "./google-meet-platform-adapter-C3J-iFRE.js";
1
+ import { n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.mjs";
2
+ import { t as GOOGLE_MEET_PLATFORM_ADAPTER } from "./google-meet-platform-adapter-DQZ74Kd5.mjs";
3
3
  import { createMeetingBrowserNodeInvokePolicy } from "openclaw/plugin-sdk/meeting-runtime";
4
4
  //#region extensions/google-meet/src/node-invoke-policy.ts
5
5
  const GOOGLE_MEET_CHROME_NODE_COMMAND = GOOGLE_MEET_NODE_COMMAND;
@@ -1,4 +1,4 @@
1
- import { n as readGoogleApiErrorDetail } from "./google-api-errors-BDYXfKRa.js";
1
+ import { n as readGoogleApiErrorDetail } from "./google-api-errors-BDYXfKRa.mjs";
2
2
  import { MAX_DATE_TIMESTAMP_MS, resolveDateTimestampMs, resolveExpiresAtMsFromDurationSeconds } from "openclaw/plugin-sdk/number-runtime";
3
3
  import { parseOAuthCallbackInput, waitForLocalOAuthCallback } from "openclaw/plugin-sdk/provider-auth-runtime";
4
4
  import { readProviderJsonResponse } from "openclaw/plugin-sdk/provider-http";
@@ -1,6 +1,6 @@
1
- import { c as loadGoogleMeetCliModule, p as resolveMeetingInput } from "./plugin-registration-DLs9YDzZ.js";
2
- import { t as googleApiError } from "./google-api-errors-BDYXfKRa.js";
3
- import { t as normalizeMeetUrl } from "./meet-url-BP2Jlvjs.js";
1
+ import { c as loadGoogleMeetCliModule, p as resolveMeetingInput } from "./plugin-registration-B3LXKV4R.mjs";
2
+ import { t as googleApiError } from "./google-api-errors-BDYXfKRa.mjs";
3
+ import { t as normalizeMeetUrl } from "./meet-url-BP2Jlvjs.mjs";
4
4
  import { normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
6
6
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
@@ -773,7 +773,7 @@ var plugin_helpers_exports = /* @__PURE__ */ __exportAll({
773
773
  resolveMeetingFromParams: () => resolveMeetingFromParams,
774
774
  resolveSpaceFromParams: () => resolveSpaceFromParams
775
775
  });
776
- const loadGoogleMeetCreateModule = createLazyRuntimeModule(() => import("./create-Cr6rg236.js").then((n) => n.t));
776
+ const loadGoogleMeetCreateModule = createLazyRuntimeModule(() => import("./create-CG9Pgwsb.mjs").then((n) => n.t));
777
777
  async function createMeetFromParams(params) {
778
778
  return (await loadGoogleMeetCreateModule()).createMeetFromParams(params);
779
779
  }
@@ -781,7 +781,7 @@ async function createAndJoinMeetFromParams(params) {
781
781
  return (await loadGoogleMeetCreateModule()).createAndJoinMeetFromParams(params);
782
782
  }
783
783
  async function resolveGoogleMeetTokenFromParams(config, raw) {
784
- const { resolveGoogleMeetAccessToken } = await import("./oauth-DgBscjXK.js");
784
+ const { resolveGoogleMeetAccessToken } = await import("./oauth-22Ey-zCb.mjs");
785
785
  return resolveGoogleMeetAccessToken({
786
786
  clientId: normalizeOptionalString(raw.clientId) ?? config.oauth.clientId,
787
787
  clientSecret: normalizeOptionalString(raw.clientSecret) ?? config.oauth.clientSecret,
@@ -1,14 +1,14 @@
1
- import { i as isGoogleMeetBrowserManualActionError, n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.js";
2
- import { i as resolveGoogleMeetGatewayOperationTimeoutMs } from "./config-C-6enWkx.js";
1
+ import { i as isGoogleMeetBrowserManualActionError, n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.mjs";
2
+ import { i as resolveGoogleMeetGatewayOperationTimeoutMs } from "./config-C-6enWkx.mjs";
3
3
  import { asNonArrayRecord as asParamRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
5
5
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
6
6
  //#region extensions/google-meet/src/plugin-registration.ts
7
- const loadGoogleMeetPluginHelpers = createLazyRuntimeModule(() => import("./plugin-helpers-RSH2DZTl.js").then((n) => n.r));
8
- const loadGoogleMeetCliModule = createLazyRuntimeModule(() => import("./cli-BCUxht2Q.js"));
9
- const loadGoogleMeetNodeHostModule = createLazyRuntimeModule(() => import("./node-host-DS-lLN37.js"));
10
- const loadGoogleMeetRuntimeModule = createLazyRuntimeModule(() => import("./runtime-CXfjJvPN.js"));
11
- const loadGoogleMeetNodeInvokePolicyModule = createLazyRuntimeModule(() => import("./node-invoke-policy-B0gOlLJR.js"));
7
+ const loadGoogleMeetPluginHelpers = createLazyRuntimeModule(() => import("./plugin-helpers--7X3icub.mjs").then((n) => n.r));
8
+ const loadGoogleMeetCliModule = createLazyRuntimeModule(() => import("./cli-CbxqjjTC.mjs"));
9
+ const loadGoogleMeetNodeHostModule = createLazyRuntimeModule(() => import("./node-host-BUrsParx.mjs"));
10
+ const loadGoogleMeetRuntimeModule = createLazyRuntimeModule(() => import("./runtime-BuIZ5e3V.mjs"));
11
+ const loadGoogleMeetNodeInvokePolicyModule = createLazyRuntimeModule(() => import("./node-invoke-policy-hwXq9MfV.mjs"));
12
12
  const loadGoogleMeetGatewayRuntimeModule = createLazyRuntimeModule(() => import("openclaw/plugin-sdk/gateway-runtime"));
13
13
  const loadGoogleMeetNodeInvokePolicy = async (config) => (await loadGoogleMeetNodeInvokePolicyModule()).createGoogleMeetChromeNodeInvokePolicy(config);
14
14
  function normalizeTransport(value) {
@@ -83,15 +83,34 @@ function keepTrustedToolAgentId(raw, client) {
83
83
  } : rest;
84
84
  }
85
85
  function createGoogleMeetRuntimeAccessor(params) {
86
+ let transcriptsEnabled = params.api.config.transcripts?.enabled !== false;
87
+ let runtime;
86
88
  let runtimePromise;
89
+ params.api.registerService({
90
+ id: "google-meet-transcripts",
91
+ reload: { configPrefixes: ["transcripts.enabled"] },
92
+ start: ({ config }) => {
93
+ transcriptsEnabled = config.transcripts?.enabled !== false;
94
+ return runtime?.reconcileTranscriptPolicy(transcriptsEnabled);
95
+ },
96
+ stop: () => {
97
+ transcriptsEnabled = false;
98
+ return runtime?.reconcileTranscriptPolicy(false);
99
+ }
100
+ });
87
101
  return async () => {
88
102
  if (!params.config.enabled) throw new Error("Google Meet plugin disabled in plugin config");
89
- return await (runtimePromise ?? (runtimePromise = loadGoogleMeetRuntimeModule().then(({ GoogleMeetRuntime: Runtime }) => new Runtime({
90
- config: params.config,
91
- fullConfig: params.api.config,
92
- runtime: params.api.runtime,
93
- logger: params.api.logger
94
- }))));
103
+ runtimePromise ??= loadGoogleMeetRuntimeModule().then(async ({ GoogleMeetRuntime: Runtime }) => {
104
+ runtime = new Runtime({
105
+ config: params.config,
106
+ fullConfig: params.api.config,
107
+ runtime: params.api.runtime,
108
+ logger: params.api.logger
109
+ });
110
+ await runtime.reconcileTranscriptPolicy(transcriptsEnabled);
111
+ return runtime;
112
+ });
113
+ return await runtimePromise;
95
114
  };
96
115
  }
97
116
  function createLazyGoogleMeetNodeInvokePolicy(config, loadPolicy = loadGoogleMeetNodeInvokePolicy) {
@@ -1,7 +1,7 @@
1
- import { n as GOOGLE_MEET_NODE_COMMAND, t as GOOGLE_MEET_BROWSER_NODE_ADAPTER } from "./google-meet-platform-constants-Bs5iAg3E.js";
2
- import { t as normalizeMeetUrl } from "./meet-url-BP2Jlvjs.js";
3
- import { c as callBrowserProxyOnNode, l as resolveChromeNode, u as resolveChromeNodeInfo } from "./chrome-create-PKAyxCiL.js";
4
- import { n as normalizeDialInNumber, t as GOOGLE_MEET_PLATFORM_ADAPTER } from "./google-meet-platform-adapter-C3J-iFRE.js";
1
+ import { n as GOOGLE_MEET_NODE_COMMAND, t as GOOGLE_MEET_BROWSER_NODE_ADAPTER } from "./google-meet-platform-constants-Bs5iAg3E.mjs";
2
+ import { t as normalizeMeetUrl } from "./meet-url-BP2Jlvjs.mjs";
3
+ import { c as callBrowserProxyOnNode, l as resolveChromeNode, u as resolveChromeNodeInfo } from "./chrome-create-BZRBHJp9.mjs";
4
+ import { n as normalizeDialInNumber, t as GOOGLE_MEET_PLATFORM_ADAPTER } from "./google-meet-platform-adapter-DQZ74Kd5.mjs";
5
5
  import { asOptionalRecord, asRecord, normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
7
7
  import { GatewayClient, startGatewayClientWhenEventLoopReady } from "openclaw/plugin-sdk/gateway-runtime";
@@ -482,6 +482,9 @@ var GoogleMeetRuntime = class {
482
482
  #createdBrowserTabs;
483
483
  #voiceCallGateway;
484
484
  #sessions;
485
+ reconcileTranscriptPolicy(enabled) {
486
+ return this.#sessions.reconcileTranscriptPolicy(enabled);
487
+ }
485
488
  constructor(params) {
486
489
  this.params = params;
487
490
  this.#createdBrowserTabs = /* @__PURE__ */ new Map();
@@ -561,6 +564,7 @@ var GoogleMeetRuntime = class {
561
564
  speakViaTransport: async (session, instructions) => await this.#speakViaTransport(session, instructions),
562
565
  durableTranscripts: {
563
566
  config: params.fullConfig.transcripts,
567
+ openclawConfig: params.fullConfig,
564
568
  providerId: "google-meet",
565
569
  providerName: "Google Meet"
566
570
  }
@@ -1,4 +1,4 @@
1
- import { t as GOOGLE_MEET_CLI_DESCRIPTOR } from "./cli-output-mode-BwH_6tH8.js";
1
+ import { t as GOOGLE_MEET_CLI_DESCRIPTOR } from "./.setup/cli-output-mode-BwH_6tH8.mjs";
2
2
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
3
3
  //#region extensions/google-meet/cli-metadata.ts
4
4
  var cli_metadata_default = definePluginEntry({
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { t as GOOGLE_MEET_CLI_DESCRIPTOR } from "./cli-output-mode-BwH_6tH8.js";
2
- import { n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.js";
3
- import { r as resolveGoogleMeetConfig } from "./config-C-6enWkx.js";
4
- import { a as createLazyGoogleMeetNodeInvokePolicy, c as loadGoogleMeetCliModule, d as normalizeMode, f as normalizeTransport, h as shouldJoinCreatedMeet, i as createGoogleMeetRuntimeAccessor, l as loadGoogleMeetNodeHostModule, m as sendGoogleMeetGatewayError, n as assertGoogleMeetAgentToolActionSupported, o as formatGoogleMeetGatewayError, p as resolveMeetingInput, r as callGoogleMeetGatewayFromTool, s as keepTrustedToolAgentId, t as asParamRecord, u as loadGoogleMeetPluginHelpers } from "./plugin-registration-DLs9YDzZ.js";
1
+ import { t as GOOGLE_MEET_CLI_DESCRIPTOR } from "./.setup/cli-output-mode-BwH_6tH8.mjs";
2
+ import { n as GOOGLE_MEET_NODE_COMMAND } from "./.setup/google-meet-platform-constants-Bs5iAg3E.mjs";
3
+ import { r as resolveGoogleMeetConfig } from "./.setup/config-C-6enWkx.mjs";
4
+ import { a as createLazyGoogleMeetNodeInvokePolicy, c as loadGoogleMeetCliModule, d as normalizeMode, f as normalizeTransport, h as shouldJoinCreatedMeet, i as createGoogleMeetRuntimeAccessor, l as loadGoogleMeetNodeHostModule, m as sendGoogleMeetGatewayError, n as assertGoogleMeetAgentToolActionSupported, o as formatGoogleMeetGatewayError, p as resolveMeetingInput, r as callGoogleMeetGatewayFromTool, s as keepTrustedToolAgentId, t as asParamRecord, u as loadGoogleMeetPluginHelpers } from "./.setup/plugin-registration-B3LXKV4R.mjs";
5
5
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
6
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { jsonResult } from "openclaw/plugin-sdk/tool-results";
@@ -357,11 +357,16 @@ var google_meet_default = definePluginEntry({
357
357
  }
358
358
  }
359
359
  }), { name: "google_meet" });
360
+ let nodeHost;
360
361
  api.registerNodeHostCommand({
361
362
  command: GOOGLE_MEET_NODE_COMMAND,
362
363
  cap: "google-meet",
363
364
  dangerous: true,
364
- handle: async (paramsJSON) => await (await loadGoogleMeetNodeHostModule()).handleGoogleMeetNodeHostCommand(paramsJSON)
365
+ hasActiveWork: () => nodeHost?.handleGoogleMeetNodeHostCommand.hasActiveWork() ?? false,
366
+ handle: async (paramsJSON) => {
367
+ nodeHost ??= await loadGoogleMeetNodeHostModule();
368
+ return await nodeHost.handleGoogleMeetNodeHostCommand(paramsJSON);
369
+ }
365
370
  });
366
371
  api.registerNodeInvokePolicy(createLazyGoogleMeetNodeInvokePolicy(config));
367
372
  api.registerCli(async ({ program }) => {
@@ -0,0 +1 @@
1
+ github: Stuk
@@ -0,0 +1,23 @@
1
+ name: Set up workspace
2
+ description: Sets up the workspace by installing Node.js and dependencies.
3
+
4
+ inputs:
5
+ node-version:
6
+ description: The Node.js version to install.
7
+ required: false
8
+ default: "lts/*"
9
+
10
+ runs:
11
+ using: composite
12
+ steps:
13
+ - name: Install Node.js
14
+ uses: actions/setup-node@v4
15
+ with:
16
+ node-version: ${{ inputs.node-version }}
17
+ cache: npm
18
+
19
+ - name: Install dependencies
20
+ # Because the lockfile is not compatible between all supported Node.js versions we need to run `npm install`.
21
+ # When support for older versions of Node.js is dropped, this can be changed to `npm ci`.
22
+ run: npm install
23
+ shell: bash
@@ -0,0 +1,38 @@
1
+ name: Benchmark
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ jobs:
6
+ benchmark:
7
+ name: Run benchmark
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - name: Checkout repository
11
+ uses: actions/checkout@v4
12
+
13
+ - name: Set up workspace
14
+ uses: ./.github/actions/setup
15
+
16
+ - name: Install browsers
17
+ run: npx playwright install --with-deps
18
+
19
+ - name: Run benchmark
20
+ run: npm run benchmark | tee benchmark.txt
21
+
22
+ - name: Download previous benchmark data
23
+ uses: actions/cache@v4
24
+ with:
25
+ path: ./cache
26
+ key: ${{ runner.os }}-benchmark
27
+
28
+ - name: Store benchmark result
29
+ uses: benchmark-action/github-action-benchmark@v1
30
+ with:
31
+ tool: benchmarkjs
32
+ output-file-path: benchmark.txt
33
+ external-data-json-path: ./cache/benchmark-data.json
34
+ github-token: ${{ secrets.GITHUB_TOKEN }}
35
+ alert-threshold: 150%
36
+ comment-on-alert: true
37
+ fail-on-alert: true
38
+ alert-comment-cc-users: "@Stuk"