@agimon-ai/po 0.0.0-alpha.26 → 0.0.0-alpha.27
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/catalog/index.json +53 -53
- package/dist/src/builders/server/bundlerService.cjs +2 -2
- package/dist/src/builders/server/bundlerService.cjs.map +1 -1
- package/dist/src/builders/server/bundlerService.mjs +2 -2
- package/dist/src/builders/server/bundlerService.mjs.map +1 -1
- package/dist/src/builders/server/computerUseBinding.cjs +17 -0
- package/dist/src/builders/server/computerUseBinding.cjs.map +1 -1
- package/dist/src/builders/server/computerUseBinding.mjs +17 -0
- package/dist/src/builders/server/computerUseBinding.mjs.map +1 -1
- package/dist/src/builders/server/computerUseRecordings.cjs +1 -1
- package/dist/src/builders/server/computerUseRecordings.cjs.map +1 -1
- package/dist/src/builders/server/computerUseRecordings.mjs +1 -1
- package/dist/src/builders/server/computerUseRecordings.mjs.map +1 -1
- package/dist/src/builders/server/packageUrl.cjs +6 -4
- package/dist/src/builders/server/packageUrl.cjs.map +1 -1
- package/dist/src/builders/server/packageUrl.mjs +6 -4
- package/dist/src/builders/server/packageUrl.mjs.map +1 -1
- package/dist/src/builders/server/runtime.cjs +6 -1
- package/dist/src/builders/server/runtime.cjs.map +1 -1
- package/dist/src/builders/server/runtime.mjs +6 -1
- package/dist/src/builders/server/runtime.mjs.map +1 -1
- package/package.json +21 -21
package/dist/catalog/index.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"packages": {
|
|
4
4
|
"@agimon-ai/po": {
|
|
5
|
-
"version": "0.0.0-alpha.
|
|
5
|
+
"version": "0.0.0-alpha.27",
|
|
6
6
|
"dependencies": [
|
|
7
7
|
"@agimon-ai/po-artifact",
|
|
8
8
|
"@agimon-ai/po-autostop",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
]
|
|
25
25
|
},
|
|
26
26
|
"@agimon-ai/po-artifact": {
|
|
27
|
-
"version": "0.0.0-alpha.
|
|
27
|
+
"version": "0.0.0-alpha.25",
|
|
28
28
|
"dependencies": [
|
|
29
29
|
"@agimon-ai/po-core",
|
|
30
30
|
"@agimon-ai/po-web-components",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
]
|
|
33
33
|
},
|
|
34
34
|
"@agimon-ai/po-author": {
|
|
35
|
-
"version": "0.0.0-alpha.
|
|
35
|
+
"version": "0.0.0-alpha.26",
|
|
36
36
|
"dependencies": [
|
|
37
37
|
"@agimon-ai/po-artifact",
|
|
38
38
|
"@agimon-ai/po-core",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
]
|
|
43
43
|
},
|
|
44
44
|
"@agimon-ai/po-autocompact": {
|
|
45
|
-
"version": "0.0.0-alpha.
|
|
45
|
+
"version": "0.0.0-alpha.26",
|
|
46
46
|
"dependencies": [
|
|
47
47
|
"@agimon-ai/po-artifact",
|
|
48
48
|
"@agimon-ai/po-config",
|
|
@@ -51,25 +51,25 @@
|
|
|
51
51
|
]
|
|
52
52
|
},
|
|
53
53
|
"@agimon-ai/po-autostop": {
|
|
54
|
-
"version": "0.0.0-alpha.
|
|
54
|
+
"version": "0.0.0-alpha.26",
|
|
55
55
|
"dependencies": [
|
|
56
56
|
"@agimon-ai/po-core",
|
|
57
57
|
"@agimon-ai/po-telemetry"
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
60
|
"@agimon-ai/po-browse": {
|
|
61
|
-
"version": "0.0.1-alpha.
|
|
61
|
+
"version": "0.0.1-alpha.24",
|
|
62
62
|
"dependencies": [
|
|
63
63
|
"@agimon-ai/po-core",
|
|
64
64
|
"@agimon-ai/po-web-components"
|
|
65
65
|
]
|
|
66
66
|
},
|
|
67
67
|
"@agimon-ai/po-build": {
|
|
68
|
-
"version": "0.0.0-alpha.
|
|
68
|
+
"version": "0.0.0-alpha.26",
|
|
69
69
|
"dependencies": []
|
|
70
70
|
},
|
|
71
71
|
"@agimon-ai/po-cache": {
|
|
72
|
-
"version": "0.0.0-alpha.
|
|
72
|
+
"version": "0.0.0-alpha.26",
|
|
73
73
|
"dependencies": [
|
|
74
74
|
"@agimon-ai/po-config",
|
|
75
75
|
"@agimon-ai/po-core",
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
]
|
|
78
78
|
},
|
|
79
79
|
"@agimon-ai/po-claude-bridge": {
|
|
80
|
-
"version": "0.1.1-alpha.
|
|
80
|
+
"version": "0.1.1-alpha.6",
|
|
81
81
|
"dependencies": []
|
|
82
82
|
},
|
|
83
83
|
"@agimon-ai/po-computer-use": {
|
|
84
|
-
"version": "0.0.0-alpha.
|
|
84
|
+
"version": "0.0.0-alpha.26",
|
|
85
85
|
"dependencies": [
|
|
86
86
|
"@agimon-ai/po-config",
|
|
87
87
|
"@agimon-ai/po-core",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
]
|
|
92
92
|
},
|
|
93
93
|
"@agimon-ai/po-config": {
|
|
94
|
-
"version": "0.0.0-alpha.
|
|
94
|
+
"version": "0.0.0-alpha.26",
|
|
95
95
|
"dependencies": [
|
|
96
96
|
"@agimon-ai/po-core",
|
|
97
97
|
"@agimon-ai/po-telemetry",
|
|
@@ -99,14 +99,14 @@
|
|
|
99
99
|
]
|
|
100
100
|
},
|
|
101
101
|
"@agimon-ai/po-core": {
|
|
102
|
-
"version": "0.0.0-alpha.
|
|
102
|
+
"version": "0.0.0-alpha.26",
|
|
103
103
|
"dependencies": [
|
|
104
104
|
"@agimon-ai/po-telemetry",
|
|
105
105
|
"@agimon-ai/po-web-security"
|
|
106
106
|
]
|
|
107
107
|
},
|
|
108
108
|
"@agimon-ai/po-domain": {
|
|
109
|
-
"version": "0.0.0-alpha.
|
|
109
|
+
"version": "0.0.0-alpha.26",
|
|
110
110
|
"dependencies": [
|
|
111
111
|
"@agimon-ai/po-config",
|
|
112
112
|
"@agimon-ai/po-core",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
]
|
|
116
116
|
},
|
|
117
117
|
"@agimon-ai/po-edit": {
|
|
118
|
-
"version": "0.0.0-alpha.
|
|
118
|
+
"version": "0.0.0-alpha.26",
|
|
119
119
|
"dependencies": [
|
|
120
120
|
"@agimon-ai/po-core",
|
|
121
121
|
"@agimon-ai/po-hashline",
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
]
|
|
125
125
|
},
|
|
126
126
|
"@agimon-ai/po-file-edit": {
|
|
127
|
-
"version": "0.0.0-alpha.
|
|
127
|
+
"version": "0.0.0-alpha.26",
|
|
128
128
|
"dependencies": [
|
|
129
129
|
"@agimon-ai/po-config",
|
|
130
130
|
"@agimon-ai/po-core",
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
]
|
|
136
136
|
},
|
|
137
137
|
"@agimon-ai/po-git": {
|
|
138
|
-
"version": "0.0.0-alpha.
|
|
138
|
+
"version": "0.0.0-alpha.26",
|
|
139
139
|
"dependencies": [
|
|
140
140
|
"@agimon-ai/po-core",
|
|
141
141
|
"@agimon-ai/po-session",
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
]
|
|
145
145
|
},
|
|
146
146
|
"@agimon-ai/po-goal": {
|
|
147
|
-
"version": "0.0.0-alpha.
|
|
147
|
+
"version": "0.0.0-alpha.26",
|
|
148
148
|
"dependencies": [
|
|
149
149
|
"@agimon-ai/po-core",
|
|
150
150
|
"@agimon-ai/po-minor-mode",
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
]
|
|
154
154
|
},
|
|
155
155
|
"@agimon-ai/po-grep": {
|
|
156
|
-
"version": "0.0.0-alpha.
|
|
156
|
+
"version": "0.0.0-alpha.26",
|
|
157
157
|
"dependencies": [
|
|
158
158
|
"@agimon-ai/po-core",
|
|
159
159
|
"@agimon-ai/po-hashline",
|
|
@@ -162,11 +162,11 @@
|
|
|
162
162
|
]
|
|
163
163
|
},
|
|
164
164
|
"@agimon-ai/po-hashline": {
|
|
165
|
-
"version": "0.0.0-alpha.
|
|
165
|
+
"version": "0.0.0-alpha.26",
|
|
166
166
|
"dependencies": []
|
|
167
167
|
},
|
|
168
168
|
"@agimon-ai/po-help": {
|
|
169
|
-
"version": "0.0.0-alpha.
|
|
169
|
+
"version": "0.0.0-alpha.26",
|
|
170
170
|
"dependencies": [
|
|
171
171
|
"@agimon-ai/po-core",
|
|
172
172
|
"@agimon-ai/po-minor-mode",
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
]
|
|
175
175
|
},
|
|
176
176
|
"@agimon-ai/po-hook": {
|
|
177
|
-
"version": "0.0.0-alpha.
|
|
177
|
+
"version": "0.0.0-alpha.26",
|
|
178
178
|
"dependencies": [
|
|
179
179
|
"@agimon-ai/po-config",
|
|
180
180
|
"@agimon-ai/po-core",
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
]
|
|
183
183
|
},
|
|
184
184
|
"@agimon-ai/po-image-gen": {
|
|
185
|
-
"version": "0.0.0-alpha.
|
|
185
|
+
"version": "0.0.0-alpha.25",
|
|
186
186
|
"dependencies": [
|
|
187
187
|
"@agimon-ai/po-core",
|
|
188
188
|
"@agimon-ai/po-web-components",
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
]
|
|
191
191
|
},
|
|
192
192
|
"@agimon-ai/po-log": {
|
|
193
|
-
"version": "0.0.0-alpha.
|
|
193
|
+
"version": "0.0.0-alpha.26",
|
|
194
194
|
"dependencies": [
|
|
195
195
|
"@agimon-ai/po-core",
|
|
196
196
|
"@agimon-ai/po-telemetry",
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
]
|
|
200
200
|
},
|
|
201
201
|
"@agimon-ai/po-loop": {
|
|
202
|
-
"version": "0.0.0-alpha.
|
|
202
|
+
"version": "0.0.0-alpha.26",
|
|
203
203
|
"dependencies": [
|
|
204
204
|
"@agimon-ai/po-core",
|
|
205
205
|
"@agimon-ai/po-minor-mode",
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
]
|
|
209
209
|
},
|
|
210
210
|
"@agimon-ai/po-major-mode": {
|
|
211
|
-
"version": "0.0.0-alpha.
|
|
211
|
+
"version": "0.0.0-alpha.26",
|
|
212
212
|
"dependencies": [
|
|
213
213
|
"@agimon-ai/po-config",
|
|
214
214
|
"@agimon-ai/po-core",
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
]
|
|
218
218
|
},
|
|
219
219
|
"@agimon-ai/po-mcp": {
|
|
220
|
-
"version": "0.0.0-alpha.
|
|
220
|
+
"version": "0.0.0-alpha.26",
|
|
221
221
|
"dependencies": [
|
|
222
222
|
"@agimon-ai/po-config",
|
|
223
223
|
"@agimon-ai/po-core",
|
|
@@ -227,37 +227,37 @@
|
|
|
227
227
|
]
|
|
228
228
|
},
|
|
229
229
|
"@agimon-ai/po-mcp-proxy": {
|
|
230
|
-
"version": "0.0.1-alpha.
|
|
230
|
+
"version": "0.0.1-alpha.5",
|
|
231
231
|
"dependencies": []
|
|
232
232
|
},
|
|
233
233
|
"@agimon-ai/po-minor-mode": {
|
|
234
|
-
"version": "0.0.0-alpha.
|
|
234
|
+
"version": "0.0.0-alpha.26",
|
|
235
235
|
"dependencies": [
|
|
236
236
|
"@agimon-ai/po-core",
|
|
237
237
|
"@agimon-ai/po-telemetry"
|
|
238
238
|
]
|
|
239
239
|
},
|
|
240
240
|
"@agimon-ai/po-model-guidance": {
|
|
241
|
-
"version": "0.0.0-alpha.
|
|
241
|
+
"version": "0.0.0-alpha.26",
|
|
242
242
|
"dependencies": [
|
|
243
243
|
"@agimon-ai/po-config",
|
|
244
244
|
"@agimon-ai/po-core"
|
|
245
245
|
]
|
|
246
246
|
},
|
|
247
247
|
"@agimon-ai/po-native-components": {
|
|
248
|
-
"version": "0.0.0-alpha.
|
|
248
|
+
"version": "0.0.0-alpha.26",
|
|
249
249
|
"dependencies": [
|
|
250
250
|
"@agimon-ai/po-web-components"
|
|
251
251
|
]
|
|
252
252
|
},
|
|
253
253
|
"@agimon-ai/po-notification": {
|
|
254
|
-
"version": "0.0.0-alpha.
|
|
254
|
+
"version": "0.0.0-alpha.26",
|
|
255
255
|
"dependencies": [
|
|
256
256
|
"@agimon-ai/po-core"
|
|
257
257
|
]
|
|
258
258
|
},
|
|
259
259
|
"@agimon-ai/po-plan": {
|
|
260
|
-
"version": "0.0.0-alpha.
|
|
260
|
+
"version": "0.0.0-alpha.26",
|
|
261
261
|
"dependencies": [
|
|
262
262
|
"@agimon-ai/po-config",
|
|
263
263
|
"@agimon-ai/po-core",
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
]
|
|
269
269
|
},
|
|
270
270
|
"@agimon-ai/po-profile": {
|
|
271
|
-
"version": "0.0.0-alpha.
|
|
271
|
+
"version": "0.0.0-alpha.26",
|
|
272
272
|
"dependencies": [
|
|
273
273
|
"@agimon-ai/po-config",
|
|
274
274
|
"@agimon-ai/po-core",
|
|
@@ -277,7 +277,7 @@
|
|
|
277
277
|
]
|
|
278
278
|
},
|
|
279
279
|
"@agimon-ai/po-prompt": {
|
|
280
|
-
"version": "0.0.0-alpha.
|
|
280
|
+
"version": "0.0.0-alpha.26",
|
|
281
281
|
"dependencies": [
|
|
282
282
|
"@agimon-ai/po-core",
|
|
283
283
|
"@agimon-ai/po-web-components",
|
|
@@ -285,7 +285,7 @@
|
|
|
285
285
|
]
|
|
286
286
|
},
|
|
287
287
|
"@agimon-ai/po-read": {
|
|
288
|
-
"version": "0.0.0-alpha.
|
|
288
|
+
"version": "0.0.0-alpha.26",
|
|
289
289
|
"dependencies": [
|
|
290
290
|
"@agimon-ai/po-config",
|
|
291
291
|
"@agimon-ai/po-core",
|
|
@@ -295,7 +295,7 @@
|
|
|
295
295
|
]
|
|
296
296
|
},
|
|
297
297
|
"@agimon-ai/po-runner": {
|
|
298
|
-
"version": "0.0.0-alpha.
|
|
298
|
+
"version": "0.0.0-alpha.26",
|
|
299
299
|
"dependencies": [
|
|
300
300
|
"@agimon-ai/po-core",
|
|
301
301
|
"@agimon-ai/po-telemetry",
|
|
@@ -305,19 +305,19 @@
|
|
|
305
305
|
]
|
|
306
306
|
},
|
|
307
307
|
"@agimon-ai/po-sandbox": {
|
|
308
|
-
"version": "0.0.0-alpha.
|
|
308
|
+
"version": "0.0.0-alpha.26",
|
|
309
309
|
"dependencies": [
|
|
310
310
|
"@agimon-ai/po-core"
|
|
311
311
|
]
|
|
312
312
|
},
|
|
313
313
|
"@agimon-ai/po-session": {
|
|
314
|
-
"version": "0.0.0-alpha.
|
|
314
|
+
"version": "0.0.0-alpha.26",
|
|
315
315
|
"dependencies": [
|
|
316
316
|
"@agimon-ai/po-core"
|
|
317
317
|
]
|
|
318
318
|
},
|
|
319
319
|
"@agimon-ai/po-skill": {
|
|
320
|
-
"version": "0.0.0-alpha.
|
|
320
|
+
"version": "0.0.0-alpha.26",
|
|
321
321
|
"dependencies": [
|
|
322
322
|
"@agimon-ai/po-config",
|
|
323
323
|
"@agimon-ai/po-core",
|
|
@@ -327,7 +327,7 @@
|
|
|
327
327
|
]
|
|
328
328
|
},
|
|
329
329
|
"@agimon-ai/po-style-system": {
|
|
330
|
-
"version": "0.0.0-alpha.
|
|
330
|
+
"version": "0.0.0-alpha.26",
|
|
331
331
|
"dependencies": [
|
|
332
332
|
"@agimon-ai/po-core",
|
|
333
333
|
"@agimon-ai/po-web-components",
|
|
@@ -335,7 +335,7 @@
|
|
|
335
335
|
]
|
|
336
336
|
},
|
|
337
337
|
"@agimon-ai/po-task": {
|
|
338
|
-
"version": "0.0.0-alpha.
|
|
338
|
+
"version": "0.0.0-alpha.26",
|
|
339
339
|
"dependencies": [
|
|
340
340
|
"@agimon-ai/po-core",
|
|
341
341
|
"@agimon-ai/po-telemetry",
|
|
@@ -344,7 +344,7 @@
|
|
|
344
344
|
]
|
|
345
345
|
},
|
|
346
346
|
"@agimon-ai/po-team": {
|
|
347
|
-
"version": "0.0.0-alpha.
|
|
347
|
+
"version": "0.0.0-alpha.26",
|
|
348
348
|
"dependencies": [
|
|
349
349
|
"@agimon-ai/po-cache",
|
|
350
350
|
"@agimon-ai/po-config",
|
|
@@ -357,11 +357,11 @@
|
|
|
357
357
|
]
|
|
358
358
|
},
|
|
359
359
|
"@agimon-ai/po-telemetry": {
|
|
360
|
-
"version": "0.0.0-alpha.
|
|
360
|
+
"version": "0.0.0-alpha.26",
|
|
361
361
|
"dependencies": []
|
|
362
362
|
},
|
|
363
363
|
"@agimon-ai/po-template-advanced": {
|
|
364
|
-
"version": "0.0.0-alpha.
|
|
364
|
+
"version": "0.0.0-alpha.26",
|
|
365
365
|
"dependencies": [
|
|
366
366
|
"@agimon-ai/po-core",
|
|
367
367
|
"@agimon-ai/po-web-components",
|
|
@@ -369,7 +369,7 @@
|
|
|
369
369
|
]
|
|
370
370
|
},
|
|
371
371
|
"@agimon-ai/po-template-elegant": {
|
|
372
|
-
"version": "0.0.0-alpha.
|
|
372
|
+
"version": "0.0.0-alpha.26",
|
|
373
373
|
"dependencies": [
|
|
374
374
|
"@agimon-ai/po-core",
|
|
375
375
|
"@agimon-ai/po-web-components",
|
|
@@ -377,7 +377,7 @@
|
|
|
377
377
|
]
|
|
378
378
|
},
|
|
379
379
|
"@agimon-ai/po-ui": {
|
|
380
|
-
"version": "0.0.0-alpha.
|
|
380
|
+
"version": "0.0.0-alpha.26",
|
|
381
381
|
"dependencies": [
|
|
382
382
|
"@agimon-ai/po-core",
|
|
383
383
|
"@agimon-ai/po-hashline",
|
|
@@ -387,7 +387,7 @@
|
|
|
387
387
|
]
|
|
388
388
|
},
|
|
389
389
|
"@agimon-ai/po-user-feedback": {
|
|
390
|
-
"version": "0.0.0-alpha.
|
|
390
|
+
"version": "0.0.0-alpha.26",
|
|
391
391
|
"dependencies": [
|
|
392
392
|
"@agimon-ai/po-core",
|
|
393
393
|
"@agimon-ai/po-minor-mode",
|
|
@@ -396,7 +396,7 @@
|
|
|
396
396
|
]
|
|
397
397
|
},
|
|
398
398
|
"@agimon-ai/po-voice": {
|
|
399
|
-
"version": "0.0.0-alpha.
|
|
399
|
+
"version": "0.0.0-alpha.26",
|
|
400
400
|
"dependencies": [
|
|
401
401
|
"@agimon-ai/po-config",
|
|
402
402
|
"@agimon-ai/po-core",
|
|
@@ -409,11 +409,11 @@
|
|
|
409
409
|
]
|
|
410
410
|
},
|
|
411
411
|
"@agimon-ai/po-web-components": {
|
|
412
|
-
"version": "0.0.0-alpha.
|
|
412
|
+
"version": "0.0.0-alpha.26",
|
|
413
413
|
"dependencies": []
|
|
414
414
|
},
|
|
415
415
|
"@agimon-ai/po-web-dashboard": {
|
|
416
|
-
"version": "0.0.0-alpha.
|
|
416
|
+
"version": "0.0.0-alpha.26",
|
|
417
417
|
"dependencies": [
|
|
418
418
|
"@agimon-ai/po-core",
|
|
419
419
|
"@agimon-ai/po-web-components",
|
|
@@ -421,18 +421,18 @@
|
|
|
421
421
|
]
|
|
422
422
|
},
|
|
423
423
|
"@agimon-ai/po-web-search": {
|
|
424
|
-
"version": "0.0.0-alpha.
|
|
424
|
+
"version": "0.0.0-alpha.25",
|
|
425
425
|
"dependencies": [
|
|
426
426
|
"@agimon-ai/po-core",
|
|
427
427
|
"@agimon-ai/po-web-components"
|
|
428
428
|
]
|
|
429
429
|
},
|
|
430
430
|
"@agimon-ai/po-web-security": {
|
|
431
|
-
"version": "0.0.0-alpha.
|
|
431
|
+
"version": "0.0.0-alpha.26",
|
|
432
432
|
"dependencies": []
|
|
433
433
|
},
|
|
434
434
|
"@agimon-ai/po-workflow": {
|
|
435
|
-
"version": "0.0.0-alpha.
|
|
435
|
+
"version": "0.0.0-alpha.26",
|
|
436
436
|
"dependencies": [
|
|
437
437
|
"@agimon-ai/po-core",
|
|
438
438
|
"@agimon-ai/po-minor-mode",
|
|
@@ -13,8 +13,8 @@ let _agimon_ai_po_config_majorModes = require("@agimon-ai/po-config/majorModes")
|
|
|
13
13
|
* `invalidate`; the caller decides when (a finished sync or a watched change).
|
|
14
14
|
*/
|
|
15
15
|
function createBundlerService(options) {
|
|
16
|
-
/**
|
|
17
|
-
const packageUrls = require_packageUrl.createPackageUrls();
|
|
16
|
+
/** Mutable packages get content-addressed URLs; the host's installed payload imports in place. */
|
|
17
|
+
const packageUrls = require_packageUrl.createPackageUrls({ immutableRoot: options.immutableRoot });
|
|
18
18
|
/** URLs whose live import timed out or threw; skipped by every loader until the content changes. */
|
|
19
19
|
const poisoned = /* @__PURE__ */ new Set();
|
|
20
20
|
/** Imports each content-addressed URL once, so a reload imports only what changed. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundlerService.cjs","names":["createPackageUrls","createLiveModuleCache","createPackageReloadCheck","rootCompositions","loadMajorModesConfig","resolveLayers","serverPackageCandidates","mcpPluginCandidates","compositionPackageRoots"],"sources":["../../../../src/builders/server/bundlerService.ts"],"sourcesContent":["import { loadMajorModesConfig, resolveLayers } from '@agimon-ai/po-config/majorModes';\nimport type { LiveMcpPluginEntry } from '@agimon-ai/po-core/mcpFacet';\nimport type { PoApiScope } from '@agimon-ai/po-core/packageApi';\nimport type { LiveServerPackageEntry } from '@agimon-ai/po-core/serverPlugin';\n\nimport type { ExtensionComposition } from '../cli/extensionAssembler';\nimport { rootCompositions } from '../cli/sessionComposition';\nimport { compositionPackageRoots } from '../web';\nimport { serverPackageCandidates } from './index';\nimport { type McpPluginCandidate, mcpPluginCandidates } from './mcpBundle';\nimport { createLiveModuleCache, createPackageReloadCheck, type ScopeChange } from './packageReloadCheck';\nimport { createPackageUrls } from './packageUrl';\n\nexport interface BundlerServiceOptions {\n readonly homeDirectory: string;\n readonly environment: NodeJS.ProcessEnv;\n /** Called after a root's compositions are resolved, so the caller can watch what they read. */\n readonly onCompositions?: (root: string, compositions: readonly ExtensionComposition[]) => void;\n}\n\nexport interface RootSelection {\n readonly root: string;\n readonly majorMode: string;\n readonly activeLayers: string[];\n}\n\ninterface RootMcp {\n readonly candidates: McpPluginCandidate[];\n readonly entries: LiveMcpPluginEntry[];\n}\n\ninterface RootMemo {\n compositions?: ExtensionComposition[];\n selection?: RootSelection;\n packageEntries?: Promise<LiveServerPackageEntry[]>;\n mcp?: Promise<RootMcp>;\n}\n\n/**\n * Process-level owner of what Po compiles and loads: content-addressed package URLs, the\n * live module cache, the poison set, per-scope reload tracking, and a per-root memo of the\n * compositions and entries a root selects. Every reader shares one computation until\n * `invalidate`; the caller decides when (a finished sync or a watched change).\n */\nexport function createBundlerService(options: BundlerServiceOptions) {\n /** Content-addressed import URLs for every Po package entry this server loads. */\n const packageUrls = createPackageUrls();\n /** URLs whose live import timed out or threw; skipped by every loader until the content changes. */\n const poisoned = new Set<string>();\n /** Imports each content-addressed URL once, so a reload imports only what changed. */\n const importer = createLiveModuleCache();\n /** The package identities each mounted global and workspace scope last loaded. */\n const reloadCheck = createPackageReloadCheck();\n const memos = new Map<string, RootMemo>();\n const memoFor = (root: string): RootMemo => {\n let memo = memos.get(root);\n if (memo === undefined) {\n memo = {};\n memos.set(root, memo);\n }\n return memo;\n };\n /** A pending load shared by every reader; a failed one is dropped so the next reader retries. */\n const shared = <T>(\n read: () => Promise<T> | undefined,\n write: (value: Promise<T> | undefined) => void,\n load: () => Promise<T>,\n ) => {\n const existing = read();\n if (existing !== undefined) return existing;\n const loading = load();\n write(loading);\n loading.catch(() => {\n if (read() === loading) write(undefined);\n });\n return loading;\n };\n\n /**\n * Every composition the root's config can select, one per major mode, resolved live.\n * A package sync has not prepared yet is left out with a diagnostic.\n */\n const compositions = (root: string): ExtensionComposition[] => {\n const memo = memoFor(root);\n if (memo.compositions === undefined) {\n memo.compositions = rootCompositions({\n root,\n homeDirectory: options.homeDirectory,\n environment: options.environment,\n tolerateUnsynced: true,\n });\n options.onCompositions?.(root, memo.compositions);\n }\n return memo.compositions;\n };\n\n const defaultSelection = (root: string): RootSelection => {\n const memo = memoFor(root);\n if (memo.selection === undefined) {\n const config = loadMajorModesConfig(root, options.homeDirectory, options.environment);\n const majorMode = config.defaultMajorMode;\n memo.selection = { root, majorMode, activeLayers: resolveLayers(config, majorMode) };\n }\n return memo.selection;\n };\n\n /** The root's server package entries, each with the URL its current package content imports from. */\n const packageEntries = (root: string): Promise<LiveServerPackageEntry[]> => {\n const memo = memoFor(root);\n return shared(\n () => memo.packageEntries,\n (value) => (memo.packageEntries = value),\n async () => {\n const entries: LiveServerPackageEntry[] = [];\n for (const { declaration, module, owners } of serverPackageCandidates(compositions(root)))\n entries.push({\n packageName: declaration.packageName,\n entry: declaration.entry,\n module,\n url: await packageUrls.urlFor(module),\n scopes: declaration.scopes,\n owners,\n required: declaration.required === true,\n });\n return entries;\n },\n );\n };\n\n /** The root's MCP plugin candidates and their entries with current URLs. */\n const mcpEntries = (root: string): Promise<RootMcp> => {\n const memo = memoFor(root);\n return shared(\n () => memo.mcp,\n (value) => (memo.mcp = value),\n async () => {\n const candidates = mcpPluginCandidates(compositions(root));\n const entries: LiveMcpPluginEntry[] = [];\n for (const { declaration, module, owners } of candidates)\n entries.push({\n packageName: declaration.packageName,\n ...(declaration.ui === undefined ? {} : { widgets: declaration.ui.widgets }),\n entry: declaration.entry,\n module,\n url: await packageUrls.urlFor(module),\n owners,\n });\n return { candidates, entries };\n },\n );\n };\n\n /**\n * What a global or workspace scope loads: one identity per server package entry in that scope.\n * The URL changes with package content; `selection` carries ownership and the root's\n * default mode, so a modes.yaml change that selects a package in or out is reloaded too.\n */\n const scopeIdentities = (root: string, scope: PoApiScope, entries: readonly LiveServerPackageEntry[]) => {\n const { majorMode, activeLayers } = defaultSelection(root);\n return entries\n .filter((entry) => entry.scopes.includes(scope))\n .map((entry) => ({\n module: entry.module,\n url: entry.url,\n selection: JSON.stringify([entry.owners, entry.required === true, majorMode, activeLayers]),\n }));\n };\n\n return {\n packageUrls,\n poisoned,\n importer,\n compositions,\n defaultSelection,\n packageEntries,\n mcpEntries,\n /** Every package root the root's config can select, over all its major modes or only `majorMode`'s. */\n packageRoots: (root: string, majorMode?: string): string[] =>\n compositionPackageRoots(\n compositions(root).filter(\n (composition) => majorMode === undefined || composition.majorMode?.name === majorMode,\n ),\n ),\n /** How the scope's current entries differ from what it last committed. */\n diffScope: async (key: string, root: string, scope: PoApiScope): Promise<ScopeChange> =>\n reloadCheck.diff(key, scopeIdentities(root, scope, await packageEntries(root))),\n /** Records what a scope installed, so the next diff compares against it. */\n commitScope: (key: string, root: string, scope: PoApiScope, entries: readonly LiveServerPackageEntry[]): void =>\n reloadCheck.commit(key, scopeIdentities(root, scope, entries)),\n forgetScope: (key: string): void => reloadCheck.forget(key),\n /** Drops every root's memo; the next reader recomputes from disk. */\n invalidate: (): void => memos.clear(),\n };\n}\n\nexport type BundlerService = ReturnType<typeof createBundlerService>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundlerService.cjs","names":["createPackageUrls","createLiveModuleCache","createPackageReloadCheck","rootCompositions","loadMajorModesConfig","resolveLayers","serverPackageCandidates","mcpPluginCandidates","compositionPackageRoots"],"sources":["../../../../src/builders/server/bundlerService.ts"],"sourcesContent":["import { loadMajorModesConfig, resolveLayers } from '@agimon-ai/po-config/majorModes';\nimport type { LiveMcpPluginEntry } from '@agimon-ai/po-core/mcpFacet';\nimport type { PoApiScope } from '@agimon-ai/po-core/packageApi';\nimport type { LiveServerPackageEntry } from '@agimon-ai/po-core/serverPlugin';\n\nimport type { ExtensionComposition } from '../cli/extensionAssembler';\nimport { rootCompositions } from '../cli/sessionComposition';\nimport { compositionPackageRoots } from '../web';\nimport { serverPackageCandidates } from './index';\nimport { type McpPluginCandidate, mcpPluginCandidates } from './mcpBundle';\nimport { createLiveModuleCache, createPackageReloadCheck, type ScopeChange } from './packageReloadCheck';\nimport { createPackageUrls } from './packageUrl';\n\nexport interface BundlerServiceOptions {\n readonly homeDirectory: string;\n readonly environment: NodeJS.ProcessEnv;\n /** Installed host payload: import its packages in place without writing content snapshots beside them. */\n readonly immutableRoot?: string;\n /** Called after a root's compositions are resolved, so the caller can watch what they read. */\n readonly onCompositions?: (root: string, compositions: readonly ExtensionComposition[]) => void;\n}\n\nexport interface RootSelection {\n readonly root: string;\n readonly majorMode: string;\n readonly activeLayers: string[];\n}\n\ninterface RootMcp {\n readonly candidates: McpPluginCandidate[];\n readonly entries: LiveMcpPluginEntry[];\n}\n\ninterface RootMemo {\n compositions?: ExtensionComposition[];\n selection?: RootSelection;\n packageEntries?: Promise<LiveServerPackageEntry[]>;\n mcp?: Promise<RootMcp>;\n}\n\n/**\n * Process-level owner of what Po compiles and loads: content-addressed package URLs, the\n * live module cache, the poison set, per-scope reload tracking, and a per-root memo of the\n * compositions and entries a root selects. Every reader shares one computation until\n * `invalidate`; the caller decides when (a finished sync or a watched change).\n */\nexport function createBundlerService(options: BundlerServiceOptions) {\n /** Mutable packages get content-addressed URLs; the host's installed payload imports in place. */\n const packageUrls = createPackageUrls({ immutableRoot: options.immutableRoot });\n /** URLs whose live import timed out or threw; skipped by every loader until the content changes. */\n const poisoned = new Set<string>();\n /** Imports each content-addressed URL once, so a reload imports only what changed. */\n const importer = createLiveModuleCache();\n /** The package identities each mounted global and workspace scope last loaded. */\n const reloadCheck = createPackageReloadCheck();\n const memos = new Map<string, RootMemo>();\n const memoFor = (root: string): RootMemo => {\n let memo = memos.get(root);\n if (memo === undefined) {\n memo = {};\n memos.set(root, memo);\n }\n return memo;\n };\n /** A pending load shared by every reader; a failed one is dropped so the next reader retries. */\n const shared = <T>(\n read: () => Promise<T> | undefined,\n write: (value: Promise<T> | undefined) => void,\n load: () => Promise<T>,\n ) => {\n const existing = read();\n if (existing !== undefined) return existing;\n const loading = load();\n write(loading);\n loading.catch(() => {\n if (read() === loading) write(undefined);\n });\n return loading;\n };\n\n /**\n * Every composition the root's config can select, one per major mode, resolved live.\n * A package sync has not prepared yet is left out with a diagnostic.\n */\n const compositions = (root: string): ExtensionComposition[] => {\n const memo = memoFor(root);\n if (memo.compositions === undefined) {\n memo.compositions = rootCompositions({\n root,\n homeDirectory: options.homeDirectory,\n environment: options.environment,\n tolerateUnsynced: true,\n });\n options.onCompositions?.(root, memo.compositions);\n }\n return memo.compositions;\n };\n\n const defaultSelection = (root: string): RootSelection => {\n const memo = memoFor(root);\n if (memo.selection === undefined) {\n const config = loadMajorModesConfig(root, options.homeDirectory, options.environment);\n const majorMode = config.defaultMajorMode;\n memo.selection = { root, majorMode, activeLayers: resolveLayers(config, majorMode) };\n }\n return memo.selection;\n };\n\n /** The root's server package entries, each with the URL its current package content imports from. */\n const packageEntries = (root: string): Promise<LiveServerPackageEntry[]> => {\n const memo = memoFor(root);\n return shared(\n () => memo.packageEntries,\n (value) => (memo.packageEntries = value),\n async () => {\n const entries: LiveServerPackageEntry[] = [];\n for (const { declaration, module, owners } of serverPackageCandidates(compositions(root)))\n entries.push({\n packageName: declaration.packageName,\n entry: declaration.entry,\n module,\n url: await packageUrls.urlFor(module),\n scopes: declaration.scopes,\n owners,\n required: declaration.required === true,\n });\n return entries;\n },\n );\n };\n\n /** The root's MCP plugin candidates and their entries with current URLs. */\n const mcpEntries = (root: string): Promise<RootMcp> => {\n const memo = memoFor(root);\n return shared(\n () => memo.mcp,\n (value) => (memo.mcp = value),\n async () => {\n const candidates = mcpPluginCandidates(compositions(root));\n const entries: LiveMcpPluginEntry[] = [];\n for (const { declaration, module, owners } of candidates)\n entries.push({\n packageName: declaration.packageName,\n ...(declaration.ui === undefined ? {} : { widgets: declaration.ui.widgets }),\n entry: declaration.entry,\n module,\n url: await packageUrls.urlFor(module),\n owners,\n });\n return { candidates, entries };\n },\n );\n };\n\n /**\n * What a global or workspace scope loads: one identity per server package entry in that scope.\n * The URL changes with package content; `selection` carries ownership and the root's\n * default mode, so a modes.yaml change that selects a package in or out is reloaded too.\n */\n const scopeIdentities = (root: string, scope: PoApiScope, entries: readonly LiveServerPackageEntry[]) => {\n const { majorMode, activeLayers } = defaultSelection(root);\n return entries\n .filter((entry) => entry.scopes.includes(scope))\n .map((entry) => ({\n module: entry.module,\n url: entry.url,\n selection: JSON.stringify([entry.owners, entry.required === true, majorMode, activeLayers]),\n }));\n };\n\n return {\n packageUrls,\n poisoned,\n importer,\n compositions,\n defaultSelection,\n packageEntries,\n mcpEntries,\n /** Every package root the root's config can select, over all its major modes or only `majorMode`'s. */\n packageRoots: (root: string, majorMode?: string): string[] =>\n compositionPackageRoots(\n compositions(root).filter(\n (composition) => majorMode === undefined || composition.majorMode?.name === majorMode,\n ),\n ),\n /** How the scope's current entries differ from what it last committed. */\n diffScope: async (key: string, root: string, scope: PoApiScope): Promise<ScopeChange> =>\n reloadCheck.diff(key, scopeIdentities(root, scope, await packageEntries(root))),\n /** Records what a scope installed, so the next diff compares against it. */\n commitScope: (key: string, root: string, scope: PoApiScope, entries: readonly LiveServerPackageEntry[]): void =>\n reloadCheck.commit(key, scopeIdentities(root, scope, entries)),\n forgetScope: (key: string): void => reloadCheck.forget(key),\n /** Drops every root's memo; the next reader recomputes from disk. */\n invalidate: (): void => memos.clear(),\n };\n}\n\nexport type BundlerService = ReturnType<typeof createBundlerService>;\n"],"mappings":"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"}
|
|
@@ -13,8 +13,8 @@ import { loadMajorModesConfig, resolveLayers } from "@agimon-ai/po-config/majorM
|
|
|
13
13
|
* `invalidate`; the caller decides when (a finished sync or a watched change).
|
|
14
14
|
*/
|
|
15
15
|
function createBundlerService(options) {
|
|
16
|
-
/**
|
|
17
|
-
const packageUrls = createPackageUrls();
|
|
16
|
+
/** Mutable packages get content-addressed URLs; the host's installed payload imports in place. */
|
|
17
|
+
const packageUrls = createPackageUrls({ immutableRoot: options.immutableRoot });
|
|
18
18
|
/** URLs whose live import timed out or threw; skipped by every loader until the content changes. */
|
|
19
19
|
const poisoned = /* @__PURE__ */ new Set();
|
|
20
20
|
/** Imports each content-addressed URL once, so a reload imports only what changed. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundlerService.mjs","names":[],"sources":["../../../../src/builders/server/bundlerService.ts"],"sourcesContent":["import { loadMajorModesConfig, resolveLayers } from '@agimon-ai/po-config/majorModes';\nimport type { LiveMcpPluginEntry } from '@agimon-ai/po-core/mcpFacet';\nimport type { PoApiScope } from '@agimon-ai/po-core/packageApi';\nimport type { LiveServerPackageEntry } from '@agimon-ai/po-core/serverPlugin';\n\nimport type { ExtensionComposition } from '../cli/extensionAssembler';\nimport { rootCompositions } from '../cli/sessionComposition';\nimport { compositionPackageRoots } from '../web';\nimport { serverPackageCandidates } from './index';\nimport { type McpPluginCandidate, mcpPluginCandidates } from './mcpBundle';\nimport { createLiveModuleCache, createPackageReloadCheck, type ScopeChange } from './packageReloadCheck';\nimport { createPackageUrls } from './packageUrl';\n\nexport interface BundlerServiceOptions {\n readonly homeDirectory: string;\n readonly environment: NodeJS.ProcessEnv;\n /** Called after a root's compositions are resolved, so the caller can watch what they read. */\n readonly onCompositions?: (root: string, compositions: readonly ExtensionComposition[]) => void;\n}\n\nexport interface RootSelection {\n readonly root: string;\n readonly majorMode: string;\n readonly activeLayers: string[];\n}\n\ninterface RootMcp {\n readonly candidates: McpPluginCandidate[];\n readonly entries: LiveMcpPluginEntry[];\n}\n\ninterface RootMemo {\n compositions?: ExtensionComposition[];\n selection?: RootSelection;\n packageEntries?: Promise<LiveServerPackageEntry[]>;\n mcp?: Promise<RootMcp>;\n}\n\n/**\n * Process-level owner of what Po compiles and loads: content-addressed package URLs, the\n * live module cache, the poison set, per-scope reload tracking, and a per-root memo of the\n * compositions and entries a root selects. Every reader shares one computation until\n * `invalidate`; the caller decides when (a finished sync or a watched change).\n */\nexport function createBundlerService(options: BundlerServiceOptions) {\n /** Content-addressed import URLs for every Po package entry this server loads. */\n const packageUrls = createPackageUrls();\n /** URLs whose live import timed out or threw; skipped by every loader until the content changes. */\n const poisoned = new Set<string>();\n /** Imports each content-addressed URL once, so a reload imports only what changed. */\n const importer = createLiveModuleCache();\n /** The package identities each mounted global and workspace scope last loaded. */\n const reloadCheck = createPackageReloadCheck();\n const memos = new Map<string, RootMemo>();\n const memoFor = (root: string): RootMemo => {\n let memo = memos.get(root);\n if (memo === undefined) {\n memo = {};\n memos.set(root, memo);\n }\n return memo;\n };\n /** A pending load shared by every reader; a failed one is dropped so the next reader retries. */\n const shared = <T>(\n read: () => Promise<T> | undefined,\n write: (value: Promise<T> | undefined) => void,\n load: () => Promise<T>,\n ) => {\n const existing = read();\n if (existing !== undefined) return existing;\n const loading = load();\n write(loading);\n loading.catch(() => {\n if (read() === loading) write(undefined);\n });\n return loading;\n };\n\n /**\n * Every composition the root's config can select, one per major mode, resolved live.\n * A package sync has not prepared yet is left out with a diagnostic.\n */\n const compositions = (root: string): ExtensionComposition[] => {\n const memo = memoFor(root);\n if (memo.compositions === undefined) {\n memo.compositions = rootCompositions({\n root,\n homeDirectory: options.homeDirectory,\n environment: options.environment,\n tolerateUnsynced: true,\n });\n options.onCompositions?.(root, memo.compositions);\n }\n return memo.compositions;\n };\n\n const defaultSelection = (root: string): RootSelection => {\n const memo = memoFor(root);\n if (memo.selection === undefined) {\n const config = loadMajorModesConfig(root, options.homeDirectory, options.environment);\n const majorMode = config.defaultMajorMode;\n memo.selection = { root, majorMode, activeLayers: resolveLayers(config, majorMode) };\n }\n return memo.selection;\n };\n\n /** The root's server package entries, each with the URL its current package content imports from. */\n const packageEntries = (root: string): Promise<LiveServerPackageEntry[]> => {\n const memo = memoFor(root);\n return shared(\n () => memo.packageEntries,\n (value) => (memo.packageEntries = value),\n async () => {\n const entries: LiveServerPackageEntry[] = [];\n for (const { declaration, module, owners } of serverPackageCandidates(compositions(root)))\n entries.push({\n packageName: declaration.packageName,\n entry: declaration.entry,\n module,\n url: await packageUrls.urlFor(module),\n scopes: declaration.scopes,\n owners,\n required: declaration.required === true,\n });\n return entries;\n },\n );\n };\n\n /** The root's MCP plugin candidates and their entries with current URLs. */\n const mcpEntries = (root: string): Promise<RootMcp> => {\n const memo = memoFor(root);\n return shared(\n () => memo.mcp,\n (value) => (memo.mcp = value),\n async () => {\n const candidates = mcpPluginCandidates(compositions(root));\n const entries: LiveMcpPluginEntry[] = [];\n for (const { declaration, module, owners } of candidates)\n entries.push({\n packageName: declaration.packageName,\n ...(declaration.ui === undefined ? {} : { widgets: declaration.ui.widgets }),\n entry: declaration.entry,\n module,\n url: await packageUrls.urlFor(module),\n owners,\n });\n return { candidates, entries };\n },\n );\n };\n\n /**\n * What a global or workspace scope loads: one identity per server package entry in that scope.\n * The URL changes with package content; `selection` carries ownership and the root's\n * default mode, so a modes.yaml change that selects a package in or out is reloaded too.\n */\n const scopeIdentities = (root: string, scope: PoApiScope, entries: readonly LiveServerPackageEntry[]) => {\n const { majorMode, activeLayers } = defaultSelection(root);\n return entries\n .filter((entry) => entry.scopes.includes(scope))\n .map((entry) => ({\n module: entry.module,\n url: entry.url,\n selection: JSON.stringify([entry.owners, entry.required === true, majorMode, activeLayers]),\n }));\n };\n\n return {\n packageUrls,\n poisoned,\n importer,\n compositions,\n defaultSelection,\n packageEntries,\n mcpEntries,\n /** Every package root the root's config can select, over all its major modes or only `majorMode`'s. */\n packageRoots: (root: string, majorMode?: string): string[] =>\n compositionPackageRoots(\n compositions(root).filter(\n (composition) => majorMode === undefined || composition.majorMode?.name === majorMode,\n ),\n ),\n /** How the scope's current entries differ from what it last committed. */\n diffScope: async (key: string, root: string, scope: PoApiScope): Promise<ScopeChange> =>\n reloadCheck.diff(key, scopeIdentities(root, scope, await packageEntries(root))),\n /** Records what a scope installed, so the next diff compares against it. */\n commitScope: (key: string, root: string, scope: PoApiScope, entries: readonly LiveServerPackageEntry[]): void =>\n reloadCheck.commit(key, scopeIdentities(root, scope, entries)),\n forgetScope: (key: string): void => reloadCheck.forget(key),\n /** Drops every root's memo; the next reader recomputes from disk. */\n invalidate: (): void => memos.clear(),\n };\n}\n\nexport type BundlerService = ReturnType<typeof createBundlerService>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundlerService.mjs","names":[],"sources":["../../../../src/builders/server/bundlerService.ts"],"sourcesContent":["import { loadMajorModesConfig, resolveLayers } from '@agimon-ai/po-config/majorModes';\nimport type { LiveMcpPluginEntry } from '@agimon-ai/po-core/mcpFacet';\nimport type { PoApiScope } from '@agimon-ai/po-core/packageApi';\nimport type { LiveServerPackageEntry } from '@agimon-ai/po-core/serverPlugin';\n\nimport type { ExtensionComposition } from '../cli/extensionAssembler';\nimport { rootCompositions } from '../cli/sessionComposition';\nimport { compositionPackageRoots } from '../web';\nimport { serverPackageCandidates } from './index';\nimport { type McpPluginCandidate, mcpPluginCandidates } from './mcpBundle';\nimport { createLiveModuleCache, createPackageReloadCheck, type ScopeChange } from './packageReloadCheck';\nimport { createPackageUrls } from './packageUrl';\n\nexport interface BundlerServiceOptions {\n readonly homeDirectory: string;\n readonly environment: NodeJS.ProcessEnv;\n /** Installed host payload: import its packages in place without writing content snapshots beside them. */\n readonly immutableRoot?: string;\n /** Called after a root's compositions are resolved, so the caller can watch what they read. */\n readonly onCompositions?: (root: string, compositions: readonly ExtensionComposition[]) => void;\n}\n\nexport interface RootSelection {\n readonly root: string;\n readonly majorMode: string;\n readonly activeLayers: string[];\n}\n\ninterface RootMcp {\n readonly candidates: McpPluginCandidate[];\n readonly entries: LiveMcpPluginEntry[];\n}\n\ninterface RootMemo {\n compositions?: ExtensionComposition[];\n selection?: RootSelection;\n packageEntries?: Promise<LiveServerPackageEntry[]>;\n mcp?: Promise<RootMcp>;\n}\n\n/**\n * Process-level owner of what Po compiles and loads: content-addressed package URLs, the\n * live module cache, the poison set, per-scope reload tracking, and a per-root memo of the\n * compositions and entries a root selects. Every reader shares one computation until\n * `invalidate`; the caller decides when (a finished sync or a watched change).\n */\nexport function createBundlerService(options: BundlerServiceOptions) {\n /** Mutable packages get content-addressed URLs; the host's installed payload imports in place. */\n const packageUrls = createPackageUrls({ immutableRoot: options.immutableRoot });\n /** URLs whose live import timed out or threw; skipped by every loader until the content changes. */\n const poisoned = new Set<string>();\n /** Imports each content-addressed URL once, so a reload imports only what changed. */\n const importer = createLiveModuleCache();\n /** The package identities each mounted global and workspace scope last loaded. */\n const reloadCheck = createPackageReloadCheck();\n const memos = new Map<string, RootMemo>();\n const memoFor = (root: string): RootMemo => {\n let memo = memos.get(root);\n if (memo === undefined) {\n memo = {};\n memos.set(root, memo);\n }\n return memo;\n };\n /** A pending load shared by every reader; a failed one is dropped so the next reader retries. */\n const shared = <T>(\n read: () => Promise<T> | undefined,\n write: (value: Promise<T> | undefined) => void,\n load: () => Promise<T>,\n ) => {\n const existing = read();\n if (existing !== undefined) return existing;\n const loading = load();\n write(loading);\n loading.catch(() => {\n if (read() === loading) write(undefined);\n });\n return loading;\n };\n\n /**\n * Every composition the root's config can select, one per major mode, resolved live.\n * A package sync has not prepared yet is left out with a diagnostic.\n */\n const compositions = (root: string): ExtensionComposition[] => {\n const memo = memoFor(root);\n if (memo.compositions === undefined) {\n memo.compositions = rootCompositions({\n root,\n homeDirectory: options.homeDirectory,\n environment: options.environment,\n tolerateUnsynced: true,\n });\n options.onCompositions?.(root, memo.compositions);\n }\n return memo.compositions;\n };\n\n const defaultSelection = (root: string): RootSelection => {\n const memo = memoFor(root);\n if (memo.selection === undefined) {\n const config = loadMajorModesConfig(root, options.homeDirectory, options.environment);\n const majorMode = config.defaultMajorMode;\n memo.selection = { root, majorMode, activeLayers: resolveLayers(config, majorMode) };\n }\n return memo.selection;\n };\n\n /** The root's server package entries, each with the URL its current package content imports from. */\n const packageEntries = (root: string): Promise<LiveServerPackageEntry[]> => {\n const memo = memoFor(root);\n return shared(\n () => memo.packageEntries,\n (value) => (memo.packageEntries = value),\n async () => {\n const entries: LiveServerPackageEntry[] = [];\n for (const { declaration, module, owners } of serverPackageCandidates(compositions(root)))\n entries.push({\n packageName: declaration.packageName,\n entry: declaration.entry,\n module,\n url: await packageUrls.urlFor(module),\n scopes: declaration.scopes,\n owners,\n required: declaration.required === true,\n });\n return entries;\n },\n );\n };\n\n /** The root's MCP plugin candidates and their entries with current URLs. */\n const mcpEntries = (root: string): Promise<RootMcp> => {\n const memo = memoFor(root);\n return shared(\n () => memo.mcp,\n (value) => (memo.mcp = value),\n async () => {\n const candidates = mcpPluginCandidates(compositions(root));\n const entries: LiveMcpPluginEntry[] = [];\n for (const { declaration, module, owners } of candidates)\n entries.push({\n packageName: declaration.packageName,\n ...(declaration.ui === undefined ? {} : { widgets: declaration.ui.widgets }),\n entry: declaration.entry,\n module,\n url: await packageUrls.urlFor(module),\n owners,\n });\n return { candidates, entries };\n },\n );\n };\n\n /**\n * What a global or workspace scope loads: one identity per server package entry in that scope.\n * The URL changes with package content; `selection` carries ownership and the root's\n * default mode, so a modes.yaml change that selects a package in or out is reloaded too.\n */\n const scopeIdentities = (root: string, scope: PoApiScope, entries: readonly LiveServerPackageEntry[]) => {\n const { majorMode, activeLayers } = defaultSelection(root);\n return entries\n .filter((entry) => entry.scopes.includes(scope))\n .map((entry) => ({\n module: entry.module,\n url: entry.url,\n selection: JSON.stringify([entry.owners, entry.required === true, majorMode, activeLayers]),\n }));\n };\n\n return {\n packageUrls,\n poisoned,\n importer,\n compositions,\n defaultSelection,\n packageEntries,\n mcpEntries,\n /** Every package root the root's config can select, over all its major modes or only `majorMode`'s. */\n packageRoots: (root: string, majorMode?: string): string[] =>\n compositionPackageRoots(\n compositions(root).filter(\n (composition) => majorMode === undefined || composition.majorMode?.name === majorMode,\n ),\n ),\n /** How the scope's current entries differ from what it last committed. */\n diffScope: async (key: string, root: string, scope: PoApiScope): Promise<ScopeChange> =>\n reloadCheck.diff(key, scopeIdentities(root, scope, await packageEntries(root))),\n /** Records what a scope installed, so the next diff compares against it. */\n commitScope: (key: string, root: string, scope: PoApiScope, entries: readonly LiveServerPackageEntry[]): void =>\n reloadCheck.commit(key, scopeIdentities(root, scope, entries)),\n forgetScope: (key: string): void => reloadCheck.forget(key),\n /** Drops every root's memo; the next reader recomputes from disk. */\n invalidate: (): void => memos.clear(),\n };\n}\n\nexport type BundlerService = ReturnType<typeof createBundlerService>;\n"],"mappings":"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"}
|
|
@@ -202,6 +202,23 @@ async function createComputerUseBinding(transport = process, remotePolicy = {})
|
|
|
202
202
|
revokeDevice(deviceId) {
|
|
203
203
|
for (const [sessionId, delegated] of delegations) if (delegated.deviceId === deviceId) revoke(sessionId);
|
|
204
204
|
},
|
|
205
|
+
authorizePermissions(headers, change) {
|
|
206
|
+
if (!available) return false;
|
|
207
|
+
if (nativeAuthorized(headers)) return true;
|
|
208
|
+
const caller = remoteCaller(headers);
|
|
209
|
+
if (caller === void 0) return false;
|
|
210
|
+
if (!change) return true;
|
|
211
|
+
return remotePolicy.stepUpRequired?.() === true ? caller.stepUp === "verified" : caller.stepUp === "not-required";
|
|
212
|
+
},
|
|
213
|
+
async permissions(permission) {
|
|
214
|
+
if (!available) throw new Error("Desktop is unavailable.");
|
|
215
|
+
const result = await exchange({
|
|
216
|
+
type: "po:desktop:permissions",
|
|
217
|
+
...permission === void 0 ? {} : { permission }
|
|
218
|
+
}, permission === void 0 ? 1e4 : 12e4);
|
|
219
|
+
if (result.ok !== true) throw new Error(typeof result.error === "string" ? result.error : "Desktop permission request failed.");
|
|
220
|
+
return result.result;
|
|
221
|
+
},
|
|
205
222
|
ownsSession: (sessionId) => ownedSessions.has(sessionId),
|
|
206
223
|
forgetSession: (sessionId) => {
|
|
207
224
|
revoke(sessionId);
|