newcraw 1.0.0 → 1.0.2

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 (134) hide show
  1. package/dist/REPL-IAK7ZN2Z.js +42 -0
  2. package/dist/{acp-A55ZRIPP.js → acp-J4WDYGRX.js} +26 -26
  3. package/dist/{agentsValidate-XWFIEHJ2.js → agentsValidate-UBOER2IN.js} +7 -7
  4. package/dist/{ask-4ACYU23S.js → ask-MGUO3L35.js} +25 -25
  5. package/dist/{autoUpdater-O2WHHSGP.js → autoUpdater-2GS6LRPK.js} +3 -3
  6. package/dist/{chunk-FHOCKJOW.js → chunk-2C43OXE7.js} +2 -2
  7. package/dist/{chunk-YYPJWXSA.js → chunk-2EFL22PV.js} +1 -1
  8. package/dist/{chunk-QF6YDTME.js → chunk-3LMXSKZ7.js} +1 -1
  9. package/dist/{chunk-B26ZUMJI.js → chunk-53A4JHFW.js} +3 -3
  10. package/dist/{chunk-EENI5HG7.js → chunk-A7X6OCZE.js} +1 -1
  11. package/dist/{chunk-GPKVTIYJ.js → chunk-BWYKUDJR.js} +3 -3
  12. package/dist/{chunk-LC4CL3YJ.js → chunk-DEF3KFP7.js} +1 -1
  13. package/dist/{chunk-EXPWPWA4.js → chunk-F3COCCAE.js} +3 -3
  14. package/dist/{chunk-H5BCUDEN.js → chunk-GZTCXXSS.js} +1 -1
  15. package/dist/{chunk-MXSB7IOZ.js → chunk-HSJ6HYAO.js} +1 -1
  16. package/dist/{chunk-SBE6Y327.js → chunk-IIFUDVGS.js} +3 -3
  17. package/dist/{chunk-3C73U2IU.js → chunk-IM33F5CM.js} +1 -1
  18. package/dist/{chunk-BUI6KGVA.js → chunk-JWXQNBBA.js} +1 -1
  19. package/dist/{chunk-S5Y5IF2H.js → chunk-LOIZNQOU.js} +2 -2
  20. package/dist/{chunk-ULVAAZ2U.js → chunk-OJIMOLIC.js} +38 -32
  21. package/dist/{chunk-ULVAAZ2U.js.map → chunk-OJIMOLIC.js.map} +1 -1
  22. package/dist/{chunk-WWLFALT7.js → chunk-OZHBEG7U.js} +3 -3
  23. package/dist/{chunk-DY5D4SS7.js → chunk-QH2M65BR.js} +2 -2
  24. package/dist/{chunk-U224EQOS.js → chunk-RUXIBQ3B.js} +4 -4
  25. package/dist/{chunk-S3ZAJPYZ.js → chunk-UYRR6F5S.js} +2 -2
  26. package/dist/{chunk-Y7VZUSIM.js → chunk-V5U6BHT2.js} +3 -3
  27. package/dist/{chunk-YVNBXMIP.js → chunk-VHS2MZQS.js} +2 -2
  28. package/dist/{chunk-3U5X4VWP.js → chunk-VKI7ORIO.js} +11 -11
  29. package/dist/{chunk-XOMW5QTV.js → chunk-VQSCECTS.js} +3 -3
  30. package/dist/{chunk-L6WKZEK4.js → chunk-WWDVA4NV.js} +4 -4
  31. package/dist/{chunk-T6VKT5FR.js → chunk-XS6PU75S.js} +1 -1
  32. package/dist/{chunk-QTX7AJFQ.js → chunk-XXU2NVOE.js} +2 -2
  33. package/dist/{chunk-TSGGSPYD.js → chunk-ZYSVG4X3.js} +1 -1
  34. package/dist/{chunk-TSGGSPYD.js.map → chunk-ZYSVG4X3.js.map} +1 -1
  35. package/dist/{cli-BW34VKCN.js → cli-KZGF3FV5.js} +82 -82
  36. package/dist/commands-AVEBLFVS.js +46 -0
  37. package/dist/{config-XKRCXCSS.js → config-GTJWCNPF.js} +4 -4
  38. package/dist/{context-T5CR3RP6.js → context-WF3TTXQU.js} +5 -5
  39. package/dist/{customCommands-OCUMXZDN.js → customCommands-QOWK57EX.js} +4 -4
  40. package/dist/{env-DYDNFB4D.js → env-37BAP7QF.js} +2 -2
  41. package/dist/gateway-IZYO6YFJ.js +1170 -0
  42. package/dist/gateway-IZYO6YFJ.js.map +7 -0
  43. package/dist/index.js +5 -3
  44. package/dist/index.js.map +2 -2
  45. package/dist/{kodeAgentSessionLoad-ZKR2VGHO.js → kodeAgentSessionLoad-6F7SJXBC.js} +4 -4
  46. package/dist/{kodeAgentSessionResume-NFZCTIBZ.js → kodeAgentSessionResume-UEEDRJ3N.js} +4 -4
  47. package/dist/{kodeAgentStreamJsonSession-6CKTK6AF.js → kodeAgentStreamJsonSession-XC3IPREZ.js} +1 -1
  48. package/dist/{kodeHooks-5RXJRDCY.js → kodeHooks-V36SHCTC.js} +4 -4
  49. package/dist/{llm-QJA3QMXR.js → llm-CYUDKJNR.js} +26 -26
  50. package/dist/{llmLazy-VCEV22DK.js → llmLazy-IXVVBRTN.js} +1 -1
  51. package/dist/{loader-CKNYMPCZ.js → loader-OEJ6C3TN.js} +4 -4
  52. package/dist/{mcp-2SZTOKZX.js → mcp-KE3SILMX.js} +7 -7
  53. package/dist/{mentionProcessor-O7NWOH6S.js → mentionProcessor-GAU2WAYB.js} +5 -5
  54. package/dist/{messages-PRKIHXMK.js → messages-WCSGGSEU.js} +1 -1
  55. package/dist/{model-WG6RA25G.js → model-4TQIV5J2.js} +5 -5
  56. package/dist/{openai-VQLYFQ6B.js → openai-KTZV6F7N.js} +5 -5
  57. package/dist/{outputStyles-VQ57E3B6.js → outputStyles-WX5RYQOA.js} +4 -4
  58. package/dist/{pluginRuntime-NWOLU73K.js → pluginRuntime-JXMJZ2LC.js} +6 -6
  59. package/dist/{pluginValidation-R7B6QQ6T.js → pluginValidation-JNQZYLUP.js} +6 -6
  60. package/dist/prompts-LE6GK75N.js +48 -0
  61. package/dist/query-GGIP6PWG.js +50 -0
  62. package/dist/{ripgrep-SVBVC46X.js → ripgrep-KDPQAMB2.js} +3 -3
  63. package/dist/{skillMarketplace-5Z7Y6FTD.js → skillMarketplace-IXAGP3Q2.js} +3 -3
  64. package/dist/{state-X3R7BV7A.js → state-MSCYLB6Y.js} +2 -2
  65. package/dist/{theme-4VA64EWF.js → theme-GAMFOLBW.js} +5 -5
  66. package/dist/{toolPermissionSettings-35DJQEKG.js → toolPermissionSettings-EUZKGZU2.js} +6 -6
  67. package/dist/tools-3HOUIDM3.js +47 -0
  68. package/dist/{userInput-NID2UYXG.js → userInput-LJL4CVOB.js} +27 -27
  69. package/package.json +1 -1
  70. package/dist/REPL-74GZVSMY.js +0 -42
  71. package/dist/commands-4CNZZBTE.js +0 -46
  72. package/dist/prompts-W4V4Y67M.js +0 -48
  73. package/dist/query-GFFKKURO.js +0 -50
  74. package/dist/tools-USOBTPOI.js +0 -47
  75. /package/dist/{REPL-74GZVSMY.js.map → REPL-IAK7ZN2Z.js.map} +0 -0
  76. /package/dist/{acp-A55ZRIPP.js.map → acp-J4WDYGRX.js.map} +0 -0
  77. /package/dist/{agentsValidate-XWFIEHJ2.js.map → agentsValidate-UBOER2IN.js.map} +0 -0
  78. /package/dist/{ask-4ACYU23S.js.map → ask-MGUO3L35.js.map} +0 -0
  79. /package/dist/{autoUpdater-O2WHHSGP.js.map → autoUpdater-2GS6LRPK.js.map} +0 -0
  80. /package/dist/{chunk-FHOCKJOW.js.map → chunk-2C43OXE7.js.map} +0 -0
  81. /package/dist/{chunk-YYPJWXSA.js.map → chunk-2EFL22PV.js.map} +0 -0
  82. /package/dist/{chunk-QF6YDTME.js.map → chunk-3LMXSKZ7.js.map} +0 -0
  83. /package/dist/{chunk-B26ZUMJI.js.map → chunk-53A4JHFW.js.map} +0 -0
  84. /package/dist/{chunk-EENI5HG7.js.map → chunk-A7X6OCZE.js.map} +0 -0
  85. /package/dist/{chunk-GPKVTIYJ.js.map → chunk-BWYKUDJR.js.map} +0 -0
  86. /package/dist/{chunk-LC4CL3YJ.js.map → chunk-DEF3KFP7.js.map} +0 -0
  87. /package/dist/{chunk-EXPWPWA4.js.map → chunk-F3COCCAE.js.map} +0 -0
  88. /package/dist/{chunk-H5BCUDEN.js.map → chunk-GZTCXXSS.js.map} +0 -0
  89. /package/dist/{chunk-MXSB7IOZ.js.map → chunk-HSJ6HYAO.js.map} +0 -0
  90. /package/dist/{chunk-SBE6Y327.js.map → chunk-IIFUDVGS.js.map} +0 -0
  91. /package/dist/{chunk-3C73U2IU.js.map → chunk-IM33F5CM.js.map} +0 -0
  92. /package/dist/{chunk-BUI6KGVA.js.map → chunk-JWXQNBBA.js.map} +0 -0
  93. /package/dist/{chunk-S5Y5IF2H.js.map → chunk-LOIZNQOU.js.map} +0 -0
  94. /package/dist/{chunk-WWLFALT7.js.map → chunk-OZHBEG7U.js.map} +0 -0
  95. /package/dist/{chunk-DY5D4SS7.js.map → chunk-QH2M65BR.js.map} +0 -0
  96. /package/dist/{chunk-U224EQOS.js.map → chunk-RUXIBQ3B.js.map} +0 -0
  97. /package/dist/{chunk-S3ZAJPYZ.js.map → chunk-UYRR6F5S.js.map} +0 -0
  98. /package/dist/{chunk-Y7VZUSIM.js.map → chunk-V5U6BHT2.js.map} +0 -0
  99. /package/dist/{chunk-YVNBXMIP.js.map → chunk-VHS2MZQS.js.map} +0 -0
  100. /package/dist/{chunk-3U5X4VWP.js.map → chunk-VKI7ORIO.js.map} +0 -0
  101. /package/dist/{chunk-XOMW5QTV.js.map → chunk-VQSCECTS.js.map} +0 -0
  102. /package/dist/{chunk-L6WKZEK4.js.map → chunk-WWDVA4NV.js.map} +0 -0
  103. /package/dist/{chunk-T6VKT5FR.js.map → chunk-XS6PU75S.js.map} +0 -0
  104. /package/dist/{chunk-QTX7AJFQ.js.map → chunk-XXU2NVOE.js.map} +0 -0
  105. /package/dist/{cli-BW34VKCN.js.map → cli-KZGF3FV5.js.map} +0 -0
  106. /package/dist/{commands-4CNZZBTE.js.map → commands-AVEBLFVS.js.map} +0 -0
  107. /package/dist/{config-XKRCXCSS.js.map → config-GTJWCNPF.js.map} +0 -0
  108. /package/dist/{context-T5CR3RP6.js.map → context-WF3TTXQU.js.map} +0 -0
  109. /package/dist/{customCommands-OCUMXZDN.js.map → customCommands-QOWK57EX.js.map} +0 -0
  110. /package/dist/{env-DYDNFB4D.js.map → env-37BAP7QF.js.map} +0 -0
  111. /package/dist/{kodeAgentSessionLoad-ZKR2VGHO.js.map → kodeAgentSessionLoad-6F7SJXBC.js.map} +0 -0
  112. /package/dist/{kodeAgentSessionResume-NFZCTIBZ.js.map → kodeAgentSessionResume-UEEDRJ3N.js.map} +0 -0
  113. /package/dist/{kodeAgentStreamJsonSession-6CKTK6AF.js.map → kodeAgentStreamJsonSession-XC3IPREZ.js.map} +0 -0
  114. /package/dist/{kodeHooks-5RXJRDCY.js.map → kodeHooks-V36SHCTC.js.map} +0 -0
  115. /package/dist/{llm-QJA3QMXR.js.map → llm-CYUDKJNR.js.map} +0 -0
  116. /package/dist/{llmLazy-VCEV22DK.js.map → llmLazy-IXVVBRTN.js.map} +0 -0
  117. /package/dist/{loader-CKNYMPCZ.js.map → loader-OEJ6C3TN.js.map} +0 -0
  118. /package/dist/{mcp-2SZTOKZX.js.map → mcp-KE3SILMX.js.map} +0 -0
  119. /package/dist/{mentionProcessor-O7NWOH6S.js.map → mentionProcessor-GAU2WAYB.js.map} +0 -0
  120. /package/dist/{messages-PRKIHXMK.js.map → messages-WCSGGSEU.js.map} +0 -0
  121. /package/dist/{model-WG6RA25G.js.map → model-4TQIV5J2.js.map} +0 -0
  122. /package/dist/{openai-VQLYFQ6B.js.map → openai-KTZV6F7N.js.map} +0 -0
  123. /package/dist/{outputStyles-VQ57E3B6.js.map → outputStyles-WX5RYQOA.js.map} +0 -0
  124. /package/dist/{pluginRuntime-NWOLU73K.js.map → pluginRuntime-JXMJZ2LC.js.map} +0 -0
  125. /package/dist/{pluginValidation-R7B6QQ6T.js.map → pluginValidation-JNQZYLUP.js.map} +0 -0
  126. /package/dist/{prompts-W4V4Y67M.js.map → prompts-LE6GK75N.js.map} +0 -0
  127. /package/dist/{query-GFFKKURO.js.map → query-GGIP6PWG.js.map} +0 -0
  128. /package/dist/{ripgrep-SVBVC46X.js.map → ripgrep-KDPQAMB2.js.map} +0 -0
  129. /package/dist/{skillMarketplace-5Z7Y6FTD.js.map → skillMarketplace-IXAGP3Q2.js.map} +0 -0
  130. /package/dist/{state-X3R7BV7A.js.map → state-MSCYLB6Y.js.map} +0 -0
  131. /package/dist/{theme-4VA64EWF.js.map → theme-GAMFOLBW.js.map} +0 -0
  132. /package/dist/{toolPermissionSettings-35DJQEKG.js.map → toolPermissionSettings-EUZKGZU2.js.map} +0 -0
  133. /package/dist/{tools-USOBTPOI.js.map → tools-3HOUIDM3.js.map} +0 -0
  134. /package/dist/{userInput-NID2UYXG.js.map → userInput-LJL4CVOB.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/sessions/manager.ts", "../src/gateway/agentCore.ts", "../src/gateway/middleware.ts", "../src/channels/http.ts", "../src/gateway/gateway.ts", "../src/channels/websocket.ts", "../src/channels/cli.ts", "../src/sessions/storage.ts", "../src/entrypoints/gateway.ts"],
4
+ "sourcesContent": ["import type { Session, SessionStorage } from './types'\r\n\r\nexport class SessionManager {\r\n constructor(private storage: SessionStorage) {}\r\n\r\n async getOrCreate(key: string): Promise<Session> {\r\n const existing = await this.storage.load(key)\r\n if (existing) return existing\r\n return this.createNew(key)\r\n }\r\n\r\n async save(session: Session): Promise<void> {\r\n await this.storage.save(session.key, session)\r\n }\r\n\r\n async get(key: string): Promise<Session | null> {\r\n return this.storage.load(key)\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n await this.storage.delete(key)\r\n }\r\n\r\n async listKeys(): Promise<string[]> {\r\n return this.storage.list()\r\n }\r\n\r\n private createNew(key: string): Session {\r\n return {\r\n key,\r\n messages: [],\r\n createdAt: Date.now(),\r\n updatedAt: Date.now(),\r\n metadata: {},\r\n }\r\n }\r\n}\r\n", "import { cwd as processCwd } from 'process'\r\nimport type { Tool } from '@tool'\r\nimport type { CanUseToolFn } from '@newcraw-types/canUseTool'\r\nimport type { Message } from '@query'\r\nimport { createUserMessage, createAssistantMessage } from '@utils/messages'\r\nimport { getDomain } from '../core/domains'\r\nimport { getIdentity, getIdentityPrompt } from '../core/identity'\r\nimport type { SessionMessage } from '../sessions/types'\r\n\r\nexport interface GatewayQueryOptions {\r\n prompt: string\r\n domain?: string\r\n cwd?: string\r\n safeMode?: boolean\r\n tools?: Tool[]\r\n sessionMessages?: Message[]\r\n}\r\n\r\nexport interface GatewayQueryResult {\r\n resultText: string\r\n messages: Message[]\r\n totalCost: number\r\n}\r\n\r\nconst gatewayPermissionHandler: CanUseToolFn = async (\r\n tool,\r\n _input,\r\n _context,\r\n _assistantMessage,\r\n) => {\r\n if (tool.isReadOnly()) {\r\n return { result: true }\r\n }\r\n return { result: true }\r\n}\r\n\r\nasync function loadGatewayTools(domainId: string): Promise<Tool[]> {\r\n const { getTools } = await import('@tools')\r\n const domain = getDomain(domainId)\r\n\r\n const allTools = await getTools()\r\n\r\n if (!domain) return allTools\r\n\r\n const allowedNames = new Set(domain.tools())\r\n const filtered = allTools.filter(t => allowedNames.has(t.name))\r\n return filtered.length > 0 ? filtered : allTools\r\n}\r\n\r\nexport function convertSessionHistory(history: SessionMessage[]): Message[] {\r\n return history.map(msg =>\r\n msg.role === 'user'\r\n ? createUserMessage(msg.content)\r\n : createAssistantMessage(msg.content),\r\n )\r\n}\r\n\r\nexport async function gatewayQuery(options: GatewayQueryOptions): Promise<GatewayQueryResult> {\r\n const { ask } = await import('../app/ask')\r\n const { setCwd } = await import('@utils/state')\r\n\r\n const identity = getIdentity()\r\n const domainId = options.domain ?? identity.domain\r\n const cwd = options.cwd ?? processCwd()\r\n\r\n await setCwd(cwd)\r\n\r\n const tools = options.tools ?? (await loadGatewayTools(domainId))\r\n\r\n const result = await ask({\r\n commands: [],\r\n safeMode: options.safeMode ?? false,\r\n hasPermissionsToUseTool: gatewayPermissionHandler,\r\n messageLogName: `gateway-${Date.now()}`,\r\n prompt: options.prompt,\r\n cwd,\r\n tools,\r\n verbose: false,\r\n initialMessages: options.sessionMessages,\r\n persistSession: false,\r\n domain: domainId,\r\n })\r\n\r\n return {\r\n resultText: result.resultText,\r\n messages: [],\r\n totalCost: result.totalCost,\r\n }\r\n}\r\n\r\nexport async function* gatewayQueryStream(options: GatewayQueryOptions): AsyncGenerator<{\r\n type: 'text' | 'tool_call' | 'tool_result' | 'thinking' | 'done'\r\n content: string\r\n}> {\r\n const { query } = await import('@query')\r\n const { getSystemPrompt } = await import('@constants/prompts')\r\n const { getContext } = await import('@context')\r\n const { setCwd } = await import('@utils/state')\r\n\r\n const identity = getIdentity()\r\n const domainId = options.domain ?? identity.domain\r\n const cwd = options.cwd ?? processCwd()\r\n\r\n await setCwd(cwd)\r\n\r\n const tools = options.tools ?? (await loadGatewayTools(domainId))\r\n\r\n const [systemPrompt, context] = await Promise.all([\r\n getSystemPrompt({ domain: domainId }),\r\n getContext(),\r\n ])\r\n\r\n const userMessage = createUserMessage(options.prompt)\r\n const messages: Message[] = [...(options.sessionMessages ?? []), userMessage]\r\n const abortController = new AbortController()\r\n\r\n const seenToolUseIds = new Set<string>()\r\n\r\n for await (const msg of query(\r\n messages,\r\n systemPrompt,\r\n context,\r\n gatewayPermissionHandler,\r\n {\r\n options: {\r\n commands: [],\r\n tools,\r\n verbose: false,\r\n safeMode: options.safeMode ?? false,\r\n forkNumber: 0,\r\n messageLogName: `gateway-${Date.now()}`,\r\n maxThinkingTokens: 0,\r\n persistSession: false,\r\n shouldAvoidPermissionPrompts: true,\r\n },\r\n abortController,\r\n messageId: undefined,\r\n readFileTimestamps: {},\r\n setToolJSX: () => {},\r\n },\r\n )) {\r\n if (msg.type === 'assistant') {\r\n for (const block of msg.message.content) {\r\n if (block.type === 'text' && block.text) {\r\n yield { type: 'text', content: block.text }\r\n } else if (block.type === 'thinking' && (block as any).thinking) {\r\n yield { type: 'thinking', content: (block as any).thinking }\r\n } else if (block.type === 'tool_use') {\r\n seenToolUseIds.add(block.id)\r\n const inputBrief = JSON.stringify(block.input).slice(0, 200)\r\n yield { type: 'tool_call', content: `${block.name}(${inputBrief})` }\r\n }\r\n }\r\n } else if (msg.type === 'progress') {\r\n for (const block of msg.content.message.content) {\r\n if (block.type === 'tool_use' && !seenToolUseIds.has(block.id)) {\r\n seenToolUseIds.add(block.id)\r\n const inputBrief = JSON.stringify(block.input).slice(0, 200)\r\n yield { type: 'tool_call', content: `${block.name}(${inputBrief})` }\r\n }\r\n }\r\n } else if (msg.type === 'user') {\r\n const content = msg.message.content\r\n if (Array.isArray(content)) {\r\n for (const block of content as any[]) {\r\n if (block.type === 'tool_result') {\r\n const raw = typeof block.content === 'string'\r\n ? block.content\r\n : JSON.stringify(block.content)\r\n yield { type: 'tool_result', content: raw.slice(0, 500) }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n yield { type: 'done', content: '' }\r\n}\r\n", "import type { UnifiedMessage, AgentResponse } from '../channels/types'\r\n\r\nexport interface MiddlewareContext {\r\n message: UnifiedMessage\r\n channelId: string\r\n startTime: number\r\n metadata: Record<string, unknown>\r\n}\r\n\r\nexport type NextFn = () => Promise<void>\r\nexport type Middleware = (ctx: MiddlewareContext, next: NextFn) => Promise<void>\r\n\r\nexport function composeMiddleware(middlewares: Middleware[]): Middleware {\r\n return async (ctx, next) => {\r\n let index = -1\r\n async function dispatch(i: number): Promise<void> {\r\n if (i <= index) throw new Error('next() called multiple times')\r\n index = i\r\n const fn = i < middlewares.length ? middlewares[i] : next\r\n await fn(ctx, () => dispatch(i + 1))\r\n }\r\n await dispatch(0)\r\n }\r\n}\r\n\r\nexport function loggingMiddleware(): Middleware {\r\n return async (ctx, next) => {\r\n const { channelId, message } = ctx\r\n const preview = message.text.length > 80\r\n ? message.text.slice(0, 80) + '...'\r\n : message.text\r\n console.log(`[${new Date().toISOString()}] ${channelId}:${message.sessionKey} \u2190 \"${preview}\"`)\r\n\r\n await next()\r\n\r\n const elapsed = Date.now() - ctx.startTime\r\n console.log(`[${new Date().toISOString()}] ${channelId}:${message.sessionKey} \u2192 done (${elapsed}ms)`)\r\n }\r\n}\r\n\r\nexport function rateLimitMiddleware(options: {\r\n windowMs?: number\r\n maxRequests?: number\r\n} = {}): Middleware {\r\n const windowMs = options.windowMs ?? 60_000\r\n const maxRequests = options.maxRequests ?? 30\r\n const hits = new Map<string, number[]>()\r\n\r\n return async (ctx, next) => {\r\n const key = `${ctx.message.sessionKey}`\r\n const now = Date.now()\r\n const timestamps = hits.get(key) ?? []\r\n\r\n const windowStart = now - windowMs\r\n const recent = timestamps.filter(t => t > windowStart)\r\n\r\n if (recent.length >= maxRequests) {\r\n ctx.metadata.rateLimited = true\r\n throw new Error(`Rate limit exceeded: ${maxRequests} requests per ${windowMs / 1000}s`)\r\n }\r\n\r\n recent.push(now)\r\n hits.set(key, recent)\r\n\r\n if (hits.size > 10_000) {\r\n for (const [k, v] of hits) {\r\n const filtered = v.filter(t => t > windowStart)\r\n if (filtered.length === 0) hits.delete(k)\r\n else hits.set(k, filtered)\r\n }\r\n }\r\n\r\n await next()\r\n }\r\n}\r\n\r\nexport function maxConcurrencyMiddleware(options: {\r\n maxPerSession?: number\r\n} = {}): Middleware {\r\n const max = options.maxPerSession ?? 1\r\n const active = new Map<string, number>()\r\n\r\n return async (ctx, next) => {\r\n const key = ctx.message.sessionKey\r\n const current = active.get(key) ?? 0\r\n\r\n if (current >= max) {\r\n throw new Error('Another request is already in progress for this session')\r\n }\r\n\r\n active.set(key, current + 1)\r\n try {\r\n await next()\r\n } finally {\r\n const val = active.get(key) ?? 1\r\n if (val <= 1) active.delete(key)\r\n else active.set(key, val - 1)\r\n }\r\n }\r\n}\r\n", "import { createServer, type IncomingMessage, type ServerResponse } from 'http'\r\nimport { randomUUID } from 'crypto'\r\nimport { resolve, join, extname } from 'path'\r\nimport { readFile, stat } from 'fs/promises'\r\nimport type { Channel, AgentResponse, MessageHandler } from './types'\r\n\r\nconst MIME_TYPES: Record<string, string> = {\r\n '.html': 'text/html; charset=utf-8',\r\n '.js': 'application/javascript; charset=utf-8',\r\n '.css': 'text/css; charset=utf-8',\r\n '.json': 'application/json; charset=utf-8',\r\n '.png': 'image/png',\r\n '.jpg': 'image/jpeg',\r\n '.jpeg': 'image/jpeg',\r\n '.gif': 'image/gif',\r\n '.svg': 'image/svg+xml',\r\n '.ico': 'image/x-icon',\r\n '.woff': 'font/woff',\r\n '.woff2': 'font/woff2',\r\n '.ttf': 'font/ttf',\r\n '.webp': 'image/webp',\r\n}\r\n\r\nexport interface HttpChannelConfig {\r\n port: number\r\n host?: string\r\n authToken?: string\r\n corsOrigin?: string\r\n webDistDir?: string\r\n}\r\n\r\ntype StreamHandler = (msg: import('./types').UnifiedMessage, res: ServerResponse) => Promise<void>\r\n\r\nexport class HttpChannel implements Channel {\r\n readonly id = 'http'\r\n readonly name = 'HTTP API'\r\n\r\n private server: ReturnType<typeof createServer> | null = null\r\n private handler: MessageHandler | null = null\r\n private streamHandler: StreamHandler | null = null\r\n private pendingResponses = new Map<string, AgentResponse[]>()\r\n\r\n constructor(private config: HttpChannelConfig) {}\r\n\r\n onMessage(handler: MessageHandler): void {\r\n this.handler = handler\r\n }\r\n\r\n onStreamMessage(handler: StreamHandler): void {\r\n this.streamHandler = handler\r\n }\r\n\r\n async start(): Promise<void> {\r\n this.server = createServer((req, res) => this.handleRequest(req, res))\r\n await new Promise<void>((resolve) => {\r\n this.server!.listen(this.config.port, this.config.host ?? '0.0.0.0', resolve)\r\n })\r\n console.log(`[HTTP] Listening on ${this.config.host ?? '0.0.0.0'}:${this.config.port}`)\r\n }\r\n\r\n async stop(): Promise<void> {\r\n if (this.server) {\r\n await new Promise<void>((resolve) => this.server!.close(() => resolve()))\r\n this.server = null\r\n }\r\n }\r\n\r\n async sendResponse(requestId: string, response: AgentResponse): Promise<void> {\r\n const pending = this.pendingResponses.get(requestId)\r\n if (pending) {\r\n pending.push(response)\r\n }\r\n }\r\n\r\n private setCorsHeaders(res: ServerResponse): void {\r\n const origin = this.config.corsOrigin ?? '*'\r\n res.setHeader('Access-Control-Allow-Origin', origin)\r\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')\r\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization')\r\n }\r\n\r\n private checkAuth(req: IncomingMessage, res: ServerResponse): boolean {\r\n if (!this.config.authToken) return true\r\n const auth = req.headers.authorization\r\n if (auth !== `Bearer ${this.config.authToken}`) {\r\n res.writeHead(401, { 'Content-Type': 'application/json' })\r\n res.end(JSON.stringify({ error: 'Unauthorized' }))\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n private async handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void> {\r\n this.setCorsHeaders(res)\r\n\r\n if (req.method === 'OPTIONS') {\r\n res.writeHead(204)\r\n res.end()\r\n return\r\n }\r\n\r\n if (req.method === 'GET' && req.url === '/health') {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(200)\r\n res.end(JSON.stringify({ status: 'ok', timestamp: Date.now() }))\r\n return\r\n }\r\n\r\n if (req.method === 'POST' && req.url === '/api/chat') {\r\n await this.handleChat(req, res)\r\n return\r\n }\r\n\r\n if (req.method === 'POST' && req.url === '/api/chat/stream') {\r\n await this.handleChatStream(req, res)\r\n return\r\n }\r\n\r\n // Static file serving for web UI (SPA fallback)\r\n if (req.method === 'GET' && this.config.webDistDir) {\r\n const served = await this.serveStatic(req, res)\r\n if (served) return\r\n }\r\n\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(404)\r\n res.end(JSON.stringify({ error: 'Not found' }))\r\n }\r\n\r\n private async serveStatic(req: IncomingMessage, res: ServerResponse): Promise<boolean> {\r\n const distDir = this.config.webDistDir\r\n if (!distDir) return false\r\n\r\n const urlPath = new URL(req.url ?? '/', `http://${req.headers.host}`).pathname\r\n const safePath = urlPath.replace(/\\.\\./g, '').replace(/\\/+/g, '/')\r\n\r\n // Try the exact file first, then fallback to index.html (SPA)\r\n const candidates = [\r\n join(distDir, safePath),\r\n join(distDir, safePath, 'index.html'),\r\n ]\r\n\r\n for (const filePath of candidates) {\r\n const resolved = resolve(filePath)\r\n if (!resolved.startsWith(resolve(distDir))) continue\r\n\r\n try {\r\n const fileStat = await stat(resolved)\r\n if (fileStat.isFile()) {\r\n const ext = extname(resolved)\r\n const mime = MIME_TYPES[ext] ?? 'application/octet-stream'\r\n const content = await readFile(resolved)\r\n res.setHeader('Content-Type', mime)\r\n if (ext !== '.html') {\r\n res.setHeader('Cache-Control', 'public, max-age=31536000, immutable')\r\n }\r\n res.writeHead(200)\r\n res.end(content)\r\n return true\r\n }\r\n } catch {\r\n // file not found, continue\r\n }\r\n }\r\n\r\n // SPA fallback: serve index.html for non-file paths\r\n try {\r\n const indexPath = join(distDir, 'index.html')\r\n const content = await readFile(indexPath)\r\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\r\n res.writeHead(200)\r\n res.end(content)\r\n return true\r\n } catch {\r\n return false\r\n }\r\n }\r\n\r\n private async handleChat(req: IncomingMessage, res: ServerResponse): Promise<void> {\r\n res.setHeader('Content-Type', 'application/json')\r\n if (!this.checkAuth(req, res)) return\r\n\r\n try {\r\n const body = await readBody(req)\r\n const { message, userId = 'default', sessionKey } = JSON.parse(body)\r\n\r\n if (!message || typeof message !== 'string') {\r\n res.writeHead(400)\r\n res.end(JSON.stringify({ error: 'Missing \"message\" field' }))\r\n return\r\n }\r\n\r\n if (!this.handler) {\r\n res.writeHead(503)\r\n res.end(JSON.stringify({ error: 'No handler registered' }))\r\n return\r\n }\r\n\r\n const requestId = randomUUID()\r\n this.pendingResponses.set(requestId, [])\r\n\r\n await this.handler({\r\n channelId: 'http',\r\n userId: requestId,\r\n sessionKey: sessionKey ?? `http:${userId}`,\r\n text: message,\r\n metadata: { originalUserId: userId, requestId },\r\n })\r\n\r\n const responses = this.pendingResponses.get(requestId) ?? []\r\n this.pendingResponses.delete(requestId)\r\n\r\n const textParts = responses\r\n .filter(r => r.type === 'text')\r\n .map(r => r.content)\r\n\r\n res.writeHead(200)\r\n res.end(JSON.stringify({\r\n response: textParts.join('\\n'),\r\n details: responses.filter(r => r.type !== 'done'),\r\n }))\r\n } catch (err: any) {\r\n res.writeHead(500)\r\n res.end(JSON.stringify({ error: err.message ?? 'Internal server error' }))\r\n }\r\n }\r\n\r\n private async handleChatStream(req: IncomingMessage, res: ServerResponse): Promise<void> {\r\n if (!this.checkAuth(req, res)) return\r\n\r\n try {\r\n const body = await readBody(req)\r\n const { message, userId = 'default', sessionKey } = JSON.parse(body)\r\n\r\n if (!message || typeof message !== 'string') {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(400)\r\n res.end(JSON.stringify({ error: 'Missing \"message\" field' }))\r\n return\r\n }\r\n\r\n if (!this.streamHandler) {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(503)\r\n res.end(JSON.stringify({ error: 'Streaming not available' }))\r\n return\r\n }\r\n\r\n res.writeHead(200, {\r\n 'Content-Type': 'text/event-stream',\r\n 'Cache-Control': 'no-cache',\r\n 'Connection': 'keep-alive',\r\n 'X-Accel-Buffering': 'no',\r\n })\r\n\r\n const unifiedMsg: import('./types').UnifiedMessage = {\r\n channelId: 'http',\r\n userId,\r\n sessionKey: sessionKey ?? `http:${userId}`,\r\n text: message,\r\n metadata: { requestId: randomUUID() },\r\n }\r\n\r\n await this.streamHandler(unifiedMsg, res)\r\n } catch (err: any) {\r\n if (!res.headersSent) {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(500)\r\n res.end(JSON.stringify({ error: err.message ?? 'Internal server error' }))\r\n } else {\r\n writeSseEvent(res, 'error', { error: err.message ?? 'Internal server error' })\r\n res.end()\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function writeSseEvent(res: ServerResponse, event: string, data: unknown): void {\r\n res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`)\r\n}\r\n\r\nfunction readBody(req: IncomingMessage): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const chunks: Buffer[] = []\r\n let size = 0\r\n const MAX_BODY_SIZE = 1024 * 1024\r\n\r\n req.on('data', (chunk: Buffer) => {\r\n size += chunk.length\r\n if (size > MAX_BODY_SIZE) {\r\n req.destroy()\r\n reject(new Error('Request body too large'))\r\n return\r\n }\r\n chunks.push(chunk)\r\n })\r\n req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')))\r\n req.on('error', reject)\r\n })\r\n}\r\n", "import type { ServerResponse } from 'http'\r\nimport type { Channel, UnifiedMessage, AgentResponse } from '../channels/types'\r\nimport { SessionManager } from '../sessions/manager'\r\nimport type { Session, SessionStorage } from '../sessions/types'\r\nimport { getIdentity } from '../core/identity'\r\nimport { gatewayQuery, gatewayQueryStream, convertSessionHistory } from './agentCore'\r\nimport { type Middleware, type MiddlewareContext, composeMiddleware } from './middleware'\r\nimport { HttpChannel, writeSseEvent } from '../channels/http'\r\n\r\nexport interface GatewayConfig {\r\n storage: SessionStorage\r\n domain?: string\r\n cwd?: string\r\n safeMode?: boolean\r\n middleware?: Middleware[]\r\n onError?: (error: Error, context?: string) => void\r\n}\r\n\r\nexport class Gateway {\r\n private channels = new Map<string, Channel>()\r\n private sessions: SessionManager\r\n private config: GatewayConfig\r\n private middlewareChain: Middleware | null = null\r\n\r\n constructor(config: GatewayConfig) {\r\n this.config = config\r\n this.sessions = new SessionManager(config.storage)\r\n if (config.middleware && config.middleware.length > 0) {\r\n this.middlewareChain = composeMiddleware(config.middleware)\r\n }\r\n }\r\n\r\n registerChannel(channel: Channel): void {\r\n if (this.channels.has(channel.id)) {\r\n throw new Error(`Channel \"${channel.id}\" is already registered`)\r\n }\r\n this.channels.set(channel.id, channel)\r\n channel.onMessage((msg) => this.handleMessage(channel, msg))\r\n\r\n if (channel instanceof HttpChannel) {\r\n channel.onStreamMessage((msg, res) => this.handleSseStream(msg, res))\r\n }\r\n }\r\n\r\n getChannel(id: string): Channel | undefined {\r\n return this.channels.get(id)\r\n }\r\n\r\n listChannels(): Channel[] {\r\n return [...this.channels.values()]\r\n }\r\n\r\n getSessionManager(): SessionManager {\r\n return this.sessions\r\n }\r\n\r\n private async runWithMiddleware(\r\n channel: Channel,\r\n msg: UnifiedMessage,\r\n handler: () => Promise<void>,\r\n ): Promise<void> {\r\n if (!this.middlewareChain) {\r\n await handler()\r\n return\r\n }\r\n\r\n const ctx: MiddlewareContext = {\r\n message: msg,\r\n channelId: channel.id,\r\n startTime: Date.now(),\r\n metadata: {},\r\n }\r\n\r\n await this.middlewareChain(ctx, handler)\r\n }\r\n\r\n private async handleMessage(channel: Channel, msg: UnifiedMessage): Promise<void> {\r\n try {\r\n await this.runWithMiddleware(channel, msg, async () => {\r\n const session = await this.sessions.getOrCreate(msg.sessionKey)\r\n const domainId = this.config.domain ?? getIdentity().domain\r\n\r\n session.messages.push({\r\n role: 'user',\r\n content: msg.text,\r\n timestamp: Date.now(),\r\n })\r\n\r\n const isStreamCapable = !(channel instanceof HttpChannel)\r\n\r\n if (isStreamCapable) {\r\n await this.handleStreamingChannel(channel, msg, domainId, session)\r\n } else {\r\n await this.handleBlockingChannel(channel, msg, domainId, session)\r\n }\r\n })\r\n } catch (err: any) {\r\n this.config.onError?.(err, `channel=${channel.id} user=${msg.userId}`)\r\n await channel.sendResponse(msg.userId, {\r\n type: 'error',\r\n content: err.message ?? 'Internal error',\r\n })\r\n }\r\n }\r\n\r\n private async handleBlockingChannel(\r\n channel: Channel,\r\n msg: UnifiedMessage,\r\n domainId: string,\r\n session: Session,\r\n ): Promise<void> {\r\n const history = session.messages.slice(0, -1)\r\n const result = await gatewayQuery({\r\n prompt: msg.text,\r\n domain: domainId,\r\n cwd: this.config.cwd,\r\n safeMode: this.config.safeMode,\r\n sessionMessages: convertSessionHistory(history),\r\n })\r\n\r\n session.messages.push({\r\n role: 'assistant',\r\n content: result.resultText,\r\n timestamp: Date.now(),\r\n })\r\n await this.sessions.save(session)\r\n\r\n await channel.sendResponse(msg.userId, {\r\n type: 'text',\r\n content: result.resultText,\r\n })\r\n await channel.sendResponse(msg.userId, { type: 'done', content: '' })\r\n }\r\n\r\n private async handleStreamingChannel(\r\n channel: Channel,\r\n msg: UnifiedMessage,\r\n domainId: string,\r\n session: Session,\r\n ): Promise<void> {\r\n const chunks: string[] = []\r\n const history = session.messages.slice(0, -1)\r\n\r\n for await (const chunk of gatewayQueryStream({\r\n prompt: msg.text,\r\n domain: domainId,\r\n cwd: this.config.cwd,\r\n safeMode: this.config.safeMode,\r\n sessionMessages: convertSessionHistory(history),\r\n })) {\r\n if (chunk.type === 'text') {\r\n chunks.push(chunk.content)\r\n }\r\n await channel.sendResponse(msg.userId, {\r\n type: chunk.type as AgentResponse['type'],\r\n content: chunk.content,\r\n })\r\n }\r\n\r\n session.messages.push({\r\n role: 'assistant',\r\n content: chunks.join(''),\r\n timestamp: Date.now(),\r\n })\r\n await this.sessions.save(session)\r\n }\r\n\r\n private async handleSseStream(msg: UnifiedMessage, res: ServerResponse): Promise<void> {\r\n const domainId = this.config.domain ?? getIdentity().domain\r\n const session = await this.sessions.getOrCreate(msg.sessionKey)\r\n\r\n session.messages.push({\r\n role: 'user',\r\n content: msg.text,\r\n timestamp: Date.now(),\r\n })\r\n\r\n const chunks: string[] = []\r\n\r\n const history = session.messages.slice(0, -1)\r\n\r\n try {\r\n for await (const chunk of gatewayQueryStream({\r\n prompt: msg.text,\r\n domain: domainId,\r\n cwd: this.config.cwd,\r\n safeMode: this.config.safeMode,\r\n sessionMessages: convertSessionHistory(history),\r\n })) {\r\n if (chunk.type === 'text') {\r\n chunks.push(chunk.content)\r\n }\r\n writeSseEvent(res, chunk.type, { content: chunk.content })\r\n }\r\n\r\n session.messages.push({\r\n role: 'assistant',\r\n content: chunks.join(''),\r\n timestamp: Date.now(),\r\n })\r\n await this.sessions.save(session)\r\n } catch (err: any) {\r\n writeSseEvent(res, 'error', { error: err.message ?? 'Internal error' })\r\n this.config.onError?.(err, `sse user=${msg.userId}`)\r\n } finally {\r\n res.end()\r\n }\r\n }\r\n\r\n async start(): Promise<void> {\r\n const startPromises = [...this.channels.values()].map(ch => ch.start())\r\n await Promise.all(startPromises)\r\n const identity = getIdentity()\r\n console.log(`[Gateway] Started with ${this.channels.size} channel(s) \u2014 identity: ${identity.name}, domain: ${this.config.domain ?? identity.domain}`)\r\n }\r\n\r\n async stop(): Promise<void> {\r\n const stopPromises = [...this.channels.values()].map(ch => ch.stop())\r\n await Promise.all(stopPromises)\r\n console.log('[Gateway] Stopped')\r\n }\r\n}\r\n", "import { createServer, type Server as HttpServer } from 'http'\r\nimport { WebSocketServer, type WebSocket } from 'ws'\r\nimport { randomUUID } from 'crypto'\r\nimport type { Channel, AgentResponse, MessageHandler, UnifiedMessage } from './types'\r\n\r\nexport interface WebSocketChannelConfig {\r\n port: number\r\n host?: string\r\n authToken?: string\r\n /** Attach to an existing HTTP server instead of creating one */\r\n server?: HttpServer\r\n}\r\n\r\ninterface WsClient {\r\n ws: WebSocket\r\n userId: string\r\n sessionKey: string\r\n}\r\n\r\nexport class WebSocketChannel implements Channel {\r\n readonly id = 'websocket'\r\n readonly name = 'WebSocket'\r\n\r\n private wss: WebSocketServer | null = null\r\n private ownServer: HttpServer | null = null\r\n private handler: MessageHandler | null = null\r\n private clients = new Map<string, WsClient>()\r\n private pendingResponses = new Map<string, AgentResponse[]>()\r\n\r\n constructor(private config: WebSocketChannelConfig) {}\r\n\r\n onMessage(handler: MessageHandler): void {\r\n this.handler = handler\r\n }\r\n\r\n async start(): Promise<void> {\r\n if (this.config.server) {\r\n this.wss = new WebSocketServer({ server: this.config.server })\r\n } else {\r\n this.ownServer = createServer()\r\n this.wss = new WebSocketServer({ server: this.ownServer })\r\n await new Promise<void>((resolve) => {\r\n this.ownServer!.listen(this.config.port, this.config.host ?? '0.0.0.0', resolve)\r\n })\r\n console.log(`[WebSocket] Listening on ${this.config.host ?? '0.0.0.0'}:${this.config.port}`)\r\n }\r\n\r\n this.wss.on('connection', (ws, req) => this.handleConnection(ws, req))\r\n }\r\n\r\n async stop(): Promise<void> {\r\n if (this.wss) {\r\n for (const client of this.clients.values()) {\r\n client.ws.close(1001, 'Server shutting down')\r\n }\r\n this.clients.clear()\r\n this.wss.close()\r\n this.wss = null\r\n }\r\n if (this.ownServer) {\r\n await new Promise<void>((resolve) => this.ownServer!.close(() => resolve()))\r\n this.ownServer = null\r\n }\r\n }\r\n\r\n async sendResponse(clientId: string, response: AgentResponse): Promise<void> {\r\n const client = this.clients.get(clientId)\r\n if (client && client.ws.readyState === 1 /* OPEN */) {\r\n client.ws.send(JSON.stringify({\r\n type: 'response',\r\n data: response,\r\n }))\r\n }\r\n\r\n const pending = this.pendingResponses.get(clientId)\r\n if (pending) {\r\n pending.push(response)\r\n }\r\n }\r\n\r\n private handleConnection(ws: WebSocket, req: import('http').IncomingMessage): void {\r\n if (this.config.authToken) {\r\n const url = new URL(req.url ?? '/', `http://${req.headers.host}`)\r\n const token = url.searchParams.get('token')\r\n if (token !== this.config.authToken) {\r\n ws.close(4001, 'Unauthorized')\r\n return\r\n }\r\n }\r\n\r\n const clientId = randomUUID()\r\n this.clients.set(clientId, {\r\n ws,\r\n userId: clientId,\r\n sessionKey: `ws:${clientId}`,\r\n })\r\n\r\n ws.on('message', (raw) => this.handleWsMessage(clientId, raw))\r\n ws.on('close', () => {\r\n this.clients.delete(clientId)\r\n })\r\n ws.on('error', (err) => {\r\n console.error(`[WebSocket] Client ${clientId} error:`, err.message)\r\n this.clients.delete(clientId)\r\n })\r\n\r\n ws.send(JSON.stringify({\r\n type: 'connected',\r\n data: { clientId },\r\n }))\r\n }\r\n\r\n private async handleWsMessage(clientId: string, raw: import('ws').RawData): Promise<void> {\r\n let parsed: any\r\n try {\r\n parsed = JSON.parse(String(raw))\r\n } catch {\r\n this.sendToClient(clientId, {\r\n type: 'error',\r\n data: { error: 'Invalid JSON' },\r\n })\r\n return\r\n }\r\n\r\n const { type, message, userId, sessionKey } = parsed\r\n\r\n if (type === 'ping') {\r\n this.sendToClient(clientId, { type: 'pong', data: {} })\r\n return\r\n }\r\n\r\n if (type !== 'chat' || !message || typeof message !== 'string') {\r\n this.sendToClient(clientId, {\r\n type: 'error',\r\n data: { error: 'Expected { type: \"chat\", message: \"...\" }' },\r\n })\r\n return\r\n }\r\n\r\n if (!this.handler) {\r\n this.sendToClient(clientId, {\r\n type: 'error',\r\n data: { error: 'No handler registered' },\r\n })\r\n return\r\n }\r\n\r\n const resolvedUserId = userId ?? clientId\r\n const resolvedSessionKey = sessionKey ?? `ws:${resolvedUserId}`\r\n\r\n const client = this.clients.get(clientId)\r\n if (client) {\r\n client.userId = resolvedUserId\r\n client.sessionKey = resolvedSessionKey\r\n }\r\n\r\n try {\r\n await this.handler({\r\n channelId: 'websocket',\r\n userId: clientId,\r\n sessionKey: resolvedSessionKey,\r\n text: message,\r\n metadata: { originalUserId: resolvedUserId },\r\n })\r\n } catch (err: any) {\r\n this.sendToClient(clientId, {\r\n type: 'error',\r\n data: { error: err.message ?? 'Internal error' },\r\n })\r\n }\r\n }\r\n\r\n private sendToClient(clientId: string, msg: { type: string; data: unknown }): void {\r\n const client = this.clients.get(clientId)\r\n if (client && client.ws.readyState === 1) {\r\n client.ws.send(JSON.stringify(msg))\r\n }\r\n }\r\n\r\n}\r\n", "import { createInterface, type Interface as ReadlineInterface } from 'readline'\nimport type { Channel, AgentResponse, MessageHandler } from './types'\n\nexport interface CliChannelOptions {\n userId?: string\n prompt?: string\n input?: NodeJS.ReadableStream\n output?: NodeJS.WritableStream\n}\n\nexport class CliChannel implements Channel {\n readonly id = 'cli'\n readonly name = 'CLI'\n\n private handler: MessageHandler | null = null\n private rl: ReadlineInterface | null = null\n private userId: string\n private promptStr: string\n private input: NodeJS.ReadableStream\n private output: NodeJS.WritableStream\n private active = false\n\n constructor(options: CliChannelOptions = {}) {\n this.userId = options.userId ?? 'cli-user'\n this.promptStr = options.prompt ?? '> '\n this.input = options.input ?? process.stdin\n this.output = options.output ?? process.stdout\n }\n\n onMessage(handler: MessageHandler): void {\n this.handler = handler\n }\n\n async start(): Promise<void> {\n this.active = true\n this.rl = createInterface({\n input: this.input,\n output: this.output,\n prompt: this.promptStr,\n })\n\n this.rl.on('line', async (line: string) => {\n const text = line.trim()\n if (!text) {\n this.rl?.prompt()\n return\n }\n\n if (text === '/exit' || text === '/quit') {\n await this.stop()\n return\n }\n\n if (!this.handler) {\n this.rl?.prompt()\n return\n }\n\n this.rl?.pause()\n try {\n await this.handler({\n channelId: this.id,\n userId: this.userId,\n sessionKey: `cli:${this.userId}`,\n text,\n })\n } finally {\n if (this.active) {\n this.rl?.resume()\n this.rl?.prompt()\n }\n }\n })\n\n this.rl.on('close', () => {\n this.active = false\n })\n\n setTimeout(() => {\n if (this.active) {\n this.output.write('\\n')\n this.rl?.prompt()\n }\n }, 100)\n }\n\n async stop(): Promise<void> {\n this.active = false\n this.rl?.close()\n this.rl = null\n }\n\n async sendResponse(_userId: string, response: AgentResponse): Promise<void> {\n if (!this.active) return\n\n switch (response.type) {\n case 'text':\n this.write(response.content)\n break\n case 'thinking':\n this.write(`[thinking] ${response.content}`)\n break\n case 'error':\n this.write(`[error] ${response.content}`)\n break\n case 'tool_call':\n this.write(`[tool] ${response.content}`)\n break\n case 'tool_result':\n this.write(`[result] ${response.content}`)\n break\n case 'done':\n this.write('')\n break\n }\n }\n\n async requestPermission(_userId: string, description: string): Promise<boolean> {\n if (!this.rl) return false\n\n return new Promise((resolve) => {\n this.write(`\\n[Permission] ${description}`)\n this.rl!.question('Allow? (y/n) ', (answer: string) => {\n resolve(answer.trim().toLowerCase().startsWith('y'))\n })\n })\n }\n\n private write(text: string): void {\n this.output.write(`${text}\\n`)\n }\n}\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, unlinkSync } from 'fs'\r\nimport { join } from 'path'\r\nimport type { Session, SessionStorage } from './types'\r\n\r\nexport class FileSessionStorage implements SessionStorage {\r\n constructor(private dir: string) {\r\n if (!existsSync(dir)) {\r\n mkdirSync(dir, { recursive: true })\r\n }\r\n }\r\n\r\n private filePath(key: string): string {\r\n const safeKey = key.replace(/[^a-zA-Z0-9_-]/g, '_')\r\n return join(this.dir, `${safeKey}.json`)\r\n }\r\n\r\n async load(key: string): Promise<Session | null> {\r\n const path = this.filePath(key)\r\n if (!existsSync(path)) return null\r\n try {\r\n return JSON.parse(readFileSync(path, 'utf-8'))\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n async save(key: string, session: Session): Promise<void> {\r\n session.updatedAt = Date.now()\r\n writeFileSync(this.filePath(key), JSON.stringify(session, null, 2), 'utf-8')\r\n }\r\n\r\n async list(): Promise<string[]> {\r\n if (!existsSync(this.dir)) return []\r\n return readdirSync(this.dir)\r\n .filter(f => f.endsWith('.json'))\r\n .map(f => f.replace('.json', ''))\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n const path = this.filePath(key)\r\n if (existsSync(path)) unlinkSync(path)\r\n }\r\n}\r\n", "#!/usr/bin/env bun\r\n\r\nimport { Gateway } from '../gateway/gateway'\r\nimport { HttpChannel } from '../channels/http'\r\nimport { WebSocketChannel } from '../channels/websocket'\r\nimport { CliChannel } from '../channels/cli'\r\nimport { FileSessionStorage } from '../sessions/storage'\r\nimport { setIdentity } from '../core/identity'\r\nimport { loggingMiddleware, rateLimitMiddleware, maxConcurrencyMiddleware } from '../gateway/middleware'\r\nimport { join, dirname } from 'path'\r\nimport { homedir } from 'os'\r\nimport { existsSync } from 'fs'\r\nimport { fileURLToPath } from 'url'\r\n\r\ninterface GatewayCliOptions {\r\n port: number\r\n wsPort?: number\r\n host: string\r\n domain: string\r\n authToken?: string\r\n corsOrigin?: string\r\n sessionDir?: string\r\n cwd?: string\r\n safeMode: boolean\r\n enableLogging: boolean\r\n rateLimit?: number\r\n name?: string\r\n description?: string\r\n cli?: boolean\r\n webDir?: string\r\n}\r\n\r\nfunction parseArgs(argv: string[]): GatewayCliOptions {\r\n const opts: GatewayCliOptions = {\r\n port: 3000,\r\n host: '0.0.0.0',\r\n domain: 'general',\r\n safeMode: false,\r\n enableLogging: true,\r\n }\r\n\r\n for (let i = 2; i < argv.length; i++) {\r\n const arg = argv[i]\r\n const next = argv[i + 1]\r\n\r\n switch (arg) {\r\n case '--port':\r\n opts.port = parseInt(next, 10); i++; break\r\n case '--ws-port':\r\n opts.wsPort = parseInt(next, 10); i++; break\r\n case '--host':\r\n opts.host = next; i++; break\r\n case '--domain':\r\n opts.domain = next; i++; break\r\n case '--auth-token':\r\n opts.authToken = next; i++; break\r\n case '--cors-origin':\r\n opts.corsOrigin = next; i++; break\r\n case '--session-dir':\r\n opts.sessionDir = next; i++; break\r\n case '--cwd':\r\n opts.cwd = next; i++; break\r\n case '--safe-mode':\r\n opts.safeMode = true; break\r\n case '--no-logging':\r\n opts.enableLogging = false; break\r\n case '--rate-limit':\r\n opts.rateLimit = parseInt(next, 10); i++; break\r\n case '--name':\r\n opts.name = next; i++; break\r\n case '--description':\r\n opts.description = next; i++; break\r\n case '--cli':\r\n opts.cli = true; break\r\n case '--web-dir':\r\n opts.webDir = next; i++; break\r\n case '--help':\r\n printHelp(); process.exit(0)\r\n }\r\n }\r\n\r\n return opts\r\n}\r\n\r\nfunction printHelp(): void {\r\n console.log(`\r\nUsage: newcraw gateway [options]\r\n\r\nOptions:\r\n --port <number> HTTP port (default: 3000)\r\n --ws-port <number> WebSocket port (if omitted, WS is disabled)\r\n --host <string> Bind host (default: 0.0.0.0)\r\n --domain <string> Domain: coding | general (default: general)\r\n --auth-token <string> Bearer token for API / WS auth\r\n --cors-origin <string> CORS origin (default: *)\r\n --session-dir <path> Session storage directory\r\n --cwd <path> Working directory for agent\r\n --safe-mode Enable safe mode (restrict dangerous operations)\r\n --no-logging Disable request logging\r\n --rate-limit <number> Max requests per minute per session (default: 30)\r\n --name <string> Agent name\r\n --description <string> Agent description\r\n --cli Enable interactive CLI channel (stdin/stdout REPL)\r\n --web-dir <path> Serve web UI from directory (default: auto-detect web/dist)\r\n --help Show this help\r\n\r\nEndpoints:\r\n GET /health Health check\r\n POST /api/chat Blocking JSON response\r\n POST /api/chat/stream SSE streaming response\r\n WS ws://host:ws-port WebSocket (bidirectional streaming)\r\n`)\r\n}\r\n\r\nfunction resolveWebDir(explicit?: string): string | undefined {\r\n if (explicit) {\r\n return existsSync(explicit) ? explicit : undefined\r\n }\r\n const thisDir = dirname(fileURLToPath(import.meta.url))\r\n const candidates = [\r\n join(process.cwd(), 'web', 'dist'),\r\n // Built output lives in dist/ \u2014 one level up reaches package root\r\n join(thisDir, '..', 'web', 'dist'),\r\n // Source layout lives in src/entrypoints/ \u2014 two levels up reaches project root\r\n join(thisDir, '..', '..', 'web', 'dist'),\r\n ]\r\n for (const candidate of candidates) {\r\n if (existsSync(join(candidate, 'index.html'))) {\r\n return candidate\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nasync function main(): Promise<void> {\r\n const opts = parseArgs(process.argv)\r\n\r\n if (opts.name || opts.description) {\r\n setIdentity({\r\n ...(opts.name ? { name: opts.name } : {}),\r\n ...(opts.description ? { description: opts.description } : {}),\r\n domain: opts.domain,\r\n })\r\n }\r\n\r\n const sessionDir = opts.sessionDir ?? join(homedir(), '.newcraw', 'gateway-sessions')\r\n const storage = new FileSessionStorage(sessionDir)\r\n\r\n const middleware = []\r\n if (opts.enableLogging) middleware.push(loggingMiddleware())\r\n middleware.push(rateLimitMiddleware({ maxRequests: opts.rateLimit ?? 30 }))\r\n middleware.push(maxConcurrencyMiddleware())\r\n\r\n const gateway = new Gateway({\r\n storage,\r\n domain: opts.domain,\r\n cwd: opts.cwd,\r\n safeMode: opts.safeMode,\r\n middleware,\r\n onError: (err, ctx) => console.error(`[Gateway Error] ${ctx}:`, err.message),\r\n })\r\n\r\n const webDistDir = resolveWebDir(opts.webDir)\r\n if (webDistDir) {\r\n console.log(`[Gateway] Serving web UI from ${webDistDir}`)\r\n }\r\n\r\n const httpChannel = new HttpChannel({\r\n port: opts.port,\r\n host: opts.host,\r\n authToken: opts.authToken,\r\n corsOrigin: opts.corsOrigin,\r\n webDistDir,\r\n })\r\n gateway.registerChannel(httpChannel)\r\n\r\n if (opts.wsPort) {\r\n const wsChannel = new WebSocketChannel({\r\n port: opts.wsPort,\r\n host: opts.host,\r\n authToken: opts.authToken,\r\n })\r\n gateway.registerChannel(wsChannel)\r\n }\r\n\r\n if (opts.cli) {\r\n const cliChannel = new CliChannel({ prompt: `[${opts.name ?? 'NewCraw'}] > ` })\r\n gateway.registerChannel(cliChannel)\r\n }\r\n\r\n process.on('SIGINT', async () => {\r\n await gateway.stop()\r\n process.exit(0)\r\n })\r\n\r\n process.on('SIGTERM', async () => {\r\n await gateway.stop()\r\n process.exit(0)\r\n })\r\n\r\n await gateway.start()\r\n}\r\n\r\nmain().catch((err) => {\r\n console.error('Fatal:', err)\r\n process.exit(1)\r\n})\r\n"],
5
+ "mappings": "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",
6
+ "names": ["resolve", "createServer", "randomUUID", "resolve", "resolve", "join", "join", "existsSync"]
7
+ }
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { createRequire as __newcrawCreateRequire } from "node:module";
2
2
  const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  MACRO
