@agent-native/core 0.19.0 → 0.19.3
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/a2a/caller-auth.d.ts +1 -0
- package/dist/a2a/caller-auth.d.ts.map +1 -1
- package/dist/a2a/caller-auth.js +1 -1
- package/dist/a2a/caller-auth.js.map +1 -1
- package/dist/agent/production-agent.d.ts +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +34 -2
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +47 -256
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/connect.d.ts +3 -2
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +12 -8
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/mcp-config-writers.d.ts +3 -3
- package/dist/cli/mcp-config-writers.d.ts.map +1 -1
- package/dist/cli/mcp-config-writers.js +19 -8
- package/dist/cli/mcp-config-writers.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +3 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +4 -4
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +3 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +11 -3
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +4 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/dynamic-suggestions.d.ts +43 -0
- package/dist/client/dynamic-suggestions.d.ts.map +1 -0
- package/dist/client/dynamic-suggestions.js +344 -0
- package/dist/client/dynamic-suggestions.js.map +1 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/settings/SettingsPanel.js +2 -2
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/coding-tools/index.d.ts +31 -0
- package/dist/coding-tools/index.d.ts.map +1 -0
- package/dist/coding-tools/index.js +411 -0
- package/dist/coding-tools/index.js.map +1 -0
- package/dist/mcp/build-server.d.ts +33 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +33 -10
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/builtin-tools.d.ts +3 -1
- package/dist/mcp/builtin-tools.d.ts.map +1 -1
- package/dist/mcp/builtin-tools.js +115 -26
- package/dist/mcp/builtin-tools.js.map +1 -1
- package/dist/mcp/connect-route.d.ts.map +1 -1
- package/dist/mcp/connect-route.js +382 -74
- package/dist/mcp/connect-route.js.map +1 -1
- package/dist/mcp/org-directory.d.ts +83 -0
- package/dist/mcp/org-directory.d.ts.map +1 -0
- package/dist/mcp/org-directory.js +201 -0
- package/dist/mcp/org-directory.js.map +1 -0
- package/dist/mcp/server.d.ts +38 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +222 -77
- package/dist/mcp/server.js.map +1 -1
- package/dist/scripts/dev/index.d.ts +6 -4
- package/dist/scripts/dev/index.d.ts.map +1 -1
- package/dist/scripts/dev/index.js +28 -13
- package/dist/scripts/dev/index.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +6 -6
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +65 -32
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-teams.js +2 -2
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/agents-bundle.d.ts +3 -3
- package/dist/server/agents-bundle.js +5 -5
- package/dist/server/agents-bundle.js.map +1 -1
- package/dist/server/auth.d.ts +8 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +8 -1
- package/dist/server/auth.js.map +1 -1
- package/dist/server/sentry.d.ts.map +1 -1
- package/dist/server/sentry.js +17 -2
- package/dist/server/sentry.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +1 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/client.md +15 -0
- package/docs/content/code-agents-ui.md +11 -1
- package/docs/content/drop-in-agent.md +3 -1
- package/docs/content/external-agents.md +27 -6
- package/docs/content/frames.md +1 -1
- package/docs/content/mcp-clients.md +2 -0
- package/docs/content/mcp-protocol.md +4 -2
- package/docs/content/migration-workbench.md +5 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-agent-executor.js","sourceRoot":"","sources":["../../src/cli/code-agent-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,YAAY,GAEb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EACL,iBAAiB,GAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,wBAAwB,GAGzB,MAAM,sBAAsB,CAAC;AA6B9B,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAC3C,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC;IAEnC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,8BAA8B,CAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,qDAAqD;YAC9D,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;SACzD,CAAC,CAAC;QACH,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC3C,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,gBAAgB;YACvB,QAAQ,EAAE;gBACR,KAAK,EAAE,gBAAgB;gBACvB,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC;aACX;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;QACtC,8BAA8B,CAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;YAClB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,QAAQ,CAAC,EAAE,EAAE;QACpD,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE;YACR,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE;SACZ;QACD,QAAQ,EAAE;YACR,kBAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC7C;KACF,CAAC,CAAC;IACH,8BAA8B,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;QAClB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,gCAAgC;QACzC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE;KACpD,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,OAAO,GACX,4JAA4J,CAAC;QAC/J,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACtC,8BAA8B,CAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE;SAC7D,CAAC,CAAC;QACH,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC3C,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,qBAAqB;YAC5B,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE;gBACR,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;aACX;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GACT,OAAO,CAAC,KAAK;QACb,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,CAAC,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,CAAC,YAAY,CAAC;IACtB,MAAM,eAAe,GACnB,OAAO,CAAC,eAAe,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,WAAW,CAAC;IAC9D,MAAM,OAAO,GAAG,2BAA2B,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,uBAAuB,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;YAAE,UAAU,CAAC,KAAK,EAAE,CAAC;;YAE7C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,KAAqB,EAAE,EAAE;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC;YAC5B,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,KAAK,CAAC,KAAK;gBACpB,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;aACjD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,WAAW,KAAK,CAAC,IAAI,GAAG;gBACjC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;aACvE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,YAAY,KAAK,CAAC,IAAI,GAAG;gBAClC,QAAQ,EAAE;oBACR,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;iBACrC;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,KAAK,CAAC,KAAK;gBACpB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,sCAAsC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAC1D,YAAY,CAAC;YACX,MAAM;YACN,KAAK;YACL,YAAY,EAAE,qBAAqB,CAAC,GAAG,EAAE,cAAc,CAAC;YACxD,KAAK;YACL,OAAO;YACP,QAAQ;YACR,IAAI;YACJ,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,aAAa,EAAE,EAAE;YACjB,eAAe;SAChB,CAAC,CACH,CAAC;QACF,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE;gBAC7B,QAAQ,EAAE;oBACR,IAAI,EAAE,WAAW;oBACjB,KAAK;oBACL,MAAM,EAAE,MAAM,CAAC,IAAI;oBACnB,eAAe;iBAChB;aACF,CAAC,CAAC;QACL,CAAC;QACD,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,8CAA8C,eAAe,CAAC,MAAM,EAAE,CAAC;YACvF,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC;YACxC,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO;gBACP,QAAQ,EAAE;oBACR,MAAM,EAAE,gBAAgB;oBACxB,KAAK,EAAE,mBAAmB;oBAC1B,iBAAiB,EAAE,eAAe,CAAC,EAAE;iBACtC;aACF,CAAC,CAAC;YACH,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAC3C,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,mBAAmB;gBAC1B,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE;oBACR,KAAK,EAAE,mBAAmB;oBAC1B,SAAS,EAAE,CAAC;oBACZ,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,EAAE;iBACZ;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,eAAe,GAAG,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,OAAO,GACX,eAAe,CAAC,IAAI,KAAK,QAAQ;gBAC/B,CAAC,CAAC,4DAA4D;gBAC9D,CAAC,CAAC,+DAA+D,CAAC;YACtE,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO;gBACP,QAAQ,EAAE;oBACR,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,WAAW;oBAClB,UAAU,EAAE,eAAe,CAAC,EAAE;oBAC9B,YAAY,EAAE,eAAe,CAAC,IAAI;iBACnC;aACF,CAAC,CAAC;YACH,IAAI,eAAe,CAAC,cAAc,EAAE,CAAC;gBACnC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,EAAE;oBACpC,cAAc,EAAE,eAAe,CAAC,cAAc;iBAC/C,CAAC,CAAC;YACL,CAAC;YACD,OAAO,mBAAmB,CAAC;gBACzB,GAAG,OAAO;gBACV,KAAK,EAAE,QAAQ,CAAC,EAAE;gBAClB,MAAM,EAAE,eAAe,CAAC,MAAM;gBAC9B,eAAe,EAAE,KAAK;aACvB,CAAC,CAAC;QACL,CAAC;QAED,8BAA8B,CAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,kCAAkC;YAC3C,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE;SACrD,CAAC,CAAC;QACH,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC3C,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,UAAU;YACjB,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE;gBACR,KAAK,EAAE,UAAU;gBACjB,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,GAAG;aACb;YACD,QAAQ,EAAE;gBACR,oBAAoB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC9C,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,KAAK;gBACL,eAAe;gBACf,cAAc;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,mCAAmC,OAAO,IAAI,CAAC,CAAC;QACtE,8BAA8B,CAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iCAAiC,OAAO,EAAE;YACnD,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;SAChD,CAAC,CAAC;QACH,OAAO,wBAAwB,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC3C,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACxD,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;YACrD,QAAQ,EAAE;gBACR,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;gBACrD,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,OAAO,EAAE,CAAC;aACX;YACD,QAAQ,EAAE;gBACR,cAAc,EAAE,OAAO;gBACvB,kBAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAC7C;SACF,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC9D,MAAM,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAChD,KAAK,OAAO,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAa,EACb,UAAqD,EAAE;IAEvD,OAAO,mBAAmB,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,KAAa,EACb,UAA8C,EAAE;IAEhD,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,kCAAkC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxE,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,0CAA0C,UAAU,CAAC,MAAM,EAAE,CAAC;QAC9E,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACtC,8BAA8B,CAAC;YAC7B,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,QAAQ,EAAE;gBACR,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,oBAAoB;gBAC3B,UAAU,EAAE,QAAQ,CAAC,EAAE;aACxB;SACF,CAAC,CAAC;QACH,OAAO,wBAAwB,CAAC,KAAK,EAAE;YACrC,MAAM,EAAE,gBAAgB;YACxB,KAAK,EAAE,oBAAoB;YAC3B,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IAED,8BAA8B,CAAC;QAC7B,KAAK;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,oBAAoB,QAAQ,CAAC,EAAE,gBAAgB;QACxD,QAAQ,EAAE;YACR,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,kBAAkB;YACzB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,QAAQ,CAAC,OAAO,EAChB,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAC3B,0BAA0B,CAC3B,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CACtB;QACE,4CAA4C,MAAM,CAAC,IAAI,GAAG;QAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;KACjD;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,EACf,qBAAqB,CACtB,CAAC;IACF,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACtC,8BAA8B,CAAC;QAC7B,KAAK;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAChD,KAAK,EAAE,mBAAmB;YAC1B,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B;KACF,CAAC,CAAC;IACH,OAAO,wBAAwB,CAAC,KAAK,EAAE;QACrC,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAChD,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,wBAAwB;QACzE,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE;YACR,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB;YAClE,SAAS,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACrC;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,SAAS;YAC1B,YAAY,EAAE;gBACZ,GAAG,QAAQ;gBACX,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,QAAQ,EAAE,MAAM,CAAC,IAAI;aACtB;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IAC1E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CACrB,GAAuB,EACvB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,KAAa;IAEb,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACrD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,8BAA8B,CAAC;YAC7B,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,0BAA0B,OAAO,EAAE;YAC5C,QAAQ,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;SACvC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3E,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAClC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,8BAA8B,CAAC;YAC7B,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,8BAA8B,OAAO,EAAE;YAChD,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;SACtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,8BAA8B,CAAC;QAC7B,KAAK;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,aAAa,MAAM,CAAC,UAAU,YAAY,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,gBAAgB;QACrG,QAAQ,EAAE;YACR,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,MAAM,CAAC,gBAAgB;YAChC,SAAS,EAAE,MAAM,CAAC,UAAU;SAC7B;KACF,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sCAAsC,CAC7C,GAAuB,EACvB,EAAwB;IAExB,MAAM,SAAS,GACb,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC;QACjC,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACvE,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,CAAC;IACtC,OAAO,qBAAqB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,uBAAuB,CAC9B,GAAuB;IAEvB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,eAAe,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;IACpE,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,eAAwB;IAExB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;IACnE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,yBAAyB,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;IACxD,CAAC;IACD,sBAAsB,EAAE,CAAC;IACzB,IAAI,CAAC,wBAAwB,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,aAAa,CAAC;QACnB,YAAY,EAAE,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB;IAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO,OAAO,CACZ,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAClE,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY;IAC7C,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,wBAAwB;QAC/B,YAAY,EAAE,iBAAiB;QAC/B,eAAe,EAAE,CAAC,iBAAiB,CAAC;QACpC,YAAY,EAAE;YACZ,QAAQ,EAAE,KAAK;YACf,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,KAAK;YAClB,iBAAiB,EAAE,KAAK;SACzB;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,KAA0B;YACtC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YACnC,MAAM;gBACJ,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aAChC,CAAC;YACF,MAAM;gBACJ,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;aACpB,CAAC;YACF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC7C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAAuB,EACvB,MAAc;IAEd,MAAM,UAAU,GAAG,6BAA6B,CAAC,GAAG,CAAC,EAAE,CAAC;SACrD,KAAK,CAAC,CAAC,EAAE,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,KAAK,GACT,KAAK,CAAC,IAAI,KAAK,MAAM;YACnB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,WAAW;gBACpC,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,OAAO,GAAG,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,UAAU;QACxB,CAAC,CAAC,qCAAqC,UAAU,EAAE;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,MAAM,GAAG,OAAO,EAAE;iBAC5B;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,GAAW,EACX,cAAuC;IAEvC,OAAO,8DAA8D,GAAG;;;;;sBAKpD,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,KAAK,cAAc;;;;;;;;;;wDAU3C,CAAC;AACzD,CAAC;AAED,SAAS,2BAA2B,CAClC,GAAW,EACX,cAAuC,EACvC,KAAa;IAEb,MAAM,OAAO,GAAgC;QAC3C,UAAU,EAAE;YACV,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE;gBACJ,WAAW,EAAE,oDAAoD;gBACjE,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,qDAAqD;yBACxD;qBACF;oBACD,QAAQ,EAAE,EAAE;iBACb;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAClB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC3D,MAAM,MAAM,GACV,MAAM,CAAC,IAAI,KAAK,CAAC;oBACf,CAAC,CAAC,MAAM,CAAC,MAAM;oBACf,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,gCAAgC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;yBAC9D,MAAM,CAAC;gBAChB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtD,MAAM,KAAK,GAAG,MAAM;qBACjB,KAAK,CAAC,OAAO,CAAC;qBACd,MAAM,CAAC,OAAO,CAAC;qBACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;qBAClE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC;YAChD,CAAC;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE;gBACJ,WAAW,EAAE,4BAA4B;gBACzC,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;wBAChE,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,yCAAyC;yBACvD;qBACF;oBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAClB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK;oBAAE,OAAO,2BAA2B,CAAC;gBAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,OAAO,GAAG,IAAI;oBAClB,CAAC,CAAC,iCAAiC,UAAU,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE;oBAC7E,CAAC,CAAC,iCAAiC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBACtD,OAAO,QAAQ,CACb,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,cAAc,EAChD,qBAAqB,CACtB,CAAC;YACJ,CAAC;SACF;QACD,SAAS,EAAE;YACT,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE;gBACJ,WAAW,EAAE,8CAA8C;gBAC3D,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;qBAC7D;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAClB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7D,IAAI,CAAC,QAAQ;oBAAE,OAAO,6CAA6C,CAAC;gBACpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAC1B,OAAO,0BAA0B,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAAE,OAAO,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7D,OAAO,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC1E,CAAC;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,WAAW,EAAE,wDAAwD;gBACrE,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;wBAC5D,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;qBAC/D;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;iBAC9B;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAClB,MAAM,eAAe,GAAG,uBAAuB,CAC7C,cAAc,EACd,YAAY,CACb,CAAC;gBACF,IAAI,eAAe;oBAAE,OAAO,eAAe,CAAC;gBAC5C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7D,IAAI,CAAC,QAAQ;oBAAE,OAAO,6CAA6C,CAAC;gBACpE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpD,OAAO,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjD,CAAC;SACF;QACD,WAAW,EAAE;YACX,IAAI,EAAE;gBACJ,WAAW,EACT,mFAAmF;gBACrF,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;qBACnE;oBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAClB,MAAM,eAAe,GAAG,uBAAuB,CAC7C,cAAc,EACd,aAAa,CACd,CAAC;gBACF,IAAI,eAAe;oBAAE,OAAO,eAAe,CAAC;gBAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBAAE,OAAO,2BAA2B,CAAC;gBACtD,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,iCAAiC,EACjC,GAAG,EACH,MAAM,EACN,KAAK,CACN,CAAC;gBACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACtB,OAAO,0BAA0B,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACpE,CAAC;gBACD,OAAO,gBAAgB,CAAC;YAC1B,CAAC;SACF;QACD,WAAW,EAAE;YACX,IAAI,EAAE;gBACJ,WAAW,EACT,oGAAoG;gBACtG,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;wBACjE,SAAS,EAAE;4BACT,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,mCAAmC;yBACjD;qBACF;oBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;iBACtB;aACF;YACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAClB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxC,IAAI,CAAC,OAAO;oBAAE,OAAO,6BAA6B,CAAC;gBACnD,MAAM,UAAU,GAAG,kCAAkC,CAAC,OAAO,CAAC,CAAC;gBAC/D,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACpC,OAAO,0DAA0D,UAAU,CAAC,MAAM,EAAE,CAAC;gBACvF,CAAC;gBACD,IAAI,UAAU,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBAC5C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,EAAE;wBAC/C,IAAI,EAAE,aAAa;wBACnB,OAAO;wBACP,MAAM,EAAE,UAAU,CAAC,MAAM;wBACzB,cAAc;qBACf,CAAC,CAAC;oBACH,OAAO;wBACL,kDAAkD,UAAU,CAAC,MAAM,GAAG;wBACtE,gBAAgB,QAAQ,CAAC,EAAE,EAAE;wBAC7B,YAAY,OAAO,EAAE;wBACrB,8FAA8F;qBAC/F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzC,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,OAAO,EACP,GAAG,EACH,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC;oBACzC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC;oBAClC,CAAC,CAAC,0BAA0B,CAC/B,CAAC;gBACF,OAAO,QAAQ,CACb;oBACE,aAAa,MAAM,CAAC,IAAI,EAAE;oBAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;oBACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;oBAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;iBACjD;qBACE,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,MAAM,CAAC,EACf,qBAAqB,CACtB,CAAC;YACJ,CAAC;SACF;KACF,CAAC;IACF,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD,MAAM,UAAU,kCAAkC,CAChD,OAAe;IAEf,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAEzC,MAAM,eAAe,GAA4B;QAC/C;YACE,+DAA+D;YAC/D,mDAAmD;SACpD;QACD;YACE,yCAAyC;YACzC,gCAAgC;SACjC;QACD,CAAC,wBAAwB,EAAE,iCAAiC,CAAC;KAC9D,CAAC;IACF,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACrE,CAAC;IAED,MAAM,gBAAgB,GAA4B;QAChD,CAAC,cAAc,EAAE,8BAA8B,CAAC;QAChD,CAAC,UAAU,EAAE,oBAAoB,CAAC;QAClC,CAAC,eAAe,EAAE,oBAAoB,CAAC;QACvC,CAAC,gCAAgC,EAAE,yBAAyB,CAAC;QAC7D,CAAC,wCAAwC,EAAE,yBAAyB,CAAC;QACrE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;QACxC,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;QACzC,CAAC,cAAc,EAAE,0BAA0B,CAAC;QAC5C,CAAC,oCAAoC,EAAE,8BAA8B,CAAC;QACtE,CAAC,uCAAuC,EAAE,yBAAyB,CAAC;KACrE,CAAC;IACF,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,QAAQ;QACR,OAAO;QACP,SAAS;QACT,OAAO;QACP,SAAS;QACT,QAAQ;QACR,aAAa;QACb,SAAS;QACT,SAAS;QACT,OAAO;QACP,iCAAiC;QACjC,kCAAkC;QAClC,0CAA0C;QAC1C,sDAAsD;KACvD,CAAC;IACF,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,aAAa,GAAG;QACpB,gBAAgB;QAChB,IAAI;QACJ,SAAS;QACT,iBAAiB;QACjB,8CAA8C;QAC9C,qCAAqC;QACrC,4CAA4C;KAC7C,CAAC;IACF,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,uBAAuB,CAC9B,cAAuC,EACvC,QAAgB;IAEhB,IACE,cAAc,KAAK,iBAAiB;QACpC,cAAc,KAAK,WAAW;QAC9B,cAAc,KAAK,WAAW,EAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,UAAU,QAAQ,oCAAoC,CAAC;IAChE,CAAC;IACD,OAAO,UAAU,QAAQ,sCAAsC,CAAC;AAClE,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAa,EACb,KAA2D;IAE3D,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAA6B;QACzC,EAAE,EAAE,YAAY,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;QAC7D,WAAW;QACX,GAAG,KAAK;KACT,CAAC;IACF,8BAA8B,CAAC;QAC7B,KAAK;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,sBAAsB,QAAQ,CAAC,MAAM,EAAE;QAChD,QAAQ,EAAE;YACR,MAAM,EAAE,gBAAgB;YACxB,KAAK,EAAE,mBAAmB;YAC1B,eAAe,EAAE,QAAQ;SAC1B;KACF,CAAC,CAAC;IACH,wBAAwB,CAAC,KAAK,EAAE;QAC9B,MAAM,EAAE,gBAAgB;QACxB,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE;YACR,KAAK,EAAE,mBAAmB;YAC1B,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE;SACZ;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,QAAQ;SAC1B;KACF,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC;IACnD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,SAAS,GAAG,QAAmC,CAAC;IACtD,IACE,SAAS,CAAC,IAAI,KAAK,aAAa;QAChC,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;QACpC,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ;QAChC,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ,EACzC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,cAAc,EACZ,SAAS,CAAC,cAAc,KAAK,WAAW;YACxC,SAAS,CAAC,cAAc,KAAK,iBAAiB;YAC9C,SAAS,CAAC,cAAc,KAAK,WAAW;YACxC,SAAS,CAAC,cAAc,KAAK,WAAW;YACtC,CAAC,CAAC,SAAS,CAAC,cAAc;YAC1B,CAAC,CAAC,WAAW;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,KAAa;IAClD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACxE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,OAAe,EACf,GAAW,EACX,SAAiB,EACjB,KAAc;IAEd,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE;QAC3B,GAAG;QACH,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;IACH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,EAAE,SAAS,CAAC,CAAC;IACd,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,IAAI,KAAK;QAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;;QAC9B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAoB,CAAC;IAC9D,YAAY,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAW;IAC1C,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,qBAAqB,KAAK,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC;AAChF,CAAC","sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { once } from \"node:events\";\n\nimport {\n createToolSearchEntry,\n TOOL_SEARCH_ACTION_NAME,\n} from \"../agent/tool-search.js\";\nimport {\n buildMergedConfig,\n McpClientManager,\n mcpToolsToActionEntries,\n} from \"../mcp-client/index.js\";\nimport { runWithRequestContext } from \"../server/request-context.js\";\nimport {\n actionsToEngineTools,\n runAgentLoop,\n type ActionEntry,\n} from \"../agent/production-agent.js\";\nimport {\n resolveEngine,\n getStoredModelForEngine,\n registerBuiltinEngines,\n} from \"../agent/engine/index.js\";\nimport type {\n AgentEngine,\n EngineContentPart,\n EngineEvent,\n EngineMessage,\n EngineStreamOptions,\n} from \"../agent/engine/types.js\";\nimport type { AgentChatEvent } from \"../agent/types.js\";\nimport { PROVIDER_ENV_VARS } from \"../agent/engine/provider-env-vars.js\";\nimport {\n isReasoningEffort,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport {\n appendCodeAgentTranscriptEvent,\n dequeueCodeAgentFollowUp,\n getCodeAgentRunRecord,\n listCodeAgentTranscriptEvents,\n updateCodeAgentRunRecord,\n type CodeAgentPermissionMode,\n type CodeAgentRunRecord,\n} from \"./code-agent-runs.js\";\n\nexport interface ExecuteCodeAgentRunOptions {\n runId: string;\n prompt?: string;\n appendUserEvent?: boolean;\n engine?: AgentEngine;\n model?: string;\n reasoningEffort?: ReasoningEffort;\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}\n\ninterface CommandResult {\n code: number | null;\n stdout: string;\n stderr: string;\n timedOut: boolean;\n}\n\ninterface PendingCodeAgentApproval {\n id: string;\n tool: \"run_command\";\n command: string;\n reason: string;\n requestedAt: string;\n permissionMode: CodeAgentPermissionMode;\n}\n\nconst DEFAULT_COMMAND_TIMEOUT_MS = 120_000;\nconst MAX_TOOL_OUTPUT_CHARS = 50_000;\nconst MAX_FILE_READ_CHARS = 120_000;\n\nexport async function executeCodeAgentRun(\n options: ExecuteCodeAgentRunOptions,\n): Promise<CodeAgentRunRecord | null> {\n const existing = getCodeAgentRunRecord(options.runId);\n if (!existing) return null;\n\n const prompt = options.prompt ?? latestUserPrompt(existing.id);\n if (!prompt) {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"No prompt was found for this Agent-Native Code run.\",\n metadata: { status: \"errored\", phase: \"missing-prompt\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"errored\",\n phase: \"missing-prompt\",\n progress: {\n label: \"Missing prompt\",\n completed: 0,\n total: 1,\n failed: 1,\n percent: 0,\n },\n });\n }\n\n if (options.appendUserEvent !== false) {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"user\",\n message: prompt,\n metadata: { source: \"execution-prompt\" },\n });\n }\n\n const running = updateCodeAgentRunRecord(existing.id, {\n status: \"running\",\n phase: \"executing\",\n progress: {\n label: \"Running\",\n completed: 0,\n total: 1,\n percent: 10,\n },\n metadata: {\n executionStartedAt: new Date().toISOString(),\n },\n });\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"Agent-Native Code run started.\",\n metadata: { status: \"running\", phase: \"executing\" },\n });\n\n const requestedEngine = metadataString(existing, \"engine\");\n const engine =\n options.engine ?? (await resolveExecutorEngine(requestedEngine));\n if (!engine) {\n const message =\n \"No LLM provider key was found. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, or another supported provider key and resume this run.\";\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: { status: \"paused\", phase: \"missing-credentials\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"paused\",\n phase: \"missing-credentials\",\n needsApproval: false,\n progress: {\n label: \"Missing credentials\",\n completed: 0,\n total: 1,\n percent: 0,\n },\n });\n }\n\n const model =\n options.model ??\n metadataString(existing, \"model\") ??\n process.env.AGENT_MODEL ??\n (await getStoredModelForEngine(engine).catch(() => undefined)) ??\n engine.defaultModel;\n const reasoningEffort =\n options.reasoningEffort ?? metadataReasoningEffort(existing);\n const cwd = existing.cwd || process.cwd();\n const permissionMode = existing.permissionMode ?? \"full-auto\";\n const actions = createLocalCodeAgentActions(cwd, permissionMode, existing.id);\n const mcpManager = await startCodeAgentMcpManager(existing.id);\n if (mcpManager) {\n Object.assign(actions, mcpToolsToActionEntries(mcpManager));\n }\n actions[TOOL_SEARCH_ACTION_NAME] = createToolSearchEntry(() => actions);\n const tools = actionsToEngineTools(actions);\n const messages = buildCodeAgentMessages(existing, prompt);\n const controller = new AbortController();\n const abortFromParent = () => controller.abort();\n if (options.signal) {\n if (options.signal.aborted) controller.abort();\n else\n options.signal.addEventListener(\"abort\", abortFromParent, { once: true });\n }\n\n let assistantText = \"\";\n const send = (event: AgentChatEvent) => {\n if (event.type === \"text\") {\n assistantText += event.text;\n options.stdout?.write(event.text);\n return;\n }\n if (event.type === \"activity\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: event.label,\n metadata: { type: \"activity\", tool: event.tool },\n });\n return;\n }\n if (event.type === \"tool_start\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Running ${event.tool}.`,\n metadata: { type: \"tool_start\", tool: event.tool, input: event.input },\n });\n return;\n }\n if (event.type === \"tool_done\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Finished ${event.tool}.`,\n metadata: {\n type: \"tool_done\",\n tool: event.tool,\n result: truncate(event.result, 4000),\n },\n });\n return;\n }\n if (event.type === \"error\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: event.error,\n metadata: { type: \"error\", errorCode: event.errorCode },\n });\n }\n };\n\n try {\n await runWithOptionalCodeAgentRequestContext(existing, () =>\n runAgentLoop({\n engine,\n model,\n systemPrompt: codeAgentSystemPrompt(cwd, permissionMode),\n tools,\n actions,\n messages,\n send,\n signal: controller.signal,\n maxIterations: 12,\n reasoningEffort,\n }),\n );\n if (assistantText.trim()) {\n options.stdout?.write(\"\\n\");\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"system\",\n message: assistantText.trim(),\n metadata: {\n role: \"assistant\",\n model,\n engine: engine.name,\n reasoningEffort,\n },\n });\n }\n const approvalPending = getPendingApproval(existing.id);\n if (approvalPending) {\n const message = `Agent-Native Code run paused for approval: ${approvalPending.reason}`;\n options.stdout?.write(`\\n${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-required\",\n pendingApprovalId: approvalPending.id,\n },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"needs-approval\",\n phase: \"approval-required\",\n needsApproval: true,\n progress: {\n label: \"Approval required\",\n completed: 0,\n total: 1,\n percent: 50,\n },\n });\n }\n\n const pendingFollowUp = dequeueCodeAgentFollowUp(existing.id);\n if (pendingFollowUp) {\n const message =\n pendingFollowUp.mode === \"queued\"\n ? \"Agent-Native Code run completed; running queued follow-up.\"\n : \"Agent-Native Code run completed; applying steering follow-up.\";\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"running\",\n phase: \"follow-up\",\n followUpId: pendingFollowUp.id,\n followUpMode: pendingFollowUp.mode,\n },\n });\n if (pendingFollowUp.permissionMode) {\n updateCodeAgentRunRecord(existing.id, {\n permissionMode: pendingFollowUp.permissionMode,\n });\n }\n return executeCodeAgentRun({\n ...options,\n runId: existing.id,\n prompt: pendingFollowUp.prompt,\n appendUserEvent: false,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"Agent-Native Code run completed.\",\n metadata: { status: \"completed\", phase: \"complete\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"completed\",\n phase: \"complete\",\n needsApproval: false,\n progress: {\n label: \"Complete\",\n completed: 1,\n total: 1,\n percent: 100,\n },\n metadata: {\n executionCompletedAt: new Date().toISOString(),\n engine: engine.name,\n model,\n reasoningEffort,\n permissionMode,\n },\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n options.stdout?.write(`\\nAgent-Native Code run failed: ${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Agent-Native Code run failed: ${message}`,\n metadata: { status: \"errored\", phase: \"error\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: controller.signal.aborted ? \"paused\" : \"errored\",\n phase: controller.signal.aborted ? \"paused\" : \"error\",\n progress: {\n label: controller.signal.aborted ? \"Paused\" : \"Error\",\n completed: 0,\n total: 1,\n failed: controller.signal.aborted ? 0 : 1,\n percent: 0,\n },\n metadata: {\n executionError: message,\n executionErroredAt: new Date().toISOString(),\n },\n });\n } finally {\n options.signal?.removeEventListener(\"abort\", abortFromParent);\n await mcpManager?.stop().catch(() => undefined);\n void running;\n }\n}\n\nexport async function executeExistingCodeAgentRun(\n runId: string,\n options: Omit<ExecuteCodeAgentRunOptions, \"runId\"> = {},\n): Promise<CodeAgentRunRecord | null> {\n return executeCodeAgentRun({ ...options, runId, appendUserEvent: false });\n}\n\nexport async function executePendingCodeAgentApproval(\n runId: string,\n options: { stdout?: NodeJS.WritableStream } = {},\n): Promise<CodeAgentRunRecord | null> {\n const record = getCodeAgentRunRecord(runId);\n if (!record) return null;\n const approval = getPendingApproval(runId);\n if (!approval) {\n options.stdout?.write(\"No pending approval was found for this run.\\n\");\n return record;\n }\n\n const permission = classifyCodeAgentCommandPermission(approval.command);\n if (permission.kind === \"forbidden\") {\n const message = `Approval cannot run forbidden command: ${permission.reason}`;\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-forbidden\",\n approvalId: approval.id,\n },\n });\n return updateCodeAgentRunRecord(runId, {\n status: \"needs-approval\",\n phase: \"approval-forbidden\",\n needsApproval: true,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Approved command ${approval.id}; running now.`,\n metadata: {\n status: \"running\",\n phase: \"approval-running\",\n approvalId: approval.id,\n command: approval.command,\n },\n });\n const result = await runCommand(\n approval.command,\n record.cwd || process.cwd(),\n DEFAULT_COMMAND_TIMEOUT_MS,\n );\n const summary = truncate(\n [\n `Approved command finished with exit code ${result.code}.`,\n result.timedOut ? \"Timed out: true\" : \"\",\n result.stdout ? `stdout:\\n${result.stdout}` : \"\",\n result.stderr ? `stderr:\\n${result.stderr}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n MAX_TOOL_OUTPUT_CHARS,\n );\n options.stdout?.write(`${summary}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: summary,\n metadata: {\n status: result.code === 0 ? \"paused\" : \"errored\",\n phase: \"approval-complete\",\n approvalId: approval.id,\n exitCode: result.code,\n timedOut: result.timedOut,\n },\n });\n return updateCodeAgentRunRecord(runId, {\n status: result.code === 0 ? \"paused\" : \"errored\",\n phase: result.code === 0 ? \"approval-complete\" : \"approval-command-error\",\n needsApproval: false,\n progress: {\n label: result.code === 0 ? \"Approval complete\" : \"Approval failed\",\n completed: result.code === 0 ? 1 : 0,\n total: 1,\n failed: result.code === 0 ? 0 : 1,\n percent: result.code === 0 ? 100 : 0,\n },\n metadata: {\n pendingApproval: undefined,\n lastApproval: {\n ...approval,\n completedAt: new Date().toISOString(),\n exitCode: result.code,\n },\n },\n });\n}\n\nfunction latestUserPrompt(runId: string): string {\n const events = listCodeAgentTranscriptEvents(runId);\n for (let i = events.length - 1; i >= 0; i--) {\n const event = events[i];\n if (event.kind === \"user\" && event.message.trim()) return event.message;\n }\n return \"\";\n}\n\nfunction metadataString(\n run: CodeAgentRunRecord,\n key: string,\n): string | undefined {\n const value = run.metadata?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nasync function startCodeAgentMcpManager(\n runId: string,\n): Promise<McpClientManager | null> {\n const config = await buildMergedConfig().catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `MCP tools unavailable: ${message}`,\n metadata: { type: \"mcp-config-error\" },\n });\n return null;\n });\n if (!config || Object.keys(config.servers ?? {}).length === 0) return null;\n\n const manager = new McpClientManager(config);\n await manager.start().catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `MCP tools failed to start: ${message}`,\n metadata: { type: \"mcp-start-error\" },\n });\n });\n const status = manager.getStatus();\n if (status.totalTools === 0) {\n await manager.stop().catch(() => undefined);\n return null;\n }\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Connected ${status.totalTools} MCP tool${status.totalTools === 1 ? \"\" : \"s\"} for this run.`,\n metadata: {\n type: \"mcp-tools-connected\",\n servers: status.connectedServers,\n toolCount: status.totalTools,\n },\n });\n return manager;\n}\n\nfunction runWithOptionalCodeAgentRequestContext<T>(\n run: CodeAgentRunRecord,\n fn: () => T | Promise<T>,\n): T | Promise<T> {\n const userEmail =\n metadataString(run, \"ownerEmail\") ??\n metadataString(run, \"userEmail\") ??\n process.env.AGENT_USER_EMAIL;\n const orgId = metadataString(run, \"orgId\") ?? process.env.AGENT_ORG_ID;\n if (!userEmail && !orgId) return fn();\n return runWithRequestContext({ userEmail, orgId }, fn);\n}\n\nfunction metadataReasoningEffort(\n run: CodeAgentRunRecord,\n): ReasoningEffort | undefined {\n const value = run.metadata?.reasoningEffort ?? run.metadata?.effort;\n return isReasoningEffort(value) && value !== \"auto\" ? value : undefined;\n}\n\nasync function resolveExecutorEngine(\n requestedEngine?: string,\n): Promise<AgentEngine | null> {\n const fakeText = process.env.AGENT_NATIVE_CODE_AGENT_FAKE_RESPONSE;\n if (fakeText !== undefined) {\n return createFakeCodeAgentEngine(fakeText || \"Done.\");\n }\n registerBuiltinEngines();\n if (!hasAnyProviderCredential()) return null;\n return resolveEngine({\n engineOption: requestedEngine ?? process.env.AGENT_ENGINE,\n });\n}\n\nfunction hasAnyProviderCredential(): boolean {\n if (process.env.AGENT_ENGINE) return true;\n if (PROVIDER_ENV_VARS.some((key) => Boolean(process.env[key]))) return true;\n return Boolean(\n process.env.BUILDER_PRIVATE_KEY && process.env.BUILDER_PUBLIC_KEY,\n );\n}\n\nfunction createFakeCodeAgentEngine(text: string): AgentEngine {\n return {\n name: \"fake-code-agent\",\n label: \"Fake Agent-Native Code\",\n defaultModel: \"fake-code-agent\",\n supportedModels: [\"fake-code-agent\"],\n capabilities: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: false,\n },\n async *stream(_opts: EngineStreamOptions): AsyncIterable<EngineEvent> {\n yield { type: \"text-delta\", text };\n yield {\n type: \"assistant-content\",\n parts: [{ type: \"text\", text }],\n };\n yield {\n type: \"usage\",\n inputTokens: 1,\n outputTokens: 1,\n cacheReadTokens: 0,\n cacheWriteTokens: 0,\n };\n yield { type: \"stop\", reason: \"end_turn\" };\n },\n };\n}\n\nfunction buildCodeAgentMessages(\n run: CodeAgentRunRecord,\n prompt: string,\n): EngineMessage[] {\n const transcript = listCodeAgentTranscriptEvents(run.id)\n .slice(-40)\n .map((event) => {\n const label =\n event.kind === \"user\"\n ? \"User\"\n : event.metadata?.role === \"assistant\"\n ? \"Assistant\"\n : event.kind;\n return `${label}: ${event.message}`;\n })\n .join(\"\\n\");\n const context = transcript\n ? `\\n\\nPrevious session transcript:\\n${transcript}`\n : \"\";\n return [\n {\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: `${prompt}${context}`,\n },\n ],\n },\n ];\n}\n\nfunction codeAgentSystemPrompt(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n): string {\n return `You are Agent-Native Code, a local coding agent running in ${cwd}.\n\nWork like a careful senior engineer:\n- Read relevant files before editing.\n- Prefer small, focused changes.\n- Current run mode: ${permissionMode === \"read-only\" ? \"Plan mode\" : \"Auto mode\"} (${permissionMode}).\n- In Plan mode, inspect and explain only.\n- In Auto mode, edit files and run ordinary project commands without pausing. Pause only for genuinely destructive operations such as recursive deletes, package publishing, privileged commands, destructive database operations, or forbidden git branch/reset/stash/rebase operations.\n- Do not create, switch, delete, reset, rebase, or stash git branches.\n- Do not run destructive git commands.\n- Use apply_patch or write_file for edits, then run focused verification.\n- Use tool-search when you need a capability that may come from MCP, including browser automation or computer control.\n- Prefer Playwright MCP for deterministic browser testing; prefer Chrome DevTools MCP when the user needs their live logged-in Chrome session.\n- Only use computer-control MCP tools when they are explicitly available and the user request warrants controlling the local computer.\n- Keep the final answer concise and include files changed plus tests run.\n- Respect any AGENTS.md instructions in the repository.`;\n}\n\nfunction createLocalCodeAgentActions(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n runId: string,\n): Record<string, ActionEntry> {\n const actions: Record<string, ActionEntry> = {\n list_files: {\n readOnly: true,\n tool: {\n description: \"List files under the current repository/workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n pattern: {\n type: \"string\",\n description:\n \"Optional substring or glob-like fragment to filter.\",\n },\n },\n required: [],\n },\n },\n run: async (args) => {\n const result = await runCommand(\"rg --files\", cwd, 30_000);\n const output =\n result.code === 0\n ? result.stdout\n : (await runCommand(\"find . -type f | sed 's#^./##'\", cwd, 30_000))\n .stdout;\n const pattern = stringArg(args.pattern).toLowerCase();\n const files = output\n .split(/\\r?\\n/)\n .filter(Boolean)\n .filter((file) => !pattern || file.toLowerCase().includes(pattern))\n .slice(0, 500);\n return files.join(\"\\n\") || \"(no files found)\";\n },\n },\n search_files: {\n readOnly: true,\n tool: {\n description: \"Search files with ripgrep.\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\", description: \"Search query or regex.\" },\n glob: {\n type: \"string\",\n description: \"Optional glob, for example src/**/*.ts.\",\n },\n },\n required: [\"query\"],\n },\n },\n run: async (args) => {\n const query = stringArg(args.query);\n if (!query) return \"Error: query is required.\";\n const glob = stringArg(args.glob);\n const command = glob\n ? `rg --line-number --no-heading ${shellQuote(query)} -g ${shellQuote(glob)}`\n : `rg --line-number --no-heading ${shellQuote(query)}`;\n const result = await runCommand(command, cwd, 30_000);\n return truncate(\n result.stdout || result.stderr || \"(no matches)\",\n MAX_TOOL_OUTPUT_CHARS,\n );\n },\n },\n read_file: {\n readOnly: true,\n tool: {\n description: \"Read a UTF-8 text file inside the workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Relative file path.\" },\n },\n required: [\"path\"],\n },\n },\n run: async (args) => {\n const filePath = resolveInsideCwd(cwd, stringArg(args.path));\n if (!filePath) return \"Error: path must stay inside the workspace.\";\n if (!fs.existsSync(filePath))\n return `Error: file not found: ${args.path}`;\n const stat = fs.statSync(filePath);\n if (!stat.isFile()) return `Error: not a file: ${args.path}`;\n return truncate(fs.readFileSync(filePath, \"utf8\"), MAX_FILE_READ_CHARS);\n },\n },\n write_file: {\n tool: {\n description: \"Write a complete UTF-8 text file inside the workspace.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Relative file path.\" },\n content: { type: \"string\", description: \"Full file content.\" },\n },\n required: [\"path\", \"content\"],\n },\n },\n run: async (args) => {\n const permissionError = permissionErrorForWrite(\n permissionMode,\n \"write_file\",\n );\n if (permissionError) return permissionError;\n const filePath = resolveInsideCwd(cwd, stringArg(args.path));\n if (!filePath) return \"Error: path must stay inside the workspace.\";\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, stringArg(args.content));\n return `Wrote ${path.relative(cwd, filePath)}`;\n },\n },\n apply_patch: {\n tool: {\n description:\n \"Apply a unified git patch from the workspace root. Prefer this for precise edits.\",\n parameters: {\n type: \"object\",\n properties: {\n patch: { type: \"string\", description: \"Unified diff patch text.\" },\n },\n required: [\"patch\"],\n },\n },\n run: async (args) => {\n const permissionError = permissionErrorForWrite(\n permissionMode,\n \"apply_patch\",\n );\n if (permissionError) return permissionError;\n const patch = stringArg(args.patch);\n if (!patch.trim()) return \"Error: patch is required.\";\n const result = await runCommand(\n \"git apply --whitespace=nowarn -\",\n cwd,\n 30_000,\n patch,\n );\n if (result.code !== 0) {\n return `Error applying patch:\\n${result.stderr || result.stdout}`;\n }\n return \"Patch applied.\";\n },\n },\n run_command: {\n tool: {\n description:\n \"Run a shell command from the workspace root. Use for tests, typechecks, and safe project commands.\",\n parameters: {\n type: \"object\",\n properties: {\n command: { type: \"string\", description: \"Shell command to run.\" },\n timeoutMs: {\n type: \"string\",\n description: \"Optional timeout in milliseconds.\",\n },\n },\n required: [\"command\"],\n },\n },\n run: async (args) => {\n const command = stringArg(args.command);\n if (!command) return \"Error: command is required.\";\n const permission = classifyCodeAgentCommandPermission(command);\n if (permission.kind === \"forbidden\") {\n return `Error: command is blocked by Agent-Native Code policy: ${permission.reason}`;\n }\n if (permission.kind === \"approval-required\") {\n const approval = requestCodeAgentApproval(runId, {\n tool: \"run_command\",\n command,\n reason: permission.reason,\n permissionMode,\n });\n return [\n `Approval required before running this command: ${permission.reason}.`,\n `Approval id: ${approval.id}`,\n `Command: ${command}`,\n \"The run is paused; approve from the Agent-Native Code UI/CLI if this command is intentional.\",\n ].join(\"\\n\");\n }\n const timeoutMs = Number(args.timeoutMs);\n const result = await runCommand(\n command,\n cwd,\n Number.isFinite(timeoutMs) && timeoutMs > 0\n ? Math.min(timeoutMs, 10 * 60_000)\n : DEFAULT_COMMAND_TIMEOUT_MS,\n );\n return truncate(\n [\n `exitCode: ${result.code}`,\n result.timedOut ? \"timedOut: true\" : \"\",\n result.stdout ? `stdout:\\n${result.stdout}` : \"\",\n result.stderr ? `stderr:\\n${result.stderr}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n MAX_TOOL_OUTPUT_CHARS,\n );\n },\n },\n };\n if (permissionMode === \"read-only\") {\n return Object.fromEntries(\n Object.entries(actions).filter(([, action]) => action.readOnly),\n );\n }\n return actions;\n}\n\nexport type CodeAgentCommandPermission =\n | { kind: \"read\" }\n | { kind: \"write\" }\n | { kind: \"approval-required\"; reason: string }\n | { kind: \"forbidden\"; reason: string };\n\nexport function classifyCodeAgentCommandPermission(\n command: string,\n): CodeAgentCommandPermission {\n const normalized = command.trim().toLowerCase();\n if (!normalized) return { kind: \"read\" };\n\n const blockedPatterns: Array<[RegExp, string]> = [\n [\n /\\bgit\\s+(checkout|switch|reset|rebase|stash|clean|worktree)\\b/,\n \"forbidden git branch/reset/stash/rebase operation\",\n ],\n [\n /\\bgit\\s+branch\\b(?!\\s+--show-current\\b)/,\n \"forbidden git branch operation\",\n ],\n [/\\bdrizzle-kit\\s+push\\b/, \"drizzle-kit push is not allowed\"],\n ];\n for (const [pattern, reason] of blockedPatterns) {\n if (pattern.test(normalized)) return { kind: \"forbidden\", reason };\n }\n\n const approvalPatterns: Array<[RegExp, string]> = [\n [/\\brm\\s+-rf\\b/, \"destructive recursive delete\"],\n [/\\bsudo\\b/, \"privileged command\"],\n [/\\bkill\\s+-9\\b/, \"force-kill command\"],\n [/\\bcurl\\b.*\\|\\s*(sh|bash|zsh)\\b/, \"remote script execution\"],\n [/\\b(wget|fetch)\\b.*\\|\\s*(sh|bash|zsh)\\b/, \"remote script execution\"],\n [/\\bnpm\\s+publish\\b/, \"package publish\"],\n [/\\bpnpm\\s+publish\\b/, \"package publish\"],\n [/\\btruncate\\b/, \"destructive data command\"],\n [/\\bdrop\\s+(table|column|database)\\b/, \"destructive database command\"],\n [/\\bdelete\\s+from\\b(?![\\s\\S]*\\bwhere\\b)/, \"unscoped delete command\"],\n ];\n for (const [pattern, reason] of approvalPatterns) {\n if (pattern.test(normalized)) {\n return { kind: \"approval-required\", reason };\n }\n }\n\n const readPatterns = [\n /^pwd\\b/,\n /^ls\\b/,\n /^find\\b/,\n /^rg\\b/,\n /^grep\\b/,\n /^cat\\b/,\n /^sed\\s+-n\\b/,\n /^head\\b/,\n /^tail\\b/,\n /^wc\\b/,\n /^git\\s+(status|diff|show|log)\\b/,\n /^git\\s+branch\\s+--show-current\\b/,\n /^pnpm\\b.*\\b(test|typecheck|lint|check)\\b/,\n /^npm\\b.*\\b(test|run\\s+(test|typecheck|lint|check))\\b/,\n ];\n if (readPatterns.some((pattern) => pattern.test(normalized))) {\n return { kind: \"read\" };\n }\n\n const writePatterns = [\n /(^|[^>])>(?!>)/,\n />>/,\n /\\btee\\b/,\n /\\bapply_patch\\b/,\n /\\b(write|touch|mkdir|cp|mv|rm|chmod|chown)\\b/,\n /\\bpnpm\\s+(add|install|remove|dlx)\\b/,\n /\\bnpm\\s+(install|i|add|remove|uninstall)\\b/,\n ];\n if (writePatterns.some((pattern) => pattern.test(normalized))) {\n return { kind: \"write\" };\n }\n\n return { kind: \"write\" };\n}\n\nfunction permissionErrorForWrite(\n permissionMode: CodeAgentPermissionMode,\n toolName: string,\n): string | null {\n if (\n permissionMode === \"ask-before-edit\" ||\n permissionMode === \"auto-edit\" ||\n permissionMode === \"full-auto\"\n ) {\n return null;\n }\n if (permissionMode === \"read-only\") {\n return `Error: ${toolName} is unavailable in read-only mode.`;\n }\n return `Error: ${toolName} is blocked by the current run mode.`;\n}\n\nfunction requestCodeAgentApproval(\n runId: string,\n input: Omit<PendingCodeAgentApproval, \"id\" | \"requestedAt\">,\n): PendingCodeAgentApproval {\n const requestedAt = new Date().toISOString();\n const approval: PendingCodeAgentApproval = {\n id: `approval-${requestedAt.replace(/\\D/g, \"\").slice(0, 14)}`,\n requestedAt,\n ...input,\n };\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Approval required: ${approval.reason}`,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-required\",\n pendingApproval: approval,\n },\n });\n updateCodeAgentRunRecord(runId, {\n status: \"needs-approval\",\n phase: \"approval-required\",\n needsApproval: true,\n progress: {\n label: \"Approval required\",\n completed: 0,\n total: 1,\n percent: 50,\n },\n metadata: {\n pendingApproval: approval,\n },\n });\n return approval;\n}\n\nfunction getPendingApproval(runId: string): PendingCodeAgentApproval | null {\n const record = getCodeAgentRunRecord(runId);\n const approval = record?.metadata?.pendingApproval;\n if (!approval || typeof approval !== \"object\") return null;\n const candidate = approval as Record<string, unknown>;\n if (\n candidate.tool !== \"run_command\" ||\n typeof candidate.command !== \"string\" ||\n typeof candidate.reason !== \"string\" ||\n typeof candidate.id !== \"string\" ||\n typeof candidate.requestedAt !== \"string\"\n ) {\n return null;\n }\n return {\n id: candidate.id,\n tool: \"run_command\",\n command: candidate.command,\n reason: candidate.reason,\n requestedAt: candidate.requestedAt,\n permissionMode:\n candidate.permissionMode === \"read-only\" ||\n candidate.permissionMode === \"ask-before-edit\" ||\n candidate.permissionMode === \"auto-edit\" ||\n candidate.permissionMode === \"full-auto\"\n ? candidate.permissionMode\n : \"full-auto\",\n };\n}\n\nfunction resolveInsideCwd(cwd: string, value: string): string | null {\n if (!value.trim()) return null;\n const resolved = path.resolve(cwd, value);\n const relative = path.relative(cwd, resolved);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) return null;\n return resolved;\n}\n\nasync function runCommand(\n command: string,\n cwd: string,\n timeoutMs: number,\n stdin?: string,\n): Promise<CommandResult> {\n const child = spawn(command, {\n cwd,\n shell: true,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGTERM\");\n }, timeoutMs);\n child.stdout?.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n if (stdin) child.stdin?.end(stdin);\n else child.stdin?.end();\n const [code] = (await once(child, \"exit\")) as [number | null];\n clearTimeout(timer);\n return { code, stdout, stderr, timedOut };\n}\n\nfunction stringArg(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max)}\\n\\n...[truncated ${value.length - max} chars]`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"code-agent-executor.js","sourceRoot":"","sources":["../../src/cli/code-agent-executor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createToolSearchEntry,\n TOOL_SEARCH_ACTION_NAME,\n} from \"../agent/tool-search.js\";\nimport {\n createCodingToolRegistry,\n isReadOnlyShellCommand,\n runCodingCommand,\n truncateCodingOutput,\n} from \"../coding-tools/index.js\";\nimport {\n buildMergedConfig,\n McpClientManager,\n mcpToolsToActionEntries,\n} from \"../mcp-client/index.js\";\nimport { runWithRequestContext } from \"../server/request-context.js\";\nimport {\n actionsToEngineTools,\n runAgentLoop,\n type ActionEntry,\n} from \"../agent/production-agent.js\";\nimport {\n resolveEngine,\n getStoredModelForEngine,\n registerBuiltinEngines,\n} from \"../agent/engine/index.js\";\nimport type {\n AgentEngine,\n EngineContentPart,\n EngineEvent,\n EngineMessage,\n EngineStreamOptions,\n} from \"../agent/engine/types.js\";\nimport type { AgentChatEvent } from \"../agent/types.js\";\nimport { PROVIDER_ENV_VARS } from \"../agent/engine/provider-env-vars.js\";\nimport {\n isReasoningEffort,\n type ReasoningEffort,\n} from \"../shared/reasoning-effort.js\";\nimport {\n appendCodeAgentTranscriptEvent,\n dequeueCodeAgentFollowUp,\n getCodeAgentRunRecord,\n listCodeAgentTranscriptEvents,\n updateCodeAgentRunRecord,\n type CodeAgentPermissionMode,\n type CodeAgentRunRecord,\n} from \"./code-agent-runs.js\";\n\nexport interface ExecuteCodeAgentRunOptions {\n runId: string;\n prompt?: string;\n appendUserEvent?: boolean;\n engine?: AgentEngine;\n model?: string;\n reasoningEffort?: ReasoningEffort;\n stdout?: NodeJS.WritableStream;\n signal?: AbortSignal;\n}\n\ninterface PendingCodeAgentApproval {\n id: string;\n tool: \"bash\" | \"run_command\";\n command: string;\n reason: string;\n requestedAt: string;\n permissionMode: CodeAgentPermissionMode;\n}\n\nconst DEFAULT_COMMAND_TIMEOUT_MS = 120_000;\nconst MAX_TOOL_OUTPUT_CHARS = 50_000;\nconst MAX_FILE_READ_CHARS = 120_000;\n\nexport async function executeCodeAgentRun(\n options: ExecuteCodeAgentRunOptions,\n): Promise<CodeAgentRunRecord | null> {\n const existing = getCodeAgentRunRecord(options.runId);\n if (!existing) return null;\n\n const prompt = options.prompt ?? latestUserPrompt(existing.id);\n if (!prompt) {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"No prompt was found for this Agent-Native Code run.\",\n metadata: { status: \"errored\", phase: \"missing-prompt\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"errored\",\n phase: \"missing-prompt\",\n progress: {\n label: \"Missing prompt\",\n completed: 0,\n total: 1,\n failed: 1,\n percent: 0,\n },\n });\n }\n\n if (options.appendUserEvent !== false) {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"user\",\n message: prompt,\n metadata: { source: \"execution-prompt\" },\n });\n }\n\n const running = updateCodeAgentRunRecord(existing.id, {\n status: \"running\",\n phase: \"executing\",\n progress: {\n label: \"Running\",\n completed: 0,\n total: 1,\n percent: 10,\n },\n metadata: {\n executionStartedAt: new Date().toISOString(),\n },\n });\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"Agent-Native Code run started.\",\n metadata: { status: \"running\", phase: \"executing\" },\n });\n\n const requestedEngine = metadataString(existing, \"engine\");\n const engine =\n options.engine ?? (await resolveExecutorEngine(requestedEngine));\n if (!engine) {\n const message =\n \"No LLM provider key was found. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, or another supported provider key and resume this run.\";\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: { status: \"paused\", phase: \"missing-credentials\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"paused\",\n phase: \"missing-credentials\",\n needsApproval: false,\n progress: {\n label: \"Missing credentials\",\n completed: 0,\n total: 1,\n percent: 0,\n },\n });\n }\n\n const model =\n options.model ??\n metadataString(existing, \"model\") ??\n process.env.AGENT_MODEL ??\n (await getStoredModelForEngine(engine).catch(() => undefined)) ??\n engine.defaultModel;\n const reasoningEffort =\n options.reasoningEffort ?? metadataReasoningEffort(existing);\n const cwd = existing.cwd || process.cwd();\n const permissionMode = existing.permissionMode ?? \"full-auto\";\n const actions = createLocalCodeAgentActions(cwd, permissionMode, existing.id);\n const mcpManager = await startCodeAgentMcpManager(existing.id);\n if (mcpManager) {\n Object.assign(actions, mcpToolsToActionEntries(mcpManager));\n }\n actions[TOOL_SEARCH_ACTION_NAME] = createToolSearchEntry(() => actions);\n const tools = actionsToEngineTools(actions);\n const messages = buildCodeAgentMessages(existing, prompt);\n const controller = new AbortController();\n const abortFromParent = () => controller.abort();\n if (options.signal) {\n if (options.signal.aborted) controller.abort();\n else\n options.signal.addEventListener(\"abort\", abortFromParent, { once: true });\n }\n\n let assistantText = \"\";\n const send = (event: AgentChatEvent) => {\n if (event.type === \"text\") {\n assistantText += event.text;\n options.stdout?.write(event.text);\n return;\n }\n if (event.type === \"activity\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: event.label,\n metadata: { type: \"activity\", tool: event.tool },\n });\n return;\n }\n if (event.type === \"tool_start\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Running ${event.tool}.`,\n metadata: { type: \"tool_start\", tool: event.tool, input: event.input },\n });\n return;\n }\n if (event.type === \"tool_done\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Finished ${event.tool}.`,\n metadata: {\n type: \"tool_done\",\n tool: event.tool,\n result: truncateCodingOutput(event.result, 4000),\n },\n });\n return;\n }\n if (event.type === \"error\") {\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: event.error,\n metadata: { type: \"error\", errorCode: event.errorCode },\n });\n }\n };\n\n try {\n await runWithOptionalCodeAgentRequestContext(existing, () =>\n runAgentLoop({\n engine,\n model,\n systemPrompt: codeAgentSystemPrompt(cwd, permissionMode),\n tools,\n actions,\n messages,\n send,\n signal: controller.signal,\n maxIterations: 12,\n reasoningEffort,\n }),\n );\n if (assistantText.trim()) {\n options.stdout?.write(\"\\n\");\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"system\",\n message: assistantText.trim(),\n metadata: {\n role: \"assistant\",\n model,\n engine: engine.name,\n reasoningEffort,\n },\n });\n }\n const approvalPending = getPendingApproval(existing.id);\n if (approvalPending) {\n const message = `Agent-Native Code run paused for approval: ${approvalPending.reason}`;\n options.stdout?.write(`\\n${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-required\",\n pendingApprovalId: approvalPending.id,\n },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"needs-approval\",\n phase: \"approval-required\",\n needsApproval: true,\n progress: {\n label: \"Approval required\",\n completed: 0,\n total: 1,\n percent: 50,\n },\n });\n }\n\n const pendingFollowUp = dequeueCodeAgentFollowUp(existing.id);\n if (pendingFollowUp) {\n const message =\n pendingFollowUp.mode === \"queued\"\n ? \"Agent-Native Code run completed; running queued follow-up.\"\n : \"Agent-Native Code run completed; applying steering follow-up.\";\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message,\n metadata: {\n status: \"running\",\n phase: \"follow-up\",\n followUpId: pendingFollowUp.id,\n followUpMode: pendingFollowUp.mode,\n },\n });\n if (pendingFollowUp.permissionMode) {\n updateCodeAgentRunRecord(existing.id, {\n permissionMode: pendingFollowUp.permissionMode,\n });\n }\n return executeCodeAgentRun({\n ...options,\n runId: existing.id,\n prompt: pendingFollowUp.prompt,\n appendUserEvent: false,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: \"Agent-Native Code run completed.\",\n metadata: { status: \"completed\", phase: \"complete\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: \"completed\",\n phase: \"complete\",\n needsApproval: false,\n progress: {\n label: \"Complete\",\n completed: 1,\n total: 1,\n percent: 100,\n },\n metadata: {\n executionCompletedAt: new Date().toISOString(),\n engine: engine.name,\n model,\n reasoningEffort,\n permissionMode,\n },\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n options.stdout?.write(`\\nAgent-Native Code run failed: ${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId: existing.id,\n kind: \"status\",\n message: `Agent-Native Code run failed: ${message}`,\n metadata: { status: \"errored\", phase: \"error\" },\n });\n return updateCodeAgentRunRecord(existing.id, {\n status: controller.signal.aborted ? \"paused\" : \"errored\",\n phase: controller.signal.aborted ? \"paused\" : \"error\",\n progress: {\n label: controller.signal.aborted ? \"Paused\" : \"Error\",\n completed: 0,\n total: 1,\n failed: controller.signal.aborted ? 0 : 1,\n percent: 0,\n },\n metadata: {\n executionError: message,\n executionErroredAt: new Date().toISOString(),\n },\n });\n } finally {\n options.signal?.removeEventListener(\"abort\", abortFromParent);\n await mcpManager?.stop().catch(() => undefined);\n void running;\n }\n}\n\nexport async function executeExistingCodeAgentRun(\n runId: string,\n options: Omit<ExecuteCodeAgentRunOptions, \"runId\"> = {},\n): Promise<CodeAgentRunRecord | null> {\n return executeCodeAgentRun({ ...options, runId, appendUserEvent: false });\n}\n\nexport async function executePendingCodeAgentApproval(\n runId: string,\n options: { stdout?: NodeJS.WritableStream } = {},\n): Promise<CodeAgentRunRecord | null> {\n const record = getCodeAgentRunRecord(runId);\n if (!record) return null;\n const approval = getPendingApproval(runId);\n if (!approval) {\n options.stdout?.write(\"No pending approval was found for this run.\\n\");\n return record;\n }\n\n const permission = classifyCodeAgentCommandPermission(approval.command);\n if (permission.kind === \"forbidden\") {\n const message = `Approval cannot run forbidden command: ${permission.reason}`;\n options.stdout?.write(`${message}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-forbidden\",\n approvalId: approval.id,\n },\n });\n return updateCodeAgentRunRecord(runId, {\n status: \"needs-approval\",\n phase: \"approval-forbidden\",\n needsApproval: true,\n });\n }\n\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Approved command ${approval.id}; running now.`,\n metadata: {\n status: \"running\",\n phase: \"approval-running\",\n approvalId: approval.id,\n command: approval.command,\n },\n });\n const result = await runCodingCommand(\n approval.command,\n record.cwd || process.cwd(),\n DEFAULT_COMMAND_TIMEOUT_MS,\n );\n const summary = truncateCodingOutput(\n [\n `Approved command finished with exit code ${result.code}.`,\n result.timedOut ? \"Timed out: true\" : \"\",\n result.stdout ? `stdout:\\n${result.stdout}` : \"\",\n result.stderr ? `stderr:\\n${result.stderr}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n MAX_TOOL_OUTPUT_CHARS,\n );\n options.stdout?.write(`${summary}\\n`);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: summary,\n metadata: {\n status: result.code === 0 ? \"paused\" : \"errored\",\n phase: \"approval-complete\",\n approvalId: approval.id,\n exitCode: result.code,\n timedOut: result.timedOut,\n },\n });\n return updateCodeAgentRunRecord(runId, {\n status: result.code === 0 ? \"paused\" : \"errored\",\n phase: result.code === 0 ? \"approval-complete\" : \"approval-command-error\",\n needsApproval: false,\n progress: {\n label: result.code === 0 ? \"Approval complete\" : \"Approval failed\",\n completed: result.code === 0 ? 1 : 0,\n total: 1,\n failed: result.code === 0 ? 0 : 1,\n percent: result.code === 0 ? 100 : 0,\n },\n metadata: {\n pendingApproval: undefined,\n lastApproval: {\n ...approval,\n completedAt: new Date().toISOString(),\n exitCode: result.code,\n },\n },\n });\n}\n\nfunction latestUserPrompt(runId: string): string {\n const events = listCodeAgentTranscriptEvents(runId);\n for (let i = events.length - 1; i >= 0; i--) {\n const event = events[i];\n if (event.kind === \"user\" && event.message.trim()) return event.message;\n }\n return \"\";\n}\n\nfunction metadataString(\n run: CodeAgentRunRecord,\n key: string,\n): string | undefined {\n const value = run.metadata?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nasync function startCodeAgentMcpManager(\n runId: string,\n): Promise<McpClientManager | null> {\n const config = await buildMergedConfig().catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `MCP tools unavailable: ${message}`,\n metadata: { type: \"mcp-config-error\" },\n });\n return null;\n });\n if (!config || Object.keys(config.servers ?? {}).length === 0) return null;\n\n const manager = new McpClientManager(config);\n await manager.start().catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `MCP tools failed to start: ${message}`,\n metadata: { type: \"mcp-start-error\" },\n });\n });\n const status = manager.getStatus();\n if (status.totalTools === 0) {\n await manager.stop().catch(() => undefined);\n return null;\n }\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Connected ${status.totalTools} MCP tool${status.totalTools === 1 ? \"\" : \"s\"} for this run.`,\n metadata: {\n type: \"mcp-tools-connected\",\n servers: status.connectedServers,\n toolCount: status.totalTools,\n },\n });\n return manager;\n}\n\nfunction runWithOptionalCodeAgentRequestContext<T>(\n run: CodeAgentRunRecord,\n fn: () => T | Promise<T>,\n): T | Promise<T> {\n const userEmail =\n metadataString(run, \"ownerEmail\") ??\n metadataString(run, \"userEmail\") ??\n process.env.AGENT_USER_EMAIL;\n const orgId = metadataString(run, \"orgId\") ?? process.env.AGENT_ORG_ID;\n if (!userEmail && !orgId) return fn();\n return runWithRequestContext({ userEmail, orgId }, fn);\n}\n\nfunction metadataReasoningEffort(\n run: CodeAgentRunRecord,\n): ReasoningEffort | undefined {\n const value = run.metadata?.reasoningEffort ?? run.metadata?.effort;\n return isReasoningEffort(value) && value !== \"auto\" ? value : undefined;\n}\n\nasync function resolveExecutorEngine(\n requestedEngine?: string,\n): Promise<AgentEngine | null> {\n const fakeText = process.env.AGENT_NATIVE_CODE_AGENT_FAKE_RESPONSE;\n if (fakeText !== undefined) {\n return createFakeCodeAgentEngine(fakeText || \"Done.\");\n }\n registerBuiltinEngines();\n if (!hasAnyProviderCredential()) return null;\n return resolveEngine({\n engineOption: requestedEngine ?? process.env.AGENT_ENGINE,\n });\n}\n\nfunction hasAnyProviderCredential(): boolean {\n if (process.env.AGENT_ENGINE) return true;\n if (PROVIDER_ENV_VARS.some((key) => Boolean(process.env[key]))) return true;\n return Boolean(\n process.env.BUILDER_PRIVATE_KEY && process.env.BUILDER_PUBLIC_KEY,\n );\n}\n\nfunction createFakeCodeAgentEngine(text: string): AgentEngine {\n return {\n name: \"fake-code-agent\",\n label: \"Fake Agent-Native Code\",\n defaultModel: \"fake-code-agent\",\n supportedModels: [\"fake-code-agent\"],\n capabilities: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: false,\n },\n async *stream(_opts: EngineStreamOptions): AsyncIterable<EngineEvent> {\n yield { type: \"text-delta\", text };\n yield {\n type: \"assistant-content\",\n parts: [{ type: \"text\", text }],\n };\n yield {\n type: \"usage\",\n inputTokens: 1,\n outputTokens: 1,\n cacheReadTokens: 0,\n cacheWriteTokens: 0,\n };\n yield { type: \"stop\", reason: \"end_turn\" };\n },\n };\n}\n\nfunction buildCodeAgentMessages(\n run: CodeAgentRunRecord,\n prompt: string,\n): EngineMessage[] {\n const transcript = listCodeAgentTranscriptEvents(run.id)\n .slice(-40)\n .map((event) => {\n const label =\n event.kind === \"user\"\n ? \"User\"\n : event.metadata?.role === \"assistant\"\n ? \"Assistant\"\n : event.kind;\n return `${label}: ${event.message}`;\n })\n .join(\"\\n\");\n const context = transcript\n ? `\\n\\nPrevious session transcript:\\n${transcript}`\n : \"\";\n return [\n {\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: `${prompt}${context}`,\n },\n ],\n },\n ];\n}\n\nfunction codeAgentSystemPrompt(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n): string {\n return `You are Agent-Native Code, a local coding agent running in ${cwd}.\n\nWork like a careful senior engineer:\n- Read relevant files before editing.\n- Prefer small, focused changes.\n- Current run mode: ${permissionMode === \"read-only\" ? \"Plan mode\" : \"Auto mode\"} (${permissionMode}).\n- In Plan mode, inspect and explain only.\n- In Auto mode, edit files and run ordinary project commands without pausing. Pause only for genuinely destructive operations such as recursive deletes, package publishing, privileged commands, destructive database operations, or forbidden git branch/reset/stash/rebase operations.\n- Do not create, switch, delete, reset, rebase, or stash git branches.\n- Do not run destructive git commands.\n- Use the shared coding tools: bash for search/list/test/build commands, read for file reads, edit for exact replacement edits, and write only for new files or intentional full rewrites.\n- Prefer edit over write when changing existing files, then run focused verification with bash.\n- Use tool-search when you need a capability that may come from MCP, including browser automation or computer control.\n- Prefer Playwright MCP for deterministic browser testing; prefer Chrome DevTools MCP when the user needs their live logged-in Chrome session.\n- Only use computer-control MCP tools when they are explicitly available and the user request warrants controlling the local computer.\n- Keep the final answer concise and include files changed plus tests run.\n- Respect any AGENTS.md instructions in the repository.`;\n}\n\nfunction createLocalCodeAgentActions(\n cwd: string,\n permissionMode: CodeAgentPermissionMode,\n runId: string,\n): Record<string, ActionEntry> {\n const actions = createCodingToolRegistry({\n cwd,\n restrictToCwd: true,\n commandTimeoutMs: DEFAULT_COMMAND_TIMEOUT_MS,\n maxOutputChars: MAX_TOOL_OUTPUT_CHARS,\n maxFileReadChars: MAX_FILE_READ_CHARS,\n canWrite: (toolName) => permissionErrorForWrite(permissionMode, toolName),\n beforeBash: ({ command }) => {\n const permission = classifyCodeAgentCommandPermission(command);\n if (permission.kind === \"forbidden\") {\n return `Error: command is blocked by Agent-Native Code policy: ${permission.reason}`;\n }\n if (permission.kind !== \"read\") {\n const permissionError = permissionErrorForWrite(permissionMode, \"bash\");\n if (permissionError) return permissionError;\n }\n if (permission.kind === \"approval-required\") {\n const approval = requestCodeAgentApproval(runId, {\n tool: \"bash\",\n command,\n reason: permission.reason,\n permissionMode,\n });\n return [\n `Approval required before running this command: ${permission.reason}.`,\n `Approval id: ${approval.id}`,\n `Command: ${command}`,\n \"The run is paused; approve from the Agent-Native Code UI/CLI if this command is intentional.\",\n ].join(\"\\n\");\n }\n return null;\n },\n });\n if (permissionMode === \"read-only\") {\n return {\n bash: actions.bash,\n read: actions.read,\n };\n }\n return actions;\n}\n\nexport type CodeAgentCommandPermission =\n | { kind: \"read\" }\n | { kind: \"write\" }\n | { kind: \"approval-required\"; reason: string }\n | { kind: \"forbidden\"; reason: string };\n\nexport function classifyCodeAgentCommandPermission(\n command: string,\n): CodeAgentCommandPermission {\n const normalized = command.trim().toLowerCase();\n if (!normalized) return { kind: \"read\" };\n\n const blockedPatterns: Array<[RegExp, string]> = [\n [\n /\\bgit\\s+(checkout|switch|reset|rebase|stash|clean|worktree)\\b/,\n \"forbidden git branch/reset/stash/rebase operation\",\n ],\n [\n /\\bgit\\s+branch\\b(?!\\s+--show-current\\b)/,\n \"forbidden git branch operation\",\n ],\n [/\\bdrizzle-kit\\s+push\\b/, \"drizzle-kit push is not allowed\"],\n ];\n for (const [pattern, reason] of blockedPatterns) {\n if (pattern.test(normalized)) return { kind: \"forbidden\", reason };\n }\n\n const approvalPatterns: Array<[RegExp, string]> = [\n [/\\brm\\s+-rf\\b/, \"destructive recursive delete\"],\n [/\\bsudo\\b/, \"privileged command\"],\n [/\\bkill\\s+-9\\b/, \"force-kill command\"],\n [/\\bcurl\\b.*\\|\\s*(sh|bash|zsh)\\b/, \"remote script execution\"],\n [/\\b(wget|fetch)\\b.*\\|\\s*(sh|bash|zsh)\\b/, \"remote script execution\"],\n [/\\bnpm\\s+publish\\b/, \"package publish\"],\n [/\\bpnpm\\s+publish\\b/, \"package publish\"],\n [/\\btruncate\\b/, \"destructive data command\"],\n [/\\bdrop\\s+(table|column|database)\\b/, \"destructive database command\"],\n [/\\bdelete\\s+from\\b(?![\\s\\S]*\\bwhere\\b)/, \"unscoped delete command\"],\n ];\n for (const [pattern, reason] of approvalPatterns) {\n if (pattern.test(normalized)) {\n return { kind: \"approval-required\", reason };\n }\n }\n\n if (isReadOnlyShellCommand(command)) {\n return { kind: \"read\" };\n }\n\n const writePatterns = [\n /(^|[^>])>(?!>)/,\n />>/,\n /\\btee\\b/,\n /\\bapply_patch\\b/,\n /\\b(write|touch|mkdir|cp|mv|rm|chmod|chown)\\b/,\n /\\bpnpm\\s+(add|install|remove|dlx)\\b/,\n /\\bnpm\\s+(install|i|add|remove|uninstall)\\b/,\n ];\n if (writePatterns.some((pattern) => pattern.test(normalized))) {\n return { kind: \"write\" };\n }\n\n return { kind: \"write\" };\n}\n\nfunction permissionErrorForWrite(\n permissionMode: CodeAgentPermissionMode,\n toolName: string,\n): string | null {\n if (\n permissionMode === \"ask-before-edit\" ||\n permissionMode === \"auto-edit\" ||\n permissionMode === \"full-auto\"\n ) {\n return null;\n }\n if (permissionMode === \"read-only\") {\n return `Error: ${toolName} is unavailable in read-only mode.`;\n }\n return `Error: ${toolName} is blocked by the current run mode.`;\n}\n\nfunction requestCodeAgentApproval(\n runId: string,\n input: Omit<PendingCodeAgentApproval, \"id\" | \"requestedAt\">,\n): PendingCodeAgentApproval {\n const requestedAt = new Date().toISOString();\n const approval: PendingCodeAgentApproval = {\n id: `approval-${requestedAt.replace(/\\D/g, \"\").slice(0, 14)}`,\n requestedAt,\n ...input,\n };\n appendCodeAgentTranscriptEvent({\n runId,\n kind: \"status\",\n message: `Approval required: ${approval.reason}`,\n metadata: {\n status: \"needs-approval\",\n phase: \"approval-required\",\n pendingApproval: approval,\n },\n });\n updateCodeAgentRunRecord(runId, {\n status: \"needs-approval\",\n phase: \"approval-required\",\n needsApproval: true,\n progress: {\n label: \"Approval required\",\n completed: 0,\n total: 1,\n percent: 50,\n },\n metadata: {\n pendingApproval: approval,\n },\n });\n return approval;\n}\n\nfunction getPendingApproval(runId: string): PendingCodeAgentApproval | null {\n const record = getCodeAgentRunRecord(runId);\n const approval = record?.metadata?.pendingApproval;\n if (!approval || typeof approval !== \"object\") return null;\n const candidate = approval as Record<string, unknown>;\n const tool =\n candidate.tool === \"bash\" || candidate.tool === \"run_command\"\n ? candidate.tool\n : null;\n if (\n !tool ||\n typeof candidate.command !== \"string\" ||\n typeof candidate.reason !== \"string\" ||\n typeof candidate.id !== \"string\" ||\n typeof candidate.requestedAt !== \"string\"\n ) {\n return null;\n }\n return {\n id: candidate.id,\n tool,\n command: candidate.command,\n reason: candidate.reason,\n requestedAt: candidate.requestedAt,\n permissionMode:\n candidate.permissionMode === \"read-only\" ||\n candidate.permissionMode === \"ask-before-edit\" ||\n candidate.permissionMode === \"auto-edit\" ||\n candidate.permissionMode === \"full-auto\"\n ? candidate.permissionMode\n : \"full-auto\",\n };\n}\n"]}
|
package/dist/cli/connect.d.ts
CHANGED
|
@@ -65,15 +65,16 @@ export interface ConnectDeps {
|
|
|
65
65
|
* other terminal failure — the caller maps that to a non-zero exit.
|
|
66
66
|
*/
|
|
67
67
|
export declare function runDeviceFlow(baseUrl: string, appSlug: string, clientArg: string, deps?: ConnectDeps): Promise<{
|
|
68
|
-
token
|
|
68
|
+
token?: string;
|
|
69
69
|
mcpUrl: string;
|
|
70
70
|
serverName: string;
|
|
71
|
+
headers?: Record<string, string>;
|
|
71
72
|
} | null>;
|
|
72
73
|
/**
|
|
73
74
|
* Write the HTTP MCP entry into every requested client config idempotently.
|
|
74
75
|
* Returns the list of files written so the caller can print them.
|
|
75
76
|
*/
|
|
76
|
-
export declare function writeConfigs(clients: ClientId[], serverName: string, mcpUrl: string, token: string, scope: string, baseDir?: string): {
|
|
77
|
+
export declare function writeConfigs(clients: ClientId[], serverName: string, mcpUrl: string, token: string | undefined, scope: string, baseDir?: string, headers?: Record<string, string>): {
|
|
77
78
|
client: ClientId;
|
|
78
79
|
file: string;
|
|
79
80
|
}[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH,OAAO,EAEL,QAAQ,EAET,MAAM,yBAAyB,CAAC;AAkBjC,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAsBlE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmChD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAOzD;AAuED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AA4CD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH,OAAO,EAEL,QAAQ,EAET,MAAM,yBAAyB,CAAC;AAkBjC,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAsBlE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmChD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAOzD;AAuED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AA4CD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GAAG,IAAI,CAAC,CAqHR;AAWD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,QAAQ,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAyB,EAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAetC;AA6DD,8EAA8E;AAC9E,wBAAgB,UAAU,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAI5D;AA8DD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
package/dist/cli/connect.js
CHANGED
|
@@ -247,12 +247,14 @@ export async function runDeviceFlow(baseUrl, appSlug, clientArg, deps = {}) {
|
|
|
247
247
|
const token = poll.token ?? "";
|
|
248
248
|
const mcpUrl = poll.mcpUrl ?? `${baseUrl}/_agent-native/mcp`;
|
|
249
249
|
const serverName = poll.serverName ?? `${SERVER_NAME_PREFIX}-${appSlug}`;
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
250
|
+
const headers = poll.mcpServerEntry &&
|
|
251
|
+
typeof poll.mcpServerEntry === "object" &&
|
|
252
|
+
poll.mcpServerEntry.headers &&
|
|
253
|
+
typeof poll.mcpServerEntry.headers === "object"
|
|
254
|
+
? poll.mcpServerEntry.headers
|
|
255
|
+
: undefined;
|
|
254
256
|
logOut(" Approved.");
|
|
255
|
-
return { token, mcpUrl, serverName };
|
|
257
|
+
return { token: token || undefined, mcpUrl, serverName, headers };
|
|
256
258
|
}
|
|
257
259
|
if (poll.status === "expired") {
|
|
258
260
|
if (isTTY)
|
|
@@ -296,10 +298,10 @@ function projectBaseDir() {
|
|
|
296
298
|
* Write the HTTP MCP entry into every requested client config idempotently.
|
|
297
299
|
* Returns the list of files written so the caller can print them.
|
|
298
300
|
*/
|
|
299
|
-
export function writeConfigs(clients, serverName, mcpUrl, token, scope, baseDir = projectBaseDir()) {
|
|
301
|
+
export function writeConfigs(clients, serverName, mcpUrl, token, scope, baseDir = projectBaseDir(), headers) {
|
|
300
302
|
const written = [];
|
|
301
303
|
for (const client of clients) {
|
|
302
|
-
const file = writeHttpEntryForClient(client, serverName, mcpUrl, token, baseDir, scope);
|
|
304
|
+
const file = writeHttpEntryForClient(client, serverName, mcpUrl, token, baseDir, scope, headers);
|
|
303
305
|
written.push({ client, file });
|
|
304
306
|
}
|
|
305
307
|
return written;
|
|
@@ -315,6 +317,7 @@ async function connectOne(rawUrl, parsed, deps) {
|
|
|
315
317
|
let token;
|
|
316
318
|
let mcpUrl;
|
|
317
319
|
let serverName;
|
|
320
|
+
let headers;
|
|
318
321
|
if (parsed.token) {
|
|
319
322
|
// No-browser fallback: skip the device flow entirely.
|
|
320
323
|
token = parsed.token;
|
|
@@ -330,8 +333,9 @@ async function connectOne(rawUrl, parsed, deps) {
|
|
|
330
333
|
token = grant.token;
|
|
331
334
|
mcpUrl = grant.mcpUrl;
|
|
332
335
|
serverName = parsed.name ?? grant.serverName ?? defaultServerName(baseUrl);
|
|
336
|
+
headers = grant.headers;
|
|
333
337
|
}
|
|
334
|
-
const written = writeConfigs(clients, serverName, mcpUrl, token, scope);
|
|
338
|
+
const written = writeConfigs(clients, serverName, mcpUrl, token, scope, undefined, headers);
|
|
335
339
|
logOut("");
|
|
336
340
|
logOut(` Connected "${serverName}" → ${mcpUrl}`);
|
|
337
341
|
for (const w of written) {
|
package/dist/cli/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,OAAO,EAEP,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,iBAAiB,GAAG,yCAAyC,CAAC;AACpE,MAAM,gBAAgB,GAAG,wCAAwC,CAAC;AAClE,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAE1C,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC;AACD,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC;AAqBD,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,GAAG,GAAsB;QAC7B,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,KAAK;KACX,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,IAAY,EAAsB,EAAE;YAC/C,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QACF,IAAI,CAAqB,CAAC;QAC1B,IAAI,CAAC,KAAK,OAAO;YAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;aAC7B,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;aACxD,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;aACtD,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;aACpD,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;aACtD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,qBAAqB,GAAG,8BAA8B;YACpD,oDAAoD,CACvD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,CAAC,QAAQ,4BAA4B,CACvE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,UAAU,GACd,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,OAAO;QAChB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,kDAAkD,MAAM,CAAC,QAAQ,KAAK;YACpE,0DAA0D,CAC7D,CAAC;IACJ,CAAC;IACD,qEAAqE;IACrE,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IACjD,IAAK,OAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAa,CAAC,CAAC;IAC9D,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChE,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,GAAG,kBAAkB,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG;QAAE,OAAO;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC3B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAC5B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,UAAU,CAAC;QACnB,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE;YACrC,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AA2CD,SAAS,SAAS,CAAC,EAAU;IAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,SAAuB,EACvB,GAAW,EACX,IAAa;IAEb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,IAAI,GAAQ,IAAI,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAS,EAAE,QAAgB;IAClD,MAAM,OAAO,GACX,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ;QAC/B,CAAC,CAAC,IAAI,CAAC,OAAO;QACd,CAAC,CAAC,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ;YAC/B,CAAC,CAAC,IAAI,CAAC,KAAK;YACZ,CAAC,CAAC,EAAE,CAAC;IACX,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,OAAe,EACf,SAAiB,EACjB,OAAoB,EAAE;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3C,IAAI,KAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CACrC,SAAS,EACT,GAAG,OAAO,GAAG,iBAAiB,EAAE,EAChC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CACpC,CAAC;QACF,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;YACxD,MAAM,CACJ,yCAAyC,OAAO,GAAG;gBACjD,SAAS,MAAM,4CAA4C;gBAC3D,6CAA6C,CAChD,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,GAAG,IAA2B,CAAC;IACtC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,CACJ,qBAAqB,OAAO,KAAK,GAAG,EAAE,OAAO,IAAI,GAAG,KAAK;YACvD,iCAAiC,CACpC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IAE1C,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,iBAAiB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,iBAAiB,KAAK,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,qDAAqD,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAEtC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACrC,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,IAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CACrC,SAAS,EACT,GAAG,OAAO,GAAG,gBAAgB,EAAE,EAC/B,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CACnC,CAAC;YACF,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBAClC,IAAI,KAAK;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC5C,MAAM,CACJ,kCAAkC,MAAM,KAAK;oBAC3C,eAAe,CAAC,IAAI,EAAE,2BAA2B,CAAC,CACrD,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAuB,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;YAC7D,IAAI,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,IAAI,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,OAAO,oBAAoB,CAAC;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,kBAAkB,IAAI,OAAO,EAAE,CAAC;YACzE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,oDAAoD,CAAC,CAAC;gBAC7D,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,CAAC,aAAa,CAAC,CAAC;YACtB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,uDAAuD,CAAC,CAAC;YAChE,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,IAAI,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,8DAA8D,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3D,IAAI,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,CACJ,6BAA6B,eAAe,CAC1C,IAAI,EACJ,IAAI,CAAC,MAAM,KAAK,WAAW;gBACzB,CAAC,CAAC,4BAA4B;gBAC9B,CAAC,CAAC,2BAA2B,CAChC,EAAE,CACJ,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAChE,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,CAAC,mEAAmE,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAmB,EACnB,UAAkB,EAClB,MAAc,EACd,KAAa,EACb,KAAa,EACb,UAAkB,cAAc,EAAE;IAElC,MAAM,OAAO,GAAyC,EAAE,CAAC;IACzD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,uBAAuB,CAClC,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,OAAO,EACP,KAAK,CACN,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,KAAK,UAAU,UAAU,CACvB,MAAc,EACd,MAAyB,EACzB,IAAiB;IAEjB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3D,IAAI,KAAa,CAAC;IAClB,IAAI,MAAc,CAAC;IACnB,IAAI,UAAkB,CAAC;IAEvB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,sDAAsD;QACtD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,oBAAoB,CAAC;QACxC,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CAAC,gCAAgC,OAAO,2BAA2B,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACjC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACpB,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACtB,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAExE,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,gBAAgB,UAAU,OAAO,MAAM,EAAE,CAAC,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,4DAA4D,CAAC,CAAC;IACrE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,8EAA8E;AAC9E,MAAM,UAAU,UAAU;IACxB,OAAO,gBAAgB,EAAE;SACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;SACpE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,OAAiB,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,MAAyB,EACzB,IAAiB;IAEjB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,8DAA8D,CAAC,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,gBAAgB,IAAI,CAAC,MAAM,2BAA2B,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAwD,EAAE,CAAC;IACxE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,EAAE,CAAC,CAAC;QACX,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBACxC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;aACvB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,WAAW,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;gEAgBmD,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAc,EACd,OAAoB,EAAE;IAEtB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,EAAE;gBAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,CAAC;YACb,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC","sourcesContent":["/**\n * `agent-native connect <url>` — wire your local Claude Code / Codex / Cowork\n * to a DEPLOYED agent-native app using a browser device-code flow. No token\n * copying: open the verification URL, approve in the browser, and the minted\n * HTTP MCP server entry is written into your client config(s) idempotently.\n *\n * agent-native connect <url> [--client all|claude-code|claude-code-cli|\n * codex|cowork] [--scope user|project]\n * [--name <serverName>]\n * agent-native connect <url> --token <token> (no-browser fallback)\n * agent-native connect --all [--client ...] (every first-party app)\n *\n * Server contract (implemented by another agent on `<url>`):\n * POST <url>/_agent-native/mcp/connect/device/start (no auth)\n * body { client?, app? }\n * → { device_code, user_code, verification_uri,\n * verification_uri_complete, interval, expires_in }\n * POST <url>/_agent-native/mcp/connect/device/poll (no auth)\n * body { device_code }\n * → { status: \"pending\" }\n * | { status: \"approved\", token, mcpUrl, serverName, mcpServerEntry }\n * | { status: \"expired\" }\n * | { status: \"consumed\" }\n * | { status: \"error\" | \"not_found\", message? }\n *\n * Node-only CLI module. No new npm deps (Node built-ins + global fetch only).\n */\n\nimport { spawn } from \"node:child_process\";\nimport path from \"node:path\";\n\nimport { findWorkspaceRoot } from \"../mcp/workspace-resolve.js\";\nimport {\n CLIENTS,\n ClientId,\n writeHttpEntryForClient,\n} from \"./mcp-config-writers.js\";\nimport { visibleTemplates } from \"./templates-meta.js\";\n\nconst DEVICE_START_PATH = \"/_agent-native/mcp/connect/device/start\";\nconst DEVICE_POLL_PATH = \"/_agent-native/mcp/connect/device/poll\";\nconst SERVER_NAME_PREFIX = \"agent-native\";\n\nfunction logOut(msg: string): void {\n process.stdout.write(`${msg}\\n`);\n}\nfunction logErr(msg: string): void {\n process.stderr.write(`${msg}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Arg parsing\n// ---------------------------------------------------------------------------\n\nexport interface ParsedConnectArgs {\n /** Positional URL (the deployed app origin). Undefined for `--all`. */\n url?: string;\n /** all | claude-code | claude-code-cli | codex | cowork (default \"all\"). */\n client: string;\n /** user | project (default \"user\"). */\n scope: string;\n /** Override the minted MCP server name. */\n name?: string;\n /** No-browser fallback: skip device flow, use this token directly. */\n token?: string;\n /** Connect every first-party hosted app. */\n all: boolean;\n}\n\nexport function parseConnectArgs(argv: string[]): ParsedConnectArgs {\n const out: ParsedConnectArgs = {\n client: \"all\",\n scope: \"user\",\n all: false,\n };\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n const eat = (flag: string): string | undefined => {\n if (a === flag) return argv[++i];\n if (a.startsWith(`${flag}=`)) return a.slice(flag.length + 1);\n return undefined;\n };\n let v: string | undefined;\n if (a === \"--all\") out.all = true;\n else if ((v = eat(\"--client\")) !== undefined) out.client = v;\n else if ((v = eat(\"--scope\")) !== undefined) out.scope = v;\n else if ((v = eat(\"--name\")) !== undefined) out.name = v;\n else if ((v = eat(\"--token\")) !== undefined) out.token = v;\n else if (!a.startsWith(\"-\") && !out.url) out.url = a;\n }\n return out;\n}\n\n/**\n * Normalize a user-supplied app URL: trim, require http/https, strip the\n * trailing slash. Throws a friendly Error otherwise.\n */\nexport function normalizeUrl(raw: string): string {\n const trimmed = (raw ?? \"\").trim();\n if (!trimmed) {\n throw new Error(\"Missing app URL. Usage: agent-native connect <url>\");\n }\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw new Error(\n `Not a valid URL: \"${raw}\". Pass a full origin, e.g. ` +\n `agent-native connect https://mail.agent-native.com`,\n );\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\n `Unsupported URL scheme \"${parsed.protocol}\". Use http:// or https://`,\n );\n }\n const host = parsed.hostname.toLowerCase();\n const isLoopback =\n host === \"localhost\" ||\n host === \"127.0.0.1\" ||\n host === \"::1\" ||\n host === \"[::1]\" ||\n host.startsWith(\"127.\");\n if (parsed.protocol === \"http:\" && !isLoopback) {\n throw new Error(\n `Refusing plaintext HTTP for non-loopback host \"${parsed.hostname}\". ` +\n `Use https:// so bearer tokens are not sent in cleartext.`,\n );\n }\n // origin + pathname, trailing slash stripped (origin keeps no path).\n const base = `${parsed.origin}${parsed.pathname}`.replace(/\\/+$/, \"\");\n return base;\n}\n\n/** Resolve the requested clients list. \"all\" → every supported client. */\nexport function resolveClients(client: string): ClientId[] {\n const c = (client ?? \"all\").toLowerCase();\n if (c === \"all\" || c === \"\") return [...CLIENTS];\n if ((CLIENTS as string[]).includes(c)) return [c as ClientId];\n throw new Error(\n `Unknown --client \"${client}\". Use: all, ${CLIENTS.join(\", \")}`,\n );\n}\n\n/** Derive an app slug from a deployed origin, e.g. mail.agent-native.com → mail. */\nfunction appSlugFromUrl(url: string): string {\n try {\n const host = new URL(url).hostname;\n const first = host.split(\".\")[0];\n return first && first !== \"www\" ? first : \"app\";\n } catch {\n return \"app\";\n }\n}\n\nfunction defaultServerName(url: string): string {\n return `${SERVER_NAME_PREFIX}-${appSlugFromUrl(url)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Browser open (mirrors workspace-dev.ts openBrowser)\n// ---------------------------------------------------------------------------\n\nfunction openInBrowser(url: string): void {\n if (process.env.AGENT_NATIVE_NO_OPEN === \"1\") return;\n try {\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const openArgs =\n process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawn(command, openArgs, {\n stdio: \"ignore\",\n detached: true,\n });\n child.unref();\n } catch {\n // Non-fatal: the user can open the URL manually (we already printed it).\n }\n}\n\n// ---------------------------------------------------------------------------\n// Device-code flow\n// ---------------------------------------------------------------------------\n\ninterface DeviceStartResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n interval?: number;\n expires_in?: number;\n}\n\ninterface DevicePollResponse {\n status:\n | \"pending\"\n | \"approved\"\n | \"expired\"\n | \"consumed\"\n | \"error\"\n | \"not_found\";\n token?: string;\n mcpUrl?: string;\n serverName?: string;\n mcpServerEntry?: Record<string, unknown>;\n message?: string;\n error?: string;\n}\n\n/** Injectable hooks so the poll state machine is unit-testable. */\nexport interface ConnectDeps {\n /** Defaults to global fetch. */\n fetchImpl?: typeof fetch;\n /** Sleep between polls (ms). Defaults to real setTimeout. */\n sleep?: (ms: number) => Promise<void>;\n /** Open the verification URL. Defaults to the platform browser opener. */\n openBrowser?: (url: string) => void;\n /** Override \"now\" for the expiry cap (ms epoch). Defaults to Date.now. */\n now?: () => number;\n}\n\nfunction realSleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function postJson(\n fetchImpl: typeof fetch,\n url: string,\n body: unknown,\n): Promise<{ status: number; json: any }> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 30_000);\n try {\n const response = await fetchImpl(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body ?? {}),\n signal: controller.signal,\n });\n let json: any = null;\n try {\n json = await response.json();\n } catch {\n json = null;\n }\n return { status: response.status, json };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction responseMessage(json: any, fallback: string): string {\n const message =\n typeof json?.message === \"string\"\n ? json.message\n : typeof json?.error === \"string\"\n ? json.error\n : \"\";\n return message.trim() || fallback;\n}\n\nconst SPINNER = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\n/**\n * Run the device-code flow against `baseUrl` and return the approved grant.\n * Resolves with `null` (and prints a clear message) on expired/consumed or\n * other terminal failure — the caller maps that to a non-zero exit.\n */\nexport async function runDeviceFlow(\n baseUrl: string,\n appSlug: string,\n clientArg: string,\n deps: ConnectDeps = {},\n): Promise<{ token: string; mcpUrl: string; serverName: string } | null> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const sleep = deps.sleep ?? realSleep;\n const open = deps.openBrowser ?? openInBrowser;\n const now = deps.now ?? (() => Date.now());\n\n let start: DeviceStartResponse;\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_START_PATH}`,\n { client: clientArg, app: appSlug },\n );\n if (status < 200 || status >= 300 || !json?.device_code) {\n logErr(\n ` Could not start the connect flow on ${baseUrl} ` +\n `(HTTP ${status}). Is this an agent-native app, and is it ` +\n `deployed with the connect endpoint enabled?`,\n );\n return null;\n }\n start = json as DeviceStartResponse;\n } catch (err: any) {\n logErr(\n ` Could not reach ${baseUrl} (${err?.message ?? err}). ` +\n `Check the URL and your network.`,\n );\n return null;\n }\n\n const interval = Math.max(1, Number(start.interval) || 5);\n const expiresIn = Math.max(interval, Number(start.expires_in) || 600);\n const deadline = now() + expiresIn * 1000;\n\n logOut(\"\");\n logOut(` Connecting to ${baseUrl}`);\n logOut(\"\");\n logOut(` Your code: ${start.user_code}`);\n logOut(` Open: ${start.verification_uri_complete}`);\n logOut(\"\");\n logOut(\" Approve in the browser to finish. Opening it now…\");\n open(start.verification_uri_complete);\n\n let spin = 0;\n const isTTY = !!process.stdout.isTTY;\n while (now() < deadline) {\n let poll: DevicePollResponse;\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_POLL_PATH}`,\n { device_code: start.device_code },\n );\n if (status < 200 || status >= 300) {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n ` Connect polling failed (HTTP ${status}): ` +\n responseMessage(json, \"server returned an error.\"),\n );\n return null;\n }\n poll = (json ?? { status: \"pending\" }) as DevicePollResponse;\n } catch {\n // Transient network error — keep polling until the deadline.\n poll = { status: \"pending\" };\n }\n\n if (poll.status === \"approved\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n const token = poll.token ?? \"\";\n const mcpUrl = poll.mcpUrl ?? `${baseUrl}/_agent-native/mcp`;\n const serverName = poll.serverName ?? `${SERVER_NAME_PREFIX}-${appSlug}`;\n if (!token) {\n logErr(\" Server approved but returned no token. Aborting.\");\n return null;\n }\n logOut(\" Approved.\");\n return { token, mcpUrl, serverName };\n }\n if (poll.status === \"expired\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" The connect request expired before it was approved.\");\n logErr(\" Run the command again to retry.\");\n return null;\n }\n if (poll.status === \"consumed\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" This connect code was already used. Run the command again.\");\n return null;\n }\n if (poll.status === \"error\" || poll.status === \"not_found\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n ` Connect polling failed: ${responseMessage(\n poll,\n poll.status === \"not_found\"\n ? \"device code was not found.\"\n : \"server returned an error.\",\n )}`,\n );\n return null;\n }\n\n if (isTTY) {\n process.stdout.write(\n `\\r ${SPINNER[spin++ % SPINNER.length]} Waiting for approval…`,\n );\n }\n await sleep(interval * 1000);\n }\n\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" Timed out waiting for approval. Run the command again to retry.\");\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Writing config(s)\n// ---------------------------------------------------------------------------\n\nfunction projectBaseDir(): string {\n const cwd = process.cwd();\n return findWorkspaceRoot(cwd) ?? path.resolve(cwd);\n}\n\n/**\n * Write the HTTP MCP entry into every requested client config idempotently.\n * Returns the list of files written so the caller can print them.\n */\nexport function writeConfigs(\n clients: ClientId[],\n serverName: string,\n mcpUrl: string,\n token: string,\n scope: string,\n baseDir: string = projectBaseDir(),\n): { client: ClientId; file: string }[] {\n const written: { client: ClientId; file: string }[] = [];\n for (const client of clients) {\n const file = writeHttpEntryForClient(\n client,\n serverName,\n mcpUrl,\n token,\n baseDir,\n scope,\n );\n written.push({ client, file });\n }\n return written;\n}\n\n// ---------------------------------------------------------------------------\n// Single-app connect\n// ---------------------------------------------------------------------------\n\nasync function connectOne(\n rawUrl: string,\n parsed: ParsedConnectArgs,\n deps: ConnectDeps,\n): Promise<{ ok: boolean; serverName?: string; files?: string[] }> {\n const baseUrl = normalizeUrl(rawUrl);\n const appSlug = appSlugFromUrl(baseUrl);\n const clients = resolveClients(parsed.client);\n const scope = parsed.scope === \"user\" ? \"user\" : \"project\";\n\n let token: string;\n let mcpUrl: string;\n let serverName: string;\n\n if (parsed.token) {\n // No-browser fallback: skip the device flow entirely.\n token = parsed.token;\n mcpUrl = `${baseUrl}/_agent-native/mcp`;\n serverName = parsed.name ?? defaultServerName(baseUrl);\n logOut(\"\");\n logOut(` Using supplied --token for ${baseUrl} (skipping browser flow).`);\n } else {\n const grant = await runDeviceFlow(baseUrl, appSlug, parsed.client, deps);\n if (!grant) return { ok: false };\n token = grant.token;\n mcpUrl = grant.mcpUrl;\n serverName = parsed.name ?? grant.serverName ?? defaultServerName(baseUrl);\n }\n\n const written = writeConfigs(clients, serverName, mcpUrl, token, scope);\n\n logOut(\"\");\n logOut(` Connected \"${serverName}\" → ${mcpUrl}`);\n for (const w of written) {\n logOut(` ${w.client.padEnd(18)} ${w.file}`);\n }\n logOut(\"\");\n logOut(\" Restart your coding agent to pick up the new MCP server.\");\n return { ok: true, serverName, files: written.map((w) => w.file) };\n}\n\n// ---------------------------------------------------------------------------\n// --all : connect every first-party hosted app\n// ---------------------------------------------------------------------------\n\n/** Hosted first-party apps: visible (non-hidden) templates with a prodUrl. */\nexport function hostedApps(): { name: string; url: string }[] {\n return visibleTemplates()\n .filter((t) => typeof t.prodUrl === \"string\" && t.prodUrl.length > 0)\n .map((t) => ({ name: t.name, url: t.prodUrl as string }));\n}\n\nasync function connectAll(\n parsed: ParsedConnectArgs,\n deps: ConnectDeps,\n): Promise<boolean> {\n const apps = hostedApps();\n if (apps.length === 0) {\n logErr(\" No hosted first-party apps found in the template registry.\");\n return false;\n }\n logOut(\"\");\n logOut(` Connecting ${apps.length} first-party hosted apps…`);\n\n const results: { name: string; status: string; files: string[] }[] = [];\n for (const app of apps) {\n logOut(\"\");\n logOut(` ── ${app.name} (${app.url}) ──`);\n try {\n const res = await connectOne(app.url, parsed, deps);\n results.push({\n name: app.name,\n status: res.ok ? \"connected\" : \"skipped\",\n files: res.files ?? [],\n });\n } catch (err: any) {\n logErr(` ${app.name}: ${err?.message ?? err}`);\n results.push({ name: app.name, status: \"error\", files: [] });\n }\n }\n\n logOut(\"\");\n logOut(\" Summary\");\n for (const r of results) {\n const files = r.files.length ? r.files.join(\", \") : \"—\";\n logOut(` ${r.name.padEnd(14)} ${r.status.padEnd(10)} ${files}`);\n }\n return results.every((r) => r.status === \"connected\");\n}\n\n// ---------------------------------------------------------------------------\n// Entry point\n// ---------------------------------------------------------------------------\n\nconst HELP = `agent-native connect — wire your coding agent to a deployed app\n\nUsage:\n agent-native connect <url> [--client <c>] [--scope user|project] [--name <n>]\n Browser device-code flow. Prints a code, opens the verification URL,\n polls until approved, then writes the HTTP MCP entry into your\n client config(s). Idempotent — re-running replaces the same entry.\n\n agent-native connect <url> --token <token>\n No-browser fallback. Skip the device flow and write the entry with\n the supplied token (get it from the app's Connect page).\n\n agent-native connect --all [--client <c>] [--scope user|project]\n Connect every first-party hosted app at once.\n\nClients: all (default), claude-code, claude-code-cli, codex, cowork\nScope: project (default, .mcp.json) or user (~/.claude.json)`;\n\n/**\n * `agent-native connect` entry point. `deps` is injectable for tests; the\n * dispatcher in index.ts calls it with just `args`.\n *\n * Sets `process.exitCode = 1` on failure (so the process exits non-zero\n * once the event loop drains) rather than calling `process.exit`, keeping\n * the function testable — same pattern as `audit-agent-web`.\n */\nexport async function runConnect(\n args: string[],\n deps: ConnectDeps = {},\n): Promise<void> {\n if (args[0] === \"--help\" || args[0] === \"-h\" || args[0] === \"help\") {\n logOut(HELP);\n return;\n }\n\n const parsed = parseConnectArgs(args);\n\n try {\n if (parsed.all) {\n const ok = await connectAll(parsed, deps);\n if (!ok) process.exitCode = 1;\n return;\n }\n\n if (!parsed.url) {\n logErr(\" Missing app URL.\");\n logErr(\"\");\n logOut(HELP);\n process.exitCode = 1;\n return;\n }\n\n const res = await connectOne(parsed.url, parsed, deps);\n if (!res.ok) process.exitCode = 1;\n } catch (err: any) {\n logErr(` ${err?.message ?? err}`);\n process.exitCode = 1;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `agent-native connect <url>` — wire your local Claude Code / Codex / Cowork\n * to a DEPLOYED agent-native app using a browser device-code flow. No token\n * copying: open the verification URL, approve in the browser, and the minted\n * HTTP MCP server entry is written into your client config(s) idempotently.\n *\n * agent-native connect <url> [--client all|claude-code|claude-code-cli|\n * codex|cowork] [--scope user|project]\n * [--name <serverName>]\n * agent-native connect <url> --token <token> (no-browser fallback)\n * agent-native connect --all [--client ...] (every first-party app)\n *\n * Server contract (implemented by another agent on `<url>`):\n * POST <url>/_agent-native/mcp/connect/device/start (no auth)\n * body { client?, app? }\n * → { device_code, user_code, verification_uri,\n * verification_uri_complete, interval, expires_in }\n * POST <url>/_agent-native/mcp/connect/device/poll (no auth)\n * body { device_code }\n * → { status: \"pending\" }\n * | { status: \"approved\", token, mcpUrl, serverName, mcpServerEntry }\n * | { status: \"expired\" }\n * | { status: \"consumed\" }\n * | { status: \"error\" | \"not_found\", message? }\n *\n * Node-only CLI module. No new npm deps (Node built-ins + global fetch only).\n */\n\nimport { spawn } from \"node:child_process\";\nimport path from \"node:path\";\n\nimport { findWorkspaceRoot } from \"../mcp/workspace-resolve.js\";\nimport {\n CLIENTS,\n ClientId,\n writeHttpEntryForClient,\n} from \"./mcp-config-writers.js\";\nimport { visibleTemplates } from \"./templates-meta.js\";\n\nconst DEVICE_START_PATH = \"/_agent-native/mcp/connect/device/start\";\nconst DEVICE_POLL_PATH = \"/_agent-native/mcp/connect/device/poll\";\nconst SERVER_NAME_PREFIX = \"agent-native\";\n\nfunction logOut(msg: string): void {\n process.stdout.write(`${msg}\\n`);\n}\nfunction logErr(msg: string): void {\n process.stderr.write(`${msg}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Arg parsing\n// ---------------------------------------------------------------------------\n\nexport interface ParsedConnectArgs {\n /** Positional URL (the deployed app origin). Undefined for `--all`. */\n url?: string;\n /** all | claude-code | claude-code-cli | codex | cowork (default \"all\"). */\n client: string;\n /** user | project (default \"user\"). */\n scope: string;\n /** Override the minted MCP server name. */\n name?: string;\n /** No-browser fallback: skip device flow, use this token directly. */\n token?: string;\n /** Connect every first-party hosted app. */\n all: boolean;\n}\n\nexport function parseConnectArgs(argv: string[]): ParsedConnectArgs {\n const out: ParsedConnectArgs = {\n client: \"all\",\n scope: \"user\",\n all: false,\n };\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n const eat = (flag: string): string | undefined => {\n if (a === flag) return argv[++i];\n if (a.startsWith(`${flag}=`)) return a.slice(flag.length + 1);\n return undefined;\n };\n let v: string | undefined;\n if (a === \"--all\") out.all = true;\n else if ((v = eat(\"--client\")) !== undefined) out.client = v;\n else if ((v = eat(\"--scope\")) !== undefined) out.scope = v;\n else if ((v = eat(\"--name\")) !== undefined) out.name = v;\n else if ((v = eat(\"--token\")) !== undefined) out.token = v;\n else if (!a.startsWith(\"-\") && !out.url) out.url = a;\n }\n return out;\n}\n\n/**\n * Normalize a user-supplied app URL: trim, require http/https, strip the\n * trailing slash. Throws a friendly Error otherwise.\n */\nexport function normalizeUrl(raw: string): string {\n const trimmed = (raw ?? \"\").trim();\n if (!trimmed) {\n throw new Error(\"Missing app URL. Usage: agent-native connect <url>\");\n }\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw new Error(\n `Not a valid URL: \"${raw}\". Pass a full origin, e.g. ` +\n `agent-native connect https://mail.agent-native.com`,\n );\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\n `Unsupported URL scheme \"${parsed.protocol}\". Use http:// or https://`,\n );\n }\n const host = parsed.hostname.toLowerCase();\n const isLoopback =\n host === \"localhost\" ||\n host === \"127.0.0.1\" ||\n host === \"::1\" ||\n host === \"[::1]\" ||\n host.startsWith(\"127.\");\n if (parsed.protocol === \"http:\" && !isLoopback) {\n throw new Error(\n `Refusing plaintext HTTP for non-loopback host \"${parsed.hostname}\". ` +\n `Use https:// so bearer tokens are not sent in cleartext.`,\n );\n }\n // origin + pathname, trailing slash stripped (origin keeps no path).\n const base = `${parsed.origin}${parsed.pathname}`.replace(/\\/+$/, \"\");\n return base;\n}\n\n/** Resolve the requested clients list. \"all\" → every supported client. */\nexport function resolveClients(client: string): ClientId[] {\n const c = (client ?? \"all\").toLowerCase();\n if (c === \"all\" || c === \"\") return [...CLIENTS];\n if ((CLIENTS as string[]).includes(c)) return [c as ClientId];\n throw new Error(\n `Unknown --client \"${client}\". Use: all, ${CLIENTS.join(\", \")}`,\n );\n}\n\n/** Derive an app slug from a deployed origin, e.g. mail.agent-native.com → mail. */\nfunction appSlugFromUrl(url: string): string {\n try {\n const host = new URL(url).hostname;\n const first = host.split(\".\")[0];\n return first && first !== \"www\" ? first : \"app\";\n } catch {\n return \"app\";\n }\n}\n\nfunction defaultServerName(url: string): string {\n return `${SERVER_NAME_PREFIX}-${appSlugFromUrl(url)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Browser open (mirrors workspace-dev.ts openBrowser)\n// ---------------------------------------------------------------------------\n\nfunction openInBrowser(url: string): void {\n if (process.env.AGENT_NATIVE_NO_OPEN === \"1\") return;\n try {\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const openArgs =\n process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawn(command, openArgs, {\n stdio: \"ignore\",\n detached: true,\n });\n child.unref();\n } catch {\n // Non-fatal: the user can open the URL manually (we already printed it).\n }\n}\n\n// ---------------------------------------------------------------------------\n// Device-code flow\n// ---------------------------------------------------------------------------\n\ninterface DeviceStartResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n interval?: number;\n expires_in?: number;\n}\n\ninterface DevicePollResponse {\n status:\n | \"pending\"\n | \"approved\"\n | \"expired\"\n | \"consumed\"\n | \"error\"\n | \"not_found\";\n token?: string;\n mcpUrl?: string;\n serverName?: string;\n mcpServerEntry?: Record<string, unknown>;\n message?: string;\n error?: string;\n}\n\n/** Injectable hooks so the poll state machine is unit-testable. */\nexport interface ConnectDeps {\n /** Defaults to global fetch. */\n fetchImpl?: typeof fetch;\n /** Sleep between polls (ms). Defaults to real setTimeout. */\n sleep?: (ms: number) => Promise<void>;\n /** Open the verification URL. Defaults to the platform browser opener. */\n openBrowser?: (url: string) => void;\n /** Override \"now\" for the expiry cap (ms epoch). Defaults to Date.now. */\n now?: () => number;\n}\n\nfunction realSleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function postJson(\n fetchImpl: typeof fetch,\n url: string,\n body: unknown,\n): Promise<{ status: number; json: any }> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 30_000);\n try {\n const response = await fetchImpl(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body ?? {}),\n signal: controller.signal,\n });\n let json: any = null;\n try {\n json = await response.json();\n } catch {\n json = null;\n }\n return { status: response.status, json };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction responseMessage(json: any, fallback: string): string {\n const message =\n typeof json?.message === \"string\"\n ? json.message\n : typeof json?.error === \"string\"\n ? json.error\n : \"\";\n return message.trim() || fallback;\n}\n\nconst SPINNER = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\n/**\n * Run the device-code flow against `baseUrl` and return the approved grant.\n * Resolves with `null` (and prints a clear message) on expired/consumed or\n * other terminal failure — the caller maps that to a non-zero exit.\n */\nexport async function runDeviceFlow(\n baseUrl: string,\n appSlug: string,\n clientArg: string,\n deps: ConnectDeps = {},\n): Promise<{\n token?: string;\n mcpUrl: string;\n serverName: string;\n headers?: Record<string, string>;\n} | null> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const sleep = deps.sleep ?? realSleep;\n const open = deps.openBrowser ?? openInBrowser;\n const now = deps.now ?? (() => Date.now());\n\n let start: DeviceStartResponse;\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_START_PATH}`,\n { client: clientArg, app: appSlug },\n );\n if (status < 200 || status >= 300 || !json?.device_code) {\n logErr(\n ` Could not start the connect flow on ${baseUrl} ` +\n `(HTTP ${status}). Is this an agent-native app, and is it ` +\n `deployed with the connect endpoint enabled?`,\n );\n return null;\n }\n start = json as DeviceStartResponse;\n } catch (err: any) {\n logErr(\n ` Could not reach ${baseUrl} (${err?.message ?? err}). ` +\n `Check the URL and your network.`,\n );\n return null;\n }\n\n const interval = Math.max(1, Number(start.interval) || 5);\n const expiresIn = Math.max(interval, Number(start.expires_in) || 600);\n const deadline = now() + expiresIn * 1000;\n\n logOut(\"\");\n logOut(` Connecting to ${baseUrl}`);\n logOut(\"\");\n logOut(` Your code: ${start.user_code}`);\n logOut(` Open: ${start.verification_uri_complete}`);\n logOut(\"\");\n logOut(\" Approve in the browser to finish. Opening it now…\");\n open(start.verification_uri_complete);\n\n let spin = 0;\n const isTTY = !!process.stdout.isTTY;\n while (now() < deadline) {\n let poll: DevicePollResponse;\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_POLL_PATH}`,\n { device_code: start.device_code },\n );\n if (status < 200 || status >= 300) {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n ` Connect polling failed (HTTP ${status}): ` +\n responseMessage(json, \"server returned an error.\"),\n );\n return null;\n }\n poll = (json ?? { status: \"pending\" }) as DevicePollResponse;\n } catch {\n // Transient network error — keep polling until the deadline.\n poll = { status: \"pending\" };\n }\n\n if (poll.status === \"approved\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n const token = poll.token ?? \"\";\n const mcpUrl = poll.mcpUrl ?? `${baseUrl}/_agent-native/mcp`;\n const serverName = poll.serverName ?? `${SERVER_NAME_PREFIX}-${appSlug}`;\n const headers =\n poll.mcpServerEntry &&\n typeof poll.mcpServerEntry === \"object\" &&\n poll.mcpServerEntry.headers &&\n typeof poll.mcpServerEntry.headers === \"object\"\n ? (poll.mcpServerEntry.headers as Record<string, string>)\n : undefined;\n logOut(\" Approved.\");\n return { token: token || undefined, mcpUrl, serverName, headers };\n }\n if (poll.status === \"expired\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" The connect request expired before it was approved.\");\n logErr(\" Run the command again to retry.\");\n return null;\n }\n if (poll.status === \"consumed\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" This connect code was already used. Run the command again.\");\n return null;\n }\n if (poll.status === \"error\" || poll.status === \"not_found\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n ` Connect polling failed: ${responseMessage(\n poll,\n poll.status === \"not_found\"\n ? \"device code was not found.\"\n : \"server returned an error.\",\n )}`,\n );\n return null;\n }\n\n if (isTTY) {\n process.stdout.write(\n `\\r ${SPINNER[spin++ % SPINNER.length]} Waiting for approval…`,\n );\n }\n await sleep(interval * 1000);\n }\n\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" Timed out waiting for approval. Run the command again to retry.\");\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Writing config(s)\n// ---------------------------------------------------------------------------\n\nfunction projectBaseDir(): string {\n const cwd = process.cwd();\n return findWorkspaceRoot(cwd) ?? path.resolve(cwd);\n}\n\n/**\n * Write the HTTP MCP entry into every requested client config idempotently.\n * Returns the list of files written so the caller can print them.\n */\nexport function writeConfigs(\n clients: ClientId[],\n serverName: string,\n mcpUrl: string,\n token: string | undefined,\n scope: string,\n baseDir: string = projectBaseDir(),\n headers?: Record<string, string>,\n): { client: ClientId; file: string }[] {\n const written: { client: ClientId; file: string }[] = [];\n for (const client of clients) {\n const file = writeHttpEntryForClient(\n client,\n serverName,\n mcpUrl,\n token,\n baseDir,\n scope,\n headers,\n );\n written.push({ client, file });\n }\n return written;\n}\n\n// ---------------------------------------------------------------------------\n// Single-app connect\n// ---------------------------------------------------------------------------\n\nasync function connectOne(\n rawUrl: string,\n parsed: ParsedConnectArgs,\n deps: ConnectDeps,\n): Promise<{ ok: boolean; serverName?: string; files?: string[] }> {\n const baseUrl = normalizeUrl(rawUrl);\n const appSlug = appSlugFromUrl(baseUrl);\n const clients = resolveClients(parsed.client);\n const scope = parsed.scope === \"user\" ? \"user\" : \"project\";\n\n let token: string | undefined;\n let mcpUrl: string;\n let serverName: string;\n let headers: Record<string, string> | undefined;\n\n if (parsed.token) {\n // No-browser fallback: skip the device flow entirely.\n token = parsed.token;\n mcpUrl = `${baseUrl}/_agent-native/mcp`;\n serverName = parsed.name ?? defaultServerName(baseUrl);\n logOut(\"\");\n logOut(` Using supplied --token for ${baseUrl} (skipping browser flow).`);\n } else {\n const grant = await runDeviceFlow(baseUrl, appSlug, parsed.client, deps);\n if (!grant) return { ok: false };\n token = grant.token;\n mcpUrl = grant.mcpUrl;\n serverName = parsed.name ?? grant.serverName ?? defaultServerName(baseUrl);\n headers = grant.headers;\n }\n\n const written = writeConfigs(\n clients,\n serverName,\n mcpUrl,\n token,\n scope,\n undefined,\n headers,\n );\n\n logOut(\"\");\n logOut(` Connected \"${serverName}\" → ${mcpUrl}`);\n for (const w of written) {\n logOut(` ${w.client.padEnd(18)} ${w.file}`);\n }\n logOut(\"\");\n logOut(\" Restart your coding agent to pick up the new MCP server.\");\n return { ok: true, serverName, files: written.map((w) => w.file) };\n}\n\n// ---------------------------------------------------------------------------\n// --all : connect every first-party hosted app\n// ---------------------------------------------------------------------------\n\n/** Hosted first-party apps: visible (non-hidden) templates with a prodUrl. */\nexport function hostedApps(): { name: string; url: string }[] {\n return visibleTemplates()\n .filter((t) => typeof t.prodUrl === \"string\" && t.prodUrl.length > 0)\n .map((t) => ({ name: t.name, url: t.prodUrl as string }));\n}\n\nasync function connectAll(\n parsed: ParsedConnectArgs,\n deps: ConnectDeps,\n): Promise<boolean> {\n const apps = hostedApps();\n if (apps.length === 0) {\n logErr(\" No hosted first-party apps found in the template registry.\");\n return false;\n }\n logOut(\"\");\n logOut(` Connecting ${apps.length} first-party hosted apps…`);\n\n const results: { name: string; status: string; files: string[] }[] = [];\n for (const app of apps) {\n logOut(\"\");\n logOut(` ── ${app.name} (${app.url}) ──`);\n try {\n const res = await connectOne(app.url, parsed, deps);\n results.push({\n name: app.name,\n status: res.ok ? \"connected\" : \"skipped\",\n files: res.files ?? [],\n });\n } catch (err: any) {\n logErr(` ${app.name}: ${err?.message ?? err}`);\n results.push({ name: app.name, status: \"error\", files: [] });\n }\n }\n\n logOut(\"\");\n logOut(\" Summary\");\n for (const r of results) {\n const files = r.files.length ? r.files.join(\", \") : \"—\";\n logOut(` ${r.name.padEnd(14)} ${r.status.padEnd(10)} ${files}`);\n }\n return results.every((r) => r.status === \"connected\");\n}\n\n// ---------------------------------------------------------------------------\n// Entry point\n// ---------------------------------------------------------------------------\n\nconst HELP = `agent-native connect — wire your coding agent to a deployed app\n\nUsage:\n agent-native connect <url> [--client <c>] [--scope user|project] [--name <n>]\n Browser device-code flow. Prints a code, opens the verification URL,\n polls until approved, then writes the HTTP MCP entry into your\n client config(s). Idempotent — re-running replaces the same entry.\n\n agent-native connect <url> --token <token>\n No-browser fallback. Skip the device flow and write the entry with\n the supplied token (get it from the app's Connect page).\n\n agent-native connect --all [--client <c>] [--scope user|project]\n Connect every first-party hosted app at once.\n\nClients: all (default), claude-code, claude-code-cli, codex, cowork\nScope: project (default, .mcp.json) or user (~/.claude.json)`;\n\n/**\n * `agent-native connect` entry point. `deps` is injectable for tests; the\n * dispatcher in index.ts calls it with just `args`.\n *\n * Sets `process.exitCode = 1` on failure (so the process exits non-zero\n * once the event loop drains) rather than calling `process.exit`, keeping\n * the function testable — same pattern as `audit-agent-web`.\n */\nexport async function runConnect(\n args: string[],\n deps: ConnectDeps = {},\n): Promise<void> {\n if (args[0] === \"--help\" || args[0] === \"-h\" || args[0] === \"help\") {\n logOut(HELP);\n return;\n }\n\n const parsed = parseConnectArgs(args);\n\n try {\n if (parsed.all) {\n const ok = await connectAll(parsed, deps);\n if (!ok) process.exitCode = 1;\n return;\n }\n\n if (!parsed.url) {\n logErr(\" Missing app URL.\");\n logErr(\"\");\n logOut(HELP);\n process.exitCode = 1;\n return;\n }\n\n const res = await connectOne(parsed.url, parsed, deps);\n if (!res.ok) process.exitCode = 1;\n } catch (err: any) {\n logErr(` ${err?.message ?? err}`);\n process.exitCode = 1;\n }\n}\n"]}
|
|
@@ -27,7 +27,7 @@ export interface HttpMcpEntry {
|
|
|
27
27
|
headers?: Record<string, string>;
|
|
28
28
|
}
|
|
29
29
|
/** Build the HTTP MCP server entry for a deployed agent-native app. */
|
|
30
|
-
export declare function buildHttpMcpEntry(mcpUrl: string, token?: string): HttpMcpEntry;
|
|
30
|
+
export declare function buildHttpMcpEntry(mcpUrl: string, token?: string, headers?: Record<string, string>): HttpMcpEntry;
|
|
31
31
|
/**
|
|
32
32
|
* Cowork consumes MCP exactly like Claude Code (same JSON server-entry
|
|
33
33
|
* shape). Resolved lazily so `os.homedir()` reflects the current `$HOME`.
|
|
@@ -52,7 +52,7 @@ export declare function configPathFor(client: ClientId, baseDir: string, scope:
|
|
|
52
52
|
export declare function writeJsonMcpEntry(file: string, name: string, entry: Record<string, unknown> | null): void;
|
|
53
53
|
export declare function hasJsonMcpEntry(file: string, name: string): boolean;
|
|
54
54
|
/** Build a `[mcp_servers.<name>]` block for an HTTP-type MCP server. */
|
|
55
|
-
export declare function buildCodexHttpBlock(name: string, mcpUrl: string, token?: string): string;
|
|
55
|
+
export declare function buildCodexHttpBlock(name: string, mcpUrl: string, token?: string, headers?: Record<string, string>): string;
|
|
56
56
|
/**
|
|
57
57
|
* Replace (or append) the `[mcp_servers.<name>]` block in a TOML file
|
|
58
58
|
* without disturbing other content. A block is the header line plus every
|
|
@@ -67,5 +67,5 @@ export declare function codexHasBlock(file: string, name: string): boolean;
|
|
|
67
67
|
* given client's config file and return the file path that was written.
|
|
68
68
|
* Re-running replaces the same named entry — never duplicates.
|
|
69
69
|
*/
|
|
70
|
-
export declare function writeHttpEntryForClient(client: ClientId, serverName: string, mcpUrl: string, token: string | undefined, baseDir: string, scope: string | undefined): string;
|
|
70
|
+
export declare function writeHttpEntryForClient(client: ClientId, serverName: string, mcpUrl: string, token: string | undefined, baseDir: string, scope: string | undefined, headers?: Record<string, string>): string;
|
|
71
71
|
//# sourceMappingURL=mcp-config-writers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config-writers.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-config-writers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9E,eAAO,MAAM,OAAO,EAAE,QAAQ,EAK7B,CAAC;AAEF,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-config-writers.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-config-writers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9E,eAAO,MAAM,OAAO,EAAE,QAAQ,EAK7B,CAAC;AAEF,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,YAAY,CAUd;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAYR;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACpC,IAAI,CAYN;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnE;AAkBD,wEAAwE;AACxE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAgBR;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,IAAI,CA2CN;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjE;AAMD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAmBR"}
|