@honeybee-ai/waggle-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +77 -0
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.js +4307 -0
  4. package/dist/cli.js.map +7 -0
  5. package/dist/commands/auth.d.ts +1 -0
  6. package/dist/commands/auth.js +155 -0
  7. package/dist/commands/auth.js.map +1 -0
  8. package/dist/commands/claim.d.ts +1 -0
  9. package/dist/commands/claim.js +36 -0
  10. package/dist/commands/claim.js.map +1 -0
  11. package/dist/commands/completion.d.ts +1 -0
  12. package/dist/commands/completion.js +191 -0
  13. package/dist/commands/completion.js.map +1 -0
  14. package/dist/commands/config-cmd.d.ts +1 -0
  15. package/dist/commands/config-cmd.js +61 -0
  16. package/dist/commands/config-cmd.js.map +1 -0
  17. package/dist/commands/events.d.ts +1 -0
  18. package/dist/commands/events.js +129 -0
  19. package/dist/commands/events.js.map +1 -0
  20. package/dist/commands/halt.d.ts +1 -0
  21. package/dist/commands/halt.js +25 -0
  22. package/dist/commands/halt.js.map +1 -0
  23. package/dist/commands/help-cmd.d.ts +1 -0
  24. package/dist/commands/help-cmd.js +125 -0
  25. package/dist/commands/help-cmd.js.map +1 -0
  26. package/dist/commands/hooks-cmd.d.ts +1 -0
  27. package/dist/commands/hooks-cmd.js +83 -0
  28. package/dist/commands/hooks-cmd.js.map +1 -0
  29. package/dist/commands/init.d.ts +1 -0
  30. package/dist/commands/init.js +78 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/integrations.d.ts +1 -0
  33. package/dist/commands/integrations.js +375 -0
  34. package/dist/commands/integrations.js.map +1 -0
  35. package/dist/commands/join.d.ts +1 -0
  36. package/dist/commands/join.js +81 -0
  37. package/dist/commands/join.js.map +1 -0
  38. package/dist/commands/leave.d.ts +1 -0
  39. package/dist/commands/leave.js +36 -0
  40. package/dist/commands/leave.js.map +1 -0
  41. package/dist/commands/marketplace.d.ts +1 -0
  42. package/dist/commands/marketplace.js +291 -0
  43. package/dist/commands/marketplace.js.map +1 -0
  44. package/dist/commands/msg.d.ts +1 -0
  45. package/dist/commands/msg.js +105 -0
  46. package/dist/commands/msg.js.map +1 -0
  47. package/dist/commands/namespace.d.ts +1 -0
  48. package/dist/commands/namespace.js +95 -0
  49. package/dist/commands/namespace.js.map +1 -0
  50. package/dist/commands/pause.d.ts +2 -0
  51. package/dist/commands/pause.js +45 -0
  52. package/dist/commands/pause.js.map +1 -0
  53. package/dist/commands/protocol.d.ts +1 -0
  54. package/dist/commands/protocol.js +341 -0
  55. package/dist/commands/protocol.js.map +1 -0
  56. package/dist/commands/release.d.ts +1 -0
  57. package/dist/commands/release.js +29 -0
  58. package/dist/commands/release.js.map +1 -0
  59. package/dist/commands/scan.d.ts +1 -0
  60. package/dist/commands/scan.js +157 -0
  61. package/dist/commands/scan.js.map +1 -0
  62. package/dist/commands/serve.d.ts +1 -0
  63. package/dist/commands/serve.js +78 -0
  64. package/dist/commands/serve.js.map +1 -0
  65. package/dist/commands/state.d.ts +1 -0
  66. package/dist/commands/state.js +119 -0
  67. package/dist/commands/state.js.map +1 -0
  68. package/dist/commands/status.d.ts +1 -0
  69. package/dist/commands/status.js +78 -0
  70. package/dist/commands/status.js.map +1 -0
  71. package/dist/commands/swarm.d.ts +1 -0
  72. package/dist/commands/swarm.js +404 -0
  73. package/dist/commands/swarm.js.map +1 -0
  74. package/dist/commands/team.d.ts +1 -0
  75. package/dist/commands/team.js +35 -0
  76. package/dist/commands/team.js.map +1 -0
  77. package/dist/commands/upgrade.d.ts +1 -0
  78. package/dist/commands/upgrade.js +99 -0
  79. package/dist/commands/upgrade.js.map +1 -0
  80. package/dist/hook.d.ts +1 -0
  81. package/dist/hook.js +531 -0
  82. package/dist/hook.js.map +7 -0
  83. package/dist/hooks/post-tool-use.d.ts +2 -0
  84. package/dist/hooks/post-tool-use.js +16 -0
  85. package/dist/hooks/post-tool-use.js.map +1 -0
  86. package/dist/hooks/pre-tool-use.d.ts +2 -0
  87. package/dist/hooks/pre-tool-use.js +49 -0
  88. package/dist/hooks/pre-tool-use.js.map +1 -0
  89. package/dist/hooks/prompt-submit.d.ts +2 -0
  90. package/dist/hooks/prompt-submit.js +64 -0
  91. package/dist/hooks/prompt-submit.js.map +1 -0
  92. package/dist/hooks/session-start.d.ts +2 -0
  93. package/dist/hooks/session-start.js +101 -0
  94. package/dist/hooks/session-start.js.map +1 -0
  95. package/dist/hooks/stop.d.ts +2 -0
  96. package/dist/hooks/stop.js +52 -0
  97. package/dist/hooks/stop.js.map +1 -0
  98. package/dist/lib/config.d.ts +6 -0
  99. package/dist/lib/config.js +53 -0
  100. package/dist/lib/config.js.map +1 -0
  101. package/dist/lib/format.d.ts +22 -0
  102. package/dist/lib/format.js +42 -0
  103. package/dist/lib/format.js.map +1 -0
  104. package/dist/lib/global-config.d.ts +13 -0
  105. package/dist/lib/global-config.js +52 -0
  106. package/dist/lib/global-config.js.map +1 -0
  107. package/dist/lib/hooks.d.ts +2 -0
  108. package/dist/lib/hooks.js +75 -0
  109. package/dist/lib/hooks.js.map +1 -0
  110. package/dist/lib/id.d.ts +1 -0
  111. package/dist/lib/id.js +5 -0
  112. package/dist/lib/id.js.map +1 -0
  113. package/dist/types.d.ts +26 -0
  114. package/dist/types.js +3 -0
  115. package/dist/types.js.map +1 -0
  116. package/hooks/post-tool-use.sh +13 -0
  117. package/hooks/pre-tool-use.sh +13 -0
  118. package/hooks/prompt-submit.sh +13 -0
  119. package/hooks/session-start.sh +13 -0
  120. package/hooks/stop.sh +13 -0
  121. package/package.json +68 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/.pnpm/@agentcoordinationprotocol+sdk@file+..+acp+packages+sdk/node_modules/@agentcoordinationprotocol/sdk/src/client.ts", "../node_modules/.pnpm/@agentcoordinationprotocol+sdk@file+..+acp+packages+sdk/node_modules/@agentcoordinationprotocol/sdk/src/index.ts", "../src/hooks/session-start.ts", "../src/hooks/pre-tool-use.ts", "../src/hooks/post-tool-use.ts", "../src/hooks/stop.ts", "../src/hooks/prompt-submit.ts", "../src/hook.ts"],