5
- } from "./chunk-TSGGSPYD.js";
5
+ } from "./chunk-ZYSVG4X3.js";
6
6
  import "./chunk-AXWJI6N5.js";
7
7
 
8
8
  // src/entrypoints/index.ts
@@ -28,7 +28,9 @@ Common options:
28
28
  process.exit(0);
29
29
  }
30
30
  if (hasFlag("--acp")) {
31
- await import("./acp-A55ZRIPP.js");
31
+ await import("./acp-J4WDYGRX.js");
32
+ } else if (process.argv[2] === "gateway") {
33
+ await import("./gateway-IZYO6YFJ.js");
32
34
  } else {
33
- await import("./cli-BW34VKCN.js");
35
+ await import("./cli-KZGF3FV5.js");
34
36
  }
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/entrypoints/index.ts"],
4
- "sourcesContent": ["import { MACRO } from '../constants/macros'\r\n\r\nfunction hasFlag(...flags: string[]): boolean {\r\n return process.argv.some(arg => flags.includes(arg))\r\n}\r\n\r\nif (hasFlag('--version', '-v')) {\r\n process.stdout.write(`${MACRO.VERSION || ''}\\n`)\r\n process.exit(0)\r\n}\r\n\r\nif (hasFlag('--help-lite')) {\r\n process.stdout.write(\r\n `Usage: newcraw [options] [command] [prompt]\\n\\n` +\r\n `Common options:\\n` +\r\n ` -h, --help Show full help\\n` +\r\n ` -v, --version Show version\\n` +\r\n ` -p, --print Print response and exit (non-interactive)\\n` +\r\n ` -c, --cwd <cwd> Set working directory\\n`,\r\n )\r\n process.exit(0)\r\n}\r\n\r\nif (hasFlag('--acp')) {\r\n await import('./acp.js')\r\n} else {\r\n await import('./cli.js')\r\n}\r\n"],
5
- "mappings": ";;;;;;;;AAEA,SAAS,WAAW,OAA0B;AAC5C,SAAO,QAAQ,KAAK,KAAK,SAAO,MAAM,SAAS,GAAG,CAAC;AACrD;AAEA,IAAI,QAAQ,aAAa,IAAI,GAAG;AAC9B,UAAQ,OAAO,MAAM,GAAG,MAAM,WAAW,EAAE;AAAA,CAAI;AAC/C,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,QAAQ,aAAa,GAAG;AAC1B,UAAQ,OAAO;AAAA,IACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMF;AACA,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,QAAQ,OAAO,GAAG;AACpB,QAAM,OAAO,mBAAU;AACzB,OAAO;AACL,QAAM,OAAO,mBAAU;AACzB;",
4
+ "sourcesContent": ["import { MACRO } from '../constants/macros'\r\n\r\nfunction hasFlag(...flags: string[]): boolean {\r\n return process.argv.some(arg => flags.includes(arg))\r\n}\r\n\r\nif (hasFlag('--version', '-v')) {\r\n process.stdout.write(`${MACRO.VERSION || ''}\\n`)\r\n process.exit(0)\r\n}\r\n\r\nif (hasFlag('--help-lite')) {\r\n process.stdout.write(\r\n `Usage: newcraw [options] [command] [prompt]\\n\\n` +\r\n `Common options:\\n` +\r\n ` -h, --help Show full help\\n` +\r\n ` -v, --version Show version\\n` +\r\n ` -p, --print Print response and exit (non-interactive)\\n` +\r\n ` -c, --cwd <cwd> Set working directory\\n`,\r\n )\r\n process.exit(0)\r\n}\r\n\r\nif (hasFlag('--acp')) {\r\n await import('./acp.js')\r\n} else if (process.argv[2] === 'gateway') {\r\n await import('./gateway.js')\r\n} else {\r\n await import('./cli.js')\r\n}\r\n"],
5
+ "mappings": ";;;;;;;;AAEA,SAAS,WAAW,OAA0B;AAC5C,SAAO,QAAQ,KAAK,KAAK,SAAO,MAAM,SAAS,GAAG,CAAC;AACrD;AAEA,IAAI,QAAQ,aAAa,IAAI,GAAG;AAC9B,UAAQ,OAAO,MAAM,GAAG,MAAM,WAAW,EAAE;AAAA,CAAI;AAC/C,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,QAAQ,aAAa,GAAG;AAC1B,UAAQ,OAAO;AAAA,IACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMF;AACA,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,QAAQ,OAAO,GAAG;AACpB,QAAM,OAAO,mBAAU;AACzB,WAAW,QAAQ,KAAK,CAAC,MAAM,WAAW;AACxC,QAAM,OAAO,uBAAc;AAC7B,OAAO;AACL,QAAM,OAAO,mBAAU;AACzB;",
6
6
  "names": []
