@jmfederico/pi-web 1.202608.2 → 1.202609.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 (233) hide show
  1. package/README.md +3 -3
  2. package/dist/.plugins-ready +1 -0
  3. package/dist/cli.js +5 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client/apple-touch-icon-dev.png +0 -0
  6. package/dist/client/assets/index-AroYaCLx.js +4130 -0
  7. package/dist/client/assets/vendor-editor-core-YWog6mAR.js +10 -0
  8. package/dist/client/assets/vendor-editor-languages-DOCw3vc9.js +28 -0
  9. package/dist/client/favicon-dev.svg +8 -0
  10. package/dist/client/index.html +5 -5
  11. package/dist/client/pwa-icon-dev-192.png +0 -0
  12. package/dist/client/pwa-icon-dev-512.png +0 -0
  13. package/dist/config.js +20 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/docker/piWebDockerCommandPlan.js +9 -1
  16. package/dist/docker/piWebDockerCommandPlan.js.map +1 -1
  17. package/dist/nativeServices/installedServiceDefinitions.js +25 -19
  18. package/dist/nativeServices/installedServiceDefinitions.js.map +1 -1
  19. package/dist/nativeServices/serviceAction.js +38 -26
  20. package/dist/nativeServices/serviceAction.js.map +1 -1
  21. package/dist/nativeServices/servicePlan.js +3 -3
  22. package/dist/nativeServices/servicePlan.js.map +1 -1
  23. package/dist/pi-packages/captains-log/README.md +11 -0
  24. package/dist/pi-packages/captains-log/dist/browser/channelProtocol.js +29 -0
  25. package/dist/pi-packages/captains-log/dist/browser/index.js +144 -0
  26. package/dist/pi-packages/captains-log/dist/browser/markdown.js +67 -0
  27. package/dist/pi-packages/captains-log/dist/browser/panel.js +105 -0
  28. package/dist/pi-packages/captains-log/dist/browser/protocol.js +26 -0
  29. package/dist/pi-packages/captains-log/dist/companion.js +126 -0
  30. package/dist/pi-packages/captains-log/dist/roundtrip.js +62 -0
  31. package/dist/pi-packages/captains-log/dist/server.js +210 -0
  32. package/dist/pi-packages/captains-log/dist/store.js +75 -0
  33. package/dist/pi-packages/captains-log/docs/usage.md +30 -0
  34. package/dist/pi-packages/captains-log/package.json +35 -0
  35. package/dist/pi-packages/captains-log/tsconfig.json +21 -0
  36. package/dist/pi-packages/captains-log/vite.config.mjs +28 -0
  37. package/dist/pi-packages/relays/package.json +1 -1
  38. package/dist/pi-packages/relays/pi-web-plugin.js +1 -1
  39. package/dist/pi-packages/relays/prompts/relay-worktree.md +13 -142
  40. package/dist/pi-packages/relays/prompts/relay.md +25 -132
  41. package/dist/pi-packages/relays/relayDiscovery.js +2 -2
  42. package/dist/pi-packages/relays/relaysPanelElement.js +1 -1
  43. package/dist/pi-packages/relays/skills/relay/SKILL.md +59 -88
  44. package/dist/pi-packages/relays/skills/relay-runner/SKILL.md +253 -0
  45. package/dist/pi-web-plugins/files/browser/assets/files-icon-DZObYhxb.svg +3 -0
  46. package/dist/pi-web-plugins/files/browser/pi-web-plugin.js +439 -0
  47. package/dist/pi-web-plugins/files/package.json +15 -0
  48. package/dist/pi-web-plugins/git/browser/git-panel.js +54 -24
  49. package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +1 -1
  50. package/dist/pi-web-plugins/git/git-backend.js +5 -5
  51. package/dist/pi-web-plugins/git/server-plugin.js +5 -3
  52. package/dist/pi-web-plugins/info/pi-web-plugin.js +1 -1
  53. package/dist/pi-web-plugins/mermaid/browser/mermaid-engine.js +3590 -0
  54. package/dist/pi-web-plugins/mermaid/browser/pi-web-plugin.js +6 -0
  55. package/dist/pi-web-plugins/mermaid/package.json +13 -0
  56. package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +210 -0
  57. package/dist/pi-web-plugins/terminal/package.json +16 -0
  58. package/dist/pi-web-plugins/terminal/server-plugin.js +365 -0
  59. package/dist/{server/terminals → pi-web-plugins/terminal}/terminalService.js +162 -65
  60. package/dist/pi-web-plugins/updates/pi-web-plugin.js +45 -35
  61. package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +1 -1
  62. package/dist/piWebVersionReport.js +12 -4
  63. package/dist/piWebVersionReport.js.map +1 -1
  64. package/dist/plugin-api.d.ts +222 -23
  65. package/dist/plugin-api.js +1 -0
  66. package/dist/pluginRecoveryCli.js +3 -2
  67. package/dist/pluginRecoveryCli.js.map +1 -1
  68. package/dist/server/activity/workspaceActivityService.js.map +1 -1
  69. package/dist/server/app.js +33 -12
  70. package/dist/server/app.js.map +1 -1
  71. package/dist/server/configRoutes.js +6 -1
  72. package/dist/server/configRoutes.js.map +1 -1
  73. package/dist/server/deploymentIdentity.js +67 -0
  74. package/dist/server/deploymentIdentity.js.map +1 -0
  75. package/dist/server/deploymentIdentityRoutes.js +22 -0
  76. package/dist/server/deploymentIdentityRoutes.js.map +1 -0
  77. package/dist/server/knownAutoInstallPiPackages.js +1 -1
  78. package/dist/server/knownAutoInstallPiPackages.js.map +1 -1
  79. package/dist/server/knownPiPackages.js +12 -0
  80. package/dist/server/knownPiPackages.js.map +1 -0
  81. package/dist/server/machines/machineClient.js +2 -2
  82. package/dist/server/machines/machineClient.js.map +1 -1
  83. package/dist/server/machines/machinePluginProxyRoutes.js +53 -11
  84. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
  85. package/dist/server/machines/machineProxyRoutes.js +70 -7
  86. package/dist/server/machines/machineProxyRoutes.js.map +1 -1
  87. package/dist/server/notices/serverNoticeRoutes.js +34 -0
  88. package/dist/server/notices/serverNoticeRoutes.js.map +1 -0
  89. package/dist/server/notices/serverNoticeService.js +26 -0
  90. package/dist/server/notices/serverNoticeService.js.map +1 -0
  91. package/dist/server/notices/serverNoticeStore.js +119 -0
  92. package/dist/server/notices/serverNoticeStore.js.map +1 -0
  93. package/dist/server/piPackageService.js +5 -5
  94. package/dist/server/piPackageService.js.map +1 -1
  95. package/dist/server/piWebPluginCatalog.js +46 -12
  96. package/dist/server/piWebPluginCatalog.js.map +1 -1
  97. package/dist/server/piWebPluginLifecycle.js +26 -3
  98. package/dist/server/piWebPluginLifecycle.js.map +1 -1
  99. package/dist/server/piWebPluginService.js +37 -2
  100. package/dist/server/piWebPluginService.js.map +1 -1
  101. package/dist/server/piWebStatus.js +1 -1
  102. package/dist/server/piWebStatus.js.map +1 -1
  103. package/dist/server/pluginCallbackDrain.js +35 -0
  104. package/dist/server/pluginCallbackDrain.js.map +1 -0
  105. package/dist/server/plugins/pluginBackendChannelProxyAdmission.js +84 -0
  106. package/dist/server/plugins/pluginBackendChannelProxyAdmission.js.map +1 -0
  107. package/dist/server/plugins/pluginBackendChannelProxyCoordinator.js +234 -0
  108. package/dist/server/plugins/pluginBackendChannelProxyCoordinator.js.map +1 -0
  109. package/dist/server/plugins/pluginBackendChannelProxyRoutes.js +52 -0
  110. package/dist/server/plugins/pluginBackendChannelProxyRoutes.js.map +1 -0
  111. package/dist/server/plugins/pluginBackendProxyRoutes.js +38 -31
  112. package/dist/server/plugins/pluginBackendProxyRoutes.js.map +1 -1
  113. package/dist/server/plugins/pluginBackendRegistry.js +740 -0
  114. package/dist/server/plugins/pluginBackendRegistry.js.map +1 -0
  115. package/dist/server/plugins/serverPluginPiSessionEventsCapability.js +34 -0
  116. package/dist/server/plugins/serverPluginPiSessionEventsCapability.js.map +1 -0
  117. package/dist/server/plugins/serverPluginPiSessionsCapability.js +185 -0
  118. package/dist/server/plugins/serverPluginPiSessionsCapability.js.map +1 -0
  119. package/dist/server/plugins/serverPluginRuntime.js +1028 -107
  120. package/dist/server/plugins/serverPluginRuntime.js.map +1 -1
  121. package/dist/server/plugins/serverPluginWorkspacesCapability.js +114 -0
  122. package/dist/server/plugins/serverPluginWorkspacesCapability.js.map +1 -0
  123. package/dist/server/sessiond/pluginBackendChannelRoutes.js +393 -0
  124. package/dist/server/sessiond/pluginBackendChannelRoutes.js.map +1 -0
  125. package/dist/server/sessiond/pluginBackendRoutes.js +10 -7
  126. package/dist/server/sessiond/pluginBackendRoutes.js.map +1 -1
  127. package/dist/server/sessiond/sessionDaemonShutdown.js +9 -2
  128. package/dist/server/sessiond/sessionDaemonShutdown.js.map +1 -1
  129. package/dist/server/sessiond/sessionProxyRoutes.js +2 -0
  130. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
  131. package/dist/server/sessiond/sessionServiceDependencies.js +1 -0
  132. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
  133. package/dist/server/sessiond.js +82 -21
  134. package/dist/server/sessiond.js.map +1 -1
  135. package/dist/server/sessions/attachmentService.js +1 -5
  136. package/dist/server/sessions/attachmentService.js.map +1 -1
  137. package/dist/server/sessions/builtinCommands.js +2 -2
  138. package/dist/server/sessions/builtinCommands.js.map +1 -1
  139. package/dist/server/sessions/clientSessionPreview.js +14 -0
  140. package/dist/server/sessions/clientSessionPreview.js.map +1 -0
  141. package/dist/server/sessions/piSessionEventConnections.js +65 -0
  142. package/dist/server/sessions/piSessionEventConnections.js.map +1 -0
  143. package/dist/server/sessions/piSessionManagerGateway.js +171 -1
  144. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
  145. package/dist/server/sessions/piSessionService.js +442 -90
  146. package/dist/server/sessions/piSessionService.js.map +1 -1
  147. package/dist/server/sessions/sessionActivityMarker.js +105 -0
  148. package/dist/server/sessions/sessionActivityMarker.js.map +1 -0
  149. package/dist/server/sessions/sessionEnvironmentFacts.js +5 -4
  150. package/dist/server/sessions/sessionEnvironmentFacts.js.map +1 -1
  151. package/dist/server/sessions/sessionNameGenerator.js +3 -2
  152. package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
  153. package/dist/server/sessions/sessionRoutes.js +18 -0
  154. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  155. package/dist/server/sessions/spawnSessionTool.js +1 -1
  156. package/dist/server/sessions/spawnSessionTool.js.map +1 -1
  157. package/dist/server/sessions/spawnSubsessionTool.js +1 -1
  158. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
  159. package/dist/server/sessions/transcriptBranchCache.js +81 -0
  160. package/dist/server/sessions/transcriptBranchCache.js.map +1 -0
  161. package/dist/server/sessions/transcriptMessages.js +54 -0
  162. package/dist/server/sessions/transcriptMessages.js.map +1 -0
  163. package/dist/server/terminals/requiredTerminalService.js +103 -0
  164. package/dist/server/terminals/requiredTerminalService.js.map +1 -0
  165. package/dist/server/webSocketBridge.js +339 -0
  166. package/dist/server/webSocketBridge.js.map +1 -1
  167. package/dist/server/workspaces/projectPiWebConfig.js +6 -1
  168. package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
  169. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +23 -3
  170. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -1
  171. package/dist/server/workspaces/workspaceCatalog.js +3 -1
  172. package/dist/server/workspaces/workspaceCatalog.js.map +1 -1
  173. package/dist/server/workspaces/workspaceProviderRegistry.js +64 -149
  174. package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
  175. package/dist/server/workspaces/workspaceRemovalService.js +38 -5
  176. package/dist/server/workspaces/workspaceRemovalService.js.map +1 -1
  177. package/dist/server-plugin-api.d.ts +216 -22
  178. package/dist/server-plugin-api.js +319 -2
  179. package/dist/server-plugin-api.js.map +1 -1
  180. package/dist/serverPluginRecovery.js +4 -0
  181. package/dist/serverPluginRecovery.js.map +1 -1
  182. package/dist/sessiond/sessionDaemonClient.js +3 -3
  183. package/dist/sessiond/sessionDaemonClient.js.map +1 -1
  184. package/dist/shared/apiTypes.js +1 -1
  185. package/dist/shared/apiTypes.js.map +1 -1
  186. package/dist/shared/federatedRoutes.js +47 -17
  187. package/dist/shared/federatedRoutes.js.map +1 -1
  188. package/dist/shared/machinePluginIds.js +28 -7
  189. package/dist/shared/machinePluginIds.js.map +1 -1
  190. package/dist/shared/pluginApiTypes.d.ts +21 -1
  191. package/dist/shared/pluginApiTypes.js +0 -1
  192. package/dist/shared/pluginBackendProtocol.js +163 -2
  193. package/dist/shared/pluginBackendProtocol.js.map +1 -1
  194. package/dist/shared/pluginIds.js +8 -1
  195. package/dist/shared/pluginIds.js.map +1 -1
  196. package/dist/shared/requiredTerminalPlugin.js +6 -0
  197. package/dist/shared/requiredTerminalPlugin.js.map +1 -0
  198. package/dist/shared/serverNoticeContract.js +88 -0
  199. package/dist/shared/serverNoticeContract.js.map +1 -0
  200. package/dist/shared/sessionDefaults.js +41 -0
  201. package/dist/shared/sessionDefaults.js.map +1 -0
  202. package/docs/config.md +77 -37
  203. package/docs/plugins.md +146 -1213
  204. package/examples/session-bridge-plugin/README.md +20 -0
  205. package/examples/session-bridge-plugin/docs/usage.md +54 -0
  206. package/examples/session-bridge-plugin/package.json +26 -0
  207. package/examples/session-bridge-plugin/src/browser/index.ts +84 -0
  208. package/examples/session-bridge-plugin/src/browser/protocol.ts +24 -0
  209. package/examples/session-bridge-plugin/src/companion.ts +65 -0
  210. package/examples/session-bridge-plugin/src/reviewRun.ts +39 -0
  211. package/examples/session-bridge-plugin/src/server.ts +85 -0
  212. package/examples/session-bridge-plugin/src/store.ts +57 -0
  213. package/examples/session-bridge-plugin/tsconfig.json +21 -0
  214. package/examples/workspace-provider-plugin/README.md +4 -4
  215. package/examples/workspace-provider-plugin/package.json +1 -1
  216. package/examples/workspace-provider-plugin/src/browser/index.ts +9 -9
  217. package/examples/workspace-provider-plugin/src/server.ts +15 -11
  218. package/package.json +17 -11
  219. package/dist/client/assets/CodeViewer-BMWwxG7q.js +0 -4
  220. package/dist/client/assets/TerminalPanel-CacQDIYn.js +0 -187
  221. package/dist/client/assets/index-DUW2xnoV.js +0 -4279
  222. package/dist/client/assets/vendor-editor-core-CXO8gGab.js +0 -12
  223. package/dist/client/assets/vendor-editor-languages-CpW4sJsX.js +0 -46
  224. package/dist/client/assets/vendor-editor-legacy-CYBnW6ZU.js +0 -1
  225. package/dist/client/assets/vendor-terminal-BrP-ENHg.css +0 -1
  226. package/dist/client/assets/vendor-terminal-D8k4UKM2.js +0 -35
  227. package/dist/server/terminalProxyRoutes.js +0 -141
  228. package/dist/server/terminalProxyRoutes.js.map +0 -1
  229. package/dist/server/terminals/terminalRoutes.js +0 -155
  230. package/dist/server/terminals/terminalRoutes.js.map +0 -1
  231. package/dist/server/terminals/terminalService.js.map +0 -1
  232. package/dist/server/terminals/terminalSize.js +0 -17
  233. package/dist/server/terminals/terminalSize.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"servicePlan.js","sourceRoot":"","sources":["../../src/nativeServices/servicePlan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"servicePlan.js","sourceRoot":"","sources":["../../src/nativeServices/servicePlan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ # Captain's Log
2
+
3
+ Have a theatrical pirate captain retell the selected conversation's latest completed assistant reply, with nautical metaphors and humor while preserving the important facts. One button connects the browser, backend, and native Pi companion without changing the source conversation.
4
+
5
+ In **Settings → Pi packages → Available packages**, install **Captain's Log** on the target machine, then explicitly enable it in **Settings → PI WEB plugins**. The package ships prebuilt with PI WEB; no compilation is needed. For manual installation, use `pi install /absolute/path/to/dist/pi-packages/captains-log` with that machine's Pi profile.
6
+
7
+ Nothing in this package installs or enables itself. Activation of its server entry requires a **manual session-daemon restart when safe, from outside its hosted sessions**, followed by a browser reload. Restarts can interrupt active sessions. Existing sessions need `/reload` to load the native companion.
8
+
9
+ Select a conversation, open **Captain's Log** in the workspace tabs, and click **Let the Captain tell it**. The pirate conversation is reused while available, or created automatically. See [usage and recovery](docs/usage.md) for details. This is trusted agent code, not a read-only sandbox; requests use your configured model and may incur costs.
10
+
11
+ Maintainers: PI WEB's root `npm run build` emits the ready-to-install copy at `dist/pi-packages/captains-log/`. The package is not separately published to npm.
@@ -0,0 +1,29 @@
1
+ // Generated from pi-packages/captains-log/src/browser/channelProtocol.ts. Do not edit directly.
2
+ import { isLogEntry, UUID } from "./protocol.js";
3
+ /** Browser peer contract: open `log` with null; requests are only `list`/`read` snapshots. */
4
+ export const LOG_CHANNEL = "log";
5
+ export function isCaptainClientFrame(value) {
6
+ if (value === null || typeof value !== "object")
7
+ return false;
8
+ return "type" in value && value.type === "translate"
9
+ && "requestId" in value && typeof value.requestId === "string" && UUID.test(value.requestId)
10
+ && "sourceSessionId" in value && typeof value.sourceSessionId === "string" && !!value.sourceSessionId.trim() && value.sourceSessionId.length <= 512;
11
+ }
12
+ export function isCaptainServerFrame(value) {
13
+ if (value === null || typeof value !== "object" || !("type" in value))
14
+ return false;
15
+ switch (value.type) {
16
+ case "entry": return "entry" in value && isLogEntry(value.entry) && "saved" in value && typeof value.saved === "boolean";
17
+ case "text": return "id" in value && typeof value.id === "string" && UUID.test(value.id) && "text" in value && typeof value.text === "string" && value.text.length <= 4000;
18
+ case "admitted": return "requestId" in value && typeof value.requestId === "string" && UUID.test(value.requestId) && "id" in value && typeof value.id === "string" && UUID.test(value.id);
19
+ case "rejected": return "requestId" in value && typeof value.requestId === "string" && UUID.test(value.requestId) && "message" in value && typeof value.message === "string";
20
+ default: return false;
21
+ }
22
+ }
23
+ /** Reset text with each entry, then append bounded chunks. Even escaped Unicode fits host frames. */
24
+ export function entryFrames(entry, saved) {
25
+ const frames = [{ type: "entry", entry: { ...entry, stages: [...entry.stages], text: "" }, saved }];
26
+ for (let offset = 0; offset < entry.text.length; offset += 4000)
27
+ frames.push({ type: "text", id: entry.id, text: entry.text.slice(offset, offset + 4000) });
28
+ return frames;
29
+ }
@@ -0,0 +1,144 @@
1
+ var e=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;function t(t){return typeof t!=`object`||!t?!1:`id`in t&&typeof t.id==`string`&&e.test(t.id)&&`createdAt`in t&&typeof t.createdAt==`string`&&`sessionId`in t&&typeof t.sessionId==`string`&&t.sessionId.length<=512&&(!(`sourceSessionId`in t)||t.sourceSessionId===void 0||typeof t.sourceSessionId==`string`&&!!t.sourceSessionId.trim()&&t.sourceSessionId.length<=512)&&`question`in t&&typeof t.question==`string`&&t.question.length<=8e3&&`status`in t&&[`running`,`completed`,`failed`,`interrupted`].includes(String(t.status))&&(!(`failureCode`in t)||t.failureCode===void 0||typeof t.failureCode==`string`&&[`session-unavailable`,`request-failed`,`interrupted`].includes(t.failureCode))&&`stages`in t&&Array.isArray(t.stages)&&t.stages.length<=16&&t.stages.every(e=>typeof e==`string`&&e.length<=256)&&`text`in t&&typeof t.text==`string`&&t.text.length<=48e3}function n(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var r=n();function i(e){r=e}var a={exec:()=>null};function o(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function s(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(l.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var c=((e=``)=>{try{return!!RegExp(`(?<=1)(?<!1)`+e)}catch{return!1}})(),l={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,endingSpaceTabChar:/[ \t]$/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:o(e=>RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:o(e=>RegExp(`^ {0,${e}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:o(e=>RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:o(e=>RegExp(`^ {0,${e}}#`)),htmlBeginRegex:o(e=>RegExp(`^ {0,${e}}<(?:[a-z].*>|!--)`,`i`)),blockquoteBeginRegex:o(e=>RegExp(`^ {0,${e}}>`))},u=/^(?:[ \t]*(?:\n|$))+/,d=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,f=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,p=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,m=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,h=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,g=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ee=s(g).replace(/bull/g,h).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),te=s(g).replace(/bull/g,h).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),_=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,ne=/^[^\n]+/,v=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,re=s(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,v).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),ie=s(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,h).getRegex(),y=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,b=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,ae=s(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][a-z0-9-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,b).replace(`tag`,y).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),x=e=>s(_).replace(`hr`,p).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,e).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,y).getRegex(),oe=x(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),se=x(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),S={blockquote:s(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,se).getRegex(),code:d,def:re,fences:f,heading:m,hr:p,html:ae,lheading:ee,list:ie,newline:u,paragraph:oe,table:a,text:ne},ce=s(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,p).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,y).getRegex(),le={...S,lheading:te,table:ce,paragraph:s(_).replace(`hr`,p).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,ce).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,y).getRegex()},ue={...S,html:s(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,b).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:a,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:s(_).replace(`hr`,p).replace(`heading`,` *#{1,6} *[^
2
+ ]`).replace(`lheading`,ee).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},de=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,fe=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,pe=/^( {2,}|\\)\n(?!\s*$)/,me=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,C=/[\p{P}\p{S}]/u,w=/[\s\p{P}\p{S}]/u,T=/[^\s\p{P}\p{S}]/u,he=s(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,w).getRegex(),ge=/[\p{Pi}\p{Ps}"']/u,E=/(?!~)[\p{P}\p{S}]/u,_e=/(?!~)[\s\p{P}\p{S}]/u,ve=/(?:[^\s\p{P}\p{S}]|~)/u,ye=s(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,c?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),D=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,be=s(D,`u`).replace(/punct/g,C).getRegex(),xe=s(D,`u`).replace(/punct/g,E).getRegex(),Se=s(/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,`u`).replace(/openQuote/g,ge).replace(/punct/g,C).getRegex(),O=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Ce=s(O,`gu`).replace(/notPunctSpace/g,T).replace(/punctSpace/g,w).replace(/punct/g,C).getRegex(),we=s(O,`gu`).replace(/notPunctSpace/g,ve).replace(/punctSpace/g,_e).replace(/punct/g,E).getRegex(),Te=s(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,T).replace(/punctSpace/g,w).replace(/punct/g,C).getRegex(),Ee=s(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,T).replace(/punctSpace/g,w).replace(/punct/g,C).getRegex(),De=s(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,T).replace(/punctSpace/g,w).replace(/punct/g,C).getRegex(),Oe=s(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,C).getRegex(),ke=s(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,T).replace(/punctSpace/g,w).replace(/punct/g,C).getRegex(),Ae=s(/\\(punct)/,`gu`).replace(/punct/g,C).getRegex(),je=s(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Me=s(b).replace(`(?:-->|$)`,`-->`).getRegex(),Ne=s(`^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,Me).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),k=s(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace(`brackets`,/\[(?:\\[\s\S]|[^\[\]\\])*\]/).getRegex(),Pe=s(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,k).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),A=s(/^!?\[(label)\]\[(ref)\]/).replace(`label`,k).replace(`ref`,v).getRegex(),j=s(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,v).getRegex(),Fe=s(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,A).replace(`nolink`,j).getRegex(),M=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,N={_backpedal:a,anyPunctuation:Ae,autolink:je,blockSkip:ye,br:pe,code:fe,del:a,delLDelim:a,delRDelim:a,emStrongLDelim:be,emStrongRDelimAst:Ce,emStrongRDelimUnd:Ee,escape:de,link:Pe,nolink:j,punctuation:he,reflink:A,reflinkSearch:Fe,tag:Ne,text:me,url:a},Ie={...N,emStrongLDelim:Se,emStrongRDelimAst:Te,emStrongRDelimUnd:De,link:s(/^!?\[(label)\]\((.*?)\)/).replace(`label`,k).getRegex(),reflink:s(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,k).getRegex()},P={...N,emStrongRDelimAst:we,emStrongLDelim:xe,delLDelim:Oe,delRDelim:ke,url:s(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,M).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:s(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,M).getRegex()},Le={...P,br:s(pe).replace(`{2,}`,`*`).getRegex(),text:s(P.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},F={normal:S,gfm:le,pedantic:ue},I={normal:N,gfm:P,breaks:Le,pedantic:Ie},Re={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`},L=e=>Re[e];function R(e,t){if(t){if(l.escapeTest.test(e))return e.replace(l.escapeReplace,L)}else if(l.escapeTestNoEncode.test(e))return e.replace(l.escapeReplaceNoEncode,L);return e}function z(e){try{e=encodeURI(e).replace(l.percentDecode,`%`)}catch{return null}return e}function B(e,t){let n=e.replace(l.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(l.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t){if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``)}for(;r<n.length;r++)n[r]=n[r].trim().replace(l.slashPipe,`|`);return n}function V(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function H(e){let t=e.split(`
3
+ `),n=t.length-1;for(;n>=0&&l.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join(`
4
+ `)}function ze(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function Be(e,t=0){let n=t,r=``;for(let t of e)if(t===` `){let e=4-n%4;r+=` `.repeat(e),n+=e}else r+=t,n++;return r}function U(e,t,n,r,i){let a=t.href,o=t.title||null,s=e[1].replace(i.other.outputLinkReplace,`$1`),c=e[0].charAt(0)===`!`;r.state.inLink=!0;let l=r.state.linkEmitted,u=r.state.inRawBlock;r.state.linkEmitted=!1;let d=r.inlineTokens(s),f=r.state.linkEmitted;if(r.state.linkEmitted=l,r.state.inLink=!1,!c){if(f){r.state.inRawBlock=u;return}r.state.linkEmitted=!0}return{type:c?`image`:`link`,raw:n,href:a,title:o,text:s,tokens:d}}function Ve(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
5
+ `).map(e=>{let t=e.match(n.other.beginningSpace);if(t===null)return e;let[r]=t;return e.slice(Math.min(r.length,i.length))}).join(`
6
+ `)}var W=class{options;rules;lexer;constructor(e){this.options=e||r}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=this.options.pedantic?t[0]:H(t[0]);return{type:`code`,raw:e,codeBlockStyle:`indented`,text:e.replace(this.rules.other.codeRemoveIndent,``)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=Ve(e,t[3]||``,this.rules);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){let t=V(e,`#`);(this.options.pedantic||!t||this.rules.other.endingSpaceTabChar.test(t))&&(e=t.trim())}return{type:`heading`,raw:V(t[0],`
7
+ `),depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:V(t[0],`
8
+ `)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=V(t[0],`
9
+ `).split(`
10
+ `),n=``,r=``,i=[];for(;e.length>0;){let t=!1,a=[],o=0;for(;o<e.length;o++)if(this.rules.other.blockquoteStart.test(e[o]))a.push(e[o]),t=!0;else if(!t)a.push(e[o]);else break;e=e.slice(o);let s=a.join(`
11
+ `),c=s.replace(this.rules.other.blockquoteSetextReplace,`
12
+ $1`).replace(this.rules.other.blockquoteSetextReplace2,``);n=n?`${n}
13
+ ${s}`:s,r=r?`${r}
14
+ ${c}`:c;let l=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,i,!0),this.lexer.state.top=l,e.length===0)break;let u=i.at(-1);if(u?.type===`code`)break;if(u?.type===`blockquote`){let t=u,a=e.join(`
15
+ `),o=t.raw+`
16
+ `+a.replace(this.rules.other.blockquoteSetextReplace2,``),s=this.blockquote(o);i[i.length-1]=s,n=`${n}
17
+ ${a}`,r=r.substring(0,r.length-t.text.length)+s.text;break}if(u?.type===`list`){let t=u,a=t.raw+`
18
+ `+e.join(`
19
+ `),o=this.list(a);i[i.length-1]=o,n=n.substring(0,n.length-u.raw.length)+o.raw,r=r.substring(0,r.length-t.raw.length)+o.raw,e=a.substring(i.at(-1).raw.length).split(`
20
+ `);continue}}return{type:`blockquote`,raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=this.rules.other.listItemRegex(n),o=!1;for(;e;){let n=!1,r=``,s=``;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let c=Be(t[2].split(`
21
+ `,1)[0],t[1].length),l=e.split(`
22
+ `,1)[0],u=!c.trim(),d=0;if(this.options.pedantic?(d=2,s=c.trimStart()):u?d=t[1].length+1:(d=c.search(this.rules.other.nonSpaceChar),d=d>4?1:d,s=c.slice(d),d+=t[1].length),u&&this.rules.other.blankLine.test(l)&&(r+=l+`
23
+ `,e=e.substring(l.length+1),n=!0),!n){let t=this.rules.other.nextBulletRegex(d),n=this.rules.other.hrRegex(d),i=this.rules.other.fencesBeginRegex(d),a=this.rules.other.headingBeginRegex(d),o=this.rules.other.htmlBeginRegex(d),f=this.rules.other.blockquoteBeginRegex(d);for(;e;){let p=e.split(`
24
+ `,1)[0],m;if(l=p,this.options.pedantic?(l=l.replace(this.rules.other.listReplaceNesting,` `),m=l):m=l.replace(this.rules.other.tabCharGlobal,` `),i.test(l)||a.test(l)||o.test(l)||f.test(l)||t.test(l)||n.test(l))break;if(m.search(this.rules.other.nonSpaceChar)>=d||!l.trim())s+=`
25
+ `+m.slice(d);else{if(u||c.replace(this.rules.other.tabCharGlobal,` `).search(this.rules.other.nonSpaceChar)>=4||i.test(c)||a.test(c)||n.test(c))break;s+=`
26
+ `+l}u=!l.trim(),r+=p+`
27
+ `,e=e.substring(p.length+1),c=m.slice(d)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(o=!0)),i.items.push({type:`list_item`,raw:r,task:!!this.options.gfm&&this.rules.other.listIsTask.test(s),loose:!1,text:s,tokens:[]}),i.raw+=r}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let e of i.items)if(this.lexer.state.top=!1,e.tokens=this.lexer.blockTokens(e.text,[]),!i.loose){let t=e.tokens.filter(e=>e.type===`space`);i.loose=t.length>0&&t.some(e=>this.rules.other.anyLine.test(e.raw))}for(let e of i.items){let t=e.tokens[0];if(e.task&&(t?.type===`text`||t?.type===`paragraph`)){e.text=e.text.replace(this.rules.other.listReplaceTask,``),t.raw=t.raw.replace(this.rules.other.listReplaceTask,``),t.text=t.text.replace(this.rules.other.listReplaceTask,``);for(let e=this.lexer.inlineQueue.length-1;e>=0;e--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[e].src)){this.lexer.inlineQueue[e].src=this.lexer.inlineQueue[e].src.replace(this.rules.other.listReplaceTask,``);break}let n=this.rules.other.listTaskCheckbox.exec(e.raw);if(n){let t={type:`checkbox`,raw:n[0]+` `,checked:n[0]!==`[ ]`};e.checked=t.checked,i.loose?e.tokens[0]&&[`paragraph`,`text`].includes(e.tokens[0].type)&&`tokens`in e.tokens[0]&&e.tokens[0].tokens?(e.tokens[0].raw=t.raw+e.tokens[0].raw,e.tokens[0].text=t.raw+e.tokens[0].text,e.tokens[0].tokens.unshift(t)):e.tokens.unshift({type:`paragraph`,raw:t.raw,text:t.raw,tokens:[t]}):e.tokens.unshift(t)}}else e.task&&=!1}if(i.loose)for(let e of i.items){e.loose=!0;for(let t of e.tokens)t.type===`text`&&(t.type=`paragraph`)}return i}}html(e){let t=this.rules.block.html.exec(e);if(t){let e=H(t[0]);return{type:`html`,block:!0,raw:e,pre:t[1]===`pre`||t[1]===`script`||t[1]===`style`,text:e}}}def(e){let t=this.rules.block.def.exec(e);if(t){let e=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,` `),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:V(t[0],`
28
+ `),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=B(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,``).split(`|`),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,``).split(`
29
+ `):[],a={type:`table`,raw:V(t[0],`
30
+ `),header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)this.rules.other.tableAlignRight.test(e)?a.align.push(`right`):this.rules.other.tableAlignCenter.test(e)?a.align.push(`center`):this.rules.other.tableAlignLeft.test(e)?a.align.push(`left`):a.align.push(null);for(let e=0;e<n.length;e++)a.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:a.align[e]});for(let e of i)a.rows.push(B(e,a.header.length).map((e,t)=>({text:e,tokens:this.lexer.inline(e),header:!1,align:a.align[t]})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let e=t[1].trim();return{type:`heading`,raw:V(t[0],`
31
+ `),depth:t[2].charAt(0)===`=`?1:2,text:e,tokens:this.lexer.inline(e)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===`
32
+ `?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;let t=V(e.slice(0,-1),`\\`);if((e.length-t.length)%2==0)return}else{let e=ze(t[2],`()`);if(e===-2)return;if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let n=t[2],r=``;if(this.options.pedantic){let e=this.rules.other.pedanticHrefTitle.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):``;return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(n=this.options.pedantic&&!this.rules.other.endAngleBracket.test(e)?n.slice(1):n.slice(1,-1)),U(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,`$1`),title:r&&r.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,` `).toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return U(n,e,n[0],this.lexer,this.rules)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(!(!r||!r[1]&&!r[2]&&!r[3]&&!r[4]||r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[3])||!n||this.rules.inline.punctuation.exec(n))){let i=[...r[0]].length-1,a,o,s=i,c=0,l=r[0][0],u=n===l,d=l===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+i);(r=d.exec(t))!==null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){s+=o;continue}if(r[5]||r[6]){if(i%3&&!((i+o)%3)){c+=o;continue}if(u)break}if(s-=o,s>0)continue;o=Math.min(o,o+s+c);let t=[...r[0]][0].length,n=e.slice(0,i+r.index+t+o);if(Math.min(i,o)%2){let e=n.slice(1,-1);return{type:`em`,raw:n,text:e,tokens:this.lexer.inlineTokens(e)}}let l=n.slice(2,-2);return{type:`strong`,raw:n,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(this.rules.other.newLineCharGlobal,` `),n=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return n&&r&&(e=e.substring(1,e.length-1)),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e,t,n=``){let r=this.rules.inline.delLDelim.exec(e);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=this.rules.inline.delRDelim;for(s.lastIndex=0,t=t.slice(-1*e.length+n);(r=s.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i||(a=[...i].length,a!==n))continue;if(r[3]||r[4]){o+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o);let t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+a),c=s.slice(n,-n);return{type:`del`,raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=t[1],n=`mailto:`+e):(e=t[1],n=e),{type:`link`,raw:t[0],text:e,href:n,autolink:!0,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=t[0],n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=t[0],n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,autolink:!0,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e=this.lexer.state.inRawBlock;return{type:`text`,raw:t[0],text:t[0],escaped:e}}}},G=class e{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||r,this.options.tokenizer=this.options.tokenizer||new W,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,linkEmitted:!1,top:!0};let t={other:l,block:F.normal,inline:I.normal};this.options.pedantic?(t.block=F.pedantic,t.inline=I.pedantic):this.options.gfm&&(t.block=F.gfm,t.inline=this.options.breaks?I.breaks:I.gfm),this.tokenizer.rules=t}static get rules(){return{block:F,inline:I}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){e=e.replace(l.carriageReturn,`
33
+ `),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(l.tabCharGlobal,` `).replace(l.spaceLine,``));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(n=>(i=n.call({lexer:this},e,t))?(e=e.substring(i.raw.length),t.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let n=t.at(-1);i.raw.length===1&&n!==void 0?n.raw+=`
34
+ `:t.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
35
+ `)?``:`
36
+ `)+i.raw,n.text+=`
37
+ `+i.text,this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
38
+ `)?``:`
39
+ `)+i.raw,n.text+=`
40
+ `+i.raw,this.inlineQueue.at(-1).src=n.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},t.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),t.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let t=1/0,n=e.slice(1),r;this.options.extensions.startBlock.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(a=e.substring(0,t+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let r=t.at(-1);n&&r?.type===`paragraph`?(r.raw+=(r.raw.endsWith(`
41
+ `)?``:`
42
+ `)+i.raw,r.text+=`
43
+ `+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):t.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`text`?(n.raw+=(n.raw.endsWith(`
44
+ `)?``:`
45
+ `)+i.raw,n.text+=`
46
+ `+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}linkInText(e){if(!e.includes(`[`))return!1;let t=this.tokenizer.rules.inline.link;for(let n of e.matchAll(this.tokenizer.rules.inline.blockSkip))if(t.test(n[0])&&e.charAt(n.index-1)!==`!`)return!0;for(let t of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let e=t[0],n=e.lastIndexOf(`[`);if(e.charAt(0)!==`!`&&Object.hasOwn(this.tokens.links,e.slice(n+1,-1))&&!(n>1&&this.linkInText(e.slice(1,n-1))))return!0}return!1}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e;if(this.tokens.links&&e.includes(`[`)){let e=this.tokenizer.rules.inline.reflinkSearch,t=n=>{let r=n.lastIndexOf(`[`);if(!Object.hasOwn(this.tokens.links,n.slice(r+1,-1)))return n;if(r>1&&n.charAt(0)!==`!`){let i=n.slice(1,r-1);if(this.linkInText(i))return`[`+i.replace(e,t)+`][`+`a`.repeat(n.length-r-2)+`]`}return`[`+`a`.repeat(n.length-2)+`]`};n=n.replace(e,t)}n=n.replace(this.tokenizer.rules.inline.anyPunctuation,e=>`+`.repeat(e.length)),n=n.replace(this.tokenizer.rules.inline.blockSkip,(e,t,n)=>{let r=n?n.length:0;return e.slice(0,r)+`[`+`a`.repeat(e.length-r-2)+`]`}),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let r=!1,i=``,a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}r||(i=``),r=!1;let o;if(this.options.extensions?.inline?.some(n=>(o=n.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let n=t.at(-1);o.type===`text`&&n?.type===`text`?(n.raw+=o.raw,n.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,i)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e,n,i)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let s=e;if(this.options.extensions?.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(s=e.substring(0,t+1))}if(o=this.tokenizer.inlineText(s)){e=e.substring(o.raw.length),o.raw.slice(-1)!==`_`&&(i=o.raw.slice(-1)),r=!0;let n=t.at(-1);n?.type===`text`?(n.raw+=o.raw,n.text+=o.text):t.push(o);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=`Infinite loop on byte: `+e;if(this.options.silent)console.error(t);else throw Error(t)}},K=class{options;parser;constructor(e){this.options=e||r}space(e){return``}code({text:e,lang:t,escaped:n}){let r=(t||``).match(l.notSpaceStart)?.[0],i=e?e.replace(l.endingNewline,``)+`
47
+ `:``;return r?`<pre><code class="language-`+R(r)+`">`+(n?i:R(i,!0))+`</code></pre>
48
+ `:`<pre><code>`+(n?i:R(i,!0))+`</code></pre>
49
+ `}blockquote({tokens:e}){return`<blockquote>
50
+ ${this.parser.parse(e)}</blockquote>
51
+ `}html({text:e}){return e}def(e){return``}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
52
+ `}hr(e){return`<hr>
53
+ `}list(e){let t=e.ordered,n=e.start,r=``;for(let t=0;t<e.items.length;t++){let n=e.items[t];r+=this.listitem(n)}let i=t?`ol`:`ul`,a=t&&n!==1?` start="`+n+`"`:``;return`<`+i+a+`>
54
+ `+r+`</`+i+`>
55
+ `}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
56
+ `}checkbox({checked:e}){return`<input `+(e?`checked="" `:``)+`disabled="" type="checkbox"> `}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
57
+ `}table(e){let t=``,n=``;for(let t=0;t<e.header.length;t++)n+=this.tablecell(e.header[t]);t+=this.tablerow({text:n});let r=``;for(let t=0;t<e.rows.length;t++){let i=e.rows[t];n=``;for(let e=0;e<i.length;e++)n+=this.tablecell(i[e]);r+=this.tablerow({text:n})}return r&&=`<tbody>${r}</tbody>`,`<table>
58
+ <thead>
59
+ `+t+`</thead>
60
+ `+r+`</table>
61
+ `}tablerow({text:e}){return`<tr>
62
+ ${e}</tr>
63
+ `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
64
+ `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${R(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:n,tokens:r,autolink:i}){let a=i?R(n,!0):this.parser.parseInline(r),o=z(e);if(o===null)return a;e=R(o,i);let s=`<a href="`+e+`"`;return t&&(s+=` title="`+R(t)+`"`),s+=`>`+a+`</a>`,s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=z(e);if(i===null)return R(n);e=i;let a=`<img src="${R(e)}" alt="${R(n)}"`;return t&&(a+=` title="${R(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:R(e.text)}},q=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},J=class e{options;renderer;textRenderer;constructor(e){this.options=e||r,this.options.renderer=this.options.renderer||new K,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new q}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`checkbox`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`checkbox`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},Y=class{options;block;constructor(e){this.options=e||r}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?G.lex:G.lexInline}provideParser(e=this.block){return e?J.parse:J.parseInline}},X=new class{defaults=n();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=J;Renderer=K;TextRenderer=q;Lexer=G;Tokenizer=W;Hooks=Y;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new K(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new W(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new Y;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];t[r]=Y.passThroughHooks.has(n)?e=>{if(this.defaults.async&&Y.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return G.lex(e,t??this.defaults)}parser(e,t){return J.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?G.lex:G.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?J.parse:J.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?G.lex:G.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?J.parse:J.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
65
+ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+R(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function Z(e,t){return X.parse(e,t)}Z.options=Z.setOptions=function(e){return X.setOptions(e),Z.defaults=X.defaults,i(Z.defaults),Z},Z.getDefaults=n,Z.defaults=r;function He(...e){return X.use(...e),Z.defaults=X.defaults,i(Z.defaults),Z}Z.use=He,Z.walkTokens=function(e,t){return X.walkTokens(e,t)},Z.parseInline=X.parseInline,Z.Parser=J,Z.parser=J.parse,Z.Renderer=K,Z.TextRenderer=q,Z.Lexer=G,Z.lexer=G.lex,Z.Tokenizer=W,Z.Hooks=Y,Z.parse=Z,Z.options,Z.setOptions,Z.walkTokens,Z.parseInline,J.parse,G.lex;function Ue(e){return[`space`,`def`,`heading`,`paragraph`,`text`,`escape`,`html`,`strong`,`em`,`del`,`codespan`,`code`,`blockquote`,`br`,`hr`,`list`,`list_item`,`checkbox`,`link`,`image`,`table`].includes(e.type)}function We(e){try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.href:void 0}catch{return}}function Ge(e,t){let n=e=>e.map(r);function r(t){if(!Ue(t))return t.raw;let r=t;switch(r.type){case`space`:case`def`:return null;case`heading`:{let t=n(r.tokens);switch(r.depth){case 1:return e`<h1>${t}</h1>`;case 2:return e`<h2>${t}</h2>`;case 3:return e`<h3>${t}</h3>`;case 4:return e`<h4>${t}</h4>`;case 5:return e`<h5>${t}</h5>`;default:return e`<h6>${t}</h6>`}}case`paragraph`:return e`<p>${n(r.tokens)}</p>`;case`text`:return r.tokens?n(r.tokens):r.text;case`escape`:return r.text;case`html`:return r.raw;case`strong`:return e`<strong>${n(r.tokens)}</strong>`;case`em`:return e`<em>${n(r.tokens)}</em>`;case`del`:return e`<del>${n(r.tokens)}</del>`;case`codespan`:return e`<code>${r.text}</code>`;case`code`:return e`<pre><code>${r.text}</code></pre>`;case`blockquote`:return e`<blockquote>${n(r.tokens)}</blockquote>`;case`br`:return e`<br>`;case`hr`:return e`<hr>`;case`list`:return r.ordered?e`<ol start=${r.start}>${n(r.items)}</ol>`:e`<ul>${n(r.items)}</ul>`;case`list_item`:return e`<li>${n(r.tokens)}</li>`;case`checkbox`:return e`<input type="checkbox" disabled ?checked=${r.checked} aria-label="Task completed">`;case`link`:{let t=We(r.href),i=n(r.tokens);return t===void 0?i:e`<a href=${t} target="_blank" rel="noreferrer noopener">${i}</a>`}case`image`:return r.text;case`table`:return e`<div class="captain-table-scroll"><table><thead><tr>${r.header.map(t=>e`<th scope="col">${n(t.tokens)}</th>`)}</tr></thead><tbody>${r.rows.map(t=>e`<tr>${t.map(t=>e`<td>${n(t.tokens)}</td>`)}</tr>`)}</tbody></table></div>`;default:return t.raw}}return n(new G({gfm:!0}).lex(t))}function Q(e){if(e.state?.selectedMachine&&e.state.selectedMachine.id!==e.machine.id)return;let t=e.state?.selectedSession;if(!(!t||t.archived||t.pending||t.cwd!==e.workspace.path))return{id:t.id,name:t.name!==void 0&&t.name.trim()!==``?t.name:`Session ${t.id.slice(0,8)}`}}function $(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function Ke(e,t){let n=t.entries.some(e=>e.status===`running`),r=t.source!==void 0&&t.entries.some(e=>e.sessionId===t.source?.id),i=!t.connected||t.connecting||t.pending||n||!t.source||r,a=t.selected,o=t.connecting?`Connecting…`:t.connected?t.pending?`Fetching the last reply…`:n?`The captain is translating…`:t.source?r?`Select a different session — this one is the pirate.`:`Ready to translate`:`Select a session in this workspace first.`:`Connection lost`;return e`<style>${qe}</style>
66
+ <section class="captains-log" aria-label="Captain's Log">
67
+ <div class="captain-heading"><h2>⚓ Captain's Log</h2><p class="muted">Your last reply, retold by a theatrical pirate.</p></div>
68
+ <div class="captain-source"><span class="muted">Selected session</span><strong>${t.source?.name??`No session selected`}</strong></div>
69
+ <button class="captain-primary" ?disabled=${i} @click=${t.onTranslate}>Let the Captain tell it</button>
70
+ <p class="captain-status" role="status" aria-live="polite">${o}
71
+ ${!t.connected&&!t.connecting?e`<button @click=${t.onReconnect}>Reconnect</button>`:null}
72
+ </p>
73
+ ${!t.connected&&!t.connecting?e`<p class="captain-notice">Reconnect to see the result. The captain may still be working; your request will not be sent again.</p>`:null}
74
+ ${t.notice!==void 0&&t.notice!==``?e`<p class="captain-notice" role="alert">${t.notice}</p>`:null}
75
+ ${a?e`<article class="captain-reply" aria-label="Pirate translation">
76
+ <div class="captain-reply-heading"><strong>${a.status===`running`?`Translating…`:a.id===t.entries[0]?.id?`Last translation`:`Earlier translation`}</strong><time datetime=${a.createdAt}>${$(a.createdAt)}</time></div>
77
+ ${a.status===`completed`?e`<div class="captain-answer">${a.text?Ge(e,a.text):`Receiving the captain's reply…`}</div>`:a.status===`running`?e`<p class="muted">Reading the source reply and turning it into pirate. No message is sent to the source conversation.</p>`:e`<div class="captain-notice" role="alert"><strong>${a.status===`interrupted`?`Translation interrupted`:`Couldn't translate that reply`}</strong><p>${a.text||`Check Diagnostics for details, then try again when the session is ready.`}</p></div>`}
78
+ </article>`:e`<p class="captain-empty muted">Pick a conversation, then translate its latest finished assistant reply. The original stays untouched.</p>`}
79
+ <div class="captain-secondary">
80
+ ${t.entries.length>1?e`<details><summary>Previous translations <span class="muted">(${t.entries.length})</span></summary>
81
+ <div class="captain-history">${t.entries.map(n=>e`<button class=${n.id===a?.id?`selected`:``} ?disabled=${!t.connected} @click=${()=>{t.onRead(n.id)}}>
82
+ <span>${$(n.createdAt)} · ${n.status===`completed`?`Translated`:n.status===`running`?`Working`:`Not completed`}</span>
83
+ </button>`)}</div>
84
+ </details>`:null}
85
+ <details class="captain-diagnostics"><summary>Diagnostics</summary>
86
+ <p>${t.status}</p>
87
+ ${a?e`<dl><dt>Machine</dt><dd>${t.machineName}</dd><dt>Source session</dt><dd>${a.sourceSessionId??`Unknown`}</dd><dt>Pirate session</dt><dd>${a.sessionId||`Not created`}</dd><dt>Request</dt><dd>${a.id}</dd></dl>
88
+ <p>${a.question}</p><ol>${a.stages.map(t=>e`<li>${t}</li>`)}</ol>`:null}
89
+ </details>
90
+ <p class="captain-footnote muted">Uses your configured model. Reuses the pirate while it's available; otherwise starts one automatically.</p>
91
+ </div>
92
+ </section>`}var qe=`
93
+ captains-log-lifetime { display: block; min-width: 0; }
94
+ .captains-log { box-sizing: border-box; padding: 16px; min-width: 0; color: inherit; font: inherit; line-height: 1.5; }
95
+ .captains-log *, .captains-log *::before, .captains-log *::after { box-sizing: border-box; }
96
+ .captains-log h2, .captains-log p { margin: 0; }
97
+ .captains-log h2 { font-size: 15px; }
98
+ .captains-log button { font: inherit; }
99
+ .captains-log button:hover:not(:disabled) { background: var(--pi-surface-hover); }
100
+ .captains-log button:disabled { opacity: .5; cursor: not-allowed; }
101
+ .captains-log button:focus-visible, .captains-log summary:focus-visible { outline: 2px solid var(--pi-accent); outline-offset: 2px; }
102
+ .captains-log .captain-primary { border-color: var(--pi-accent-border); background: var(--pi-selection-bg); padding: 8px 12px; }
103
+ .captains-log .captain-source { display: grid; gap: 3px; margin: 18px 0 12px; padding: 10px 12px; background: var(--pi-surface); border: 1px solid var(--pi-border-muted); border-radius: 8px; overflow-wrap: anywhere; }
104
+ .captains-log .captain-source span { font-size: 11px; }
105
+ .captains-log .captain-status { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: 10px 0 16px; color: var(--pi-muted); font-size: 12px; }
106
+ .captains-log .captain-notice { padding: 12px; margin-bottom: 12px; border: 1px solid var(--pi-warning-border); border-radius: 8px; background: var(--pi-warning-surface); overflow-wrap: anywhere; white-space: pre-wrap; }
107
+ .captains-log .captain-notice p { margin-top: 6px; }
108
+ .captains-log .captain-empty { padding: 16px 0; }
109
+ .captains-log .captain-reply { padding: 16px 0; border-top: 1px solid var(--pi-border-muted); }
110
+ .captains-log .captain-reply-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
111
+ .captains-log time { color: var(--pi-muted); font-size: 11px; }
112
+ .captains-log .captain-answer { line-height: 1.65; overflow-wrap: anywhere; min-width: 0; }
113
+ .captains-log .captain-answer > :first-child { margin-top: 0; }
114
+ .captains-log .captain-answer > :last-child { margin-bottom: 0; }
115
+ .captains-log .captain-answer p, .captains-log .captain-answer ul, .captains-log .captain-answer ol { margin: .65em 0; }
116
+ .captains-log .captain-answer h1, .captains-log .captain-answer h2, .captains-log .captain-answer h3,
117
+ .captains-log .captain-answer h4, .captains-log .captain-answer h5, .captains-log .captain-answer h6 { margin: 1em 0 .4em; line-height: 1.3; }
118
+ .captains-log .captain-answer h1 { font-size: 1.5em; }
119
+ .captains-log .captain-answer h2 { font-size: 1.3em; }
120
+ .captains-log .captain-answer h3 { font-size: 1.15em; }
121
+ .captains-log .captain-answer ul, .captains-log .captain-answer ol { padding-left: 1.7em; }
122
+ .captains-log .captain-answer blockquote { margin: .75em 0; padding-left: 1em; border-left: 3px solid var(--pi-border-muted); color: var(--pi-muted); }
123
+ .captains-log .captain-answer code { font-family: monospace; background: var(--pi-surface); border-radius: 3px; padding: .1em .25em; }
124
+ .captains-log .captain-answer pre { max-width: 100%; overflow: auto; padding: 12px; background: var(--pi-surface); border: 1px solid var(--pi-border-muted); border-radius: 6px; white-space: pre; overflow-wrap: normal; }
125
+ .captains-log .captain-answer pre code { padding: 0; background: none; }
126
+ .captains-log .captain-answer a { color: var(--pi-accent); text-decoration: underline; }
127
+ .captains-log .captain-answer a:focus-visible { outline: 2px solid var(--pi-accent); outline-offset: 2px; }
128
+ .captains-log .captain-table-scroll { max-width: 100%; overflow: auto; margin: .75em 0; }
129
+ .captains-log .captain-answer table { border-collapse: collapse; width: 100%; }
130
+ .captains-log .captain-answer th, .captains-log .captain-answer td { border: 1px solid var(--pi-border-muted); padding: 6px 10px; text-align: left; }
131
+ .captains-log .captain-answer th { background: var(--pi-surface); }
132
+ .captains-log .captain-answer hr { border: 0; border-top: 1px solid var(--pi-border-muted); }
133
+ .captains-log .captain-secondary { border-top: 1px solid var(--pi-border-muted); margin-top: 12px; padding-top: 6px; }
134
+ .captains-log details { padding: 8px 0; }
135
+ .captains-log summary { cursor: pointer; color: var(--pi-muted); }
136
+ .captains-log details p { margin: 8px 0; overflow-wrap: anywhere; }
137
+ .captains-log .captain-history { display: grid; gap: 6px; padding-top: 8px; }
138
+ .captains-log .captain-history button { text-align: left; min-width: 0; }
139
+ .captains-log dl { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 10px; font-size: 11px; }
140
+ .captains-log dd { margin: 0; overflow-wrap: anywhere; }
141
+ .captains-log .captain-footnote { font-size: 11px; margin-top: 10px; }
142
+ `;function Je(n){if(typeof n!=`object`||!n||!(`type`in n))return!1;switch(n.type){case`entry`:return`entry`in n&&t(n.entry)&&`saved`in n&&typeof n.saved==`boolean`;case`text`:return`id`in n&&typeof n.id==`string`&&e.test(n.id)&&`text`in n&&typeof n.text==`string`&&n.text.length<=4e3;case`admitted`:return`requestId`in n&&typeof n.requestId==`string`&&e.test(n.requestId)&&`id`in n&&typeof n.id==`string`&&e.test(n.id);case`rejected`:return`requestId`in n&&typeof n.requestId==`string`&&e.test(n.requestId)&&`message`in n&&typeof n.message==`string`;default:return!1}}var Ye={apiVersion:4,name:`Captain's Log`,activate({html:e,runtimePluginId:n,lifetimeSignal:r}){customElements.get(`captains-log-lifetime`)||customElements.define(`captains-log-lifetime`,class extends HTMLElement{mount;unmount;currentScope;set scope(e){e!==this.currentScope&&(this.currentScope=e,this.isConnected&&queueMicrotask(()=>{this.isConnected&&this.mount?.()}))}connectedCallback(){queueMicrotask(()=>{this.isConnected&&this.mount?.()})}disconnectedCallback(){this.unmount?.()}});let i=new Map,a;function o(e){e.revision++,e.controller?.abort(),e.channel?.close(),delete e.channel,delete e.controller,e.connecting=!1,e.pending!==void 0&&(e.status=`Channel closed. Admission is uncertain; reconnect before retrying. Questions are never resent automatically.`)}let s=()=>{for(let e of i.values())o(e)};r.addEventListener(`abort`,s,{once:!0});function c(e){let t=JSON.stringify([e.machine.id,e.workspace.projectId,e.workspace.id]),n=i.get(t);return n||(n={entries:[],status:`Connecting to Captain's Log…`,connecting:!1,revision:0,readRevision:0,updates:new Map},i.set(t,n)),a!==n&&(a&&o(a),a=n),n}function l(e,t){e.updates.set(t.id,t),e.entries=[t,...e.entries.filter(e=>e.id!==t.id)].sort((e,t)=>t.createdAt.localeCompare(e.createdAt)),(!e.selected||e.selected.id===t.id||t.status===`running`)&&(e.selected?.id!==t.id&&e.readRevision++,e.selected=t)}async function u(e,n,i){let a=n.revision,o=++n.readRevision,s=n.updates.get(i);try{if(!e.peer?.request)throw Error(`Captain saved records unavailable`);let c=await e.peer.request(`read`,i,{signal:n.controller?.signal??r});if(a!==n.revision||o!==n.readRevision||r.aborted)return;if(!t(c))throw Error(`Invalid Captain record`);let l=n.updates.get(i)===s?c:n.updates.get(i)??c;n.selected=l,n.updates.set(i,l),n.entries=n.entries.map(e=>e.id===i?l:e),e.host.requestRender()}catch(t){if(a!==n.revision||o!==n.readRevision||r.aborted)return;n.status=String(t),e.host.requestRender()}}async function d(e,n){if(n.channel||n.connecting||r.aborted)return;o(n);let i=n.revision,a=new AbortController;n.controller=a,n.connecting=!0,n.updates.clear();let s=()=>i===n.revision&&!a.signal.aborted&&!r.aborted;n.status=`Connecting to Captain's Log…`,e.host.requestRender();try{if(!e.peer?.openChannel||!e.peer.request)throw Error(`Captain backend channels unavailable on this machine`);let r=await e.peer.openChannel(`log`,null,{signal:a.signal,onData(t){if(s()){if(!Je(t)){n.status=`Invalid Captain channel frame`,o(n),e.host.requestRender();return}if(t.type===`admitted`&&t.requestId===n.pending)delete n.pending,n.status=`Backend admitted ${t.id}; admission is not completion.`;else if(t.type===`rejected`&&t.requestId===n.pending)delete n.pending,n.status=t.message,n.notice=t.message;else if(t.type===`entry`)l(n,t.entry),n.status=t.saved&&t.entry.status!==`running`?`Backend saved ${t.entry.status} roundtrip.`:`Captain: ${t.entry.stages.at(-1)??t.entry.status}`;else if(t.type===`text`){let e=n.updates.get(t.id);if(e){let r={...e,text:(e.text+t.text).slice(0,48e3)};n.updates.set(t.id,r),n.entries=n.entries.map(e=>e.id===t.id?r:e),n.selected?.id===t.id&&(n.selected=r)}}e.host.requestRender()}}});if(!s()){r.close();return}n.channel=r,r.closed.then(t=>{s()&&(o(n),n.status=`${t.error?.message??`Channel closed`}. Admission may be uncertain. Reconnect to restore saved state; translations are never resent automatically.`,e.host.requestRender())});let i=await e.peer.request(`list`,null,{signal:a.signal});if(!s())return;if(!Array.isArray(i)||!i.every(t))throw Error(`Invalid Captain snapshot`);n.entries=[...n.updates.values(),...i.filter(e=>e.sourceSessionId!==void 0&&!n.updates.has(e.id))].sort((e,t)=>t.createdAt.localeCompare(e.createdAt)),delete n.pending;let c=n.selected?.id??n.entries[0]?.id;if(c!==void 0&&n.entries.some(e=>e.id===c)){let t=n.updates.get(c);t?n.selected=t:await u(e,n,c)}else delete n.selected;if(!s())return;n.status=`Connected. Live updates arrive from the backend.`,delete n.notice,n.connecting=!1,e.host.requestRender()}catch(t){if(!s())return;o(n),n.status=`${String(t)}. Reconnect explicitly; no translation was resent.`,e.host.requestRender()}}function f(e,t){let n=Q(e);if(!n||!t.channel||t.connecting||t.pending!==void 0||r.aborted||t.entries.some(e=>e.status===`running`||e.sessionId===n.id))return;t.pending=crypto.randomUUID(),delete t.notice,t.status=`Translation queued for source session ${n.id}; waiting for backend admission.`;let i={type:`translate`,requestId:t.pending,sourceSessionId:n.id};try{t.channel.send(i)}catch(e){o(t),t.status=`${String(e)}. Admission is uncertain; reconnect before retrying.`}e.host.requestRender()}return{contributions:{actions:[{id:`summon`,title:`Open pirate translator`,group:`Captain's Log`,enabled:({state:e})=>!!e.selectedWorkspace,run:({selectWorkspaceTool:e})=>{e(`${n}:log`)}}],workspacePanels:[{id:`log`,title:`Captain's Log`,render(t){let n=c(t),r=Q(t);return e`<captains-log-lifetime .mount=${()=>{d(t,n)}} .unmount=${()=>{o(n)}} .scope=${n}>
143
+ ${Ke(e,{...n,connected:n.channel!==void 0&&t.peer?.openChannel!==void 0,pending:n.pending!==void 0,machineName:t.machine.name,...r?{source:r}:{},onTranslate(){f(t,n)},onReconnect(){d(t,n)},onRead(e){u(t,n,e)}})}
144
+ </captains-log-lifetime>`}}]},dispose(){s(),r.removeEventListener(`abort`,s),i.clear()}}}};export{Ye as default};
@@ -0,0 +1,67 @@
1
+ // Generated from pi-packages/captains-log/src/browser/markdown.ts. Do not edit directly.
2
+ import { Lexer } from "marked";
3
+ // The private lexer has no extensions. Narrow away Marked's open-ended Generic token type.
4
+ function isBuiltinToken(token) {
5
+ return ["space", "def", "heading", "paragraph", "text", "escape", "html", "strong", "em", "del", "codespan", "code", "blockquote", "br", "hr", "list", "list_item", "checkbox", "link", "image", "table"].includes(token.type);
6
+ }
7
+ function safeLink(href) {
8
+ // No relative URLs: translations must not navigate within the host application.
9
+ try {
10
+ const url = new URL(href);
11
+ return url.protocol === "https:" || url.protocol === "http:" ? url.href : undefined;
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ /** Render only known Markdown constructs. Text (including raw HTML) always stays in Lit text bindings. */
18
+ export function renderCaptainMarkdown(html, markdown) {
19
+ const renderTokens = (tokens) => tokens.map(renderToken);
20
+ function renderToken(input) {
21
+ if (!isBuiltinToken(input))
22
+ return input.raw;
23
+ const token = input;
24
+ switch (token.type) {
25
+ case "space":
26
+ case "def": return null;
27
+ case "heading": {
28
+ const content = renderTokens(token.tokens);
29
+ switch (token.depth) {
30
+ case 1: return html `<h1>${content}</h1>`;
31
+ case 2: return html `<h2>${content}</h2>`;
32
+ case 3: return html `<h3>${content}</h3>`;
33
+ case 4: return html `<h4>${content}</h4>`;
34
+ case 5: return html `<h5>${content}</h5>`;
35
+ default: return html `<h6>${content}</h6>`;
36
+ }
37
+ }
38
+ case "paragraph": return html `<p>${renderTokens(token.tokens)}</p>`;
39
+ case "text": return token.tokens ? renderTokens(token.tokens) : token.text;
40
+ case "escape": return token.text;
41
+ case "html": return token.raw;
42
+ case "strong": return html `<strong>${renderTokens(token.tokens)}</strong>`;
43
+ case "em": return html `<em>${renderTokens(token.tokens)}</em>`;
44
+ case "del": return html `<del>${renderTokens(token.tokens)}</del>`;
45
+ case "codespan": return html `<code>${token.text}</code>`;
46
+ case "code": return html `<pre><code>${token.text}</code></pre>`;
47
+ case "blockquote": return html `<blockquote>${renderTokens(token.tokens)}</blockquote>`;
48
+ case "br": return html `<br>`;
49
+ case "hr": return html `<hr>`;
50
+ case "list": return token.ordered
51
+ ? html `<ol start=${token.start}>${renderTokens(token.items)}</ol>`
52
+ : html `<ul>${renderTokens(token.items)}</ul>`;
53
+ case "list_item": return html `<li>${renderTokens(token.tokens)}</li>`;
54
+ case "checkbox": return html `<input type="checkbox" disabled ?checked=${token.checked} aria-label="Task completed">`;
55
+ case "link": {
56
+ const href = safeLink(token.href);
57
+ const label = renderTokens(token.tokens);
58
+ return href !== undefined ? html `<a href=${href} target="_blank" rel="noreferrer noopener">${label}</a>` : label;
59
+ }
60
+ // Keep the description, but never create an image or load a remote resource.
61
+ case "image": return token.text;
62
+ case "table": return html `<div class="captain-table-scroll"><table><thead><tr>${token.header.map((cell) => html `<th scope="col">${renderTokens(cell.tokens)}</th>`)}</tr></thead><tbody>${token.rows.map((row) => html `<tr>${row.map((cell) => html `<td>${renderTokens(cell.tokens)}</td>`)}</tr>`)}</tbody></table></div>`;
63
+ default: return input.raw;
64
+ }
65
+ }
66
+ return renderTokens(new Lexer({ gfm: true }).lex(markdown));
67
+ }
@@ -0,0 +1,105 @@
1
+ // Generated from pi-packages/captains-log/src/browser/panel.ts. Do not edit directly.
2
+ import { renderCaptainMarkdown } from "./markdown.js";
3
+ export function selectedSourceSession(context) {
4
+ if (context.state?.selectedMachine && context.state.selectedMachine.id !== context.machine.id)
5
+ return;
6
+ const selected = context.state?.selectedSession;
7
+ if (!selected || selected.archived || selected.pending || selected.cwd !== context.workspace.path)
8
+ return;
9
+ return { id: selected.id, name: selected.name !== undefined && selected.name.trim() !== "" ? selected.name : `Session ${selected.id.slice(0, 8)}` };
10
+ }
11
+ function dateLabel(value) {
12
+ const date = new Date(value);
13
+ return Number.isNaN(date.getTime()) ? value : date.toLocaleString(undefined, { month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" });
14
+ }
15
+ export function renderCaptainPanel(html, view) {
16
+ const working = view.entries.some((entry) => entry.status === "running");
17
+ const pirateSelected = view.source !== undefined && view.entries.some((entry) => entry.sessionId === view.source?.id);
18
+ const disabled = !view.connected || view.connecting || view.pending || working || !view.source || pirateSelected;
19
+ const selected = view.selected;
20
+ const status = view.connecting ? "Connecting…" : !view.connected ? "Connection lost" : view.pending ? "Fetching the last reply…"
21
+ : working ? "The captain is translating…" : !view.source ? "Select a session in this workspace first." : pirateSelected ? "Select a different session — this one is the pirate."
22
+ : "Ready to translate";
23
+ return html `<style>${styles}</style>
24
+ <section class="captains-log" aria-label="Captain's Log">
25
+ <div class="captain-heading"><h2>⚓ Captain's Log</h2><p class="muted">Your last reply, retold by a theatrical pirate.</p></div>
26
+ <div class="captain-source"><span class="muted">Selected session</span><strong>${view.source?.name ?? "No session selected"}</strong></div>
27
+ <button class="captain-primary" ?disabled=${disabled} @click=${view.onTranslate}>Let the Captain tell it</button>
28
+ <p class="captain-status" role="status" aria-live="polite">${status}
29
+ ${!view.connected && !view.connecting ? html `<button @click=${view.onReconnect}>Reconnect</button>` : null}
30
+ </p>
31
+ ${!view.connected && !view.connecting ? html `<p class="captain-notice">Reconnect to see the result. The captain may still be working; your request will not be sent again.</p>` : null}
32
+ ${view.notice !== undefined && view.notice !== "" ? html `<p class="captain-notice" role="alert">${view.notice}</p>` : null}
33
+ ${selected ? html `<article class="captain-reply" aria-label="Pirate translation">
34
+ <div class="captain-reply-heading"><strong>${selected.status === "running" ? "Translating…" : selected.id === view.entries[0]?.id ? "Last translation" : "Earlier translation"}</strong><time datetime=${selected.createdAt}>${dateLabel(selected.createdAt)}</time></div>
35
+ ${selected.status === "completed" ? html `<div class="captain-answer">${selected.text ? renderCaptainMarkdown(html, selected.text) : "Receiving the captain's reply…"}</div>`
36
+ : selected.status === "running" ? html `<p class="muted">Reading the source reply and turning it into pirate. No message is sent to the source conversation.</p>`
37
+ : html `<div class="captain-notice" role="alert"><strong>${selected.status === "interrupted" ? "Translation interrupted" : "Couldn't translate that reply"}</strong><p>${selected.text || "Check Diagnostics for details, then try again when the session is ready."}</p></div>`}
38
+ </article>` : html `<p class="captain-empty muted">Pick a conversation, then translate its latest finished assistant reply. The original stays untouched.</p>`}
39
+ <div class="captain-secondary">
40
+ ${view.entries.length > 1 ? html `<details><summary>Previous translations <span class="muted">(${view.entries.length})</span></summary>
41
+ <div class="captain-history">${view.entries.map((entry) => html `<button class=${entry.id === selected?.id ? "selected" : ""} ?disabled=${!view.connected} @click=${() => { view.onRead(entry.id); }}>
42
+ <span>${dateLabel(entry.createdAt)} · ${entry.status === "completed" ? "Translated" : entry.status === "running" ? "Working" : "Not completed"}</span>
43
+ </button>`)}</div>
44
+ </details>` : null}
45
+ <details class="captain-diagnostics"><summary>Diagnostics</summary>
46
+ <p>${view.status}</p>
47
+ ${selected ? html `<dl><dt>Machine</dt><dd>${view.machineName}</dd><dt>Source session</dt><dd>${selected.sourceSessionId ?? "Unknown"}</dd><dt>Pirate session</dt><dd>${selected.sessionId || "Not created"}</dd><dt>Request</dt><dd>${selected.id}</dd></dl>
48
+ <p>${selected.question}</p><ol>${selected.stages.map((stage) => html `<li>${stage}</li>`)}</ol>` : null}
49
+ </details>
50
+ <p class="captain-footnote muted">Uses your configured model. Reuses the pirate while it's available; otherwise starts one automatically.</p>
51
+ </div>
52
+ </section>`;
53
+ }
54
+ // Light DOM inherits workspace typography/buttons. Extra rules are package-scoped and use host themes.
55
+ const styles = `
56
+ captains-log-lifetime { display: block; min-width: 0; }
57
+ .captains-log { box-sizing: border-box; padding: 16px; min-width: 0; color: inherit; font: inherit; line-height: 1.5; }
58
+ .captains-log *, .captains-log *::before, .captains-log *::after { box-sizing: border-box; }
59
+ .captains-log h2, .captains-log p { margin: 0; }
60
+ .captains-log h2 { font-size: 15px; }
61
+ .captains-log button { font: inherit; }
62
+ .captains-log button:hover:not(:disabled) { background: var(--pi-surface-hover); }
63
+ .captains-log button:disabled { opacity: .5; cursor: not-allowed; }
64
+ .captains-log button:focus-visible, .captains-log summary:focus-visible { outline: 2px solid var(--pi-accent); outline-offset: 2px; }
65
+ .captains-log .captain-primary { border-color: var(--pi-accent-border); background: var(--pi-selection-bg); padding: 8px 12px; }
66
+ .captains-log .captain-source { display: grid; gap: 3px; margin: 18px 0 12px; padding: 10px 12px; background: var(--pi-surface); border: 1px solid var(--pi-border-muted); border-radius: 8px; overflow-wrap: anywhere; }
67
+ .captains-log .captain-source span { font-size: 11px; }
68
+ .captains-log .captain-status { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: 10px 0 16px; color: var(--pi-muted); font-size: 12px; }
69
+ .captains-log .captain-notice { padding: 12px; margin-bottom: 12px; border: 1px solid var(--pi-warning-border); border-radius: 8px; background: var(--pi-warning-surface); overflow-wrap: anywhere; white-space: pre-wrap; }
70
+ .captains-log .captain-notice p { margin-top: 6px; }
71
+ .captains-log .captain-empty { padding: 16px 0; }
72
+ .captains-log .captain-reply { padding: 16px 0; border-top: 1px solid var(--pi-border-muted); }
73
+ .captains-log .captain-reply-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
74
+ .captains-log time { color: var(--pi-muted); font-size: 11px; }
75
+ .captains-log .captain-answer { line-height: 1.65; overflow-wrap: anywhere; min-width: 0; }
76
+ .captains-log .captain-answer > :first-child { margin-top: 0; }
77
+ .captains-log .captain-answer > :last-child { margin-bottom: 0; }
78
+ .captains-log .captain-answer p, .captains-log .captain-answer ul, .captains-log .captain-answer ol { margin: .65em 0; }
79
+ .captains-log .captain-answer h1, .captains-log .captain-answer h2, .captains-log .captain-answer h3,
80
+ .captains-log .captain-answer h4, .captains-log .captain-answer h5, .captains-log .captain-answer h6 { margin: 1em 0 .4em; line-height: 1.3; }
81
+ .captains-log .captain-answer h1 { font-size: 1.5em; }
82
+ .captains-log .captain-answer h2 { font-size: 1.3em; }
83
+ .captains-log .captain-answer h3 { font-size: 1.15em; }
84
+ .captains-log .captain-answer ul, .captains-log .captain-answer ol { padding-left: 1.7em; }
85
+ .captains-log .captain-answer blockquote { margin: .75em 0; padding-left: 1em; border-left: 3px solid var(--pi-border-muted); color: var(--pi-muted); }
86
+ .captains-log .captain-answer code { font-family: monospace; background: var(--pi-surface); border-radius: 3px; padding: .1em .25em; }
87
+ .captains-log .captain-answer pre { max-width: 100%; overflow: auto; padding: 12px; background: var(--pi-surface); border: 1px solid var(--pi-border-muted); border-radius: 6px; white-space: pre; overflow-wrap: normal; }
88
+ .captains-log .captain-answer pre code { padding: 0; background: none; }
89
+ .captains-log .captain-answer a { color: var(--pi-accent); text-decoration: underline; }
90
+ .captains-log .captain-answer a:focus-visible { outline: 2px solid var(--pi-accent); outline-offset: 2px; }
91
+ .captains-log .captain-table-scroll { max-width: 100%; overflow: auto; margin: .75em 0; }
92
+ .captains-log .captain-answer table { border-collapse: collapse; width: 100%; }
93
+ .captains-log .captain-answer th, .captains-log .captain-answer td { border: 1px solid var(--pi-border-muted); padding: 6px 10px; text-align: left; }
94
+ .captains-log .captain-answer th { background: var(--pi-surface); }
95
+ .captains-log .captain-answer hr { border: 0; border-top: 1px solid var(--pi-border-muted); }
96
+ .captains-log .captain-secondary { border-top: 1px solid var(--pi-border-muted); margin-top: 12px; padding-top: 6px; }
97
+ .captains-log details { padding: 8px 0; }
98
+ .captains-log summary { cursor: pointer; color: var(--pi-muted); }
99
+ .captains-log details p { margin: 8px 0; overflow-wrap: anywhere; }
100
+ .captains-log .captain-history { display: grid; gap: 6px; padding-top: 8px; }
101
+ .captains-log .captain-history button { text-align: left; min-width: 0; }
102
+ .captains-log dl { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 10px; font-size: 11px; }
103
+ .captains-log dd { margin: 0; overflow-wrap: anywhere; }
104
+ .captains-log .captain-footnote { font-size: 11px; margin-top: 10px; }
105
+ `;
@@ -0,0 +1,26 @@
1
+ // Generated from pi-packages/captains-log/src/browser/protocol.ts. Do not edit directly.
2
+ export const CAPTAIN_REQUEST = "captains-log:v1:request";
3
+ export const CAPTAIN_REPLY = "captains-log:v1:reply";
4
+ export const SOURCE_REQUEST = "captains-log:v1:source-request";
5
+ export const SOURCE_REPLY = "captains-log:v1:source-reply";
6
+ export const PIRATE_INTRO = "We are pirates. Always speak pirate.";
7
+ export const PIRATE_MARKER = "captains-log:pirate-introduced";
8
+ export const MAX_FINDINGS = 48_000;
9
+ export const MAX_QUESTION = 8_000;
10
+ export const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;
11
+ export function isLogEntry(value) {
12
+ if (typeof value !== "object" || value === null)
13
+ return false;
14
+ return "id" in value && typeof value.id === "string" && UUID.test(value.id)
15
+ && "createdAt" in value && typeof value.createdAt === "string"
16
+ && "sessionId" in value && typeof value.sessionId === "string" && value.sessionId.length <= 512
17
+ && (!("sourceSessionId" in value) || value.sourceSessionId === undefined || (typeof value.sourceSessionId === "string" && !!value.sourceSessionId.trim() && value.sourceSessionId.length <= 512))
18
+ && "question" in value && typeof value.question === "string" && value.question.length <= MAX_QUESTION
19
+ && "status" in value && ["running", "completed", "failed", "interrupted"].includes(String(value.status))
20
+ && (!("failureCode" in value) || value.failureCode === undefined || (typeof value.failureCode === "string" && ["session-unavailable", "request-failed", "interrupted"].includes(value.failureCode)))
21
+ && "stages" in value && Array.isArray(value.stages) && value.stages.length <= 16 && value.stages.every((s) => typeof s === "string" && s.length <= 256)
22
+ && "text" in value && typeof value.text === "string" && value.text.length <= MAX_FINDINGS;
23
+ }
24
+ export function captainPrompt(text) {
25
+ return `Retell this as a theatrical pirate captain briefing the crew. Rewrite it from scratch: nautical metaphors, colorful pirate phrasing, and a little humor. Preserve the important facts, warnings, and next steps; keep code and commands exact. Don't merely sprinkle “arrr” onto the original. Always speak pirate.\n\nSource reply:\n${text}`;
26
+ }