4
+ "sourcesContent": [null, null, "import { appendFileSync } from 'node:fs';\nimport { createAcpClient } from '@agentcoordinationprotocol/sdk';\nimport type { ProtocolSpec, RoleAssignment, Claim, ControlStatus } from '@agentcoordinationprotocol/sdk';\nimport type { WglConfig, HookInput } from '../types.js';\n\nexport async function handleSessionStart(config: WglConfig, configPath: string, _input: HookInput): Promise<void> {\n // Export env vars via CLAUDE_ENV_FILE\n const envFile = process.env.CLAUDE_ENV_FILE;\n if (envFile) {\n appendFileSync(envFile, [\n `export WGL_SERVER=\"${config.server}\"`,\n `export WGL_AGENT_ID=\"${config.agentId}\"`,\n `export WGL_NAMESPACE=\"${config.namespace}\"`,\n `export WGL_ROLE=\"${config.role}\"`,\n `export WGL_CONFIG=\"${configPath}\"`,\n ].join('\\n') + '\\n');\n }\n\n const client = createAcpClient(config);\n const context: string[] = [];\n\n try {\n // Fetch everything in parallel\n const [controlRes, protocolRes, rolesRes, claimsRes, messagesRes] = await Promise.all([\n client.getControlStatus().catch(() => null),\n client.getProtocol().catch(() => null),\n client.getRoles().catch(() => null),\n client.getClaims().catch(() => null),\n client.getMessages().catch(() => null),\n ]);\n\n // Check control status\n if (controlRes?.ok) {\n const ctrl = controlRes.data as ControlStatus;\n if (ctrl.halted) {\n context.push(`COORDINATION HALTED${ctrl.reason ? `: ${ctrl.reason}` : ''}. Do not proceed with any coordinated work.`);\n } else if (ctrl.paused) {\n context.push(`Coordination paused${ctrl.reason ? `: ${ctrl.reason}` : ''}. Proceed cautiously.`);\n }\n }\n\n // Register role\n try {\n await client.requestRole(config.role);\n } catch {\n // Non-fatal\n }\n\n // Protocol info\n if (protocolRes?.ok) {\n const p = protocolRes.data as ProtocolSpec;\n if (p.name) {\n context.push(`Protocol: ${p.name}${p.description ? ` \u2014 ${p.description}` : ''}`);\n if (p.phases?.length) {\n context.push(`Phases: ${p.phases.map(ph => ph.name).join(' \u2192 ')}`);\n }\n if (p.rules?.length) {\n context.push(`Rules:\\n${p.rules.map(r => ` - ${r}`).join('\\n')}`);\n }\n }\n }\n\n // Team\n if (rolesRes?.ok && Array.isArray(rolesRes.data)) {\n const roles = rolesRes.data as RoleAssignment[];\n if (roles.length > 0) {\n context.push(`Team: ${roles.map(r => `${r.agent} (${r.role})`).join(', ')}`);\n }\n }\n\n // Active claims\n if (claimsRes?.ok && Array.isArray(claimsRes.data)) {\n const claims = (claimsRes.data as Claim[]).filter(c => c.status === 'active');\n if (claims.length > 0) {\n const mine = claims.filter(c => c.owner === config.agentId);\n const others = claims.filter(c => c.owner !== config.agentId);\n if (mine.length > 0) {\n context.push(`Your claims: ${mine.map(c => c.resource).join(', ')}`);\n }\n if (others.length > 0) {\n context.push(`Locked by others: ${others.map(c => `${c.resource} (${c.owner})`).join(', ')}`);\n }\n }\n }\n\n // Unread messages\n if (messagesRes?.ok && Array.isArray(messagesRes.data)) {\n const msgs = messagesRes.data.filter((m: any) => m.to === config.agentId || m.to === '*');\n if (msgs.length > 0) {\n context.push(`Messages:\\n${msgs.map((m: any) => ` [${m.from}]: ${m.content}`).join('\\n')}`);\n }\n }\n } catch {\n // Server unreachable \u2014 no context, no problem\n }\n\n // Publish session start event (fire-and-forget)\n client.publishEvent('agent.session_start', {\n agentId: config.agentId,\n role: config.role,\n }).catch(() => {});\n\n // Output coordination context\n if (context.length > 0) {\n const output = {\n additionalContext: `[waggle-cli] You are agent ${config.agentId} (role: ${config.role}) coordinating via ACP.\\nServer: ${config.server} | Namespace: ${config.namespace}\\n\\n${context.join('\\n\\n')}\\n\\nFile edits are auto-claimed. Use wgl commands for manual coordination.`,\n };\n console.log(JSON.stringify(output));\n }\n}\n", "import { createAcpClient } from '@agentcoordinationprotocol/sdk';\nimport type { ControlStatus, ClaimResult } from '@agentcoordinationprotocol/sdk';\nimport type { WglConfig, HookInput, HookOutput } from '../types.js';\n\nexport async function handlePreToolUse(config: WglConfig, input: HookInput): Promise<void> {\n const client = createAcpClient(config);\n\n // Check halt status\n try {\n const controlRes = await client.getControlStatus();\n if (controlRes.ok) {\n const ctrl = controlRes.data as ControlStatus;\n if (ctrl.halted) {\n const output: HookOutput = {\n decision: 'block',\n reason: `Coordination HALTED${ctrl.reason ? `: ${ctrl.reason}` : ''}. File edits blocked.`,\n };\n console.log(JSON.stringify(output));\n return;\n }\n }\n } catch {\n // Server unreachable \u2014 allow edit\n }\n\n // Auto-claim file\n if (!config.autoClaimFiles) return;\n\n const filePath = input.tool_input?.file_path as string | undefined;\n if (!filePath) return;\n\n const resource = `file:${filePath}`;\n\n try {\n const res = await client.claim(resource, filePath);\n if (res.ok) {\n const result = res.data as ClaimResult;\n if (result.status === 'rejected') {\n const owner = result.claim?.owner || 'another agent';\n const output: HookOutput = {\n decision: 'block',\n reason: `File locked by ${owner}: ${filePath}`,\n };\n console.log(JSON.stringify(output));\n return;\n }\n // Approved \u2014 proceed silently\n }\n } catch {\n // Server unreachable \u2014 allow edit\n }\n}\n", "import { createAcpClient } from '@agentcoordinationprotocol/sdk';\nimport type { WglConfig, HookInput } from '../types.js';\n\nexport async function handlePostToolUse(config: WglConfig, input: HookInput): Promise<void> {\n const client = createAcpClient(config);\n\n const filePath = input.tool_input?.file_path as string | undefined;\n if (!filePath) return;\n\n const resource = `file:${filePath}`;\n\n // Publish discovery about file change (fire-and-forget)\n if (config.autoPublishDiscoveries) {\n const toolName = input.tool_name || 'unknown';\n client.publishDiscovery(\n `file-change:${filePath}`,\n `${config.agentId} ${toolName === 'Write' ? 'created' : 'edited'} ${filePath}`,\n 'file-change',\n ).catch(() => {});\n }\n\n // Report progress on active claim (fire-and-forget)\n client.reportProgress(resource, 0, `${input.tool_name || 'edit'} completed`).catch(() => {});\n}\n", "import { createAcpClient } from '@agentcoordinationprotocol/sdk';\nimport type { Claim, Message, HelpRequest } from '@agentcoordinationprotocol/sdk';\nimport type { WglConfig, HookInput, HookOutput } from '../types.js';\n\nexport async function handleStop(config: WglConfig, _input: HookInput): Promise<void> {\n const client = createAcpClient(config);\n\n try {\n // Check for blockers in parallel\n const [messagesRes, helpRes, claimsRes] = await Promise.all([\n client.getMessages().catch(() => null),\n client.getHelp().catch(() => null),\n client.getClaims().catch(() => null),\n ]);\n\n const blockers: string[] = [];\n\n // Check for unread messages addressed to us\n if (messagesRes?.ok && Array.isArray(messagesRes.data)) {\n const unread = (messagesRes.data as Message[]).filter(\n m => m.to === config.agentId || m.to === '*',\n );\n if (unread.length > 0) {\n blockers.push(`${unread.length} unread message(s) \u2014 check with \\`wgl status\\``);\n }\n }\n\n // Check for open help requests\n if (helpRes?.ok && Array.isArray(helpRes.data)) {\n const openHelp = (helpRes.data as HelpRequest[]).filter(h => h.status === 'open');\n if (openHelp.length > 0) {\n blockers.push(`${openHelp.length} open help request(s) need attention`);\n }\n }\n\n // Release completed claims\n if (claimsRes?.ok && Array.isArray(claimsRes.data)) {\n const mine = (claimsRes.data as Claim[]).filter(\n c => c.owner === config.agentId && c.status === 'active',\n );\n for (const claim of mine) {\n client.releaseClaim(claim.resource).catch(() => {});\n }\n }\n\n // Block if there are blockers\n if (blockers.length > 0) {\n const output: HookOutput = {\n decision: 'block',\n reason: `Cannot stop \u2014 coordination items pending:\\n${blockers.map(b => ` \u2022 ${b}`).join('\\n')}`,\n };\n console.log(JSON.stringify(output));\n return;\n }\n } catch {\n // Server unreachable \u2014 allow stop\n }\n\n // Publish session complete (fire-and-forget)\n client.publishEvent('agent.session_complete', {\n agentId: config.agentId,\n role: config.role,\n }).catch(() => {});\n}\n", "import { readFileSync, writeFileSync } from 'node:fs';\nimport { createAcpClient } from '@agentcoordinationprotocol/sdk';\nimport type { ControlStatus, IncubatorEvent } from '@agentcoordinationprotocol/sdk';\nimport type { WglConfig, HookInput } from '../types.js';\n\nexport async function handlePromptSubmit(config: WglConfig, configPath: string, _input: HookInput): Promise<void> {\n const client = createAcpClient(config);\n const context: string[] = [];\n\n try {\n // Check halt status and fetch new events in parallel\n const [controlRes, eventsRes] = await Promise.all([\n client.getControlStatus().catch(() => null),\n client.getEvents(config.lastEventCursor).catch(() => null),\n ]);\n\n // Check control status\n if (controlRes?.ok) {\n const ctrl = controlRes.data as ControlStatus;\n if (ctrl.halted) {\n context.push(`COORDINATION HALTED${ctrl.reason ? `: ${ctrl.reason}` : ''}. Do not proceed with coordinated work.`);\n } else if (ctrl.paused) {\n context.push(`Coordination paused${ctrl.reason ? `: ${ctrl.reason}` : ''}.`);\n }\n }\n\n // Summarize new events\n if (eventsRes?.ok && Array.isArray(eventsRes.data)) {\n const events = eventsRes.data as IncubatorEvent[];\n if (events.length > 0) {\n // Update cursor\n const maxId = Math.max(...events.map(e => e.id));\n config.lastEventCursor = maxId;\n try {\n writeFileSync(configPath, JSON.stringify(config, null, 2) + '\\n');\n } catch {\n // Non-fatal\n }\n\n // Summarize by type\n const byType: Record<string, number> = {};\n for (const ev of events) {\n byType[ev.type] = (byType[ev.type] || 0) + 1;\n }\n\n const summary = Object.entries(byType)\n .map(([type, count]) => `${type} (${count})`)\n .join(', ');\n\n context.push(`New events since last prompt: ${summary}`);\n\n // Show details for important events\n const important = events.filter(e =>\n e.type.startsWith('agent.') ||\n e.type.startsWith('control.') ||\n e.type.startsWith('conflict.'),\n );\n if (important.length > 0) {\n for (const ev of important.slice(-5)) {\n context.push(` [${ev.type}] ${JSON.stringify(ev.data)}`);\n }\n }\n }\n }\n } catch {\n // Server unreachable \u2014 no injection\n }\n\n // Output as plain text (UserPromptSubmit format)\n if (context.length > 0) {\n console.log(`[waggle-cli] ${context.join('\\n')}`);\n }\n}\n", "import { readFileSync } from 'node:fs';\nimport type { WglConfig, HookInput } from './types.js';\n\nconst hookName = process.argv[2];\nconst configPath = process.argv[3];\n\nif (!hookName || !configPath) process.exit(0);\n\nlet config: WglConfig;\ntry {\n config = JSON.parse(readFileSync(configPath, 'utf8'));\n} catch {\n process.exit(0);\n}\n\n// Read stdin\nlet input: HookInput;\ntry {\n const raw = readFileSync(0, 'utf8');\n input = raw ? JSON.parse(raw) : {};\n} catch {\n input = {} as HookInput;\n}\n\nasync function run(): Promise<void> {\n switch (hookName) {\n case 'session-start': {\n const { handleSessionStart } = await import('./hooks/session-start.js');\n await handleSessionStart(config, configPath, input);\n break;\n }\n case 'pre-tool-use': {\n const { handlePreToolUse } = await import('./hooks/pre-tool-use.js');\n await handlePreToolUse(config, input);\n break;\n }\n case 'post-tool-use': {\n const { handlePostToolUse } = await import('./hooks/post-tool-use.js');\n await handlePostToolUse(config, input);\n break;\n }\n case 'stop': {\n const { handleStop } = await import('./hooks/stop.js');\n await handleStop(config, input);\n break;\n }\n case 'prompt-submit': {\n const { handlePromptSubmit } = await import('./hooks/prompt-submit.js');\n await handlePromptSubmit(config, configPath, input);\n break;\n }\n default:\n process.exit(0);\n }\n}\n\nrun().catch(() => process.exit(0));\n"],
5
+ "mappings": ";;;;;;;;;;;;AAAA,SAAS,WAAW,mBAAmB;AACvC,SAAS,WAAW,oBAAoB;AAgBlC,SAAU,gBAAgBA,SAAuB;AACrD,QAAM,OAAOA,QAAO,OAAO,QAAQ,OAAO,EAAE;AAC5C,QAAM,MAAMA,QAAO,aAAa,eAAe,YAAY,KAAK,IAAIA,QAAO,SAAS;AAEpF,WAAS,MAAmB,QAAgB,MAAc,MAAc;AACtE,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAU;AACrC,YAAM,MAAM,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG,IAAI,EAAE;AAC7C,YAAM,UAAU,IAAI,aAAa;AACjC,YAAM,QAAQ,UAAU,eAAe;AAEvC,YAAM,UAAkC;QACtC,cAAcA,QAAO;;AAEvB,UAAI;AACJ,UAAI,SAAS,QAAW;AACtB,kBAAU,KAAK,UAAU,IAAI;AAC7B,gBAAQ,cAAc,IAAI;AAC1B,gBAAQ,gBAAgB,IAAI,OAAO,WAAW,OAAO,EAAE,SAAQ;MACjE;AAEA,YAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,SAAS,SAAS,QAAO,GAAI,CAAC,QAAO;AACpE,YAAI,OAAO;AACX,YAAI,GAAG,QAAQ,CAAC,UAAkB,QAAQ,KAAK;AAC/C,YAAI,GAAG,OAAO,MAAK;AACjB,cAAI;AACF,kBAAM,SAAS,OAAO,KAAK,MAAM,IAAI,IAAI,CAAA;AACzC,oBAAQ,EAAE,IAAI,IAAI,cAAe,OAAO,IAAI,aAAc,KAAK,QAAQ,IAAI,YAAa,MAAM,OAAW,CAAE;UAC7G,QAAQ;AACN,oBAAQ,EAAE,IAAI,OAAO,QAAQ,IAAI,YAAa,MAAM,CAAA,EAAO,CAAE;UAC/D;QACF,CAAC;MACH,CAAC;AAED,UAAI,GAAG,SAAS,CAAC,QAAQ,OAAO,GAAG,CAAC;AACpC,UAAI,GAAG,WAAW,MAAK;AAAG,YAAI,QAAO;AAAI,eAAO,IAAI,MAAM,SAAS,CAAC;MAAG,CAAC;AAExE,UAAI;AAAS,YAAI,MAAM,OAAO;AAC9B,UAAI,IAAG;IACT,CAAC;EACH;AAEA,SAAO;;IAEL,QAAQ,MAAM,MAAM,OAAO,SAAS;;IAGpC,kBAAkB,MAAM,MAAqB,OAAO,iBAAiB;IACrE,MAAM,CAAC,QAAiB,SACtB,MAAM,QAAQ,iBAAiB,EAAE,QAAQ,GAAG,KAAI,CAAE;IACpD,OAAO,CAAC,QAAiB,SACvB,MAAM,QAAQ,kBAAkB,EAAE,QAAQ,GAAG,KAAI,CAAE;IACrD,QAAQ,CAAC,SACP,MAAM,QAAQ,mBAAmB,QAAQ,CAAA,CAAE;;IAG7C,OAAO,CAAC,UAAkB,OAAgB,SACxC,MAAmB,QAAQ,WAAW,EAAE,UAAU,OAAO,SAAS,UAAU,GAAG,KAAI,CAAE;IACvF,cAAc,CAAC,aAAqB,MAAM,UAAU,WAAW,mBAAmB,QAAQ,CAAC,EAAE;IAC7F,WAAW,CAAC,YAAoB;AAC9B,YAAM,KAAK,UAAU,YAAY,mBAAmB,OAAO,CAAC,KAAK;AACjE,aAAO,MAAe,OAAO,UAAU,EAAE,EAAE;IAC7C;IACA,YAAY,CAAC,aACX,MAAM,OAAO,WAAW,mBAAmB,QAAQ,CAAC,EAAE;IACxD,YAAY,CAAC,YAAoB;AAC/B,YAAM,KAAK,UAAU,YAAY,mBAAmB,OAAO,CAAC,KAAK;AACjE,aAAO,MAAe,OAAO,UAAU,EAAE,EAAE;IAC7C;;IAGA,cAAc,CAAC,MAAc,SAC3B,MAAsB,QAAQ,WAAW,EAAE,MAAM,KAAI,CAAE;IACzD,WAAW,CAAC,OAAgB,SAA4B;AACtD,YAAM,SAAmB,CAAA;AACzB,UAAI,UAAU;AAAW,eAAO,KAAK,SAAS,KAAK,EAAE;AACrD,UAAI,MAAM;AAAM,eAAO,KAAK,QAAQ,mBAAmB,KAAK,IAAI,CAAC,EAAE;AACnE,YAAM,KAAK,OAAO,SAAS,IAAI,OAAO,KAAK,GAAG,CAAC,KAAK;AACpD,aAAO,MAAwB,OAAO,UAAU,EAAE,EAAE;IACtD;;IAGA,kBAAkB,CAAC,OAAe,SAAiB,aACjD,MAAiB,QAAQ,gBAAgB,EAAE,OAAO,SAAS,SAAQ,CAAE;IACvE,gBAAgB,MAAM,MAAmB,OAAO,cAAc;IAC9D,mBAAmB,CAAC,SAAgD;AAClE,YAAM,SAAmB,CAAA;AACzB,UAAI,MAAM;AAAO,eAAO,KAAK,SAAS,mBAAmB,KAAK,KAAK,CAAC,EAAE;AACtE,UAAI,MAAM;AAAU,eAAO,KAAK,YAAY,mBAAmB,KAAK,QAAQ,CAAC,EAAE;AAC/E,YAAM,KAAK,OAAO,SAAS,IAAI,OAAO,KAAK,GAAG,CAAC,KAAK;AACpD,aAAO,MAAmB,OAAO,eAAe,EAAE,EAAE;IACtD;;IAGA,aAAa,CAAC,IAAY,SAAiB,SACzC,MAAe,QAAQ,aAAa,EAAE,IAAI,SAAS,GAAG,KAAI,CAAE;IAC9D,aAAa,CAAC,SAA6B;AACzC,YAAM,KAAK,MAAM,QAAQ,UAAU,mBAAmB,KAAK,KAAK,CAAC,KAAK;AACtE,aAAO,MAAiB,OAAO,YAAY,EAAE,EAAE;IACjD;;IAGA,aAAa,CAAC,MAAc,SAC1B,MAAsB,QAAQ,kBAAkB,EAAE,MAAM,GAAG,KAAI,CAAE;IACnE,UAAU,MAAM,MAAwB,OAAO,QAAQ;;IAGvD,SAAS,MAAM,MAAqB,OAAO,OAAO;IAClD,aAAa,CAAC,SAAiB,kBAA2B,YACxD,MAAmB,QAAQ,SAAS,EAAE,SAAS,kBAAkB,QAAO,CAAE;IAC5E,WAAW,CAAC,OACV,MAAmB,QAAQ,SAAS,mBAAmB,EAAE,CAAC,QAAQ;IACpE,aAAa,CAAC,OACZ,MAAmB,QAAQ,SAAS,mBAAmB,EAAE,CAAC,UAAU;;IAGtE,gBAAgB,CAAC,OAAe,UAAkB,SAChD,MAAsB,QAAQ,aAAa,EAAE,OAAO,UAAU,KAAI,CAAE;;IAGtE,aAAa,CAAC,SAAiB;AAC7B,YAAM,KAAK,OAAO,SAAS,mBAAmB,IAAI,CAAC,KAAK;AACxD,aAAO,MAAoB,OAAO,YAAY,EAAE,EAAE;IACpD;IACA,cAAc,CAAC,aACb,MAAM,OAAO,aAAa,QAAQ;;IAGpC,UAAU,CAAC,SAAkB,aAAqB;AAChD,YAAM,SAAmB,CAAA;AACzB,UAAI;AAAS,eAAO,KAAK,WAAW,mBAAmB,OAAO,CAAC,EAAE;AACjE,UAAI;AAAU,eAAO,KAAK,YAAY,mBAAmB,QAAQ,CAAC,EAAE;AACpE,YAAM,KAAK,OAAO,SAAS,IAAI,OAAO,KAAK,GAAG,CAAC,KAAK;AACpD,aAAO,MAA+B,OAAO,SAAS,EAAE,EAAE;IAC5D;IACA,aAAa,CAAC,QACZ,MAA2D,OAAO,UAAU,mBAAmB,GAAG,CAAC,EAAE;IACvG,YAAY,CAAC,SAAkD;AAC7D,YAAM,SAAmB,CAAA;AACzB,UAAI,MAAM;AAAS,eAAO,KAAK,WAAW,mBAAmB,KAAK,OAAO,CAAC,EAAE;AAC5E,UAAI,MAAM;AAAU,eAAO,KAAK,YAAY,mBAAmB,KAAK,QAAQ,CAAC,EAAE;AAC/E,YAAM,KAAK,OAAO,SAAS,IAAI,OAAO,KAAK,GAAG,CAAC,KAAK;AACpD,aAAO,MAAgD,OAAO,SAAS,EAAE,EAAE;IAC7E;IACA,UAAU,CAAC,KAAa,OAAgB,UAAmB,UACzD,MAAM,OAAO,UAAU,mBAAmB,GAAG,CAAC,IAAI,EAAE,OAAO,UAAU,MAAK,CAAE;IAC9E,aAAa,CAAC,QACZ,MAAM,UAAU,UAAU,mBAAmB,GAAG,CAAC,EAAE;;IAGrD,cAAc,CAAC,aAAqB,aAAqB,WACvD,MAAgB,QAAQ,cAAc,EAAE,aAAa,aAAa,OAAM,CAAE;;IAG5E,sBAAsB,CAAC,MAAc,SACnC,MAA4B,QAAQ,mBAAmB,EAAE,MAAM,GAAG,KAAI,CAAE;;IAG1E,iBAAiB,CAAC,QAAgB,SAChC,MAAwB,QAAQ,uBAAuB,EAAE,QAAQ,GAAG,KAAI,CAAE;IAC5E,UAAU,CAAC,QAAgB,YACzB,MAAM,QAAQ,wBAAwB,EAAE,QAAQ,QAAO,CAAE;IAC3D,eAAe,CAAC,QAAgB,SAC9B,MAAgB,QAAQ,uBAAuB,EAAE,QAAQ,GAAG,KAAI,CAAE;IACpE,eAAe,CAAC,eACd,MAAM,QAAQ,uBAAuB,mBAAmB,UAAU,CAAC,EAAE;IACvE,iBAAiB,CAAC,QAAgB,UAChC,MAAM,QAAQ,wBAAwB,EAAE,QAAQ,MAAK,CAAE;;IAGzD,WAAW,MACT,MAAqD,OAAO,SAAS;IACvE,gBAAgB,CAAC,UACf,MAAM,QAAQ,qBAAqB,EAAE,MAAK,CAAE;IAC9C,kBAAkB,CAAC,UACjB,MAAM,UAAU,qBAAqB,mBAAmB,KAAK,CAAC,EAAE;IAClE,cAAc,CAAC,UACb,MAAM,QAAQ,mBAAmB,EAAE,MAAK,CAAE;IAC5C,gBAAgB,CAAC,UACf,MAAM,UAAU,mBAAmB,mBAAmB,KAAK,CAAC,EAAE;;IAGhE,eAAe,MAAM,MAAgB,OAAO,MAAM;IAClD,iBAAiB,CAAC,SAChB,MAAM,QAAQ,QAAQ,EAAE,KAAI,CAAE;IAChC,iBAAiB,CAAC,SAChB,MAAM,UAAU,QAAQ,mBAAmB,IAAI,CAAC,EAAE;;AAExD;AA5MA,IASM;AATN;;AASA,IAAM,UAAU;;;;;ACThB;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA,SAAS,sBAAsB;AAK/B,eAAsB,mBAAmBC,SAAmBC,aAAoB,QAAkC;AAEhH,QAAM,UAAU,QAAQ,IAAI;AAC5B,MAAI,SAAS;AACX,mBAAe,SAAS;AAAA,MACtB,sBAAsBD,QAAO,MAAM;AAAA,MACnC,wBAAwBA,QAAO,OAAO;AAAA,MACtC,yBAAyBA,QAAO,SAAS;AAAA,MACzC,oBAAoBA,QAAO,IAAI;AAAA,MAC/B,sBAAsBC,WAAU;AAAA,IAClC,EAAE,KAAK,IAAI,IAAI,IAAI;AAAA,EACrB;AAEA,QAAM,SAAS,gBAAgBD,OAAM;AACrC,QAAM,UAAoB,CAAC;AAE3B,MAAI;AAEF,UAAM,CAAC,YAAY,aAAa,UAAU,WAAW,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpF,OAAO,iBAAiB,EAAE,MAAM,MAAM,IAAI;AAAA,MAC1C,OAAO,YAAY,EAAE,MAAM,MAAM,IAAI;AAAA,MACrC,OAAO,SAAS,EAAE,MAAM,MAAM,IAAI;AAAA,MAClC,OAAO,UAAU,EAAE,MAAM,MAAM,IAAI;AAAA,MACnC,OAAO,YAAY,EAAE,MAAM,MAAM,IAAI;AAAA,IACvC,CAAC;AAGD,QAAI,YAAY,IAAI;AAClB,YAAM,OAAO,WAAW;AACxB,UAAI,KAAK,QAAQ;AACf,gBAAQ,KAAK,sBAAsB,KAAK,SAAS,KAAK,KAAK,MAAM,KAAK,EAAE,6CAA6C;AAAA,MACvH,WAAW,KAAK,QAAQ;AACtB,gBAAQ,KAAK,sBAAsB,KAAK,SAAS,KAAK,KAAK,MAAM,KAAK,EAAE,uBAAuB;AAAA,MACjG;AAAA,IACF;AAGA,QAAI;AACF,YAAM,OAAO,YAAYA,QAAO,IAAI;AAAA,IACtC,QAAQ;AAAA,IAER;AAGA,QAAI,aAAa,IAAI;AACnB,YAAM,IAAI,YAAY;AACtB,UAAI,EAAE,MAAM;AACV,gBAAQ,KAAK,aAAa,EAAE,IAAI,GAAG,EAAE,cAAc,WAAM,EAAE,WAAW,KAAK,EAAE,EAAE;AAC/E,YAAI,EAAE,QAAQ,QAAQ;AACpB,kBAAQ,KAAK,WAAW,EAAE,OAAO,IAAI,QAAM,GAAG,IAAI,EAAE,KAAK,UAAK,CAAC,EAAE;AAAA,QACnE;AACA,YAAI,EAAE,OAAO,QAAQ;AACnB,kBAAQ,KAAK;AAAA,EAAW,EAAE,MAAM,IAAI,OAAK,OAAO,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AAGA,QAAI,UAAU,MAAM,MAAM,QAAQ,SAAS,IAAI,GAAG;AAChD,YAAM,QAAQ,SAAS;AACvB,UAAI,MAAM,SAAS,GAAG;AACpB,gBAAQ,KAAK,SAAS,MAAM,IAAI,OAAK,GAAG,EAAE,KAAK,KAAK,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,MAC7E;AAAA,IACF;AAGA,QAAI,WAAW,MAAM,MAAM,QAAQ,UAAU,IAAI,GAAG;AAClD,YAAM,SAAU,UAAU,KAAiB,OAAO,OAAK,EAAE,WAAW,QAAQ;AAC5E,UAAI,OAAO,SAAS,GAAG;AACrB,cAAM,OAAO,OAAO,OAAO,OAAK,EAAE,UAAUA,QAAO,OAAO;AAC1D,cAAM,SAAS,OAAO,OAAO,OAAK,EAAE,UAAUA,QAAO,OAAO;AAC5D,YAAI,KAAK,SAAS,GAAG;AACnB,kBAAQ,KAAK,gBAAgB,KAAK,IAAI,OAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,QACrE;AACA,YAAI,OAAO,SAAS,GAAG;AACrB,kBAAQ,KAAK,qBAAqB,OAAO,IAAI,OAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,QAC9F;AAAA,MACF;AAAA,IACF;AAGA,QAAI,aAAa,MAAM,MAAM,QAAQ,YAAY,IAAI,GAAG;AACtD,YAAM,OAAO,YAAY,KAAK,OAAO,CAAC,MAAW,EAAE,OAAOA,QAAO,WAAW,EAAE,OAAO,GAAG;AACxF,UAAI,KAAK,SAAS,GAAG;AACnB,gBAAQ,KAAK;AAAA,EAAc,KAAK,IAAI,CAAC,MAAW,MAAM,EAAE,IAAI,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,MAC7F;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,SAAO,aAAa,uBAAuB;AAAA,IACzC,SAASA,QAAO;AAAA,IAChB,MAAMA,QAAO;AAAA,EACf,CAAC,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AAGjB,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAM,SAAS;AAAA,MACb,mBAAmB,8BAA8BA,QAAO,OAAO,WAAWA,QAAO,IAAI;AAAA,UAAoCA,QAAO,MAAM,iBAAiBA,QAAO,SAAS;AAAA;AAAA,EAAO,QAAQ,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA,IACpM;AACA,YAAQ,IAAI,KAAK,UAAU,MAAM,CAAC;AAAA,EACpC;AACF;AA7GA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA;AAAA;AAAA;AAAA;AAIA,eAAsB,iBAAiBE,SAAmBC,QAAiC;AACzF,QAAM,SAAS,gBAAgBD,OAAM;AAGrC,MAAI;AACF,UAAM,aAAa,MAAM,OAAO,iBAAiB;AACjD,QAAI,WAAW,IAAI;AACjB,YAAM,OAAO,WAAW;AACxB,UAAI,KAAK,QAAQ;AACf,cAAM,SAAqB;AAAA,UACzB,UAAU;AAAA,UACV,QAAQ,sBAAsB,KAAK,SAAS,KAAK,KAAK,MAAM,KAAK,EAAE;AAAA,QACrE;AACA,gBAAQ,IAAI,KAAK,UAAU,MAAM,CAAC;AAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,MAAI,CAACA,QAAO,eAAgB;AAE5B,QAAM,WAAWC,OAAM,YAAY;AACnC,MAAI,CAAC,SAAU;AAEf,QAAM,WAAW,QAAQ,QAAQ;AAEjC,MAAI;AACF,UAAM,MAAM,MAAM,OAAO,MAAM,UAAU,QAAQ;AACjD,QAAI,IAAI,IAAI;AACV,YAAM,SAAS,IAAI;AACnB,UAAI,OAAO,WAAW,YAAY;AAChC,cAAM,QAAQ,OAAO,OAAO,SAAS;AACrC,cAAM,SAAqB;AAAA,UACzB,UAAU;AAAA,UACV,QAAQ,kBAAkB,KAAK,KAAK,QAAQ;AAAA,QAC9C;AACA,gBAAQ,IAAI,KAAK,UAAU,MAAM,CAAC;AAClC;AAAA,MACF;AAAA,IAEF;AAAA,EACF,QAAQ;AAAA,EAER;AACF;AAnDA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAGA,eAAsB,kBAAkBC,SAAmBC,QAAiC;AAC1F,QAAM,SAAS,gBAAgBD,OAAM;AAErC,QAAM,WAAWC,OAAM,YAAY;AACnC,MAAI,CAAC,SAAU;AAEf,QAAM,WAAW,QAAQ,QAAQ;AAGjC,MAAID,QAAO,wBAAwB;AACjC,UAAM,WAAWC,OAAM,aAAa;AACpC,WAAO;AAAA,MACL,eAAe,QAAQ;AAAA,MACvB,GAAGD,QAAO,OAAO,IAAI,aAAa,UAAU,YAAY,QAAQ,IAAI,QAAQ;AAAA,MAC5E;AAAA,IACF,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EAClB;AAGA,SAAO,eAAe,UAAU,GAAG,GAAGC,OAAM,aAAa,MAAM,YAAY,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AAC7F;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAIA,eAAsB,WAAWC,SAAmB,QAAkC;AACpF,QAAM,SAAS,gBAAgBA,OAAM;AAErC,MAAI;AAEF,UAAM,CAAC,aAAa,SAAS,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC1D,OAAO,YAAY,EAAE,MAAM,MAAM,IAAI;AAAA,MACrC,OAAO,QAAQ,EAAE,MAAM,MAAM,IAAI;AAAA,MACjC,OAAO,UAAU,EAAE,MAAM,MAAM,IAAI;AAAA,IACrC,CAAC;AAED,UAAM,WAAqB,CAAC;AAG5B,QAAI,aAAa,MAAM,MAAM,QAAQ,YAAY,IAAI,GAAG;AACtD,YAAM,SAAU,YAAY,KAAmB;AAAA,QAC7C,OAAK,EAAE,OAAOA,QAAO,WAAW,EAAE,OAAO;AAAA,MAC3C;AACA,UAAI,OAAO,SAAS,GAAG;AACrB,iBAAS,KAAK,GAAG,OAAO,MAAM,qDAAgD;AAAA,MAChF;AAAA,IACF;AAGA,QAAI,SAAS,MAAM,MAAM,QAAQ,QAAQ,IAAI,GAAG;AAC9C,YAAM,WAAY,QAAQ,KAAuB,OAAO,OAAK,EAAE,WAAW,MAAM;AAChF,UAAI,SAAS,SAAS,GAAG;AACvB,iBAAS,KAAK,GAAG,SAAS,MAAM,sCAAsC;AAAA,MACxE;AAAA,IACF;AAGA,QAAI,WAAW,MAAM,MAAM,QAAQ,UAAU,IAAI,GAAG;AAClD,YAAM,OAAQ,UAAU,KAAiB;AAAA,QACvC,OAAK,EAAE,UAAUA,QAAO,WAAW,EAAE,WAAW;AAAA,MAClD;AACA,iBAAW,SAAS,MAAM;AACxB,eAAO,aAAa,MAAM,QAAQ,EAAE,MAAM,MAAM;AAAA,QAAC,CAAC;AAAA,MACpD;AAAA,IACF;AAGA,QAAI,SAAS,SAAS,GAAG;AACvB,YAAM,SAAqB;AAAA,QACzB,UAAU;AAAA,QACV,QAAQ;AAAA,EAA8C,SAAS,IAAI,OAAK,YAAO,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,MAChG;AACA,cAAQ,IAAI,KAAK,UAAU,MAAM,CAAC;AAClC;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,SAAO,aAAa,0BAA0B;AAAA,IAC5C,SAASA,QAAO;AAAA,IAChB,MAAMA,QAAO;AAAA,EACf,CAAC,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AACnB;AA/DA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA,SAAuB,qBAAqB;AAK5C,eAAsB,mBAAmBC,SAAmBC,aAAoB,QAAkC;AAChH,QAAM,SAAS,gBAAgBD,OAAM;AACrC,QAAM,UAAoB,CAAC;AAE3B,MAAI;AAEF,UAAM,CAAC,YAAY,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,MAChD,OAAO,iBAAiB,EAAE,MAAM,MAAM,IAAI;AAAA,MAC1C,OAAO,UAAUA,QAAO,eAAe,EAAE,MAAM,MAAM,IAAI;AAAA,IAC3D,CAAC;AAGD,QAAI,YAAY,IAAI;AAClB,YAAM,OAAO,WAAW;AACxB,UAAI,KAAK,QAAQ;AACf,gBAAQ,KAAK,sBAAsB,KAAK,SAAS,KAAK,KAAK,MAAM,KAAK,EAAE,yCAAyC;AAAA,MACnH,WAAW,KAAK,QAAQ;AACtB,gBAAQ,KAAK,sBAAsB,KAAK,SAAS,KAAK,KAAK,MAAM,KAAK,EAAE,GAAG;AAAA,MAC7E;AAAA,IACF;AAGA,QAAI,WAAW,MAAM,MAAM,QAAQ,UAAU,IAAI,GAAG;AAClD,YAAM,SAAS,UAAU;AACzB,UAAI,OAAO,SAAS,GAAG;AAErB,cAAM,QAAQ,KAAK,IAAI,GAAG,OAAO,IAAI,OAAK,EAAE,EAAE,CAAC;AAC/C,QAAAA,QAAO,kBAAkB;AACzB,YAAI;AACF,wBAAcC,aAAY,KAAK,UAAUD,SAAQ,MAAM,CAAC,IAAI,IAAI;AAAA,QAClE,QAAQ;AAAA,QAER;AAGA,cAAM,SAAiC,CAAC;AACxC,mBAAW,MAAM,QAAQ;AACvB,iBAAO,GAAG,IAAI,KAAK,OAAO,GAAG,IAAI,KAAK,KAAK;AAAA,QAC7C;AAEA,cAAM,UAAU,OAAO,QAAQ,MAAM,EAClC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,KAAK,KAAK,GAAG,EAC3C,KAAK,IAAI;AAEZ,gBAAQ,KAAK,iCAAiC,OAAO,EAAE;AAGvD,cAAM,YAAY,OAAO;AAAA,UAAO,OAC9B,EAAE,KAAK,WAAW,QAAQ,KAC1B,EAAE,KAAK,WAAW,UAAU,KAC5B,EAAE,KAAK,WAAW,WAAW;AAAA,QAC/B;AACA,YAAI,UAAU,SAAS,GAAG;AACxB,qBAAW,MAAM,UAAU,MAAM,EAAE,GAAG;AACpC,oBAAQ,KAAK,MAAM,GAAG,IAAI,KAAK,KAAK,UAAU,GAAG,IAAI,CAAC,EAAE;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,MAAI,QAAQ,SAAS,GAAG;AACtB,YAAQ,IAAI,gBAAgB,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,EAClD;AACF;AAxEA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,SAAS,gBAAAE,qBAAoB;AAG7B,IAAM,WAAW,QAAQ,KAAK,CAAC;AAC/B,IAAM,aAAa,QAAQ,KAAK,CAAC;AAEjC,IAAI,CAAC,YAAY,CAAC,WAAY,SAAQ,KAAK,CAAC;AAE5C,IAAI;AACJ,IAAI;AACF,WAAS,KAAK,MAAMA,cAAa,YAAY,MAAM,CAAC;AACtD,QAAQ;AACN,UAAQ,KAAK,CAAC;AAChB;AAGA,IAAI;AACJ,IAAI;AACF,QAAM,MAAMA,cAAa,GAAG,MAAM;AAClC,UAAQ,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AACnC,QAAQ;AACN,UAAQ,CAAC;AACX;AAEA,eAAe,MAAqB;AAClC,UAAQ,UAAU;AAAA,IAChB,KAAK,iBAAiB;AACpB,YAAM,EAAE,oBAAAC,oBAAmB,IAAI,MAAM;AACrC,YAAMA,oBAAmB,QAAQ,YAAY,KAAK;AAClD;AAAA,IACF;AAAA,IACA,KAAK,gBAAgB;AACnB,YAAM,EAAE,kBAAAC,kBAAiB,IAAI,MAAM;AACnC,YAAMA,kBAAiB,QAAQ,KAAK;AACpC;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,YAAM,EAAE,mBAAAC,mBAAkB,IAAI,MAAM;AACpC,YAAMA,mBAAkB,QAAQ,KAAK;AACrC;AAAA,IACF;AAAA,IACA,KAAK,QAAQ;AACX,YAAM,EAAE,YAAAC,YAAW,IAAI,MAAM;AAC7B,YAAMA,YAAW,QAAQ,KAAK;AAC9B;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,YAAM,EAAE,oBAAAC,oBAAmB,IAAI,MAAM;AACrC,YAAMA,oBAAmB,QAAQ,YAAY,KAAK;AAClD;AAAA,IACF;AAAA,IACA;AACE,cAAQ,KAAK,CAAC;AAAA,EAClB;AACF;AAEA,IAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,CAAC,CAAC;",
6
+ "names": ["config", "config", "configPath", "config", "input", "config", "input", "config", "config", "configPath", "readFileSync", "handleSessionStart", "handlePreToolUse", "handlePostToolUse", "handleStop", "handlePromptSubmit"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import type { WglConfig, HookInput } from '../types.js';
2
+ export declare function handlePostToolUse(config: WglConfig, input: HookInput): Promise<void>;
@@ -0,0 +1,16 @@
1
+ import { createAcpClient } from '@agentcoordinationprotocol/sdk';
2
+ export async function handlePostToolUse(config, input) {
3
+ const client = createAcpClient(config);
4
+ const filePath = input.tool_input?.file_path;
5
+ if (!filePath)
6
+ return;
7
+ const resource = `file:${filePath}`;
8
+ // Publish discovery about file change (fire-and-forget)
9
+ if (config.autoPublishDiscoveries) {
10
+ const toolName = input.tool_name || 'unknown';
11
+ client.publishDiscovery(`file-change:${filePath}`, `${config.agentId} ${toolName === 'Write' ? 'created' : 'edited'} ${filePath}`, 'file-change').catch(() => { });
12
+ }
13
+ // Report progress on active claim (fire-and-forget)
14
+ client.reportProgress(resource, 0, `${input.tool_name || 'edit'} completed`).catch(() => { });
15
+ }
16
+ //# sourceMappingURL=post-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../src/hooks/post-tool-use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAiB,EAAE,KAAgB;IACzE,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,SAA+B,CAAC;IACnE,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,MAAM,QAAQ,GAAG,QAAQ,QAAQ,EAAE,CAAC;IAEpC,wDAAwD;IACxD,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CACrB,eAAe,QAAQ,EAAE,EACzB,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,EAAE,EAC9E,aAAa,CACd,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,oDAAoD;IACpD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { WglConfig, HookInput } from '../types.js';
2
+ export declare function handlePreToolUse(config: WglConfig, input: HookInput): Promise<void>;
@@ -0,0 +1,49 @@
1
+ import { createAcpClient } from '@agentcoordinationprotocol/sdk';
2
+ export async function handlePreToolUse(config, input) {
3
+ const client = createAcpClient(config);
4
+ // Check halt status
5
+ try {
6
+ const controlRes = await client.getControlStatus();
7
+ if (controlRes.ok) {
8
+ const ctrl = controlRes.data;
9
+ if (ctrl.halted) {
10
+ const output = {
11
+ decision: 'block',
12
+ reason: `Coordination HALTED${ctrl.reason ? `: ${ctrl.reason}` : ''}. File edits blocked.`,
13
+ };
14
+ console.log(JSON.stringify(output));
15
+ return;
16
+ }
17
+ }
18
+ }
19
+ catch {
20
+ // Server unreachable — allow edit
21
+ }
22
+ // Auto-claim file
23
+ if (!config.autoClaimFiles)
24
+ return;
25
+ const filePath = input.tool_input?.file_path;
26
+ if (!filePath)
27
+ return;
28
+ const resource = `file:${filePath}`;
29
+ try {
30
+ const res = await client.claim(resource, filePath);
31
+ if (res.ok) {
32
+ const result = res.data;
33
+ if (result.status === 'rejected') {
34
+ const owner = result.claim?.owner || 'another agent';
35
+ const output = {
36
+ decision: 'block',
37
+ reason: `File locked by ${owner}: ${filePath}`,
38
+ };
39
+ console.log(JSON.stringify(output));
40
+ return;
41
+ }
42
+ // Approved — proceed silently
43
+ }
44
+ }
45
+ catch {
46
+ // Server unreachable — allow edit
47
+ }
48
+ }
49
+ //# sourceMappingURL=pre-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-tool-use.js","sourceRoot":"","sources":["../../src/hooks/pre-tool-use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAIjE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAiB,EAAE,KAAgB;IACxE,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEvC,oBAAoB;IACpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACnD,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAqB,CAAC;YAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAe;oBACzB,QAAQ,EAAE,OAAO;oBACjB,MAAM,EAAE,sBAAsB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,uBAAuB;iBAC3F,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,MAAM,CAAC,cAAc;QAAE,OAAO;IAEnC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,SAA+B,CAAC;IACnE,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,MAAM,QAAQ,GAAG,QAAQ,QAAQ,EAAE,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,GAAG,CAAC,IAAmB,CAAC;YACvC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,eAAe,CAAC;gBACrD,MAAM,MAAM,GAAe;oBACzB,QAAQ,EAAE,OAAO;oBACjB,MAAM,EAAE,kBAAkB,KAAK,KAAK,QAAQ,EAAE;iBAC/C,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YACD,8BAA8B;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { WglConfig, HookInput } from '../types.js';
2
+ export declare function handlePromptSubmit(config: WglConfig, configPath: string, _input: HookInput): Promise<void>;
@@ -0,0 +1,64 @@
1
+ import { writeFileSync } from 'node:fs';
2
+ import { createAcpClient } from '@agentcoordinationprotocol/sdk';
3
+ export async function handlePromptSubmit(config, configPath, _input) {
4
+ const client = createAcpClient(config);
5
+ const context = [];
6
+ try {
7
+ // Check halt status and fetch new events in parallel
8
+ const [controlRes, eventsRes] = await Promise.all([
9
+ client.getControlStatus().catch(() => null),
10
+ client.getEvents(config.lastEventCursor).catch(() => null),
11
+ ]);
12
+ // Check control status
13
+ if (controlRes?.ok) {
14
+ const ctrl = controlRes.data;
15
+ if (ctrl.halted) {
16
+ context.push(`COORDINATION HALTED${ctrl.reason ? `: ${ctrl.reason}` : ''}. Do not proceed with coordinated work.`);
17
+ }
18
+ else if (ctrl.paused) {
19
+ context.push(`Coordination paused${ctrl.reason ? `: ${ctrl.reason}` : ''}.`);
20
+ }
21
+ }
22
+ // Summarize new events
23
+ if (eventsRes?.ok && Array.isArray(eventsRes.data)) {
24
+ const events = eventsRes.data;
25
+ if (events.length > 0) {
26
+ // Update cursor
27
+ const maxId = Math.max(...events.map(e => e.id));
28
+ config.lastEventCursor = maxId;
29
+ try {
30
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
31
+ }
32
+ catch {
33
+ // Non-fatal
34
+ }
35
+ // Summarize by type
36
+ const byType = {};
37
+ for (const ev of events) {
38
+ byType[ev.type] = (byType[ev.type] || 0) + 1;
39
+ }
40
+ const summary = Object.entries(byType)
41
+ .map(([type, count]) => `${type} (${count})`)
42
+ .join(', ');
43
+ context.push(`New events since last prompt: ${summary}`);
44
+ // Show details for important events
45
+ const important = events.filter(e => e.type.startsWith('agent.') ||
46
+ e.type.startsWith('control.') ||
47
+ e.type.startsWith('conflict.'));
48
+ if (important.length > 0) {
49
+ for (const ev of important.slice(-5)) {
50
+ context.push(` [${ev.type}] ${JSON.stringify(ev.data)}`);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ catch {
57
+ // Server unreachable — no injection
58
+ }
59
+ // Output as plain text (UserPromptSubmit format)
60
+ if (context.length > 0) {
61
+ console.log(`[waggle-cli] ${context.join('\n')}`);
62
+ }
63
+ }
64
+ //# sourceMappingURL=prompt-submit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-submit.js","sourceRoot":"","sources":["../../src/hooks/prompt-submit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { WglConfig, HookInput } from '../types.js';
2
+ export declare function handleSessionStart(config: WglConfig, configPath: string, _input: HookInput): Promise<void>;
@@ -0,0 +1,101 @@
1
+ import { appendFileSync } from 'node:fs';
2
+ import { createAcpClient } from '@agentcoordinationprotocol/sdk';
3
+ export async function handleSessionStart(config, configPath, _input) {
4
+ // Export env vars via CLAUDE_ENV_FILE
5
+ const envFile = process.env.CLAUDE_ENV_FILE;
6
+ if (envFile) {
7
+ appendFileSync(envFile, [
8
+ `export WGL_SERVER="${config.server}"`,
9
+ `export WGL_AGENT_ID="${config.agentId}"`,
10
+ `export WGL_NAMESPACE="${config.namespace}"`,
11
+ `export WGL_ROLE="${config.role}"`,
12
+ `export WGL_CONFIG="${configPath}"`,
13
+ ].join('\n') + '\n');
14
+ }
15
+ const client = createAcpClient(config);
16
+ const context = [];
17
+ try {
18
+ // Fetch everything in parallel
19
+ const [controlRes, protocolRes, rolesRes, claimsRes, messagesRes] = await Promise.all([
20
+ client.getControlStatus().catch(() => null),
21
+ client.getProtocol().catch(() => null),
22
+ client.getRoles().catch(() => null),
23
+ client.getClaims().catch(() => null),
24
+ client.getMessages().catch(() => null),
25
+ ]);
26
+ // Check control status
27
+ if (controlRes?.ok) {
28
+ const ctrl = controlRes.data;
29
+ if (ctrl.halted) {
30
+ context.push(`COORDINATION HALTED${ctrl.reason ? `: ${ctrl.reason}` : ''}. Do not proceed with any coordinated work.`);
31
+ }
32
+ else if (ctrl.paused) {
33
+ context.push(`Coordination paused${ctrl.reason ? `: ${ctrl.reason}` : ''}. Proceed cautiously.`);
34
+ }
35
+ }
36
+ // Register role
37
+ try {
38
+ await client.requestRole(config.role);
39
+ }
40
+ catch {
41
+ // Non-fatal
42
+ }
43
+ // Protocol info
44
+ if (protocolRes?.ok) {
45
+ const p = protocolRes.data;
46
+ if (p.name) {
47
+ context.push(`Protocol: ${p.name}${p.description ? ` — ${p.description}` : ''}`);
48
+ if (p.phases?.length) {
49
+ context.push(`Phases: ${p.phases.map(ph => ph.name).join(' → ')}`);
50
+ }
51
+ if (p.rules?.length) {
52
+ context.push(`Rules:\n${p.rules.map(r => ` - ${r}`).join('\n')}`);
53
+ }
54
+ }
55
+ }
56
+ // Team
57
+ if (rolesRes?.ok && Array.isArray(rolesRes.data)) {
58
+ const roles = rolesRes.data;
59
+ if (roles.length > 0) {
60
+ context.push(`Team: ${roles.map(r => `${r.agent} (${r.role})`).join(', ')}`);
61
+ }
62
+ }
63
+ // Active claims
64
+ if (claimsRes?.ok && Array.isArray(claimsRes.data)) {
65
+ const claims = claimsRes.data.filter(c => c.status === 'active');
66
+ if (claims.length > 0) {
67
+ const mine = claims.filter(c => c.owner === config.agentId);
68
+ const others = claims.filter(c => c.owner !== config.agentId);
69
+ if (mine.length > 0) {
70
+ context.push(`Your claims: ${mine.map(c => c.resource).join(', ')}`);
71
+ }
72
+ if (others.length > 0) {
73
+ context.push(`Locked by others: ${others.map(c => `${c.resource} (${c.owner})`).join(', ')}`);
74
+ }
75
+ }
76
+ }
77
+ // Unread messages
78
+ if (messagesRes?.ok && Array.isArray(messagesRes.data)) {
79
+ const msgs = messagesRes.data.filter((m) => m.to === config.agentId || m.to === '*');
80
+ if (msgs.length > 0) {
81
+ context.push(`Messages:\n${msgs.map((m) => ` [${m.from}]: ${m.content}`).join('\n')}`);
82
+ }
83
+ }
84
+ }
85
+ catch {
86
+ // Server unreachable — no context, no problem
87
+ }
88
+ // Publish session start event (fire-and-forget)
89
+ client.publishEvent('agent.session_start', {
90
+ agentId: config.agentId,
91
+ role: config.role,
92
+ }).catch(() => { });
93
+ // Output coordination context
94
+ if (context.length > 0) {
95
+ const output = {
96
+ additionalContext: `[waggle-cli] You are agent ${config.agentId} (role: ${config.role}) coordinating via ACP.\nServer: ${config.server} | Namespace: ${config.namespace}\n\n${context.join('\n\n')}\n\nFile edits are auto-claimed. Use wgl commands for manual coordination.`,
97
+ };
98
+ console.log(JSON.stringify(output));
99
+ }
100
+ }
101
+ //# sourceMappingURL=session-start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { WglConfig, HookInput } from '../types.js';
2
+ export declare function handleStop(config: WglConfig, _input: HookInput): Promise<void>;
@@ -0,0 +1,52 @@
1
+ import { createAcpClient } from '@agentcoordinationprotocol/sdk';
2
+ export async function handleStop(config, _input) {
3
+ const client = createAcpClient(config);
4
+ try {
5
+ // Check for blockers in parallel
6
+ const [messagesRes, helpRes, claimsRes] = await Promise.all([
7
+ client.getMessages().catch(() => null),
8
+ client.getHelp().catch(() => null),
9
+ client.getClaims().catch(() => null),
10
+ ]);
11
+ const blockers = [];
12
+ // Check for unread messages addressed to us
13
+ if (messagesRes?.ok && Array.isArray(messagesRes.data)) {
14
+ const unread = messagesRes.data.filter(m => m.to === config.agentId || m.to === '*');
15
+ if (unread.length > 0) {
16
+ blockers.push(`${unread.length} unread message(s) — check with \`wgl status\``);
17
+ }
18
+ }
19
+ // Check for open help requests
20
+ if (helpRes?.ok && Array.isArray(helpRes.data)) {
21
+ const openHelp = helpRes.data.filter(h => h.status === 'open');
22
+ if (openHelp.length > 0) {
23
+ blockers.push(`${openHelp.length} open help request(s) need attention`);
24
+ }
25
+ }
26
+ // Release completed claims
27
+ if (claimsRes?.ok && Array.isArray(claimsRes.data)) {
28
+ const mine = claimsRes.data.filter(c => c.owner === config.agentId && c.status === 'active');
29
+ for (const claim of mine) {
30
+ client.releaseClaim(claim.resource).catch(() => { });
31
+ }
32
+ }
33
+ // Block if there are blockers
34
+ if (blockers.length > 0) {
35
+ const output = {
36
+ decision: 'block',
37
+ reason: `Cannot stop — coordination items pending:\n${blockers.map(b => ` • ${b}`).join('\n')}`,
38
+ };
39
+ console.log(JSON.stringify(output));
40
+ return;
41
+ }
42
+ }
43
+ catch {
44
+ // Server unreachable — allow stop
45
+ }
46
+ // Publish session complete (fire-and-forget)
47
+ client.publishEvent('agent.session_complete', {
48
+ agentId: config.agentId,
49
+ role: config.role,
50
+ }).catch(() => { });
51
+ }
52
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { WglConfig } from '../types.js';
2
+ export declare function findConfigPath(startDir?: string): string | null;
3
+ export declare function loadConfig(startDir?: string): WglConfig | null;
4
+ export declare function saveConfig(config: WglConfig, dir?: string): string;
5
+ export declare function deleteConfig(dir?: string): boolean;
6
+ export declare function defaultConfig(server: string, agentId: string, role: string, namespace?: string): WglConfig;
@@ -0,0 +1,53 @@
1
+ import { readFileSync, writeFileSync, existsSync, unlinkSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const CONFIG_FILE = '.wgl.json';
4
+ export function findConfigPath(startDir) {
5
+ let dir = startDir || process.cwd();
6
+ const root = '/';
7
+ while (true) {
8
+ const candidate = join(dir, CONFIG_FILE);
9
+ if (existsSync(candidate))
10
+ return candidate;
11
+ const parent = join(dir, '..');
12
+ if (parent === dir || dir === root)
13
+ return null;
14
+ dir = parent;
15
+ }
16
+ }
17
+ export function loadConfig(startDir) {
18
+ const path = findConfigPath(startDir);
19
+ if (!path)
20
+ return null;
21
+ try {
22
+ return JSON.parse(readFileSync(path, 'utf8'));
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ export function saveConfig(config, dir) {
29
+ const path = join(dir || process.cwd(), CONFIG_FILE);
30
+ writeFileSync(path, JSON.stringify(config, null, 2) + '\n');
31
+ return path;
32
+ }
33
+ export function deleteConfig(dir) {
34
+ const path = join(dir || process.cwd(), CONFIG_FILE);
35
+ if (existsSync(path)) {
36
+ unlinkSync(path);
37
+ return true;
38
+ }
39
+ return false;
40
+ }
41
+ export function defaultConfig(server, agentId, role, namespace) {
42
+ return {
43
+ server,
44
+ namespace: namespace || 'default',
45
+ agentId,
46
+ role,
47
+ autoClaimFiles: true,
48
+ autoPublishDiscoveries: true,
49
+ hookTimeout: 10,
50
+ lastEventCursor: 0,
51
+ };
52
+ }
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC;IACjB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAiB;IAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB,EAAE,GAAY;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IACrD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAe,EAAE,IAAY,EAAE,SAAkB;IAC7F,OAAO;QACL,MAAM;QACN,SAAS,EAAE,SAAS,IAAI,SAAS;QACjC,OAAO;QACP,IAAI;QACJ,cAAc,EAAE,IAAI;QACpB,sBAAsB,EAAE,IAAI;QAC5B,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,CAAC;KACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ declare const COLORS: {
2
+ readonly red: "\u001B[31m";
3
+ readonly green: "\u001B[32m";
4
+ readonly yellow: "\u001B[33m";
5
+ readonly blue: "\u001B[34m";
6
+ readonly cyan: "\u001B[36m";
7
+ readonly gray: "\u001B[90m";
8
+ readonly bold: "\u001B[1m";
9
+ readonly dim: "\u001B[2m";
10
+ readonly reset: "\u001B[0m";
11
+ };
12
+ type Color = keyof typeof COLORS;
13
+ export declare function c(color: Color, text: string): string;
14
+ export declare function bold(text: string): string;
15
+ export declare function dim(text: string): string;
16
+ export declare function heading(text: string): string;
17
+ export declare function success(text: string): string;
18
+ export declare function warn(text: string): string;
19
+ export declare function error(text: string): string;
20
+ export declare function label(key: string, value: string): string;
21
+ export declare function table(rows: [string, string][]): string;
22
+ export {};
@@ -0,0 +1,42 @@
1
+ const COLORS = {
2
+ red: '\x1b[31m',
3
+ green: '\x1b[32m',
4
+ yellow: '\x1b[33m',
5
+ blue: '\x1b[34m',
6
+ cyan: '\x1b[36m',
7
+ gray: '\x1b[90m',
8
+ bold: '\x1b[1m',
9
+ dim: '\x1b[2m',
10
+ reset: '\x1b[0m',
11
+ };
12
+ export function c(color, text) {
13
+ return `${COLORS[color]}${text}${COLORS.reset}`;
14
+ }
15
+ export function bold(text) {
16
+ return c('bold', text);
17
+ }
18
+ export function dim(text) {
19
+ return c('dim', text);
20
+ }
21
+ export function heading(text) {
22
+ return `\n${c('bold', c('cyan', text))}`;
23
+ }
24
+ export function success(text) {
25
+ return c('green', `✓ ${text}`);
26
+ }
27
+ export function warn(text) {
28
+ return c('yellow', `⚠ ${text}`);
29
+ }
30
+ export function error(text) {
31
+ return c('red', `✗ ${text}`);
32
+ }
33
+ export function label(key, value) {
34
+ return ` ${c('bold', key + ':')} ${value}`;
35
+ }
36
+ export function table(rows) {
37
+ const maxKey = Math.max(...rows.map(([k]) => k.length));
38
+ return rows
39
+ .map(([k, v]) => ` ${c('bold', k.padEnd(maxKey))} ${v}`)
40
+ .join('\n');
41
+ }
42
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG;IACb,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;CACR,CAAC;AAIX,MAAM,UAAU,CAAC,CAAC,KAAY,EAAE,IAAY;IAC1C,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAY;IAC9B,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,KAAa;IAC9C,OAAO,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,IAAwB;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;SACzD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface GlobalConfig {
2
+ defaultPlatform: string;
3
+ defaultRole: string;
4
+ editor: string;
5
+ activeProfile: string;
6
+ [key: string]: string;
7
+ }
8
+ export declare function getWglDir(): string;
9
+ export declare function loadGlobalConfig(): GlobalConfig;
10
+ export declare function saveGlobalConfig(config: GlobalConfig): void;
11
+ export declare function getGlobalConfigValue(key: string): string | undefined;
12
+ export declare function setGlobalConfigValue(key: string, value: string): void;
13
+ export declare function deleteGlobalConfigValue(key: string): boolean;
@@ -0,0 +1,52 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ const WGL_DIR = join(homedir(), '.wgl');
5
+ const CONFIG_PATH = join(WGL_DIR, 'config.json');
6
+ const DEFAULTS = {
7
+ defaultPlatform: 'https://hivemind.honeyb.dev',
8
+ defaultRole: 'developer',
9
+ editor: 'nano',
10
+ activeProfile: 'personal',
11
+ };
12
+ function ensureDir() {
13
+ if (!existsSync(WGL_DIR)) {
14
+ mkdirSync(WGL_DIR, { recursive: true });
15
+ }
16
+ }
17
+ export function getWglDir() {
18
+ return WGL_DIR;
19
+ }
20
+ export function loadGlobalConfig() {
21
+ if (!existsSync(CONFIG_PATH))
22
+ return { ...DEFAULTS };
23
+ try {
24
+ const raw = JSON.parse(readFileSync(CONFIG_PATH, 'utf8'));
25
+ return { ...DEFAULTS, ...raw };
26
+ }
27
+ catch {
28
+ return { ...DEFAULTS };
29
+ }
30
+ }
31
+ export function saveGlobalConfig(config) {
32
+ ensureDir();
33
+ writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n');
34
+ }
35
+ export function getGlobalConfigValue(key) {
36
+ const config = loadGlobalConfig();
37
+ return config[key];
38
+ }
39
+ export function setGlobalConfigValue(key, value) {
40
+ const config = loadGlobalConfig();
41
+ config[key] = value;
42
+ saveGlobalConfig(config);
43
+ }
44
+ export function deleteGlobalConfigValue(key) {
45
+ const config = loadGlobalConfig();
46
+ if (!(key in config) || key in DEFAULTS)
47
+ return false;
48
+ delete config[key];
49
+ saveGlobalConfig(config);
50
+ return true;
51
+ }
52
+ //# sourceMappingURL=global-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/lib/global-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AACxC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAUjD,MAAM,QAAQ,GAAiB;IAC7B,eAAe,EAAE,6BAA6B;IAC9C,WAAW,EAAE,WAAW;IACxB,MAAM,EAAE,MAAM;IACd,aAAa,EAAE,UAAU;CAC1B,CAAC;AAEF,SAAS,SAAS;IAChB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,GAAG,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,KAAa;IAC7D,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpB,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACnB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function installHooks(timeout?: number): void;
2
+ export declare function uninstallHooks(): void;