7
7
  }
@@ -4,12 +4,12 @@ import {
4
4
  findMostRecentKodeAgentSessionId,
5
5
  loadKodeAgentSessionLogData,
6
6
  loadKodeAgentSessionMessages
7
- } from "./chunk-QF6YDTME.js";
8
- import "./chunk-QTX7AJFQ.js";
7
+ } from "./chunk-3LMXSKZ7.js";
8
+ import "./chunk-XXU2NVOE.js";
9
9
  import "./chunk-JX5ZQYTQ.js";
10
10
  import "./chunk-7ZFLZNOW.js";
11
- import "./chunk-3C73U2IU.js";
12
- import "./chunk-TSGGSPYD.js";
11
+ import "./chunk-IM33F5CM.js";
12
+ import "./chunk-ZYSVG4X3.js";
13
13
  import "./chunk-AXWJI6N5.js";
14
14
  export {
15
15
  findMostRecentKodeAgentSessionId,
@@ -3,12 +3,12 @@ const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  listKodeAgentSessions,
5
5
  resolveResumeSessionIdentifier
6
- } from "./chunk-T6VKT5FR.js";
7
- import "./chunk-QTX7AJFQ.js";
6
+ } from "./chunk-XS6PU75S.js";
7
+ import "./chunk-XXU2NVOE.js";
8
8
  import "./chunk-JX5ZQYTQ.js";
