@theia/ai-chat-ui 1.75.0-next.46 → 1.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/ai-chat-ui-frontend-module.d.ts +1 -0
- package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.js +1 -0
- package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
- package/lib/browser/chat-response-renderer/index.d.ts +1 -0
- package/lib/browser/chat-response-renderer/index.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/index.js +1 -0
- package/lib/browser/chat-response-renderer/index.js.map +1 -1
- package/lib/browser/chat-response-renderer/mcp-app-frame.d.ts +12 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.js +78 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.js.map +1 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.spec.d.ts +2 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.spec.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.spec.js +79 -0
- package/lib/browser/chat-response-renderer/mcp-app-frame.spec.js.map +1 -0
- package/lib/browser/chat-response-renderer/toolcall-result.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-result.js +4 -0
- package/lib/browser/chat-response-renderer/toolcall-result.js.map +1 -1
- package/package.json +12 -12
- package/src/browser/ai-chat-ui-frontend-module.ts +1 -0
- package/src/browser/chat-response-renderer/index.ts +1 -0
- package/src/browser/chat-response-renderer/mcp-app-frame.spec.ts +87 -0
- package/src/browser/chat-response-renderer/mcp-app-frame.tsx +95 -0
- package/src/browser/chat-response-renderer/toolcall-result.tsx +6 -0
- package/src/browser/style/mcp-app-frame.css +34 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import '../../src/browser/style/index.css';
|
|
2
2
|
import '../../src/browser/style/tool-call-rendering.css';
|
|
3
3
|
import '../../src/browser/style/mermaid-rendering.css';
|
|
4
|
+
import '../../src/browser/style/mcp-app-frame.css';
|
|
4
5
|
import { ContainerModule } from '@theia/core/shared/inversify';
|
|
5
6
|
declare const _default: ContainerModule;
|
|
6
7
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-chat-ui-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,mCAAmC,CAAC;AAC3C,OAAO,iDAAiD,CAAC;AACzD,OAAO,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-chat-ui-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,mCAAmC,CAAC;AAC3C,OAAO,iDAAiD,CAAC;AACzD,OAAO,+CAA+C,CAAC;AACvD,OAAO,2CAA2C,CAAC;AAInD,OAAO,EAAE,eAAe,EAAc,MAAM,8BAA8B,CAAC;;AA2D3E,wBA2JG"}
|
|
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
require("../../src/browser/style/index.css");
|
|
19
19
|
require("../../src/browser/style/tool-call-rendering.css");
|
|
20
20
|
require("../../src/browser/style/mermaid-rendering.css");
|
|
21
|
+
require("../../src/browser/style/mcp-app-frame.css");
|
|
21
22
|
const core_1 = require("@theia/core");
|
|
22
23
|
const browser_1 = require("@theia/core/lib/browser");
|
|
23
24
|
const tab_bar_toolbar_1 = require("@theia/core/lib/browser/shell/tab-bar-toolbar");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-chat-ui-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-chat-ui-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,6CAA2C;AAC3C,2DAAyD;AACzD,yDAAuD;AACvD,qDAAmD;AACnD,sCAAkG;AAClG,qDAAuI;AACvI,mFAA0F;AAC1F,4DAA2E;AAC3E,6EAAmF;AACnF,uEAA+D;AAC/D,2DAAkF;AAClF,mGAAsI;AACtI,+EAAyE;AACzE,qEAkBkC;AAClC,0FAAqF;AACrF,0FAIwD;AACxD,4FAAuF;AACvF,gIAA0H;AAC1H,qDAAwF;AACxF,kFAA4E;AAC5E,qEAAoE;AACpE,uFAAiF;AACjF,mEAAkE;AAClE,yDAAoD;AACpD,iEAA4D;AAC5D,6DAAwD;AACxD,mGAA4F;AAC5F,uEAAkE;AAClE,8FAAiH;AACjH,4FAAsF;AACtF,8FAAgK;AAChK,sEAAuF;AACvF,6DAA+D;AAC/D,uFAAiF;AACjF,iFAA2E;AAC3E,mFAA6E;AAC7E,yEAAmE;AACnE,uEAAkE;AAClE,2EAAmG;AACnG,iGAA2F;AAC3F,iFAA6I;AAC7I,2GAAqG;AACrG,qGAA+F;AAE/F,kBAAe,IAAI,2BAAe,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IACnE,IAAA,+CAAuB,EAAC,IAAI,CAAC,CAAC;IAE9B,IAAA,8BAAoB,EAAC,IAAI,EAAE,4CAAkB,CAAC,CAAC;IAC/C,IAAI,CAAC,yCAA+B,CAAC,CAAC,SAAS,CAAC,4CAAkB,CAAC,CAAC;IACpE,IAAI,CAAC,2CAAyB,CAAC,CAAC,SAAS,CAAC,4CAAkB,CAAC,CAAC;IAE9D,IAAI,CAAC,4CAAuB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC1D,IAAI,CAAC,8DAA4B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC/D,IAAI,CAAC,0BAAmB,CAAC,CAAC,SAAS,CAAC,8DAA4B,CAAC,CAAC;IAClE,IAAI,CAAC,gCAAsB,CAAC,CAAC,SAAS,CAAC,8DAA4B,CAAC,CAAC;IAErE,IAAI,CAAC,gDAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAExD,IAAI,CAAC,wDAAyB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC5D,IAAI,CAAC,0BAAmB,CAAC,CAAC,SAAS,CAAC,wDAAyB,CAAC,CAAC;IAC/D,IAAI,CAAC,gCAAsB,CAAC,CAAC,SAAS,CAAC,wDAAyB,CAAC,CAAC;IAElE,IAAI,CAAC,0DAA0B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC7D,IAAI,CAAC,0BAAmB,CAAC,CAAC,SAAS,CAAC,0DAA0B,CAAC,CAAC;IAChE,IAAI,CAAC,gCAAsB,CAAC,CAAC,SAAS,CAAC,0DAA0B,CAAC,CAAC;IAEnE,IAAI,CAAC,+CAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxD,IAAI,CAAC,0BAAmB,CAAC,CAAC,SAAS,CAAC,+CAAqB,CAAC,CAAC;IAC3D,IAAI,CAAC,gCAAsB,CAAC,CAAC,SAAS,CAAC,+CAAqB,CAAC,CAAC;IAE9D,IAAI,CAAC,uDAA2B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC9D,IAAI,CAAC,mDAAuB,CAAC,CAAC,SAAS,CAAC,uDAA2B,CAAC,CAAC;IAErE,IAAA,mCAA4B,EAAC,IAAI,EAAE,8DAA+B,CAAC,CAAC;IACpE,IAAI,CAAC,6DAA8B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACjE,IAAI,CAAC,yDAA0B,CAAC,CAAC,SAAS,CAAC,6DAA8B,CAAC,CAAC;IAE3E,IAAI,CAAC,wEAAiC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACpE,IAAI,CAAC,0BAAmB,CAAC,CAAC,SAAS,CAAC,wEAAiC,CAAC,CAAC;IACvE,IAAI,CAAC,gCAAsB,CAAC,CAAC,SAAS,CAAC,wEAAiC,CAAC,CAAC;IAE1E,IAAI,CAAC,kFAAsC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACzE,IAAI,CAAC,0BAAmB,CAAC,CAAC,SAAS,CAAC,kFAAsC,CAAC,CAAC;IAC5E,IAAI,CAAC,gCAAsB,CAAC,CAAC,SAAS,CAAC,kFAAsC,CAAC,CAAC;IAE/E,IAAI,CAAC,4EAAmC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACtE,IAAI,CAAC,yCAA+B,CAAC,CAAC,SAAS,CAAC,4EAAmC,CAAC,CAAC;IAErF,IAAA,mCAA4B,EAAC,IAAI,EAAE,sDAAwB,CAAC,CAAC;IAC7D,IAAA,mCAA4B,EAAC,IAAI,EAAE,2CAA0B,CAAC,CAAC;IAC/D,IAAA,mCAA4B,EAAC,IAAI,EAAE,yCAAkB,CAAC,CAAC;IACvD,IAAI,CAAC,qCAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;IAEhC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,CAAC,qCAAiB,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,IAAI,CAAC,4CAAwB,CAAC,CAAC,eAAe,CAAC;QAC3C,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,IAAI;QACtB,mBAAmB,EAAE,IAAI;KACO,CAAC,CAAC;IACtC,IAAI,CAAC,uBAAa,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,EAAE,EAAE,qCAAiB,CAAC,EAAE;QACxB,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,qCAAiB,CAAC;KACvD,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEvB,IAAI,CAAC,0CAAkB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAC1C,IAAA,yCAAwB,EAAC,GAAG,CAAC,SAAS,CAAC,CAC1C,CAAC;IACF,IAAI,CAAC,uBAAa,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,EAAE,EAAE,0CAAkB,CAAC,EAAE;QACzB,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,0CAAkB,CAAC;KACxD,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEvB,IAAI,CAAC,oDAAsB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAyB,EAAE,EAAE;QACxE,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC,iDAAmB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,0DAA4B,CAAC,CAAC,eAAe,CAAC;YACzD,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,IAAI;YACtB,mBAAmB,EAAE,KAAK;SACM,CAAC,CAAC;QACtC,SAAS,CAAC,IAAI,CAAC,mDAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,mDAAqB,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7C,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,6EAA6E;QAC7E,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QACtC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;QACxC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC1D,MAAM,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC;QACxE,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAExD,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,qDAA4B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnF,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,0CAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,yCAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACvE,IAAI,CAAC,4CAAmB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACtD,IAAI,CAAC,sDAAwB,CAAC,CAAC,SAAS,CAAC,4CAAmB,CAAC,CAAC;IAC9D,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,4CAAmB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC1E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,mDAA0B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACjF,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,qDAA4B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnF,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,0CAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,+CAAsB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC7E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,yCAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACvE,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,+CAAsB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC7E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,2CAAmB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC1E,CAAC,0BAAmB,EAAE,uBAAgB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAChE,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,iDAAwB,CAAC,CAAC,gBAAgB,EAAE,CAC1E,CAAC;IAEF,IAAA,mCAA4B,EAAC,IAAI,EAAE,+CAAsB,CAAC,CAAC;IAC3D,IAAA,mCAA4B,EAAC,IAAI,EAAE,mDAAuB,CAAC,CAAC;IAC5D,IAAI,CAAC,oDAA2B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC9D,IAAI,CAAC,+CAAsB,CAAC,CAAC,SAAS,CAAC,oDAA2B,CAAC,CAAC;IACpE,IAAI,CAAC,uDAA8B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACjE,IAAI,CAAC,+CAAsB,CAAC,CAAC,SAAS,CAAC,uDAA8B,CAAC,CAAC;IAEvE,IAAI,CAAC,wCAAuB,CAAC,CAAC,EAAE,CAAC,+CAAuB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC7E,IAAI,CAAC,wCAAuB,CAAC,CAAC,EAAE,CAAC,sDAA8B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpF,IAAI,CAAC,wCAAuB,CAAC,CAAC,EAAE,CAAC,qDAA6B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEnF,IAAI,CAAC,yEAAiC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACpE,IAAI,CAAC,2CAAyB,CAAC,CAAC,SAAS,CAAC,yEAAiC,CAAC,CAAC;IAE7E,IAAI,CAAC,yCAA+B,CAAC,CAAC,EAAE,CAAC,8DAA4B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC1F,IAAI,CAAC,gFAAqC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,yCAA+B,CAAC,CAAC,SAAS,CAAC,gFAAqC,CAAC,CAAC;IACvF,IAAI,CAAC,kDAAsB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACzD,IAAI,CAAC,gDAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxD,IAAI,CAAC,mDAAuB,CAAC,CAAC,SAAS,CAAC,gDAAqB,CAAC,CAAC;IAE/D,IAAA,mCAA4B,EAAC,IAAI,EAAE,yEAAiC,CAAC,CAAC;IACtE,IAAI,CAAC,gFAAwC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,yEAAiC,CAAC,CAAC,SAAS,CAAC,gFAAwC,CAAC,CAAC;IAE5F,IAAI,CAAC,sCAAoB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE;QAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC,+BAAa,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,+BAAa,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC;AAEP,CAAC,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,IAAqB;IAC7C,IAAI,cAA0C,CAAC;IAC/C,IAAI,CAAC,iCAAc,CAAC,CAAC,MAAM,EAAE,CAAC;IAE9B,IAAI,CAAC,uBAAa,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3C,EAAE,EAAE,iCAAc,CAAC,EAAE;QACrB,YAAY,EAAE,GAAG,EAAE;YACf,IAAI,cAAc,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;gBACvC,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAiB,iCAAc,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,cAAc,CAAC;QAC1B,CAAC;KACJ,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -4,6 +4,7 @@ export * from './command-part-renderer';
|
|
|
4
4
|
export * from './error-part-renderer';
|
|
5
5
|
export * from './horizontal-layout-part-renderer';
|
|
6
6
|
export * from './markdown-part-renderer';
|
|
7
|
+
export * from './mcp-app-frame';
|
|
7
8
|
export * from './mermaid-part-renderer';
|
|
8
9
|
export * from './mermaid-rendering';
|
|
9
10
|
export * from './text-part-renderer';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/index.ts"],"names":[],"mappings":"AAeA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/index.ts"],"names":[],"mappings":"AAeA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC"}
|
|
@@ -22,6 +22,7 @@ tslib_1.__exportStar(require("./command-part-renderer"), exports);
|
|
|
22
22
|
tslib_1.__exportStar(require("./error-part-renderer"), exports);
|
|
23
23
|
tslib_1.__exportStar(require("./horizontal-layout-part-renderer"), exports);
|
|
24
24
|
tslib_1.__exportStar(require("./markdown-part-renderer"), exports);
|
|
25
|
+
tslib_1.__exportStar(require("./mcp-app-frame"), exports);
|
|
25
26
|
tslib_1.__exportStar(require("./mermaid-part-renderer"), exports);
|
|
26
27
|
tslib_1.__exportStar(require("./mermaid-rendering"), exports);
|
|
27
28
|
tslib_1.__exportStar(require("./text-part-renderer"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/index.ts"],"names":[],"mappings":";;;AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,kEAAwC;AACxC,+DAAqC;AACrC,kEAAwC;AACxC,gEAAsC;AACtC,4EAAkD;AAClD,mEAAyC;AACzC,kEAAwC;AACxC,8DAAoC;AACpC,+DAAqC;AACrC,mEAAyC;AACzC,0EAAgD;AAChD,4EAAkD;AAClD,mEAAyC;AACzC,qEAA2C;AAC3C,mEAAyC;AACzC,8DAAoC;AACpC,qEAA2C;AAC3C,gEAAsC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/index.ts"],"names":[],"mappings":";;;AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,kEAAwC;AACxC,+DAAqC;AACrC,kEAAwC;AACxC,gEAAsC;AACtC,4EAAkD;AAClD,mEAAyC;AACzC,0DAAgC;AAChC,kEAAwC;AACxC,8DAAoC;AACpC,+DAAqC;AACrC,mEAAyC;AACzC,0EAAgD;AAChD,4EAAkD;AAClD,mEAAyC;AACzC,qEAA2C;AAC3C,mEAAyC;AACzC,8DAAoC;AACpC,qEAA2C;AAC3C,gEAAsC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from '@theia/core/shared/react';
|
|
2
|
+
export interface McpAppFrameProps {
|
|
3
|
+
html: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Builds the `srcDoc` for the sandboxed iframe by injecting a CSP meta tag and a resize-reporting script.
|
|
8
|
+
* Exported for testability.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildSrcDoc(html: string): string;
|
|
11
|
+
export declare const McpAppFrame: React.FC<McpAppFrameProps>;
|
|
12
|
+
//# sourceMappingURL=mcp-app-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-app-frame.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mcp-app-frame.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBhD;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAoClD,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.McpAppFrame = void 0;
|
|
4
|
+
exports.buildSrcDoc = buildSrcDoc;
|
|
5
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
6
|
+
// *****************************************************************************
|
|
7
|
+
// Copyright (C) 2026 Ericsson and others.
|
|
8
|
+
//
|
|
9
|
+
// This program and the accompanying materials are made available under the
|
|
10
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
11
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
12
|
+
//
|
|
13
|
+
// This Source Code may also be made available under the following Secondary
|
|
14
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
15
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
16
|
+
// with the GNU Classpath Exception which is available at
|
|
17
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
18
|
+
//
|
|
19
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
20
|
+
// *****************************************************************************
|
|
21
|
+
const React = require("@theia/core/shared/react");
|
|
22
|
+
/** Maximum height the iframe can grow to (px). Consistent with the mermaid renderer viewport cap. */
|
|
23
|
+
const MAX_HEIGHT = 800;
|
|
24
|
+
const CSP_META = '<meta http-equiv="Content-Security-Policy" ' +
|
|
25
|
+
'content="default-src \'none\'; script-src \'unsafe-inline\'; style-src \'unsafe-inline\'; img-src data: blob:; font-src data:; connect-src \'none\';">';
|
|
26
|
+
const RESIZE_SCRIPT = `<script>
|
|
27
|
+
new ResizeObserver(() => {
|
|
28
|
+
window.parent.postMessage({ type: 'mcp-app-resize', height: document.documentElement.scrollHeight }, '*');
|
|
29
|
+
}).observe(document.documentElement);
|
|
30
|
+
</script>`;
|
|
31
|
+
/**
|
|
32
|
+
* Builds the `srcDoc` for the sandboxed iframe by injecting a CSP meta tag and a resize-reporting script.
|
|
33
|
+
* Exported for testability.
|
|
34
|
+
*/
|
|
35
|
+
function buildSrcDoc(html) {
|
|
36
|
+
let doc = html;
|
|
37
|
+
// Inject CSP meta tag into <head> if present (tolerant of attributes and casing), otherwise prepend it.
|
|
38
|
+
if (/<head[\s>]/i.test(doc)) {
|
|
39
|
+
doc = doc.replace(/<head[\s>]/i, match => `${match}${CSP_META}`);
|
|
40
|
+
}
|
|
41
|
+
else if (doc.includes('<html')) {
|
|
42
|
+
doc = doc.replace(/(<html[^>]*>)/, `$1<head>${CSP_META}</head>`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
doc = `${CSP_META}${doc}`;
|
|
46
|
+
}
|
|
47
|
+
// Inject resize script before </body> if present, otherwise append it.
|
|
48
|
+
if (doc.includes('</body>')) {
|
|
49
|
+
doc = doc.replace('</body>', `${RESIZE_SCRIPT}</body>`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
doc = `${doc}${RESIZE_SCRIPT}`;
|
|
53
|
+
}
|
|
54
|
+
return doc;
|
|
55
|
+
}
|
|
56
|
+
const McpAppFrame = ({ html, title }) => {
|
|
57
|
+
// eslint-disable-next-line no-null/no-null
|
|
58
|
+
const iframeRef = React.useRef(null);
|
|
59
|
+
const [height, setHeight] = React.useState(200);
|
|
60
|
+
React.useEffect(() => {
|
|
61
|
+
const handler = (event) => {
|
|
62
|
+
if (iframeRef.current?.contentWindow === event.source &&
|
|
63
|
+
event.data?.type === 'mcp-app-resize' &&
|
|
64
|
+
typeof event.data.height === 'number') {
|
|
65
|
+
const h = event.data.height;
|
|
66
|
+
if (Number.isFinite(h) && h > 0) {
|
|
67
|
+
setHeight(Math.min(h, MAX_HEIGHT));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
window.addEventListener('message', handler);
|
|
72
|
+
return () => window.removeEventListener('message', handler);
|
|
73
|
+
}, []);
|
|
74
|
+
const srcDoc = buildSrcDoc(html);
|
|
75
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: 'theia-mcp-app-container', children: [title && (0, jsx_runtime_1.jsx)("div", { className: 'theia-mcp-app-title', children: title }), (0, jsx_runtime_1.jsx)("iframe", { ref: iframeRef, srcDoc: srcDoc, sandbox: 'allow-scripts', allow: '', className: 'theia-mcp-app-iframe', style: { height: `${height}px` }, title: title ?? 'MCP App' })] }));
|
|
76
|
+
};
|
|
77
|
+
exports.McpAppFrame = McpAppFrame;
|
|
78
|
+
//# sourceMappingURL=mcp-app-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-app-frame.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mcp-app-frame.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-app-frame.spec.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mcp-app-frame.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 Ericsson and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const chai_1 = require("chai");
|
|
19
|
+
const mcp_app_frame_1 = require("./mcp-app-frame");
|
|
20
|
+
describe('McpAppFrame buildSrcDoc', () => {
|
|
21
|
+
it('injects CSP into <head> and resize script before </body>', () => {
|
|
22
|
+
const html = '<html><head><title>App</title></head><body><p>Hello</p></body></html>';
|
|
23
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
24
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
25
|
+
(0, chai_1.expect)(result).to.contain('mcp-app-resize');
|
|
26
|
+
(0, chai_1.expect)(result.indexOf('Content-Security-Policy')).to.be.lessThan(result.indexOf('</head>'));
|
|
27
|
+
(0, chai_1.expect)(result.indexOf('ResizeObserver')).to.be.lessThan(result.indexOf('</body>'));
|
|
28
|
+
});
|
|
29
|
+
it('handles <head> with attributes (e.g. <head lang="en">)', () => {
|
|
30
|
+
const html = '<html><head lang="en"><title>App</title></head><body><p>Hi</p></body></html>';
|
|
31
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
32
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
33
|
+
// Should not inject a second <head>
|
|
34
|
+
const headCount = (result.match(/<head/gi) || []).length;
|
|
35
|
+
(0, chai_1.expect)(headCount).to.equal(1);
|
|
36
|
+
});
|
|
37
|
+
it('handles uppercase <HEAD>', () => {
|
|
38
|
+
const html = '<html><HEAD><title>App</title></HEAD><body><p>Hi</p></body></html>';
|
|
39
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
40
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
41
|
+
const headCount = (result.match(/<head/gi) || []).length;
|
|
42
|
+
(0, chai_1.expect)(headCount).to.equal(1);
|
|
43
|
+
});
|
|
44
|
+
it('wraps CSP in a new <head> when only <html> is present', () => {
|
|
45
|
+
const html = '<html><body><p>No head</p></body></html>';
|
|
46
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
47
|
+
(0, chai_1.expect)(result).to.contain('<head>');
|
|
48
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
49
|
+
});
|
|
50
|
+
it('prepends CSP when no <html> or <head> present', () => {
|
|
51
|
+
const html = '<div>Simple content</div>';
|
|
52
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
53
|
+
(0, chai_1.expect)(result).to.match(/^<meta/);
|
|
54
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
55
|
+
(0, chai_1.expect)(result).to.contain('<div>Simple content</div>');
|
|
56
|
+
});
|
|
57
|
+
it('appends resize script when no </body> tag', () => {
|
|
58
|
+
const html = '<div>Simple content</div>';
|
|
59
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
60
|
+
(0, chai_1.expect)(result).to.contain('mcp-app-resize');
|
|
61
|
+
(0, chai_1.expect)(result.endsWith('</script>')).to.be.true;
|
|
62
|
+
});
|
|
63
|
+
it('handles empty html', () => {
|
|
64
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)('');
|
|
65
|
+
(0, chai_1.expect)(result).to.contain('Content-Security-Policy');
|
|
66
|
+
(0, chai_1.expect)(result).to.contain('mcp-app-resize');
|
|
67
|
+
});
|
|
68
|
+
it('preserves original html content', () => {
|
|
69
|
+
const html = '<html><head></head><body><h1>Title</h1><p>Content</p></body></html>';
|
|
70
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)(html);
|
|
71
|
+
(0, chai_1.expect)(result).to.contain('<h1>Title</h1>');
|
|
72
|
+
(0, chai_1.expect)(result).to.contain('<p>Content</p>');
|
|
73
|
+
});
|
|
74
|
+
it('CSP blocks connect-src', () => {
|
|
75
|
+
const result = (0, mcp_app_frame_1.buildSrcDoc)('<html><head></head><body></body></html>');
|
|
76
|
+
(0, chai_1.expect)(result).to.contain("connect-src 'none'");
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=mcp-app-frame.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-app-frame.spec.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/mcp-app-frame.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolcall-result.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/toolcall-result.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAqB,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"toolcall-result.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/toolcall-result.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAqB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAInE,oGAAoG;AACpG,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAS7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,GAAG,SAAS,CAwCvG"}
|
|
@@ -5,6 +5,7 @@ exports.renderToolCallResult = renderToolCallResult;
|
|
|
5
5
|
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
6
6
|
const ai_core_1 = require("@theia/ai-core");
|
|
7
7
|
const markdown_part_renderer_1 = require("./markdown-part-renderer");
|
|
8
|
+
const mcp_app_frame_1 = require("./mcp-app-frame");
|
|
8
9
|
/** Parses a tool call result that may be a JSON string, returning the original value on failure. */
|
|
9
10
|
function tryParseToolCallResult(result) {
|
|
10
11
|
if (!result) {
|
|
@@ -39,6 +40,9 @@ function renderToolCallResult(rawResult, openerService) {
|
|
|
39
40
|
case 'text': {
|
|
40
41
|
return (0, jsx_runtime_1.jsx)("div", { className: 'theia-toolCall-text-result', children: (0, jsx_runtime_1.jsx)(markdown_part_renderer_1.MarkdownRender, { text: content.text, openerService: openerService }) }, `content-${idx}-${content.type}`);
|
|
41
42
|
}
|
|
43
|
+
case 'html': {
|
|
44
|
+
return (0, jsx_runtime_1.jsx)("div", { className: 'theia-toolCall-html-result', children: (0, jsx_runtime_1.jsx)(mcp_app_frame_1.McpAppFrame, { html: content.html, title: content.title }) }, `content-${idx}-${content.type}`);
|
|
45
|
+
}
|
|
42
46
|
case 'error': {
|
|
43
47
|
return (0, jsx_runtime_1.jsx)("div", { className: 'theia-toolCall-error-result', children: (0, jsx_runtime_1.jsx)("pre", { children: content.data }) }, `content-${idx}-${content.type}`);
|
|
44
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolcall-result.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/toolcall-result.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"toolcall-result.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/toolcall-result.tsx"],"names":[],"mappings":";;AAuBA,wDASC;AAMD,oDAwCC;;AA5DD,4CAAmE;AACnE,qEAA0D;AAC1D,mDAA8C;AAE9C,oGAAoG;AACpG,SAAgB,sBAAsB,CAAC,MAAsB;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,CAAC;QACD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAClB,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,SAAyB,EAAE,aAA4B;IACxF,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,2CAA2C;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,0CAAM,MAAM,CAAC,MAAM,CAAC,GAAO,CAAC;IACvC,CAAC;IACD,IAAI,IAAA,2BAAiB,EAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,gCAAK,SAAS,EAAC,iCAAiC,YAClD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACjC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,OAAO,CAAC,CAAC,CAAC;wBACX,OAAO,gCAA4C,SAAS,EAAC,6BAA6B,YACtF,gCAAK,GAAG,EAAE,QAAQ,OAAO,CAAC,QAAQ,WAAW,OAAO,CAAC,UAAU,EAAE,GAAI,IADxD,WAAW,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAE3C,CAAC;oBACX,CAAC;oBACD,KAAK,MAAM,CAAC,CAAC,CAAC;wBACV,OAAO,gCAA4C,SAAS,EAAC,4BAA4B,YACrF,uBAAC,uCAAc,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,GAAI,IADvD,WAAW,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAE3C,CAAC;oBACX,CAAC;oBACD,KAAK,MAAM,CAAC,CAAC,CAAC;wBACV,OAAO,gCAA4C,SAAS,EAAC,4BAA4B,YACrF,uBAAC,2BAAW,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAI,IAD5C,WAAW,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAE3C,CAAC;oBACX,CAAC;oBACD,KAAK,OAAO,CAAC,CAAC,CAAC;wBACX,OAAO,gCAA4C,SAAS,EAAC,6BAA6B,YAAC,0CAAM,OAAO,CAAC,IAAI,GAAO,IAAnG,WAAW,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAyE,CAAC;oBAC/H,CAAC;oBACD,KAAK,OAAO,CAAC;oBACb,OAAO,CAAC,CAAC,CAAC;wBACN,OAAO,gCAA4C,SAAS,EAAC,+BAA+B,YAAC,0CAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,GAAO,IAA9H,WAAW,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAoG,CAAC;oBAC1J,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,GACA,CAAC;IACX,CAAC;IACD,OAAO,0CAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAO,CAAC;AAC7D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-chat-ui",
|
|
3
|
-
"version": "1.75.0
|
|
3
|
+
"version": "1.75.0",
|
|
4
4
|
"description": "Theia - AI Chat UI Extension",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/ai-chat": "1.75.0
|
|
7
|
-
"@theia/ai-core": "1.75.0
|
|
8
|
-
"@theia/core": "1.75.0
|
|
9
|
-
"@theia/editor": "1.75.0
|
|
10
|
-
"@theia/editor-preview": "1.75.0
|
|
11
|
-
"@theia/filesystem": "1.75.0
|
|
12
|
-
"@theia/monaco": "1.75.0
|
|
6
|
+
"@theia/ai-chat": "1.75.0",
|
|
7
|
+
"@theia/ai-core": "1.75.0",
|
|
8
|
+
"@theia/core": "1.75.0",
|
|
9
|
+
"@theia/editor": "1.75.0",
|
|
10
|
+
"@theia/editor-preview": "1.75.0",
|
|
11
|
+
"@theia/filesystem": "1.75.0",
|
|
12
|
+
"@theia/monaco": "1.75.0",
|
|
13
13
|
"@theia/monaco-editor-core": "1.108.201",
|
|
14
|
-
"@theia/preferences": "1.75.0
|
|
15
|
-
"@theia/workspace": "1.75.0
|
|
14
|
+
"@theia/preferences": "1.75.0",
|
|
15
|
+
"@theia/workspace": "1.75.0",
|
|
16
16
|
"date-fns": "^4.4.0",
|
|
17
17
|
"mermaid": "^11.16.1",
|
|
18
18
|
"tslib": "^2.8.1"
|
|
@@ -51,10 +51,10 @@
|
|
|
51
51
|
"watch": "theiaext watch"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@theia/ext-scripts": "1.
|
|
54
|
+
"@theia/ext-scripts": "1.75.0"
|
|
55
55
|
},
|
|
56
56
|
"nyc": {
|
|
57
57
|
"extends": "../../configs/nyc.json"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "6d8e911f05f0fd9a13d76797e79b21ee3f038bc2"
|
|
60
60
|
}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import '../../src/browser/style/index.css';
|
|
18
18
|
import '../../src/browser/style/tool-call-rendering.css';
|
|
19
19
|
import '../../src/browser/style/mermaid-rendering.css';
|
|
20
|
+
import '../../src/browser/style/mcp-app-frame.css';
|
|
20
21
|
import { bindRootContributionProvider, CommandContribution, MenuContribution } from '@theia/core';
|
|
21
22
|
import { bindViewContribution, FrontendApplicationContribution, WidgetFactory, KeybindingContribution } from '@theia/core/lib/browser';
|
|
22
23
|
import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
|
|
@@ -19,6 +19,7 @@ export * from './command-part-renderer';
|
|
|
19
19
|
export * from './error-part-renderer';
|
|
20
20
|
export * from './horizontal-layout-part-renderer';
|
|
21
21
|
export * from './markdown-part-renderer';
|
|
22
|
+
export * from './mcp-app-frame';
|
|
22
23
|
export * from './mermaid-part-renderer';
|
|
23
24
|
export * from './mermaid-rendering';
|
|
24
25
|
export * from './text-part-renderer';
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2026 Ericsson and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { expect } from 'chai';
|
|
18
|
+
import { buildSrcDoc } from './mcp-app-frame';
|
|
19
|
+
|
|
20
|
+
describe('McpAppFrame buildSrcDoc', () => {
|
|
21
|
+
|
|
22
|
+
it('injects CSP into <head> and resize script before </body>', () => {
|
|
23
|
+
const html = '<html><head><title>App</title></head><body><p>Hello</p></body></html>';
|
|
24
|
+
const result = buildSrcDoc(html);
|
|
25
|
+
expect(result).to.contain('Content-Security-Policy');
|
|
26
|
+
expect(result).to.contain('mcp-app-resize');
|
|
27
|
+
expect(result.indexOf('Content-Security-Policy')).to.be.lessThan(result.indexOf('</head>'));
|
|
28
|
+
expect(result.indexOf('ResizeObserver')).to.be.lessThan(result.indexOf('</body>'));
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('handles <head> with attributes (e.g. <head lang="en">)', () => {
|
|
32
|
+
const html = '<html><head lang="en"><title>App</title></head><body><p>Hi</p></body></html>';
|
|
33
|
+
const result = buildSrcDoc(html);
|
|
34
|
+
expect(result).to.contain('Content-Security-Policy');
|
|
35
|
+
// Should not inject a second <head>
|
|
36
|
+
const headCount = (result.match(/<head/gi) || []).length;
|
|
37
|
+
expect(headCount).to.equal(1);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('handles uppercase <HEAD>', () => {
|
|
41
|
+
const html = '<html><HEAD><title>App</title></HEAD><body><p>Hi</p></body></html>';
|
|
42
|
+
const result = buildSrcDoc(html);
|
|
43
|
+
expect(result).to.contain('Content-Security-Policy');
|
|
44
|
+
const headCount = (result.match(/<head/gi) || []).length;
|
|
45
|
+
expect(headCount).to.equal(1);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('wraps CSP in a new <head> when only <html> is present', () => {
|
|
49
|
+
const html = '<html><body><p>No head</p></body></html>';
|
|
50
|
+
const result = buildSrcDoc(html);
|
|
51
|
+
expect(result).to.contain('<head>');
|
|
52
|
+
expect(result).to.contain('Content-Security-Policy');
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('prepends CSP when no <html> or <head> present', () => {
|
|
56
|
+
const html = '<div>Simple content</div>';
|
|
57
|
+
const result = buildSrcDoc(html);
|
|
58
|
+
expect(result).to.match(/^<meta/);
|
|
59
|
+
expect(result).to.contain('Content-Security-Policy');
|
|
60
|
+
expect(result).to.contain('<div>Simple content</div>');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('appends resize script when no </body> tag', () => {
|
|
64
|
+
const html = '<div>Simple content</div>';
|
|
65
|
+
const result = buildSrcDoc(html);
|
|
66
|
+
expect(result).to.contain('mcp-app-resize');
|
|
67
|
+
expect(result.endsWith('</script>')).to.be.true;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('handles empty html', () => {
|
|
71
|
+
const result = buildSrcDoc('');
|
|
72
|
+
expect(result).to.contain('Content-Security-Policy');
|
|
73
|
+
expect(result).to.contain('mcp-app-resize');
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('preserves original html content', () => {
|
|
77
|
+
const html = '<html><head></head><body><h1>Title</h1><p>Content</p></body></html>';
|
|
78
|
+
const result = buildSrcDoc(html);
|
|
79
|
+
expect(result).to.contain('<h1>Title</h1>');
|
|
80
|
+
expect(result).to.contain('<p>Content</p>');
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('CSP blocks connect-src', () => {
|
|
84
|
+
const result = buildSrcDoc('<html><head></head><body></body></html>');
|
|
85
|
+
expect(result).to.contain("connect-src 'none'");
|
|
86
|
+
});
|
|
87
|
+
});
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2026 Ericsson and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import * as React from '@theia/core/shared/react';
|
|
18
|
+
|
|
19
|
+
export interface McpAppFrameProps {
|
|
20
|
+
html: string;
|
|
21
|
+
title?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Maximum height the iframe can grow to (px). Consistent with the mermaid renderer viewport cap. */
|
|
25
|
+
const MAX_HEIGHT = 800;
|
|
26
|
+
|
|
27
|
+
const CSP_META = '<meta http-equiv="Content-Security-Policy" ' +
|
|
28
|
+
'content="default-src \'none\'; script-src \'unsafe-inline\'; style-src \'unsafe-inline\'; img-src data: blob:; font-src data:; connect-src \'none\';">';
|
|
29
|
+
|
|
30
|
+
const RESIZE_SCRIPT = `<script>
|
|
31
|
+
new ResizeObserver(() => {
|
|
32
|
+
window.parent.postMessage({ type: 'mcp-app-resize', height: document.documentElement.scrollHeight }, '*');
|
|
33
|
+
}).observe(document.documentElement);
|
|
34
|
+
</script>`;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Builds the `srcDoc` for the sandboxed iframe by injecting a CSP meta tag and a resize-reporting script.
|
|
38
|
+
* Exported for testability.
|
|
39
|
+
*/
|
|
40
|
+
export function buildSrcDoc(html: string): string {
|
|
41
|
+
let doc = html;
|
|
42
|
+
// Inject CSP meta tag into <head> if present (tolerant of attributes and casing), otherwise prepend it.
|
|
43
|
+
if (/<head[\s>]/i.test(doc)) {
|
|
44
|
+
doc = doc.replace(/<head[\s>]/i, match => `${match}${CSP_META}`);
|
|
45
|
+
} else if (doc.includes('<html')) {
|
|
46
|
+
doc = doc.replace(/(<html[^>]*>)/, `$1<head>${CSP_META}</head>`);
|
|
47
|
+
} else {
|
|
48
|
+
doc = `${CSP_META}${doc}`;
|
|
49
|
+
}
|
|
50
|
+
// Inject resize script before </body> if present, otherwise append it.
|
|
51
|
+
if (doc.includes('</body>')) {
|
|
52
|
+
doc = doc.replace('</body>', `${RESIZE_SCRIPT}</body>`);
|
|
53
|
+
} else {
|
|
54
|
+
doc = `${doc}${RESIZE_SCRIPT}`;
|
|
55
|
+
}
|
|
56
|
+
return doc;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export const McpAppFrame: React.FC<McpAppFrameProps> = ({ html, title }) => {
|
|
60
|
+
// eslint-disable-next-line no-null/no-null
|
|
61
|
+
const iframeRef = React.useRef<HTMLIFrameElement>(null);
|
|
62
|
+
const [height, setHeight] = React.useState(200);
|
|
63
|
+
|
|
64
|
+
React.useEffect(() => {
|
|
65
|
+
const handler = (event: MessageEvent) => {
|
|
66
|
+
if (iframeRef.current?.contentWindow === event.source &&
|
|
67
|
+
event.data?.type === 'mcp-app-resize' &&
|
|
68
|
+
typeof event.data.height === 'number') {
|
|
69
|
+
const h = event.data.height;
|
|
70
|
+
if (Number.isFinite(h) && h > 0) {
|
|
71
|
+
setHeight(Math.min(h, MAX_HEIGHT));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
window.addEventListener('message', handler);
|
|
76
|
+
return () => window.removeEventListener('message', handler);
|
|
77
|
+
}, []);
|
|
78
|
+
|
|
79
|
+
const srcDoc = buildSrcDoc(html);
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
<div className='theia-mcp-app-container'>
|
|
83
|
+
{title && <div className='theia-mcp-app-title'>{title}</div>}
|
|
84
|
+
<iframe
|
|
85
|
+
ref={iframeRef}
|
|
86
|
+
srcDoc={srcDoc}
|
|
87
|
+
sandbox='allow-scripts'
|
|
88
|
+
allow=''
|
|
89
|
+
className='theia-mcp-app-iframe'
|
|
90
|
+
style={{ height: `${height}px` }}
|
|
91
|
+
title={title ?? 'MCP App'}
|
|
92
|
+
/>
|
|
93
|
+
</div>
|
|
94
|
+
);
|
|
95
|
+
};
|
|
@@ -18,6 +18,7 @@ import { ReactNode } from '@theia/core/shared/react';
|
|
|
18
18
|
import { OpenerService } from '@theia/core/lib/browser';
|
|
19
19
|
import { isToolCallContent, ToolCallResult } from '@theia/ai-core';
|
|
20
20
|
import { MarkdownRender } from './markdown-part-renderer';
|
|
21
|
+
import { McpAppFrame } from './mcp-app-frame';
|
|
21
22
|
|
|
22
23
|
/** Parses a tool call result that may be a JSON string, returning the original value on failure. */
|
|
23
24
|
export function tryParseToolCallResult(result: ToolCallResult): ToolCallResult {
|
|
@@ -58,6 +59,11 @@ export function renderToolCallResult(rawResult: ToolCallResult, openerService: O
|
|
|
58
59
|
<MarkdownRender text={content.text} openerService={openerService} />
|
|
59
60
|
</div>;
|
|
60
61
|
}
|
|
62
|
+
case 'html': {
|
|
63
|
+
return <div key={`content-${idx}-${content.type}`} className='theia-toolCall-html-result'>
|
|
64
|
+
<McpAppFrame html={content.html} title={content.title} />
|
|
65
|
+
</div>;
|
|
66
|
+
}
|
|
61
67
|
case 'error': {
|
|
62
68
|
return <div key={`content-${idx}-${content.type}`} className='theia-toolCall-error-result'><pre>{content.data}</pre></div>;
|
|
63
69
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (C) 2026 Ericsson and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
|
|
17
|
+
.theia-mcp-app-container {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
margin: 0 0 var(--theia-ui-padding) 0;
|
|
21
|
+
border-radius: 4px;
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.theia-mcp-app-title {
|
|
26
|
+
color: var(--theia-descriptionForeground);
|
|
27
|
+
font-size: var(--theia-ui-font-size0);
|
|
28
|
+
padding: 4px 8px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.theia-mcp-app-iframe {
|
|
32
|
+
width: 100%;
|
|
33
|
+
border: none;
|
|
34
|
+
}
|