diff --git a/packages/kilo-vscode/esbuild.js b/packages/kilo-vscode/esbuild.js
index 54b637ab915..c6541f031c3 100644
--- a/packages/kilo-vscode/esbuild.js
+++ b/packages/kilo-vscode/esbuild.js
@@ -1,9 +1,38 @@
const esbuild = require("esbuild")
+const path = require("path")
const { solidPlugin } = require("esbuild-plugin-solid")
const production = process.argv.includes("--production")
const watch = process.argv.includes("--watch")
+/**
+ * Force all solid-js imports (from kilo-ui and the webview) to resolve to
+ * the **same** copy so SolidJS contexts are shared across packages.
+ * Without this, the monorepo hoists separate copies (pnpm vs bun) and
+ * createContext / useContext can't see each other.
+ *
+ * @type {import('esbuild').Plugin}
+ */
+const solidDedupePlugin = {
+ name: "solid-dedupe",
+ setup(build) {
+ // Resolve these bare specifiers to the kilo-vscode-local copy
+ const solidRoot = path.dirname(require.resolve("solid-js/package.json"))
+ const aliases = {
+ "solid-js": path.join(solidRoot, "dist", "solid.js"),
+ "solid-js/web": path.join(solidRoot, "web", "dist", "web.js"),
+ "solid-js/store": path.join(solidRoot, "store", "dist", "store.js"),
+ }
+
+ build.onResolve({ filter: /^solid-js(\/web|\/store)?$/ }, (args) => {
+ const key = args.path
+ if (aliases[key]) {
+ return { path: aliases[key] }
+ }
+ })
+ },
+}
+
/**
* @type {import('esbuild').Plugin}
*/
@@ -72,7 +101,7 @@ async function main() {
".woff2": "file",
".ttf": "file",
},
- plugins: [cssPackageResolvePlugin, solidPlugin(), esbuildProblemMatcherPlugin],
+ plugins: [solidDedupePlugin, cssPackageResolvePlugin, solidPlugin(), esbuildProblemMatcherPlugin],
})
if (watch) {
diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts
index 2fd828add35..c3c291e2b39 100644
--- a/packages/kilo-vscode/src/KiloProvider.ts
+++ b/packages/kilo-vscode/src/KiloProvider.ts
@@ -776,7 +776,7 @@ export class KiloProvider implements vscode.WebviewViewProvider {
const csp = [
"default-src 'none'",
`style-src 'unsafe-inline' ${webview.cspSource}`,
- `script-src 'nonce-${nonce}'`,
+ `script-src 'nonce-${nonce}' 'wasm-unsafe-eval'`,
`font-src ${webview.cspSource}`,
"connect-src http://127.0.0.1:* http://localhost:* ws://127.0.0.1:* ws://localhost:*",
`img-src ${webview.cspSource} data: https:`,
diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/Message.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/Message.tsx
index a0e7189f444..8cb54050453 100644
--- a/packages/kilo-vscode/webview-ui/src/components/chat/Message.tsx
+++ b/packages/kilo-vscode/webview-ui/src/components/chat/Message.tsx
@@ -25,7 +25,7 @@ interface MessageProps {
const TextPartView: Component<{ part: TextPart; role: string }> = (props) => {
return (
{props.part.text}}>
-
+
)
}
@@ -155,7 +155,7 @@ export const Message: Component = (props) => {
when={props.message.role === "assistant"}
fallback={{props.message.content}
}
>
-
+
}