@struktoai/mirage-browser 0.0.7 → 0.0.8-alpha.1

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/README.md CHANGED
@@ -164,7 +164,8 @@ in Mirage can resolve straight to a credential held in one of them.
164
164
  ### Python
165
165
 
166
166
  ```bash
167
- uv add mirage-ai # installs the `mirage` library and the `mirage` CLI binary
167
+ uv add mirage-ai # installs the `mirage` library and the `mirage` CLI binary
168
+ uv add 'mirage-ai[openai]' # OpenAI Agents adapter; each agent framework is an extra
168
169
  ```
169
170
 
170
171
  ### TypeScript
@@ -172,7 +173,7 @@ uv add mirage-ai # installs the `mirage` library and the `mirage` CLI binary
172
173
  ```bash
173
174
  npm install @struktoai/mirage-node # Node.js servers and CLIs
174
175
  npm install @struktoai/mirage-browser # browser / edge runtimes
175
- npm install @struktoai/mirage-agents # OpenAI / Vercel AI / LangChain / Mastra adapters
176
+ npm install @struktoai/mirage-vercel # Vercel AI adapter; each agent framework has its own package
176
177
  ```
177
178
 
178
179
  Both runtime packages pull in `@struktoai/mirage-core` automatically.
@@ -0,0 +1,48 @@
1
+ const PARAM = "mirage-pyodide"
2
+ const FORMAT = "x-mirage-pyodide-format"
3
+ const answers = new Map()
4
+
5
+ function slot(id) {
6
+ let entry = answers.get(id)
7
+ if (entry === undefined) {
8
+ let settle
9
+ const answer = new Promise((resolve) => {
10
+ settle = resolve
11
+ })
12
+ entry = { answer, settle }
13
+ answers.set(id, entry)
14
+ }
15
+ return entry
16
+ }
17
+
18
+ self.addEventListener('install', () => {
19
+ if (self.registration.active === null) self.skipWaiting()
20
+ })
21
+ self.addEventListener('activate', (event) => {
22
+ event.waitUntil(self.clients.claim())
23
+ })
24
+ self.addEventListener('message', (event) => {
25
+ if (event.data === 'claim') event.waitUntil(self.clients.claim())
26
+ })
27
+ self.addEventListener('fetch', (event) => {
28
+ const url = new URL(event.request.url)
29
+ const op = url.searchParams.get(PARAM)
30
+ const id = url.searchParams.get('id') ?? ''
31
+ if (op === 'ping') {
32
+ event.respondWith(new Response(null, { status: 204, headers: { [FORMAT]: '' } }))
33
+ } else if (op === 'answer') {
34
+ event.respondWith(
35
+ event.request.arrayBuffer().then((body) => {
36
+ slot(id).settle({ body, format: event.request.headers.get(FORMAT) ?? '' })
37
+ return new Response(null, { status: 204, headers: { [FORMAT]: '' } })
38
+ }),
39
+ )
40
+ } else if (op === 'wait') {
41
+ event.respondWith(
42
+ slot(id).answer.then(({ body, format }) => {
43
+ answers.delete(id)
44
+ return new Response(body, { headers: { [FORMAT]: format } })
45
+ }),
46
+ )
47
+ }
48
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@struktoai/mirage-browser",
3
- "version": "0.0.7",
3
+ "version": "0.0.8-alpha.1",
4
4
  "description": "A Unified Virtual Filesystem For AI Agents",
5
5
  "keywords": [
6
6
  "bash",
@@ -53,7 +53,7 @@
53
53
  ],
54
54
  "dependencies": {
55
55
  "@neondatabase/serverless": "^1.0.0",
56
- "@struktoai/mirage-core": "0.0.7"
56
+ "@struktoai/mirage-core": "0.0.8-alpha.1"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@modelcontextprotocol/client": "^2.3.0",
@@ -73,7 +73,7 @@
73
73
  }
74
74
  },
75
75
  "scripts": {
76
- "build": "node scripts/embed-wasm.mjs && node scripts/clean.mjs && tsc -p tsconfig.build.json",
76
+ "build": "node scripts/embed-wasm.mjs && node scripts/clean.mjs && tsc -p tsconfig.build.json && node scripts/service-worker.mjs",
77
77
  "test": "vitest run",
78
78
  "typecheck": "tsc --noEmit"
79
79
  }