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.
- package/dist/REPL-IAK7ZN2Z.js +42 -0
- package/dist/{acp-A55ZRIPP.js → acp-J4WDYGRX.js} +26 -26
- package/dist/{agentsValidate-XWFIEHJ2.js → agentsValidate-UBOER2IN.js} +7 -7
- package/dist/{ask-4ACYU23S.js → ask-MGUO3L35.js} +25 -25
- package/dist/{autoUpdater-O2WHHSGP.js → autoUpdater-2GS6LRPK.js} +3 -3
- package/dist/{chunk-FHOCKJOW.js → chunk-2C43OXE7.js} +2 -2
- package/dist/{chunk-YYPJWXSA.js → chunk-2EFL22PV.js} +1 -1
- package/dist/{chunk-QF6YDTME.js → chunk-3LMXSKZ7.js} +1 -1
- package/dist/{chunk-B26ZUMJI.js → chunk-53A4JHFW.js} +3 -3
- package/dist/{chunk-EENI5HG7.js → chunk-A7X6OCZE.js} +1 -1
- package/dist/{chunk-GPKVTIYJ.js → chunk-BWYKUDJR.js} +3 -3
- package/dist/{chunk-LC4CL3YJ.js → chunk-DEF3KFP7.js} +1 -1
- package/dist/{chunk-EXPWPWA4.js → chunk-F3COCCAE.js} +3 -3
- package/dist/{chunk-H5BCUDEN.js → chunk-GZTCXXSS.js} +1 -1
- package/dist/{chunk-MXSB7IOZ.js → chunk-HSJ6HYAO.js} +1 -1
- package/dist/{chunk-SBE6Y327.js → chunk-IIFUDVGS.js} +3 -3
- package/dist/{chunk-3C73U2IU.js → chunk-IM33F5CM.js} +1 -1
- package/dist/{chunk-BUI6KGVA.js → chunk-JWXQNBBA.js} +1 -1
- package/dist/{chunk-S5Y5IF2H.js → chunk-LOIZNQOU.js} +2 -2
- package/dist/{chunk-ULVAAZ2U.js → chunk-OJIMOLIC.js} +38 -32
- package/dist/{chunk-ULVAAZ2U.js.map → chunk-OJIMOLIC.js.map} +1 -1
- package/dist/{chunk-WWLFALT7.js → chunk-OZHBEG7U.js} +3 -3
- package/dist/{chunk-DY5D4SS7.js → chunk-QH2M65BR.js} +2 -2
- package/dist/{chunk-U224EQOS.js → chunk-RUXIBQ3B.js} +4 -4
- package/dist/{chunk-S3ZAJPYZ.js → chunk-UYRR6F5S.js} +2 -2
- package/dist/{chunk-Y7VZUSIM.js → chunk-V5U6BHT2.js} +3 -3
- package/dist/{chunk-YVNBXMIP.js → chunk-VHS2MZQS.js} +2 -2
- package/dist/{chunk-3U5X4VWP.js → chunk-VKI7ORIO.js} +11 -11
- package/dist/{chunk-XOMW5QTV.js → chunk-VQSCECTS.js} +3 -3
- package/dist/{chunk-L6WKZEK4.js → chunk-WWDVA4NV.js} +4 -4
- package/dist/{chunk-T6VKT5FR.js → chunk-XS6PU75S.js} +1 -1
- package/dist/{chunk-QTX7AJFQ.js → chunk-XXU2NVOE.js} +2 -2
- package/dist/{chunk-TSGGSPYD.js → chunk-ZYSVG4X3.js} +1 -1
- package/dist/{chunk-TSGGSPYD.js.map → chunk-ZYSVG4X3.js.map} +1 -1
- package/dist/{cli-BW34VKCN.js → cli-KZGF3FV5.js} +82 -82
- package/dist/commands-AVEBLFVS.js +46 -0
- package/dist/{config-XKRCXCSS.js → config-GTJWCNPF.js} +4 -4
- package/dist/{context-T5CR3RP6.js → context-WF3TTXQU.js} +5 -5
- package/dist/{customCommands-OCUMXZDN.js → customCommands-QOWK57EX.js} +4 -4
- package/dist/{env-DYDNFB4D.js → env-37BAP7QF.js} +2 -2
- package/dist/gateway-IZYO6YFJ.js +1170 -0
- package/dist/gateway-IZYO6YFJ.js.map +7 -0
- package/dist/index.js +5 -3
- package/dist/index.js.map +2 -2
- package/dist/{kodeAgentSessionLoad-ZKR2VGHO.js → kodeAgentSessionLoad-6F7SJXBC.js} +4 -4
- package/dist/{kodeAgentSessionResume-NFZCTIBZ.js → kodeAgentSessionResume-UEEDRJ3N.js} +4 -4
- package/dist/{kodeAgentStreamJsonSession-6CKTK6AF.js → kodeAgentStreamJsonSession-XC3IPREZ.js} +1 -1
- package/dist/{kodeHooks-5RXJRDCY.js → kodeHooks-V36SHCTC.js} +4 -4
- package/dist/{llm-QJA3QMXR.js → llm-CYUDKJNR.js} +26 -26
- package/dist/{llmLazy-VCEV22DK.js → llmLazy-IXVVBRTN.js} +1 -1
- package/dist/{loader-CKNYMPCZ.js → loader-OEJ6C3TN.js} +4 -4
- package/dist/{mcp-2SZTOKZX.js → mcp-KE3SILMX.js} +7 -7
- package/dist/{mentionProcessor-O7NWOH6S.js → mentionProcessor-GAU2WAYB.js} +5 -5
- package/dist/{messages-PRKIHXMK.js → messages-WCSGGSEU.js} +1 -1
- package/dist/{model-WG6RA25G.js → model-4TQIV5J2.js} +5 -5
- package/dist/{openai-VQLYFQ6B.js → openai-KTZV6F7N.js} +5 -5
- package/dist/{outputStyles-VQ57E3B6.js → outputStyles-WX5RYQOA.js} +4 -4
- package/dist/{pluginRuntime-NWOLU73K.js → pluginRuntime-JXMJZ2LC.js} +6 -6
- package/dist/{pluginValidation-R7B6QQ6T.js → pluginValidation-JNQZYLUP.js} +6 -6
- package/dist/prompts-LE6GK75N.js +48 -0
- package/dist/query-GGIP6PWG.js +50 -0
- package/dist/{ripgrep-SVBVC46X.js → ripgrep-KDPQAMB2.js} +3 -3
- package/dist/{skillMarketplace-5Z7Y6FTD.js → skillMarketplace-IXAGP3Q2.js} +3 -3
- package/dist/{state-X3R7BV7A.js → state-MSCYLB6Y.js} +2 -2
- package/dist/{theme-4VA64EWF.js → theme-GAMFOLBW.js} +5 -5
- package/dist/{toolPermissionSettings-35DJQEKG.js → toolPermissionSettings-EUZKGZU2.js} +6 -6
- package/dist/tools-3HOUIDM3.js +47 -0
- package/dist/{userInput-NID2UYXG.js → userInput-LJL4CVOB.js} +27 -27
- package/package.json +1 -1
- package/dist/REPL-74GZVSMY.js +0 -42
- package/dist/commands-4CNZZBTE.js +0 -46
- package/dist/prompts-W4V4Y67M.js +0 -48
- package/dist/query-GFFKKURO.js +0 -50
- package/dist/tools-USOBTPOI.js +0 -47
- /package/dist/{REPL-74GZVSMY.js.map → REPL-IAK7ZN2Z.js.map} +0 -0
- /package/dist/{acp-A55ZRIPP.js.map → acp-J4WDYGRX.js.map} +0 -0
- /package/dist/{agentsValidate-XWFIEHJ2.js.map → agentsValidate-UBOER2IN.js.map} +0 -0
- /package/dist/{ask-4ACYU23S.js.map → ask-MGUO3L35.js.map} +0 -0
- /package/dist/{autoUpdater-O2WHHSGP.js.map → autoUpdater-2GS6LRPK.js.map} +0 -0
- /package/dist/{chunk-FHOCKJOW.js.map → chunk-2C43OXE7.js.map} +0 -0
- /package/dist/{chunk-YYPJWXSA.js.map → chunk-2EFL22PV.js.map} +0 -0
- /package/dist/{chunk-QF6YDTME.js.map → chunk-3LMXSKZ7.js.map} +0 -0
- /package/dist/{chunk-B26ZUMJI.js.map → chunk-53A4JHFW.js.map} +0 -0
- /package/dist/{chunk-EENI5HG7.js.map → chunk-A7X6OCZE.js.map} +0 -0
- /package/dist/{chunk-GPKVTIYJ.js.map → chunk-BWYKUDJR.js.map} +0 -0
- /package/dist/{chunk-LC4CL3YJ.js.map → chunk-DEF3KFP7.js.map} +0 -0
- /package/dist/{chunk-EXPWPWA4.js.map → chunk-F3COCCAE.js.map} +0 -0
- /package/dist/{chunk-H5BCUDEN.js.map → chunk-GZTCXXSS.js.map} +0 -0
- /package/dist/{chunk-MXSB7IOZ.js.map → chunk-HSJ6HYAO.js.map} +0 -0
- /package/dist/{chunk-SBE6Y327.js.map → chunk-IIFUDVGS.js.map} +0 -0
- /package/dist/{chunk-3C73U2IU.js.map → chunk-IM33F5CM.js.map} +0 -0
- /package/dist/{chunk-BUI6KGVA.js.map → chunk-JWXQNBBA.js.map} +0 -0
- /package/dist/{chunk-S5Y5IF2H.js.map → chunk-LOIZNQOU.js.map} +0 -0
- /package/dist/{chunk-WWLFALT7.js.map → chunk-OZHBEG7U.js.map} +0 -0
- /package/dist/{chunk-DY5D4SS7.js.map → chunk-QH2M65BR.js.map} +0 -0
- /package/dist/{chunk-U224EQOS.js.map → chunk-RUXIBQ3B.js.map} +0 -0
- /package/dist/{chunk-S3ZAJPYZ.js.map → chunk-UYRR6F5S.js.map} +0 -0
- /package/dist/{chunk-Y7VZUSIM.js.map → chunk-V5U6BHT2.js.map} +0 -0
- /package/dist/{chunk-YVNBXMIP.js.map → chunk-VHS2MZQS.js.map} +0 -0
- /package/dist/{chunk-3U5X4VWP.js.map → chunk-VKI7ORIO.js.map} +0 -0
- /package/dist/{chunk-XOMW5QTV.js.map → chunk-VQSCECTS.js.map} +0 -0
- /package/dist/{chunk-L6WKZEK4.js.map → chunk-WWDVA4NV.js.map} +0 -0
- /package/dist/{chunk-T6VKT5FR.js.map → chunk-XS6PU75S.js.map} +0 -0
- /package/dist/{chunk-QTX7AJFQ.js.map → chunk-XXU2NVOE.js.map} +0 -0
- /package/dist/{cli-BW34VKCN.js.map → cli-KZGF3FV5.js.map} +0 -0
- /package/dist/{commands-4CNZZBTE.js.map → commands-AVEBLFVS.js.map} +0 -0
- /package/dist/{config-XKRCXCSS.js.map → config-GTJWCNPF.js.map} +0 -0
- /package/dist/{context-T5CR3RP6.js.map → context-WF3TTXQU.js.map} +0 -0
- /package/dist/{customCommands-OCUMXZDN.js.map → customCommands-QOWK57EX.js.map} +0 -0
- /package/dist/{env-DYDNFB4D.js.map → env-37BAP7QF.js.map} +0 -0
- /package/dist/{kodeAgentSessionLoad-ZKR2VGHO.js.map → kodeAgentSessionLoad-6F7SJXBC.js.map} +0 -0
- /package/dist/{kodeAgentSessionResume-NFZCTIBZ.js.map → kodeAgentSessionResume-UEEDRJ3N.js.map} +0 -0
- /package/dist/{kodeAgentStreamJsonSession-6CKTK6AF.js.map → kodeAgentStreamJsonSession-XC3IPREZ.js.map} +0 -0
- /package/dist/{kodeHooks-5RXJRDCY.js.map → kodeHooks-V36SHCTC.js.map} +0 -0
- /package/dist/{llm-QJA3QMXR.js.map → llm-CYUDKJNR.js.map} +0 -0
- /package/dist/{llmLazy-VCEV22DK.js.map → llmLazy-IXVVBRTN.js.map} +0 -0
- /package/dist/{loader-CKNYMPCZ.js.map → loader-OEJ6C3TN.js.map} +0 -0
- /package/dist/{mcp-2SZTOKZX.js.map → mcp-KE3SILMX.js.map} +0 -0
- /package/dist/{mentionProcessor-O7NWOH6S.js.map → mentionProcessor-GAU2WAYB.js.map} +0 -0
- /package/dist/{messages-PRKIHXMK.js.map → messages-WCSGGSEU.js.map} +0 -0
- /package/dist/{model-WG6RA25G.js.map → model-4TQIV5J2.js.map} +0 -0
- /package/dist/{openai-VQLYFQ6B.js.map → openai-KTZV6F7N.js.map} +0 -0
- /package/dist/{outputStyles-VQ57E3B6.js.map → outputStyles-WX5RYQOA.js.map} +0 -0
- /package/dist/{pluginRuntime-NWOLU73K.js.map → pluginRuntime-JXMJZ2LC.js.map} +0 -0
- /package/dist/{pluginValidation-R7B6QQ6T.js.map → pluginValidation-JNQZYLUP.js.map} +0 -0
- /package/dist/{prompts-W4V4Y67M.js.map → prompts-LE6GK75N.js.map} +0 -0
- /package/dist/{query-GFFKKURO.js.map → query-GGIP6PWG.js.map} +0 -0
- /package/dist/{ripgrep-SVBVC46X.js.map → ripgrep-KDPQAMB2.js.map} +0 -0
- /package/dist/{skillMarketplace-5Z7Y6FTD.js.map → skillMarketplace-IXAGP3Q2.js.map} +0 -0
- /package/dist/{state-X3R7BV7A.js.map → state-MSCYLB6Y.js.map} +0 -0
- /package/dist/{theme-4VA64EWF.js.map → theme-GAMFOLBW.js.map} +0 -0
- /package/dist/{toolPermissionSettings-35DJQEKG.js.map → toolPermissionSettings-EUZKGZU2.js.map} +0 -0
- /package/dist/{tools-USOBTPOI.js.map → tools-3HOUIDM3.js.map} +0 -0
- /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-
|
|
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-
|
|
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-
|
|
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-
|
|
8
|
-
import "./chunk-
|
|
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-
|
|
12
|
-
import "./chunk-
|
|
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-
|
|
7
|
-
import "./chunk-
|
|
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-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-IM33F5CM.js";
|
|
11
|
+
import "./chunk-ZYSVG4X3.js";
|
|
12
12
|
import "./chunk-AXWJI6N5.js";
|
|
13
13
|
export {
|
|
14
14
|
listKodeAgentSessions,
|
|
@@ -13,12 +13,12 @@ import {
|
|
|
13
13
|
runStopHooks,
|
|
14
14
|
runUserPromptSubmitHooks,
|
|
15
15
|
updateHookTranscriptForMessages
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-V5U6BHT2.js";
|
|
17
17
|
import "./chunk-7ZFLZNOW.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-2EFL22PV.js";
|
|
19
19
|
import "./chunk-2UO3BFZH.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
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-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
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-
|
|
27
|
+
import "./chunk-V5U6BHT2.js";
|
|
28
28
|
import "./chunk-7ZFLZNOW.js";
|
|
29
|
-
import "./chunk-
|
|
29
|
+
import "./chunk-VHS2MZQS.js";
|
|
30
30
|
import {
|
|
31
31
|
getCompletionWithProfile,
|
|
32
32
|
getGPT5CompletionWithProfile
|
|
33
|
-
} from "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
38
|
-
import "./chunk-
|
|
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-
|
|
40
|
+
import "./chunk-UYRR6F5S.js";
|
|
41
41
|
import "./chunk-TY3CCSAT.js";
|
|
42
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
61
|
-
import "./chunk-
|
|
62
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
75
|
+
} from "./chunk-GZTCXXSS.js";
|
|
76
76
|
import {
|
|
77
77
|
PRODUCT_COMMAND,
|
|
78
78
|
env,
|
|
79
79
|
getCwd,
|
|
80
80
|
logError
|
|
81
|
-
} from "./chunk-
|
|
81
|
+
} from "./chunk-IM33F5CM.js";
|
|
82
82
|
import {
|
|
83
83
|
MACRO
|
|
84
|
-
} from "./chunk-
|
|
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-
|
|
2846
|
+
const { callGPT5ResponsesAPI } = await import("./openai-KTZV6F7N.js");
|
|
2847
2847
|
const response = await callGPT5ResponsesAPI(
|
|
2848
2848
|
modelProfile,
|
|
2849
2849
|
adapterContext.request,
|
|
@@ -9,12 +9,12 @@ import {
|
|
|
9
9
|
setFlagAgentsFromCliJson,
|
|
10
10
|
startAgentWatcher,
|
|
11
11
|
stopAgentWatcher
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-LOIZNQOU.js";
|
|
13
13
|
import "./chunk-INJSFEKL.js";
|
|
14
14
|
import "./chunk-2UO3BFZH.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
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-
|
|
22
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-WWDVA4NV.js";
|
|
22
|
+
import "./chunk-2EFL22PV.js";
|
|
23
23
|
import "./chunk-2UO3BFZH.js";
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-DEF3KFP7.js";
|
|
25
|
+
import "./chunk-IIFUDVGS.js";
|
|
26
26
|
import "./chunk-KQSHIOZK.js";
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
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-
|
|
5
|
+
} from "./chunk-UYRR6F5S.js";
|
|
6
6
|
import "./chunk-TY3CCSAT.js";
|
|
7
7
|
import {
|
|
8
8
|
getAvailableAgentTypes
|
|
9
|
-
} from "./chunk-
|
|
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-
|
|
14
|
+
} from "./chunk-GZTCXXSS.js";
|
|
15
15
|
import {
|
|
16
16
|
getCwd,
|
|
17
17
|
logError
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
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
|
|
@@ -10,12 +10,12 @@ import {
|
|
|
10
10
|
getVertexRegionForModel,
|
|
11
11
|
isDefaultSlowAndCapableModel,
|
|
12
12
|
reloadModelManager
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-F3COCCAE.js";
|
|
14
|
+
import "./chunk-IIFUDVGS.js";
|
|
15
15
|
import "./chunk-KQSHIOZK.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
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-
|
|
12
|
+
} from "./chunk-QH2M65BR.js";
|
|
13
13
|
import "./chunk-TY3CCSAT.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-IIFUDVGS.js";
|
|
15
15
|
import "./chunk-KQSHIOZK.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
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-
|
|
13
|
-
import "./chunk-
|
|
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-
|
|
17
|
-
import "./chunk-
|
|
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-
|
|
9
|
-
import "./chunk-
|
|
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-
|
|
205
|
+
const { reloadCustomCommands } = await import("./customCommands-QOWK57EX.js");
|
|
206
206
|
reloadCustomCommands();
|
|
207
|
-
const { getCommands } = await import("./commands-
|
|
207
|
+
const { getCommands } = await import("./commands-AVEBLFVS.js");
|
|
208
208
|
getCommands.cache.clear?.();
|
|
209
|
-
const { getClients, getMCPTools } = await import("./mcp-
|
|
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-
|
|
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-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-VQSCECTS.js";
|
|
7
|
+
import "./chunk-HSJ6HYAO.js";
|
|
8
|
+
import "./chunk-2C43OXE7.js";
|
|
9
9
|
import "./chunk-2UO3BFZH.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
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
|
+
};
|