9
9
  import "./chunk-7ZFLZNOW.js";
10
- import "./chunk-3C73U2IU.js";
11
- import "./chunk-TSGGSPYD.js";
10
+ import "./chunk-IM33F5CM.js";
11
+ import "./chunk-ZYSVG4X3.js";
12
12
  import "./chunk-AXWJI6N5.js";
13
13
  export {
14
14
  listKodeAgentSessions,
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-XMGUQHMF.js";
7
7
  import {
8
8
  createUserMessage
9
- } from "./chunk-EENI5HG7.js";
9
+ } from "./chunk-A7X6OCZE.js";
10
10
  import "./chunk-AXWJI6N5.js";
11
11
 
12
12
  // src/utils/protocol/kodeAgentStreamJsonSession.ts
@@ -13,12 +13,12 @@ import {
13
13
  runStopHooks,
14
14
  runUserPromptSubmitHooks,
15
15
  updateHookTranscriptForMessages
16
- } from "./chunk-Y7VZUSIM.js";
16
+ } from "./chunk-V5U6BHT2.js";
17
17
  import "./chunk-7ZFLZNOW.js";
18
- import "./chunk-YYPJWXSA.js";
18
+ import "./chunk-2EFL22PV.js";
19
19
  import "./chunk-2UO3BFZH.js";
20
- import "./chunk-3C73U2IU.js";
21
- import "./chunk-TSGGSPYD.js";
20
+ import "./chunk-IM33F5CM.js";
21
+ import "./chunk-ZYSVG4X3.js";
22
22
  import "./chunk-AXWJI6N5.js";
23
23
  export {
24
24
  __resetKodeHooksCacheForTests,
@@ -13,33 +13,33 @@ import {
13
13
  getReasoningEffort,
14
14
  models_default,
15
15
  refreshKodeContext
16
- } from "./chunk-ULVAAZ2U.js";
17
- import "./chunk-T6VKT5FR.js";
18
- import "./chunk-L6WKZEK4.js";
19
- import "./chunk-XOMW5QTV.js";
20
- import "./chunk-MXSB7IOZ.js";
21
- import "./chunk-QF6YDTME.js";
22
- import "./chunk-QTX7AJFQ.js";
16
+ } from "./chunk-OJIMOLIC.js";
17
+ import "./chunk-XS6PU75S.js";
18
+ import "./chunk-WWDVA4NV.js";
19
+ import "./chunk-VQSCECTS.js";
20
+ import "./chunk-HSJ6HYAO.js";
21
+ import "./chunk-3LMXSKZ7.js";
22
+ import "./chunk-XXU2NVOE.js";
23
23
  import "./chunk-JX5ZQYTQ.js";
24
24
  import {
25
25
  setRequestStatus
26
26
  } from "./chunk-XJQATPV7.js";
27
- import "./chunk-Y7VZUSIM.js";
27
+ import "./chunk-V5U6BHT2.js";
28
28
  import "./chunk-7ZFLZNOW.js";
29
- import "./chunk-YVNBXMIP.js";
29
+ import "./chunk-VHS2MZQS.js";
30
30
  import {
31
31
  getCompletionWithProfile,
32
32
  getGPT5CompletionWithProfile
33
- } from "./chunk-DY5D4SS7.js";
34
- import "./chunk-U224EQOS.js";
35
- import "./chunk-BUI6KGVA.js";
36
- import "./chunk-FHOCKJOW.js";
37
- import "./chunk-GPKVTIYJ.js";
38
- import "./chunk-YYPJWXSA.js";
33
+ } from "./chunk-QH2M65BR.js";
34
+ import "./chunk-RUXIBQ3B.js";
35
+ import "./chunk-JWXQNBBA.js";
36
+ import "./chunk-2C43OXE7.js";
37
+ import "./chunk-BWYKUDJR.js";
38
+ import "./chunk-2EFL22PV.js";
39
39
  import "./chunk-U7S4MEYP.js";
40
- import "./chunk-S3ZAJPYZ.js";
40
+ import "./chunk-UYRR6F5S.js";
41
41
  import "./chunk-TY3CCSAT.js";
42
- import "./chunk-S5Y5IF2H.js";
42
+ import "./chunk-LOIZNQOU.js";
43
43
  import "./chunk-INJSFEKL.js";
44
44
  import "./chunk-2UO3BFZH.js";
45
45
  import {
@@ -51,19 +51,19 @@ import {
51
51
  PROMPT_TOO_LONG_ERROR_MESSAGE,
52
52
  createAssistantAPIErrorMessage,
53
53
  normalizeContentFromAPI
54
- } from "./chunk-EENI5HG7.js";
54
+ } from "./chunk-A7X6OCZE.js";
55
55
  import {
56
56
  USE_BEDROCK,
57
57
  USE_VERTEX,
58
58
  getModelManager,
59
59
  getVertexRegionForModel
60
- } from "./chunk-EXPWPWA4.js";
61
- import "./chunk-B26ZUMJI.js";
62
- import "./chunk-LC4CL3YJ.js";
60
+ } from "./chunk-F3COCCAE.js";
61
+ import "./chunk-53A4JHFW.js";
62
+ import "./chunk-DEF3KFP7.js";
63
63
  import {
64
64
  getAnthropicApiKey,
65
65
  getGlobalConfig
66
- } from "./chunk-SBE6Y327.js";
66
+ } from "./chunk-IIFUDVGS.js";
67
67
  import "./chunk-KQSHIOZK.js";
68
68
  import {
69
69
  debug,
@@ -72,16 +72,16 @@ import {
72
72
  logLLMInteraction,
73
73
  logSystemPromptConstruction,
74
74
  markPhase
75
- } from "./chunk-H5BCUDEN.js";
75
+ } from "./chunk-GZTCXXSS.js";
76
76
  import {
77
77
  PRODUCT_COMMAND,
78
78
  env,
79
79
  getCwd,
80
80
  logError
81
- } from "./chunk-3C73U2IU.js";
81
+ } from "./chunk-IM33F5CM.js";
82
82
  import {
83
83
  MACRO
84
- } from "./chunk-TSGGSPYD.js";
84
+ } from "./chunk-ZYSVG4X3.js";
85
85
  import {
86
86
  addToTotalCost
87
87
  } from "./chunk-755HIAI3.js";
@@ -2843,7 +2843,7 @@ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, sig
2843
2843
  start = Date.now();
2844
2844
  if (adapterContext) {
2845
2845
  if (adapterContext.shouldUseResponses) {
2846
- const { callGPT5ResponsesAPI } = await import("./openai-VQLYFQ6B.js");
2846
+ const { callGPT5ResponsesAPI } = await import("./openai-KTZV6F7N.js");
2847
2847
  const response = await callGPT5ResponsesAPI(
2848
2848
  modelProfile,
2849
2849
  adapterContext.request,
@@ -5,7 +5,7 @@ import {
5
5
  queryLLM,
6
6
  queryQuick,
7
7
  verifyApiKey
8
- } from "./chunk-U224EQOS.js";
8
+ } from "./chunk-RUXIBQ3B.js";
9
9
  import "./chunk-AXWJI6N5.js";
10
10
  export {
11
11
  fetchAnthropicModels,
@@ -9,12 +9,12 @@ import {
9
9
  setFlagAgentsFromCliJson,
10
10
  startAgentWatcher,
11
11
  stopAgentWatcher
12
- } from "./chunk-S5Y5IF2H.js";
12
+ } from "./chunk-LOIZNQOU.js";
13
13
  import "./chunk-INJSFEKL.js";
14
14
  import "./chunk-2UO3BFZH.js";
15
- import "./chunk-H5BCUDEN.js";
16
- import "./chunk-3C73U2IU.js";
17
- import "./chunk-TSGGSPYD.js";
15
+ import "./chunk-GZTCXXSS.js";
16
+ import "./chunk-IM33F5CM.js";
17
+ import "./chunk-ZYSVG4X3.js";
18
18
  import "./chunk-AXWJI6N5.js";
19
19
  export {
20
20
  clearAgentCache,
@@ -18,15 +18,15 @@ import {
18
18
  parseMcpHeaders,
19
19
  removeMcpServer,
20
20
  runCommand
21
- } from "./chunk-L6WKZEK4.js";
22
- import "./chunk-YYPJWXSA.js";
21
+ } from "./chunk-WWDVA4NV.js";
22
+ import "./chunk-2EFL22PV.js";
23
23
  import "./chunk-2UO3BFZH.js";
24
- import "./chunk-LC4CL3YJ.js";
25
- import "./chunk-SBE6Y327.js";
24
+ import "./chunk-DEF3KFP7.js";
25
+ import "./chunk-IIFUDVGS.js";
26
26
  import "./chunk-KQSHIOZK.js";
27
- import "./chunk-H5BCUDEN.js";
28
- import "./chunk-3C73U2IU.js";
29
- import "./chunk-TSGGSPYD.js";
27
+ import "./chunk-GZTCXXSS.js";
28
+ import "./chunk-IM33F5CM.js";
29
+ import "./chunk-ZYSVG4X3.js";
30
30
  import "./chunk-AXWJI6N5.js";
31
31
  export {
32
32
  addMcpServer,
@@ -2,21 +2,21 @@ import { createRequire as __newcrawCreateRequire } from "node:module";
2
2
  const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  emitReminderEvent
5
- } from "./chunk-S3ZAJPYZ.js";
5
+ } from "./chunk-UYRR6F5S.js";
6
6
  import "./chunk-TY3CCSAT.js";
7
7
  import {
8
8
  getAvailableAgentTypes
9
- } from "./chunk-S5Y5IF2H.js";
9
+ } from "./chunk-LOIZNQOU.js";
10
10
  import "./chunk-INJSFEKL.js";
11
11
  import "./chunk-2UO3BFZH.js";
12
12
  import {
13
13
  debug
14
- } from "./chunk-H5BCUDEN.js";
14
+ } from "./chunk-GZTCXXSS.js";
15
15
  import {
16
16
  getCwd,
17
17
  logError
18
- } from "./chunk-3C73U2IU.js";
19
- import "./chunk-TSGGSPYD.js";
18
+ } from "./chunk-IM33F5CM.js";
19
+ import "./chunk-ZYSVG4X3.js";
20
20
  import "./chunk-AXWJI6N5.js";
21
21
 
22
22
  // src/services/context/mentionProcessor.ts
@@ -30,7 +30,7 @@ import {
30
30
  processUserInput,
31
31
  reorderMessages,
32
32
  stripSystemMessages
33
- } from "./chunk-EENI5HG7.js";
33
+ } from "./chunk-A7X6OCZE.js";
34
34
  import "./chunk-AXWJI6N5.js";
35
35
  export {
36
36
  CANCEL_MESSAGE,
@@ -10,12 +10,12 @@ import {
10
10
  getVertexRegionForModel,
11
11
  isDefaultSlowAndCapableModel,
12
12
  reloadModelManager
13
- } from "./chunk-EXPWPWA4.js";
14
- import "./chunk-SBE6Y327.js";
13
+ } from "./chunk-F3COCCAE.js";
14
+ import "./chunk-IIFUDVGS.js";
15
15
  import "./chunk-KQSHIOZK.js";
16
- import "./chunk-H5BCUDEN.js";
17
- import "./chunk-3C73U2IU.js";
18
- import "./chunk-TSGGSPYD.js";
16
+ import "./chunk-GZTCXXSS.js";
17
+ import "./chunk-IM33F5CM.js";
18
+ import "./chunk-ZYSVG4X3.js";
19
19
  import "./chunk-AXWJI6N5.js";
20
20
  export {
21
21
  ModelManager,
@@ -9,13 +9,13 @@ import {
9
9
  getGPT5CompletionWithProfile,
10
10
  getModelFeatures,
11
11
  streamCompletion
12
- } from "./chunk-DY5D4SS7.js";
12
+ } from "./chunk-QH2M65BR.js";
13
13
  import "./chunk-TY3CCSAT.js";
14
- import "./chunk-SBE6Y327.js";
14
+ import "./chunk-IIFUDVGS.js";
15
15
  import "./chunk-KQSHIOZK.js";
16
- import "./chunk-H5BCUDEN.js";
17
- import "./chunk-3C73U2IU.js";
18
- import "./chunk-TSGGSPYD.js";
16
+ import "./chunk-GZTCXXSS.js";
17
+ import "./chunk-IM33F5CM.js";
18
+ import "./chunk-ZYSVG4X3.js";
19
19
  import "./chunk-AXWJI6N5.js";
20
20
  export {
21
21
  applyModelSpecificTransformations,
@@ -9,12 +9,12 @@ import {
9
9
  getOutputStyleSystemPromptAdditions,
10
10
  resolveOutputStyleName,
11
11
  setCurrentOutputStyle
12
- } from "./chunk-YVNBXMIP.js";
13
- import "./chunk-YYPJWXSA.js";
12
+ } from "./chunk-VHS2MZQS.js";
13
+ import "./chunk-2EFL22PV.js";
14
14
  import "./chunk-INJSFEKL.js";
15
15
  import "./chunk-2UO3BFZH.js";
16
- import "./chunk-3C73U2IU.js";
17
- import "./chunk-TSGGSPYD.js";
16
+ import "./chunk-IM33F5CM.js";
17
+ import "./chunk-ZYSVG4X3.js";
18
18
  import "./chunk-AXWJI6N5.js";
19
19
  export {
20
20
  DEFAULT_OUTPUT_STYLE,
@@ -5,8 +5,8 @@ import {
5
5
  } from "./chunk-2UO3BFZH.js";
6
6
  import {
7
7
  getCwd
8
- } from "./chunk-3C73U2IU.js";
9
- import "./chunk-TSGGSPYD.js";
8
+ } from "./chunk-IM33F5CM.js";
9
+ import "./chunk-ZYSVG4X3.js";
10
10
  import "./chunk-AXWJI6N5.js";
11
11
 
12
12
  // src/services/plugins/pluginRuntime.ts
@@ -202,14 +202,14 @@ async function configureSessionPlugins(args) {
202
202
  }
203
203
  }
204
204
  setSessionPlugins(plugins);
205
- const { reloadCustomCommands } = await import("./customCommands-OCUMXZDN.js");
205
+ const { reloadCustomCommands } = await import("./customCommands-QOWK57EX.js");
206
206
  reloadCustomCommands();
207
- const { getCommands } = await import("./commands-4CNZZBTE.js");
207
+ const { getCommands } = await import("./commands-AVEBLFVS.js");
208
208
  getCommands.cache.clear?.();
209
- const { getClients, getMCPTools } = await import("./mcp-2SZTOKZX.js");
209
+ const { getClients, getMCPTools } = await import("./mcp-KE3SILMX.js");
210
210
  getClients.cache?.clear?.();
211
211
  getMCPTools.cache?.clear?.();
212
- const { clearOutputStyleCache } = await import("./outputStyles-VQ57E3B6.js");
212
+ const { clearOutputStyleCache } = await import("./outputStyles-WX5RYQOA.js");
213
213
  clearOutputStyleCache();
214
214
  return { plugins, errors };
215
215
  }
@@ -3,13 +3,13 @@ const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  formatValidationResult,
5
5
  validatePluginOrMarketplacePath
6
- } from "./chunk-XOMW5QTV.js";
7
- import "./chunk-MXSB7IOZ.js";
8
- import "./chunk-FHOCKJOW.js";
6
+ } from "./chunk-VQSCECTS.js";
7
+ import "./chunk-HSJ6HYAO.js";
8
+ import "./chunk-2C43OXE7.js";
9
9
  import "./chunk-2UO3BFZH.js";
10
- import "./chunk-H5BCUDEN.js";
11
- import "./chunk-3C73U2IU.js";
12
- import "./chunk-TSGGSPYD.js";
10
+ import "./chunk-GZTCXXSS.js";
11
+ import "./chunk-IM33F5CM.js";
12
+ import "./chunk-ZYSVG4X3.js";
13
13
  import "./chunk-AXWJI6N5.js";
14
14
  export {
15
15
  formatValidationResult,
@@ -0,0 +1,48 @@
1
+ import { createRequire as __newcrawCreateRequire } from "node:module";
2
+ const require = __newcrawCreateRequire(import.meta.url);
3
+ import {
4
+ getAgentPrompt,
5
+ getCLISyspromptPrefix,
6
+ getEnvInfo,
7
+ getSystemPrompt
8
+ } from "./chunk-OJIMOLIC.js";
9
+ import "./chunk-XS6PU75S.js";
10
+ import "./chunk-WWDVA4NV.js";
11
+ import "./chunk-VQSCECTS.js";
12
+ import "./chunk-HSJ6HYAO.js";
13
+ import "./chunk-3LMXSKZ7.js";
14
+ import "./chunk-XXU2NVOE.js";
15
+ import "./chunk-JX5ZQYTQ.js";
16
+ import "./chunk-XJQATPV7.js";
17
+ import "./chunk-V5U6BHT2.js";
18
+ import "./chunk-7ZFLZNOW.js";
19
+ import "./chunk-VHS2MZQS.js";
20
+ import "./chunk-QH2M65BR.js";
21
+ import "./chunk-RUXIBQ3B.js";
22
+ import "./chunk-JWXQNBBA.js";
23
+ import "./chunk-2C43OXE7.js";
24
+ import "./chunk-BWYKUDJR.js";
25
+ import "./chunk-2EFL22PV.js";
26
+ import "./chunk-U7S4MEYP.js";
27
+ import "./chunk-UYRR6F5S.js";
28
+ import "./chunk-TY3CCSAT.js";
29
+ import "./chunk-LOIZNQOU.js";
30
+ import "./chunk-INJSFEKL.js";
31
+ import "./chunk-2UO3BFZH.js";
32
+ import "./chunk-A7X6OCZE.js";
33
+ import "./chunk-F3COCCAE.js";
34
+ import "./chunk-53A4JHFW.js";
35
+ import "./chunk-DEF3KFP7.js";
36
+ import "./chunk-IIFUDVGS.js";
37
+ import "./chunk-KQSHIOZK.js";
38
+ import "./chunk-GZTCXXSS.js";
39
+ import "./chunk-IM33F5CM.js";
40
+ import "./chunk-ZYSVG4X3.js";
41
+ import "./chunk-755HIAI3.js";
42
+ import "./chunk-AXWJI6N5.js";
43
+ export {
44
+ getAgentPrompt,
45
+ getCLISyspromptPrefix,
46
+ getEnvInfo,
47
+ getSystemPrompt
48
+ };