@shawnowen/comet-mcp 2.4.1 → 2.4.2
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 +12 -1
- package/dist/binding-reaper.d.ts +46 -0
- package/dist/binding-reaper.js +73 -0
- package/dist/http-server.js +121 -0
- package/dist/index.js +310 -6
- package/dist/project-config.d.ts +46 -0
- package/dist/project-config.js +166 -0
- package/dist/tab-groups.d.ts +21 -1
- package/dist/tab-groups.js +184 -0
- package/dist/window-bindings.d.ts +48 -0
- package/dist/window-bindings.js +85 -0
- package/extension/background.js +38 -17
- package/extension/manifest.json +16 -1
- package/extension/perplexity-capability-manifest.json +1181 -0
- package/extension/perplexity-capability-manifest.schema.json +142 -0
- package/extension/session-logic.js +696 -25
- package/extension/session-manager.html +13 -1
- package/extension/sidepanel.css +21 -6
- package/extension/sidepanel.js +598 -68
- package/package.json +1 -1
- package/dist/discovery/capability-entry.d.ts +0 -215
- package/dist/discovery/capability-entry.js +0 -13
- package/dist/discovery/description-template.d.ts +0 -40
- package/dist/discovery/description-template.js +0 -61
- package/dist/discovery/golden-queries.fixture.d.ts +0 -22
- package/dist/discovery/golden-queries.fixture.js +0 -137
- package/dist/discovery/mcp-source.d.ts +0 -38
- package/dist/discovery/mcp-source.js +0 -70
- package/dist/discovery/metadata-completeness.d.ts +0 -48
- package/dist/discovery/metadata-completeness.js +0 -83
- package/dist/discovery/registry.d.ts +0 -35
- package/dist/discovery/registry.js +0 -35
- package/dist/discovery/safety.d.ts +0 -44
- package/dist/discovery/safety.js +0 -59
- package/dist/discovery/schema-validator.d.ts +0 -36
- package/dist/discovery/schema-validator.js +0 -257
- package/dist/discovery/source-error.d.ts +0 -47
- package/dist/discovery/source-error.js +0 -95
- package/dist/discovery/tool-meta.d.ts +0 -41
- package/dist/discovery/tool-meta.js +0 -229
- package/dist/discovery/virtual-tools.d.ts +0 -20
- package/dist/discovery/virtual-tools.js +0 -69
- package/dist/task-thread-aggregator.d.ts +0 -34
- package/dist/task-thread-aggregator.js +0 -480
- package/dist/task-thread-canonical.d.ts +0 -142
- package/dist/task-thread-canonical.js +0 -116
|
@@ -0,0 +1,1181 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"spec": "081-equanaut-universal-browser-orchestrator",
|
|
4
|
+
"lastVerified": "2026-05-18",
|
|
5
|
+
"guaranteeModel": "A capability is not considered controlled until it has an owned adapter, a readable result path, lifecycle/audit coverage, tests, and a documented fallback. Vendor-private or account-gated Comet behavior stays explicitly blocked or setup-required instead of being counted as done.",
|
|
6
|
+
"sources": [
|
|
7
|
+
{
|
|
8
|
+
"id": "perplexity-assistant-panel",
|
|
9
|
+
"title": "Comet Assistant Panel",
|
|
10
|
+
"url": "https://comet-help.perplexity.ai/en/articles/11734688-assistant-panel"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "perplexity-privacy",
|
|
14
|
+
"title": "Comet Assistant Privacy and Data Use",
|
|
15
|
+
"url": "https://comet-help.perplexity.ai/en/articles/12867415-comet-assistant-privacy-data-use"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "perplexity-access-controls",
|
|
19
|
+
"title": "Control what Comet Assistant can use",
|
|
20
|
+
"url": "https://comet-help.perplexity.ai/en/articles/12658082-control-what-comet-assistant-can-use"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "perplexity-browser-engine",
|
|
24
|
+
"title": "What is Comet's Browser Engine?",
|
|
25
|
+
"url": "https://comet-help.perplexity.ai/en/articles/11583798-what-is-comet-s-browser-engine"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "chrome-tabs-api",
|
|
29
|
+
"title": "chrome.tabs API",
|
|
30
|
+
"url": "https://developer.chrome.com/docs/extensions/reference/api/tabs"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "chrome-tabgroups-api",
|
|
34
|
+
"title": "chrome.tabGroups API",
|
|
35
|
+
"url": "https://developer.chrome.com/docs/extensions/reference/api/tabGroups"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "chrome-debugger-api",
|
|
39
|
+
"title": "chrome.debugger API",
|
|
40
|
+
"url": "https://developer.chrome.com/docs/extensions/reference/api/debugger"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "chrome-webnavigation-api",
|
|
44
|
+
"title": "chrome.webNavigation API",
|
|
45
|
+
"url": "https://developer.chrome.com/docs/extensions/reference/api/webNavigation"
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"scoreCriteria": [
|
|
49
|
+
"endToEnd",
|
|
50
|
+
"stableHook",
|
|
51
|
+
"readableResult",
|
|
52
|
+
"multiWindowSafe",
|
|
53
|
+
"lifecycleTracked",
|
|
54
|
+
"manifestContract",
|
|
55
|
+
"testCoverage",
|
|
56
|
+
"documented",
|
|
57
|
+
"retryable",
|
|
58
|
+
"fallbackReady"
|
|
59
|
+
],
|
|
60
|
+
"criteriaProfiles": {
|
|
61
|
+
"controlled": {
|
|
62
|
+
"endToEnd": true,
|
|
63
|
+
"stableHook": true,
|
|
64
|
+
"readableResult": true,
|
|
65
|
+
"multiWindowSafe": true,
|
|
66
|
+
"lifecycleTracked": true,
|
|
67
|
+
"manifestContract": true,
|
|
68
|
+
"testCoverage": true,
|
|
69
|
+
"documented": true,
|
|
70
|
+
"retryable": true,
|
|
71
|
+
"fallbackReady": true
|
|
72
|
+
},
|
|
73
|
+
"planned": {
|
|
74
|
+
"endToEnd": false,
|
|
75
|
+
"stableHook": false,
|
|
76
|
+
"readableResult": false,
|
|
77
|
+
"multiWindowSafe": false,
|
|
78
|
+
"lifecycleTracked": false,
|
|
79
|
+
"manifestContract": true,
|
|
80
|
+
"testCoverage": false,
|
|
81
|
+
"documented": true,
|
|
82
|
+
"retryable": false,
|
|
83
|
+
"fallbackReady": true
|
|
84
|
+
},
|
|
85
|
+
"setupRequired": {
|
|
86
|
+
"endToEnd": false,
|
|
87
|
+
"stableHook": true,
|
|
88
|
+
"readableResult": false,
|
|
89
|
+
"multiWindowSafe": false,
|
|
90
|
+
"lifecycleTracked": false,
|
|
91
|
+
"manifestContract": true,
|
|
92
|
+
"testCoverage": false,
|
|
93
|
+
"documented": true,
|
|
94
|
+
"retryable": false,
|
|
95
|
+
"fallbackReady": true
|
|
96
|
+
},
|
|
97
|
+
"vendorBlocked": {
|
|
98
|
+
"endToEnd": false,
|
|
99
|
+
"stableHook": false,
|
|
100
|
+
"readableResult": false,
|
|
101
|
+
"multiWindowSafe": false,
|
|
102
|
+
"lifecycleTracked": false,
|
|
103
|
+
"manifestContract": true,
|
|
104
|
+
"testCoverage": false,
|
|
105
|
+
"documented": true,
|
|
106
|
+
"retryable": false,
|
|
107
|
+
"fallbackReady": true
|
|
108
|
+
},
|
|
109
|
+
"privateOutOfScope": {
|
|
110
|
+
"endToEnd": false,
|
|
111
|
+
"stableHook": true,
|
|
112
|
+
"readableResult": false,
|
|
113
|
+
"multiWindowSafe": true,
|
|
114
|
+
"lifecycleTracked": false,
|
|
115
|
+
"manifestContract": true,
|
|
116
|
+
"testCoverage": false,
|
|
117
|
+
"documented": true,
|
|
118
|
+
"retryable": false,
|
|
119
|
+
"fallbackReady": true
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"groups": [
|
|
123
|
+
{
|
|
124
|
+
"id": "A",
|
|
125
|
+
"name": "Composer and Input",
|
|
126
|
+
"objective": "Route every sidecar input path through Equanaut Prime before native Comet."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "B",
|
|
130
|
+
"name": "Modes and Search",
|
|
131
|
+
"objective": "Expose Comet answer modes, search surfaces, and model selections as deterministic commands."
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "C",
|
|
135
|
+
"name": "Page Context and Actions",
|
|
136
|
+
"objective": "Make current-tab, mentioned-tab, selected-text, and page-action context readable and auditable."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "D",
|
|
140
|
+
"name": "Browser Control",
|
|
141
|
+
"objective": "Own tab, group, window, session, screenshot, and navigation control through extension APIs."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "E",
|
|
145
|
+
"name": "Memory and Threads",
|
|
146
|
+
"objective": "Bind Perplexity threads and Equa task-thread records into durable orchestration state."
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"id": "F",
|
|
150
|
+
"name": "Shortcuts and Skills",
|
|
151
|
+
"objective": "Turn slash commands, skills, and workflow templates into Prime-routable tools."
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "G",
|
|
155
|
+
"name": "Citations and Output",
|
|
156
|
+
"objective": "Read, export, and structure Comet answers without losing source evidence."
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "H",
|
|
160
|
+
"name": "Orchestration and Agents",
|
|
161
|
+
"objective": "Run Equabot tab agents, fleets, and external subagents behind one Prime command envelope."
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "I",
|
|
165
|
+
"name": "Account, Pro, and Policy",
|
|
166
|
+
"objective": "Inventory account-gated features and privacy controls without bypassing consent or vendor boundaries."
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"id": "J",
|
|
170
|
+
"name": "Labs and Apps",
|
|
171
|
+
"objective": "Track new Perplexity surfaces, mobile handoff, extension health, and parity intake."
|
|
172
|
+
}
|
|
173
|
+
],
|
|
174
|
+
"capabilities": [
|
|
175
|
+
{
|
|
176
|
+
"id": "A1",
|
|
177
|
+
"group": "A",
|
|
178
|
+
"name": "Sidecar text prompt submit",
|
|
179
|
+
"nativeSurface": "Comet Assistant sidecar composer",
|
|
180
|
+
"nativeHook": "assistant-panel-composer",
|
|
181
|
+
"controlAdapter": "prime.sidecar.composer.submit",
|
|
182
|
+
"responseReader": "assistant.thread.lastAnswer",
|
|
183
|
+
"permission": "host:perplexity.ai,scripting",
|
|
184
|
+
"status": "planned",
|
|
185
|
+
"criteriaProfile": "planned",
|
|
186
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
187
|
+
"fallbacks": ["comet-mcp comet_ask", "manual sidecar prompt"],
|
|
188
|
+
"nextStep": "Bind composer selectors in the perplexity-ui adapter and record response completion."
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"id": "A2",
|
|
192
|
+
"group": "A",
|
|
193
|
+
"name": "Sidecar voice input submit",
|
|
194
|
+
"nativeSurface": "Comet Assistant microphone composer",
|
|
195
|
+
"nativeHook": "assistant-panel-microphone",
|
|
196
|
+
"controlAdapter": "prime.sidecar.voice.submit",
|
|
197
|
+
"responseReader": "assistant.thread.lastAnswer",
|
|
198
|
+
"permission": "microphone,host:perplexity.ai",
|
|
199
|
+
"status": "setup_required",
|
|
200
|
+
"criteriaProfile": "setupRequired",
|
|
201
|
+
"evidence": ["perplexity-assistant-panel", "perplexity-access-controls"],
|
|
202
|
+
"fallbacks": ["text prompt submit", "manual microphone consent"],
|
|
203
|
+
"nextStep": "Add a permission-health check and deterministic downgrade to text when microphone access is unavailable."
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"id": "A3",
|
|
207
|
+
"group": "A",
|
|
208
|
+
"name": "Attachment upload",
|
|
209
|
+
"nativeSurface": "Comet sidecar add/attach control",
|
|
210
|
+
"nativeHook": "assistant-panel-plus-menu",
|
|
211
|
+
"controlAdapter": "prime.sidecar.attachment.upload",
|
|
212
|
+
"responseReader": "assistant.thread.attachmentState",
|
|
213
|
+
"permission": "host:perplexity.ai,scripting",
|
|
214
|
+
"status": "planned",
|
|
215
|
+
"criteriaProfile": "planned",
|
|
216
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
217
|
+
"fallbacks": ["paste file text", "external document MCP"],
|
|
218
|
+
"nextStep": "Map plus-menu attachment flow and preserve file provenance in the Prime command envelope."
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": "A4",
|
|
222
|
+
"group": "A",
|
|
223
|
+
"name": "Plus-menu tool selection",
|
|
224
|
+
"nativeSurface": "Comet sidecar plus menu",
|
|
225
|
+
"nativeHook": "assistant-panel-plus-menu",
|
|
226
|
+
"controlAdapter": "prime.sidecar.menu.select",
|
|
227
|
+
"responseReader": "assistant.thread.toolBadge",
|
|
228
|
+
"permission": "host:perplexity.ai,scripting",
|
|
229
|
+
"status": "planned",
|
|
230
|
+
"criteriaProfile": "planned",
|
|
231
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
232
|
+
"fallbacks": ["slash command equivalent", "MCP direct tool call"],
|
|
233
|
+
"nextStep": "Inventory visible plus-menu items per account and add stable menu item selectors."
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"id": "A5",
|
|
237
|
+
"group": "A",
|
|
238
|
+
"name": "Stop or cancel generation",
|
|
239
|
+
"nativeSurface": "Comet Assistant active response",
|
|
240
|
+
"nativeHook": "assistant-panel-stop-button",
|
|
241
|
+
"controlAdapter": "prime.sidecar.response.stop",
|
|
242
|
+
"responseReader": "assistant.thread.runState",
|
|
243
|
+
"permission": "host:perplexity.ai,scripting",
|
|
244
|
+
"status": "planned",
|
|
245
|
+
"criteriaProfile": "planned",
|
|
246
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
247
|
+
"fallbacks": ["comet_stop", "tab reload with audit note"],
|
|
248
|
+
"nextStep": "Wire stop button detection and add timeout/abort policy to Prime runs."
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"id": "A6",
|
|
252
|
+
"group": "A",
|
|
253
|
+
"name": "Model selector",
|
|
254
|
+
"nativeSurface": "Comet sidecar model selector",
|
|
255
|
+
"nativeHook": "assistant-panel-model-selector",
|
|
256
|
+
"controlAdapter": "prime.sidecar.model.select",
|
|
257
|
+
"responseReader": "assistant.thread.modelBadge",
|
|
258
|
+
"permission": "host:perplexity.ai,scripting",
|
|
259
|
+
"status": "planned",
|
|
260
|
+
"criteriaProfile": "planned",
|
|
261
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
262
|
+
"fallbacks": ["Equanaut local model route", "default account model"],
|
|
263
|
+
"nextStep": "Detect available model labels per account and prevent commands for unavailable models."
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"id": "A7",
|
|
267
|
+
"group": "A",
|
|
268
|
+
"name": "Temporary thread toggle",
|
|
269
|
+
"nativeSurface": "Comet Assistant thread settings",
|
|
270
|
+
"nativeHook": "assistant-panel-temporary-thread",
|
|
271
|
+
"controlAdapter": "prime.sidecar.thread.temporary",
|
|
272
|
+
"responseReader": "assistant.thread.retentionBadge",
|
|
273
|
+
"permission": "host:perplexity.ai,scripting",
|
|
274
|
+
"status": "setup_required",
|
|
275
|
+
"criteriaProfile": "setupRequired",
|
|
276
|
+
"evidence": ["perplexity-privacy"],
|
|
277
|
+
"fallbacks": ["Equa local no-retention transcript", "manual thread deletion"],
|
|
278
|
+
"nextStep": "Gate temporary-thread controls behind account-visible settings and retain Equa audit locally."
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"id": "A8",
|
|
282
|
+
"group": "A",
|
|
283
|
+
"name": "Inline assistant selected-text prompt",
|
|
284
|
+
"nativeSurface": "Comet Inline Assistant",
|
|
285
|
+
"nativeHook": "inline-assistant-selection",
|
|
286
|
+
"controlAdapter": "prime.inline.selection.ask",
|
|
287
|
+
"responseReader": "assistant.inline.lastAnswer",
|
|
288
|
+
"permission": "activeTab,scripting",
|
|
289
|
+
"status": "planned",
|
|
290
|
+
"criteriaProfile": "planned",
|
|
291
|
+
"evidence": ["perplexity-privacy"],
|
|
292
|
+
"fallbacks": ["selected text extraction", "sidecar prompt with quoted selection"],
|
|
293
|
+
"nextStep": "Capture selected text through extension scripting before invoking native inline controls."
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"id": "A9",
|
|
297
|
+
"group": "A",
|
|
298
|
+
"name": "Keyboard shortcut opens Prime sidecar",
|
|
299
|
+
"nativeSurface": "Extension action command",
|
|
300
|
+
"nativeHook": "manifest.commands._execute_action",
|
|
301
|
+
"controlAdapter": "prime.extension.openSidecar",
|
|
302
|
+
"responseReader": "extension.sidePanel.openState",
|
|
303
|
+
"permission": "commands,sidePanel",
|
|
304
|
+
"status": "controlled",
|
|
305
|
+
"criteriaProfile": "controlled",
|
|
306
|
+
"evidence": ["perplexity-browser-engine"],
|
|
307
|
+
"fallbacks": ["extension toolbar action", "Comet side panel button"],
|
|
308
|
+
"nextStep": "Keep command binding in manifest review and expose shortcut health in the parity report."
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"id": "B1",
|
|
312
|
+
"group": "B",
|
|
313
|
+
"name": "Search mode",
|
|
314
|
+
"nativeSurface": "Perplexity search mode",
|
|
315
|
+
"nativeHook": "assistant-panel-search-mode",
|
|
316
|
+
"controlAdapter": "prime.mode.search",
|
|
317
|
+
"responseReader": "assistant.thread.modeBadge",
|
|
318
|
+
"permission": "host:perplexity.ai,scripting",
|
|
319
|
+
"status": "planned",
|
|
320
|
+
"criteriaProfile": "planned",
|
|
321
|
+
"evidence": ["perplexity-browser-engine"],
|
|
322
|
+
"fallbacks": ["comet_search script", "Perplexity web search page"],
|
|
323
|
+
"nextStep": "Map account-visible mode buttons and add mode selection verification."
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"id": "B2",
|
|
327
|
+
"group": "B",
|
|
328
|
+
"name": "Research mode",
|
|
329
|
+
"nativeSurface": "Perplexity research mode",
|
|
330
|
+
"nativeHook": "assistant-panel-research-mode",
|
|
331
|
+
"controlAdapter": "prime.mode.research",
|
|
332
|
+
"responseReader": "assistant.thread.modeBadge",
|
|
333
|
+
"permission": "host:perplexity.ai,scripting",
|
|
334
|
+
"status": "planned",
|
|
335
|
+
"criteriaProfile": "planned",
|
|
336
|
+
"evidence": ["perplexity-browser-engine"],
|
|
337
|
+
"fallbacks": ["comet_research skill", "Perplexity web research prompt"],
|
|
338
|
+
"nextStep": "Inventory current research mode label and completion signals."
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "B3",
|
|
342
|
+
"group": "B",
|
|
343
|
+
"name": "Write mode",
|
|
344
|
+
"nativeSurface": "Perplexity writing mode",
|
|
345
|
+
"nativeHook": "assistant-panel-write-mode",
|
|
346
|
+
"controlAdapter": "prime.mode.write",
|
|
347
|
+
"responseReader": "assistant.thread.modeBadge",
|
|
348
|
+
"permission": "host:perplexity.ai,scripting",
|
|
349
|
+
"status": "planned",
|
|
350
|
+
"criteriaProfile": "planned",
|
|
351
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
352
|
+
"fallbacks": ["Equa document skill", "text prompt template"],
|
|
353
|
+
"nextStep": "Add write-mode prompt templates and mode selector evidence."
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"id": "B4",
|
|
357
|
+
"group": "B",
|
|
358
|
+
"name": "Agent action mode",
|
|
359
|
+
"nativeSurface": "Comet Assistant agent automation",
|
|
360
|
+
"nativeHook": "assistant-panel-agent-mode",
|
|
361
|
+
"controlAdapter": "prime.mode.agent",
|
|
362
|
+
"responseReader": "assistant.thread.agentRunState",
|
|
363
|
+
"permission": "host:perplexity.ai,scripting",
|
|
364
|
+
"status": "setup_required",
|
|
365
|
+
"criteriaProfile": "setupRequired",
|
|
366
|
+
"evidence": ["perplexity-privacy", "perplexity-access-controls"],
|
|
367
|
+
"fallbacks": ["Equanaut Prime extension action", "MCP direct connector"],
|
|
368
|
+
"nextStep": "Detect first-run approval state and route any approval-required task through an explicit setup checklist."
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
"id": "B5",
|
|
372
|
+
"group": "B",
|
|
373
|
+
"name": "Discover and news surface",
|
|
374
|
+
"nativeSurface": "Perplexity discover/news page",
|
|
375
|
+
"nativeHook": "perplexity-discover-route",
|
|
376
|
+
"controlAdapter": "prime.perplexity.discover",
|
|
377
|
+
"responseReader": "page.readability.summary",
|
|
378
|
+
"permission": "host:perplexity.ai,tabs",
|
|
379
|
+
"status": "planned",
|
|
380
|
+
"criteriaProfile": "planned",
|
|
381
|
+
"evidence": ["perplexity-browser-engine"],
|
|
382
|
+
"fallbacks": ["web search", "RSS/news connector"],
|
|
383
|
+
"nextStep": "Catalog discover URLs and add route-specific extraction fixtures."
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"id": "B6",
|
|
387
|
+
"group": "B",
|
|
388
|
+
"name": "Shopping or task-specific mode",
|
|
389
|
+
"nativeSurface": "Comet task-specific assistant mode",
|
|
390
|
+
"nativeHook": "assistant-panel-task-mode",
|
|
391
|
+
"controlAdapter": "prime.mode.taskSpecific",
|
|
392
|
+
"responseReader": "assistant.thread.modeBadge",
|
|
393
|
+
"permission": "host:perplexity.ai,scripting",
|
|
394
|
+
"status": "planned",
|
|
395
|
+
"criteriaProfile": "planned",
|
|
396
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
397
|
+
"fallbacks": ["domain playbook", "generic web workflow"],
|
|
398
|
+
"nextStep": "Snapshot visible account modes and add mode name aliases to the manifest."
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"id": "B7",
|
|
402
|
+
"group": "B",
|
|
403
|
+
"name": "Focus or domain source mode",
|
|
404
|
+
"nativeSurface": "Perplexity focus/source selector",
|
|
405
|
+
"nativeHook": "assistant-panel-focus-selector",
|
|
406
|
+
"controlAdapter": "prime.mode.focus",
|
|
407
|
+
"responseReader": "assistant.thread.sourceFilterBadge",
|
|
408
|
+
"permission": "host:perplexity.ai,scripting",
|
|
409
|
+
"status": "planned",
|
|
410
|
+
"criteriaProfile": "planned",
|
|
411
|
+
"evidence": ["perplexity-browser-engine"],
|
|
412
|
+
"fallbacks": ["domain-restricted web search", "connector-specific MCP"],
|
|
413
|
+
"nextStep": "Record focus selector labels and bind them to command schema enums."
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"id": "B8",
|
|
417
|
+
"group": "B",
|
|
418
|
+
"name": "Pro model and engine setting",
|
|
419
|
+
"nativeSurface": "Perplexity account model settings",
|
|
420
|
+
"nativeHook": "perplexity-account-model-settings",
|
|
421
|
+
"controlAdapter": "prime.account.modelSetting",
|
|
422
|
+
"responseReader": "account.settings.modelState",
|
|
423
|
+
"permission": "host:perplexity.ai,tabs",
|
|
424
|
+
"status": "setup_required",
|
|
425
|
+
"criteriaProfile": "setupRequired",
|
|
426
|
+
"evidence": ["perplexity-access-controls"],
|
|
427
|
+
"fallbacks": ["Equa model router", "default account setting"],
|
|
428
|
+
"nextStep": "Add account-visible settings inventory without storing credentials or private tokens."
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"id": "C1",
|
|
432
|
+
"group": "C",
|
|
433
|
+
"name": "Current visible tab extraction",
|
|
434
|
+
"nativeSurface": "Active Comet tab content",
|
|
435
|
+
"nativeHook": "chrome.tabs.query.active+scripting.executeScript",
|
|
436
|
+
"controlAdapter": "prime.context.currentTab.read",
|
|
437
|
+
"responseReader": "extension.tabContentExtractor",
|
|
438
|
+
"permission": "activeTab,scripting,tabs",
|
|
439
|
+
"status": "controlled",
|
|
440
|
+
"criteriaProfile": "controlled",
|
|
441
|
+
"evidence": ["chrome-tabs-api", "perplexity-assistant-panel"],
|
|
442
|
+
"fallbacks": ["readability extraction", "manual tab mention"],
|
|
443
|
+
"nextStep": "Keep extraction fixtures updated for page classes that block content scripts."
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"id": "C2",
|
|
447
|
+
"group": "C",
|
|
448
|
+
"name": "Mentioned at-tab extraction",
|
|
449
|
+
"nativeSurface": "Comet @tab context mention",
|
|
450
|
+
"nativeHook": "assistant-panel-at-tab-menu",
|
|
451
|
+
"controlAdapter": "prime.context.mentionedTab.read",
|
|
452
|
+
"responseReader": "assistant.thread.contextBadge",
|
|
453
|
+
"permission": "tabs,host:perplexity.ai",
|
|
454
|
+
"status": "planned",
|
|
455
|
+
"criteriaProfile": "planned",
|
|
456
|
+
"evidence": ["perplexity-assistant-panel", "perplexity-privacy"],
|
|
457
|
+
"fallbacks": ["extension tab catalog", "tab URL/title selector"],
|
|
458
|
+
"nextStep": "Bridge extension tab catalog into the sidecar prompt when native @tab is unavailable."
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
"id": "C3",
|
|
462
|
+
"group": "C",
|
|
463
|
+
"name": "Multi-tab summary",
|
|
464
|
+
"nativeSurface": "Comet Assistant multi-tab context",
|
|
465
|
+
"nativeHook": "assistant-panel-multi-tab-summary",
|
|
466
|
+
"controlAdapter": "prime.context.multiTab.summarize",
|
|
467
|
+
"responseReader": "assistant.thread.lastAnswer",
|
|
468
|
+
"permission": "tabs,host:perplexity.ai",
|
|
469
|
+
"status": "planned",
|
|
470
|
+
"criteriaProfile": "planned",
|
|
471
|
+
"evidence": ["perplexity-assistant-panel", "perplexity-privacy"],
|
|
472
|
+
"fallbacks": ["extension batch tab extraction", "Equa summarizer"],
|
|
473
|
+
"nextStep": "Add deterministic tab set selection and visible prompt context proof."
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
"id": "C4",
|
|
477
|
+
"group": "C",
|
|
478
|
+
"name": "Selected text extraction",
|
|
479
|
+
"nativeSurface": "Selected text in active tab",
|
|
480
|
+
"nativeHook": "window.getSelection via scripting",
|
|
481
|
+
"controlAdapter": "prime.context.selection.read",
|
|
482
|
+
"responseReader": "extension.selectionText",
|
|
483
|
+
"permission": "activeTab,scripting",
|
|
484
|
+
"status": "controlled",
|
|
485
|
+
"criteriaProfile": "controlled",
|
|
486
|
+
"evidence": ["chrome-tabs-api", "perplexity-privacy"],
|
|
487
|
+
"fallbacks": ["visible page extraction", "manual quote in prompt"],
|
|
488
|
+
"nextStep": "Add selection provenance fields to Prime command envelopes."
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
"id": "C5",
|
|
492
|
+
"group": "C",
|
|
493
|
+
"name": "Page metadata capture",
|
|
494
|
+
"nativeSurface": "Tab title, URL, favicon, metadata",
|
|
495
|
+
"nativeHook": "chrome.tabs.Tab sensitive properties",
|
|
496
|
+
"controlAdapter": "prime.context.pageMetadata.read",
|
|
497
|
+
"responseReader": "extension.tabMetadata",
|
|
498
|
+
"permission": "tabs,host_permissions",
|
|
499
|
+
"status": "controlled",
|
|
500
|
+
"criteriaProfile": "controlled",
|
|
501
|
+
"evidence": ["chrome-tabs-api"],
|
|
502
|
+
"fallbacks": ["document metadata script", "manual URL"],
|
|
503
|
+
"nextStep": "Score host-permission coverage per domain in parity reports."
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
"id": "C6",
|
|
507
|
+
"group": "C",
|
|
508
|
+
"name": "Page action execution",
|
|
509
|
+
"nativeSurface": "Comet Assistant site interaction",
|
|
510
|
+
"nativeHook": "assistant-agent-site-action",
|
|
511
|
+
"controlAdapter": "prime.context.pageAction.execute",
|
|
512
|
+
"responseReader": "assistant.thread.agentRunState",
|
|
513
|
+
"permission": "host:site,host:perplexity.ai",
|
|
514
|
+
"status": "setup_required",
|
|
515
|
+
"criteriaProfile": "setupRequired",
|
|
516
|
+
"evidence": ["perplexity-access-controls", "perplexity-privacy"],
|
|
517
|
+
"fallbacks": ["extension scripted click with domain playbook", "manual HITL setup checkpoint"],
|
|
518
|
+
"nextStep": "Separate first-run approval/setup from repeatable post-approval execution."
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
"id": "D1",
|
|
522
|
+
"group": "D",
|
|
523
|
+
"name": "Create tab",
|
|
524
|
+
"nativeSurface": "Chromium tab strip",
|
|
525
|
+
"nativeHook": "chrome.tabs.create",
|
|
526
|
+
"controlAdapter": "prime.browser.tab.create",
|
|
527
|
+
"responseReader": "chrome.tabs.Tab",
|
|
528
|
+
"permission": "tabs",
|
|
529
|
+
"status": "controlled",
|
|
530
|
+
"criteriaProfile": "controlled",
|
|
531
|
+
"evidence": ["chrome-tabs-api", "perplexity-browser-engine"],
|
|
532
|
+
"fallbacks": ["Comet-Bridge tab open", "manual URL open"],
|
|
533
|
+
"nextStep": "Keep task-thread binding attached immediately after tab creation."
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
"id": "D2",
|
|
537
|
+
"group": "D",
|
|
538
|
+
"name": "Navigate tab",
|
|
539
|
+
"nativeSurface": "Chromium tab navigation",
|
|
540
|
+
"nativeHook": "chrome.tabs.update.url",
|
|
541
|
+
"controlAdapter": "prime.browser.tab.navigate",
|
|
542
|
+
"responseReader": "chrome.webNavigation.onCompleted",
|
|
543
|
+
"permission": "tabs,webNavigation",
|
|
544
|
+
"status": "controlled",
|
|
545
|
+
"criteriaProfile": "controlled",
|
|
546
|
+
"evidence": ["chrome-tabs-api", "chrome-webnavigation-api"],
|
|
547
|
+
"fallbacks": ["Comet-Bridge navigate", "manual URL paste"],
|
|
548
|
+
"nextStep": "Use webNavigation completion events as the default navigation success signal."
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
"id": "D3",
|
|
552
|
+
"group": "D",
|
|
553
|
+
"name": "Reload, back, and forward",
|
|
554
|
+
"nativeSurface": "Chromium navigation controls",
|
|
555
|
+
"nativeHook": "chrome.tabs.reload+history stack via debugger",
|
|
556
|
+
"controlAdapter": "prime.browser.tab.historyControl",
|
|
557
|
+
"responseReader": "chrome.webNavigation events",
|
|
558
|
+
"permission": "tabs,webNavigation,debugger",
|
|
559
|
+
"status": "controlled",
|
|
560
|
+
"criteriaProfile": "controlled",
|
|
561
|
+
"evidence": ["chrome-tabs-api", "chrome-debugger-api", "chrome-webnavigation-api"],
|
|
562
|
+
"fallbacks": ["Comet-Bridge keyboard command", "tab URL restore"],
|
|
563
|
+
"nextStep": "Prefer tabs.reload and reserve debugger transport for history stack cases."
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
"id": "D4",
|
|
567
|
+
"group": "D",
|
|
568
|
+
"name": "Close tab",
|
|
569
|
+
"nativeSurface": "Chromium tab strip",
|
|
570
|
+
"nativeHook": "chrome.tabs.remove",
|
|
571
|
+
"controlAdapter": "prime.browser.tab.close",
|
|
572
|
+
"responseReader": "chrome.tabs.onRemoved",
|
|
573
|
+
"permission": "tabs",
|
|
574
|
+
"status": "controlled",
|
|
575
|
+
"criteriaProfile": "controlled",
|
|
576
|
+
"evidence": ["chrome-tabs-api"],
|
|
577
|
+
"fallbacks": ["archive before close", "manual close"],
|
|
578
|
+
"nextStep": "Require archive/snapshot policy for task-thread tabs before closing."
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"id": "D5",
|
|
582
|
+
"group": "D",
|
|
583
|
+
"name": "Move tab",
|
|
584
|
+
"nativeSurface": "Chromium tab strip",
|
|
585
|
+
"nativeHook": "chrome.tabs.move",
|
|
586
|
+
"controlAdapter": "prime.browser.tab.move",
|
|
587
|
+
"responseReader": "chrome.tabs.onMoved",
|
|
588
|
+
"permission": "tabs",
|
|
589
|
+
"status": "controlled",
|
|
590
|
+
"criteriaProfile": "controlled",
|
|
591
|
+
"evidence": ["chrome-tabs-api"],
|
|
592
|
+
"fallbacks": ["retry after drag lock", "manual move"],
|
|
593
|
+
"nextStep": "Retain existing drag-lock retry policy in Prime command executor."
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"id": "D6",
|
|
597
|
+
"group": "D",
|
|
598
|
+
"name": "Group and ungroup tabs",
|
|
599
|
+
"nativeSurface": "Chromium tab groups",
|
|
600
|
+
"nativeHook": "chrome.tabs.group+chrome.tabs.ungroup",
|
|
601
|
+
"controlAdapter": "prime.browser.group.membership",
|
|
602
|
+
"responseReader": "chrome.tabs.Tab.groupId",
|
|
603
|
+
"permission": "tabs,tabGroups",
|
|
604
|
+
"status": "controlled",
|
|
605
|
+
"criteriaProfile": "controlled",
|
|
606
|
+
"evidence": ["chrome-tabs-api", "chrome-tabgroups-api"],
|
|
607
|
+
"fallbacks": ["session snapshot rebuild", "manual group action"],
|
|
608
|
+
"nextStep": "Guarantee group membership updates include task-thread metadata rebinding."
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
"id": "D7",
|
|
612
|
+
"group": "D",
|
|
613
|
+
"name": "Rename, color, and collapse tab group",
|
|
614
|
+
"nativeSurface": "Chromium tab groups",
|
|
615
|
+
"nativeHook": "chrome.tabGroups.update",
|
|
616
|
+
"controlAdapter": "prime.browser.group.update",
|
|
617
|
+
"responseReader": "chrome.tabGroups.TabGroup",
|
|
618
|
+
"permission": "tabGroups",
|
|
619
|
+
"status": "controlled",
|
|
620
|
+
"criteriaProfile": "controlled",
|
|
621
|
+
"evidence": ["chrome-tabgroups-api"],
|
|
622
|
+
"fallbacks": ["extension metadata label", "manual group edit"],
|
|
623
|
+
"nextStep": "Keep native title and Equa description fields separate in all adapters."
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"id": "D8",
|
|
627
|
+
"group": "D",
|
|
628
|
+
"name": "Move group between windows",
|
|
629
|
+
"nativeSurface": "Chromium tab groups",
|
|
630
|
+
"nativeHook": "chrome.tabGroups.move",
|
|
631
|
+
"controlAdapter": "prime.browser.group.move",
|
|
632
|
+
"responseReader": "chrome.tabGroups.onCreated+onRemoved",
|
|
633
|
+
"permission": "tabGroups,tabs",
|
|
634
|
+
"status": "controlled",
|
|
635
|
+
"criteriaProfile": "controlled",
|
|
636
|
+
"evidence": ["chrome-tabgroups-api"],
|
|
637
|
+
"fallbacks": ["move member tabs then regroup", "manual move"],
|
|
638
|
+
"nextStep": "Treat cross-window moves as remove/create events and preserve stable task-thread IDs."
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
"id": "D9",
|
|
642
|
+
"group": "D",
|
|
643
|
+
"name": "Create, focus, and fullscreen window",
|
|
644
|
+
"nativeSurface": "Chromium windows",
|
|
645
|
+
"nativeHook": "chrome.windows.create+update",
|
|
646
|
+
"controlAdapter": "prime.browser.window.manage",
|
|
647
|
+
"responseReader": "extension.windowPolicy",
|
|
648
|
+
"permission": "tabs,system.display",
|
|
649
|
+
"status": "controlled",
|
|
650
|
+
"criteriaProfile": "controlled",
|
|
651
|
+
"evidence": ["perplexity-browser-engine"],
|
|
652
|
+
"fallbacks": ["Comet-Bridge window positioning", "manual display correction"],
|
|
653
|
+
"nextStep": "Keep top-display/fullscreen ownership gates from existing window-policy tests."
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
"id": "D10",
|
|
657
|
+
"group": "D",
|
|
658
|
+
"name": "Screenshot, PDF, and page snapshot",
|
|
659
|
+
"nativeSurface": "Visible tab and extension snapshot records",
|
|
660
|
+
"nativeHook": "chrome.tabs.captureVisibleTab+debugger Page.printToPDF",
|
|
661
|
+
"controlAdapter": "prime.browser.capture",
|
|
662
|
+
"responseReader": "artifact.path+auditLog",
|
|
663
|
+
"permission": "activeTab,tabs,debugger",
|
|
664
|
+
"status": "controlled",
|
|
665
|
+
"criteriaProfile": "controlled",
|
|
666
|
+
"evidence": ["chrome-tabs-api", "chrome-debugger-api"],
|
|
667
|
+
"fallbacks": ["Comet-Bridge screenshot/pdf", "session snapshot JSON"],
|
|
668
|
+
"nextStep": "Route all capture artifacts through lifecycle metadata and masking rules."
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
"id": "E1",
|
|
672
|
+
"group": "E",
|
|
673
|
+
"name": "Thread creation",
|
|
674
|
+
"nativeSurface": "Comet or Equa conversation thread",
|
|
675
|
+
"nativeHook": "prime.thread.create",
|
|
676
|
+
"controlAdapter": "prime.memory.thread.create",
|
|
677
|
+
"responseReader": "thread.id",
|
|
678
|
+
"permission": "storage,host:perplexity.ai",
|
|
679
|
+
"status": "planned",
|
|
680
|
+
"criteriaProfile": "planned",
|
|
681
|
+
"evidence": ["perplexity-privacy"],
|
|
682
|
+
"fallbacks": ["Equa local task thread", "Comet web thread"],
|
|
683
|
+
"nextStep": "Assign Prime thread IDs before invoking any native sidecar run."
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
"id": "E2",
|
|
687
|
+
"group": "E",
|
|
688
|
+
"name": "Library and history retrieval",
|
|
689
|
+
"nativeSurface": "Perplexity Library and browser history context",
|
|
690
|
+
"nativeHook": "perplexity-library-route",
|
|
691
|
+
"controlAdapter": "prime.memory.library.read",
|
|
692
|
+
"responseReader": "library.visibleThreadList",
|
|
693
|
+
"permission": "host:perplexity.ai",
|
|
694
|
+
"status": "blocked_by_vendor",
|
|
695
|
+
"criteriaProfile": "vendorBlocked",
|
|
696
|
+
"evidence": ["perplexity-privacy", "perplexity-access-controls"],
|
|
697
|
+
"fallbacks": ["Equa local audit ledger", "visible page scrape only"],
|
|
698
|
+
"nextStep": "Do not claim full history/library control until a visible or official API path exists."
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
"id": "E3",
|
|
702
|
+
"group": "E",
|
|
703
|
+
"name": "Temporary thread retention controls",
|
|
704
|
+
"nativeSurface": "Perplexity temporary threads",
|
|
705
|
+
"nativeHook": "assistant-thread-retention-setting",
|
|
706
|
+
"controlAdapter": "prime.memory.retention.set",
|
|
707
|
+
"responseReader": "thread.retentionBadge",
|
|
708
|
+
"permission": "host:perplexity.ai",
|
|
709
|
+
"status": "setup_required",
|
|
710
|
+
"criteriaProfile": "setupRequired",
|
|
711
|
+
"evidence": ["perplexity-privacy"],
|
|
712
|
+
"fallbacks": ["Equa local temporary transcript", "manual Library deletion"],
|
|
713
|
+
"nextStep": "Expose retention state as setup evidence before enabling repeated commands."
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
"id": "E4",
|
|
717
|
+
"group": "E",
|
|
718
|
+
"name": "Comet memory settings",
|
|
719
|
+
"nativeSurface": "Comet memory/account settings",
|
|
720
|
+
"nativeHook": "comet-memory-settings-route",
|
|
721
|
+
"controlAdapter": "prime.memory.settings.audit",
|
|
722
|
+
"responseReader": "settings.memoryState",
|
|
723
|
+
"permission": "host:perplexity.ai",
|
|
724
|
+
"status": "setup_required",
|
|
725
|
+
"criteriaProfile": "setupRequired",
|
|
726
|
+
"evidence": ["perplexity-access-controls"],
|
|
727
|
+
"fallbacks": ["Equa memory offload", "local-only task memory"],
|
|
728
|
+
"nextStep": "Inventory visible settings while avoiding credentials, cookies, and private account tokens."
|
|
729
|
+
},
|
|
730
|
+
{
|
|
731
|
+
"id": "E5",
|
|
732
|
+
"group": "E",
|
|
733
|
+
"name": "Workspace and session restore",
|
|
734
|
+
"nativeSurface": "Equabotz session manager",
|
|
735
|
+
"nativeHook": "chrome.sessions+extension archive",
|
|
736
|
+
"controlAdapter": "prime.memory.session.restore",
|
|
737
|
+
"responseReader": "extension.sessionRestoreResult",
|
|
738
|
+
"permission": "sessions,storage,tabs",
|
|
739
|
+
"status": "controlled",
|
|
740
|
+
"criteriaProfile": "controlled",
|
|
741
|
+
"evidence": ["chrome-tabs-api"],
|
|
742
|
+
"fallbacks": ["saved archive restore", "manual reopen"],
|
|
743
|
+
"nextStep": "Attach restored windows to Prime ownership and active task-thread records."
|
|
744
|
+
},
|
|
745
|
+
{
|
|
746
|
+
"id": "E6",
|
|
747
|
+
"group": "E",
|
|
748
|
+
"name": "Per-task audit thread linking",
|
|
749
|
+
"nativeSurface": "Equa lifecycle metadata",
|
|
750
|
+
"nativeHook": "lifecycle-metadata.mjs",
|
|
751
|
+
"controlAdapter": "prime.memory.audit.link",
|
|
752
|
+
"responseReader": "auditSessionId",
|
|
753
|
+
"permission": "storage",
|
|
754
|
+
"status": "controlled",
|
|
755
|
+
"criteriaProfile": "controlled",
|
|
756
|
+
"evidence": ["perplexity-privacy"],
|
|
757
|
+
"fallbacks": ["JSONL audit entry", "manual PR note"],
|
|
758
|
+
"nextStep": "Require auditSessionId for every cross-agent command handoff."
|
|
759
|
+
},
|
|
760
|
+
{
|
|
761
|
+
"id": "F1",
|
|
762
|
+
"group": "F",
|
|
763
|
+
"name": "Slash command parser",
|
|
764
|
+
"nativeSurface": "Equanaut sidecar input",
|
|
765
|
+
"nativeHook": "EquanautCommandParser",
|
|
766
|
+
"controlAdapter": "prime.skill.slash.parse",
|
|
767
|
+
"responseReader": "router.intent",
|
|
768
|
+
"permission": "storage",
|
|
769
|
+
"status": "controlled",
|
|
770
|
+
"criteriaProfile": "controlled",
|
|
771
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
772
|
+
"fallbacks": ["plain-language command", "manual tool selection"],
|
|
773
|
+
"nextStep": "Keep command names synchronized with toolkit skill inventory."
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
"id": "F2",
|
|
777
|
+
"group": "F",
|
|
778
|
+
"name": "Query shortcut trigger",
|
|
779
|
+
"nativeSurface": "Comet or Perplexity shortcut surface",
|
|
780
|
+
"nativeHook": "query-shortcut-menu",
|
|
781
|
+
"controlAdapter": "prime.skill.shortcut.trigger",
|
|
782
|
+
"responseReader": "assistant.thread.lastAnswer",
|
|
783
|
+
"permission": "host:perplexity.ai",
|
|
784
|
+
"status": "planned",
|
|
785
|
+
"criteriaProfile": "planned",
|
|
786
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
787
|
+
"fallbacks": ["Equa slash command", "prompt template"],
|
|
788
|
+
"nextStep": "Record visible shortcut names and bind each to a Prime command ID."
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
"id": "F3",
|
|
792
|
+
"group": "F",
|
|
793
|
+
"name": "Native sidecar tool selection",
|
|
794
|
+
"nativeSurface": "Comet Assistant tool picker",
|
|
795
|
+
"nativeHook": "assistant-tool-picker",
|
|
796
|
+
"controlAdapter": "prime.skill.nativeTool.select",
|
|
797
|
+
"responseReader": "assistant.thread.toolBadge",
|
|
798
|
+
"permission": "host:perplexity.ai",
|
|
799
|
+
"status": "planned",
|
|
800
|
+
"criteriaProfile": "planned",
|
|
801
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
802
|
+
"fallbacks": ["MCP tool broker", "Equa skill route"],
|
|
803
|
+
"nextStep": "Add a tool-picker inventory snapshot per account."
|
|
804
|
+
},
|
|
805
|
+
{
|
|
806
|
+
"id": "F4",
|
|
807
|
+
"group": "F",
|
|
808
|
+
"name": "Skill inventory sync",
|
|
809
|
+
"nativeSurface": "Equa skill registry",
|
|
810
|
+
"nativeHook": "comet-skill-inventory",
|
|
811
|
+
"controlAdapter": "prime.skill.inventory.sync",
|
|
812
|
+
"responseReader": "skillManifest",
|
|
813
|
+
"permission": "storage",
|
|
814
|
+
"status": "controlled",
|
|
815
|
+
"criteriaProfile": "controlled",
|
|
816
|
+
"evidence": ["perplexity-browser-engine"],
|
|
817
|
+
"fallbacks": ["filesystem skill scan", "manual registry refresh"],
|
|
818
|
+
"nextStep": "Include Perplexity-native adapters in the same registry as local Equa skills."
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"id": "F5",
|
|
822
|
+
"group": "F",
|
|
823
|
+
"name": "Workflow template run",
|
|
824
|
+
"nativeSurface": "Equa workflow runner",
|
|
825
|
+
"nativeHook": "comet-workflows",
|
|
826
|
+
"controlAdapter": "prime.skill.workflow.run",
|
|
827
|
+
"responseReader": "workflow.runState",
|
|
828
|
+
"permission": "storage,tabs",
|
|
829
|
+
"status": "planned",
|
|
830
|
+
"criteriaProfile": "planned",
|
|
831
|
+
"evidence": ["perplexity-browser-engine"],
|
|
832
|
+
"fallbacks": ["repo-local script", "manual checklist"],
|
|
833
|
+
"nextStep": "Formalize workflow run envelopes with per-step browser ownership and retry policy."
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"id": "G1",
|
|
837
|
+
"group": "G",
|
|
838
|
+
"name": "Answer final text read",
|
|
839
|
+
"nativeSurface": "Comet Assistant answer pane",
|
|
840
|
+
"nativeHook": "assistant-answer-last-message",
|
|
841
|
+
"controlAdapter": "prime.output.answer.read",
|
|
842
|
+
"responseReader": "assistant.thread.lastAnswer",
|
|
843
|
+
"permission": "host:perplexity.ai,scripting",
|
|
844
|
+
"status": "planned",
|
|
845
|
+
"criteriaProfile": "planned",
|
|
846
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
847
|
+
"fallbacks": ["page readability extract", "manual copy"],
|
|
848
|
+
"nextStep": "Add final-answer selectors and stale-response guards."
|
|
849
|
+
},
|
|
850
|
+
{
|
|
851
|
+
"id": "G2",
|
|
852
|
+
"group": "G",
|
|
853
|
+
"name": "Citation read",
|
|
854
|
+
"nativeSurface": "Perplexity citation cards",
|
|
855
|
+
"nativeHook": "assistant-answer-citations",
|
|
856
|
+
"controlAdapter": "prime.output.citations.read",
|
|
857
|
+
"responseReader": "assistant.thread.citations",
|
|
858
|
+
"permission": "host:perplexity.ai,scripting",
|
|
859
|
+
"status": "planned",
|
|
860
|
+
"criteriaProfile": "planned",
|
|
861
|
+
"evidence": ["perplexity-browser-engine"],
|
|
862
|
+
"fallbacks": ["visible source link extraction", "manual citation copy"],
|
|
863
|
+
"nextStep": "Require citation URL capture before any answer is accepted as evidence-backed."
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
"id": "G3",
|
|
867
|
+
"group": "G",
|
|
868
|
+
"name": "Source open",
|
|
869
|
+
"nativeSurface": "Perplexity citation/source link",
|
|
870
|
+
"nativeHook": "assistant-answer-source-link",
|
|
871
|
+
"controlAdapter": "prime.output.source.open",
|
|
872
|
+
"responseReader": "chrome.tabs.Tab",
|
|
873
|
+
"permission": "tabs,host:perplexity.ai",
|
|
874
|
+
"status": "planned",
|
|
875
|
+
"criteriaProfile": "planned",
|
|
876
|
+
"evidence": ["chrome-tabs-api", "perplexity-browser-engine"],
|
|
877
|
+
"fallbacks": ["open extracted URL", "manual source click"],
|
|
878
|
+
"nextStep": "Bind opened sources to child task-thread tabs."
|
|
879
|
+
},
|
|
880
|
+
{
|
|
881
|
+
"id": "G4",
|
|
882
|
+
"group": "G",
|
|
883
|
+
"name": "Copy or export answer",
|
|
884
|
+
"nativeSurface": "Comet answer actions",
|
|
885
|
+
"nativeHook": "assistant-answer-copy-export",
|
|
886
|
+
"controlAdapter": "prime.output.export",
|
|
887
|
+
"responseReader": "clipboardOrArtifact",
|
|
888
|
+
"permission": "host:perplexity.ai,scripting",
|
|
889
|
+
"status": "planned",
|
|
890
|
+
"criteriaProfile": "planned",
|
|
891
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
892
|
+
"fallbacks": ["extension artifact write", "manual copy"],
|
|
893
|
+
"nextStep": "Prefer artifact output over clipboard where possible for deterministic audit."
|
|
894
|
+
},
|
|
895
|
+
{
|
|
896
|
+
"id": "G5",
|
|
897
|
+
"group": "G",
|
|
898
|
+
"name": "Structured extraction to JSON or Markdown",
|
|
899
|
+
"nativeSurface": "Equa extraction pipeline",
|
|
900
|
+
"nativeHook": "tab-content-extractor.mjs",
|
|
901
|
+
"controlAdapter": "prime.output.structure",
|
|
902
|
+
"responseReader": "artifact.jsonOrMarkdown",
|
|
903
|
+
"permission": "activeTab,scripting,storage",
|
|
904
|
+
"status": "controlled",
|
|
905
|
+
"criteriaProfile": "controlled",
|
|
906
|
+
"evidence": ["chrome-tabs-api"],
|
|
907
|
+
"fallbacks": ["assistant prompt format", "manual report"],
|
|
908
|
+
"nextStep": "Keep schemas attached to each extraction command and validate before writing artifacts."
|
|
909
|
+
},
|
|
910
|
+
{
|
|
911
|
+
"id": "H1",
|
|
912
|
+
"group": "H",
|
|
913
|
+
"name": "Prime command envelope",
|
|
914
|
+
"nativeSurface": "Equanaut Prime router",
|
|
915
|
+
"nativeHook": "EquanautPrimeControlPlane",
|
|
916
|
+
"controlAdapter": "prime.orchestrator.command.route",
|
|
917
|
+
"responseReader": "router.audit",
|
|
918
|
+
"permission": "storage",
|
|
919
|
+
"status": "controlled",
|
|
920
|
+
"criteriaProfile": "controlled",
|
|
921
|
+
"evidence": ["perplexity-browser-engine"],
|
|
922
|
+
"fallbacks": ["manual sidecar instruction", "repo-local task file"],
|
|
923
|
+
"nextStep": "Make all native Perplexity adapters consume the same command envelope."
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
"id": "H2",
|
|
927
|
+
"group": "H",
|
|
928
|
+
"name": "Fleet spawn and delegate",
|
|
929
|
+
"nativeSurface": "Equa agent fleet",
|
|
930
|
+
"nativeHook": "comet-delegate",
|
|
931
|
+
"controlAdapter": "prime.orchestrator.fleet.delegate",
|
|
932
|
+
"responseReader": "agentRegistry",
|
|
933
|
+
"permission": "storage,tabs",
|
|
934
|
+
"status": "planned",
|
|
935
|
+
"criteriaProfile": "planned",
|
|
936
|
+
"evidence": ["perplexity-browser-engine"],
|
|
937
|
+
"fallbacks": ["single-agent Prime execution", "manual task split"],
|
|
938
|
+
"nextStep": "Add per-agent browser ownership lease and task dependency graph."
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
"id": "H3",
|
|
942
|
+
"group": "H",
|
|
943
|
+
"name": "Tab Equabot binding",
|
|
944
|
+
"nativeSurface": "Every-tab Equabot registry",
|
|
945
|
+
"nativeHook": "tabAgentBinding",
|
|
946
|
+
"controlAdapter": "prime.orchestrator.tabAgent.bind",
|
|
947
|
+
"responseReader": "tabAgentState",
|
|
948
|
+
"permission": "tabs,storage",
|
|
949
|
+
"status": "controlled",
|
|
950
|
+
"criteriaProfile": "controlled",
|
|
951
|
+
"evidence": ["chrome-tabs-api"],
|
|
952
|
+
"fallbacks": ["window-level agent binding", "manual assignment"],
|
|
953
|
+
"nextStep": "Promote each active tab binding into the Prime global context catalog."
|
|
954
|
+
},
|
|
955
|
+
{
|
|
956
|
+
"id": "H4",
|
|
957
|
+
"group": "H",
|
|
958
|
+
"name": "Agent status heartbeat",
|
|
959
|
+
"nativeSurface": "Equa lifecycle registry",
|
|
960
|
+
"nativeHook": "comet_lifecycle_update",
|
|
961
|
+
"controlAdapter": "prime.orchestrator.agent.heartbeat",
|
|
962
|
+
"responseReader": "lifecycleState",
|
|
963
|
+
"permission": "storage",
|
|
964
|
+
"status": "controlled",
|
|
965
|
+
"criteriaProfile": "controlled",
|
|
966
|
+
"evidence": ["perplexity-browser-engine"],
|
|
967
|
+
"fallbacks": ["JSONL status event", "manual status note"],
|
|
968
|
+
"nextStep": "Show heartbeat freshness and stalled-agent actions in the sidecar."
|
|
969
|
+
},
|
|
970
|
+
{
|
|
971
|
+
"id": "H5",
|
|
972
|
+
"group": "H",
|
|
973
|
+
"name": "Multi-agent task queue",
|
|
974
|
+
"nativeSurface": "Equa task queue",
|
|
975
|
+
"nativeHook": "prime-task-queue",
|
|
976
|
+
"controlAdapter": "prime.orchestrator.queue.schedule",
|
|
977
|
+
"responseReader": "queueState",
|
|
978
|
+
"permission": "storage",
|
|
979
|
+
"status": "planned",
|
|
980
|
+
"criteriaProfile": "planned",
|
|
981
|
+
"evidence": ["perplexity-browser-engine"],
|
|
982
|
+
"fallbacks": ["sequential Prime run", "manual task issue list"],
|
|
983
|
+
"nextStep": "Add priority, dependency, and browser-resource scheduling rules."
|
|
984
|
+
},
|
|
985
|
+
{
|
|
986
|
+
"id": "H6",
|
|
987
|
+
"group": "H",
|
|
988
|
+
"name": "Conflict and lock manager",
|
|
989
|
+
"nativeSurface": "Browser-resource lease table",
|
|
990
|
+
"nativeHook": "prime-lock-manager",
|
|
991
|
+
"controlAdapter": "prime.orchestrator.lock.acquire",
|
|
992
|
+
"responseReader": "lockState",
|
|
993
|
+
"permission": "storage,tabs",
|
|
994
|
+
"status": "planned",
|
|
995
|
+
"criteriaProfile": "planned",
|
|
996
|
+
"evidence": ["chrome-tabs-api"],
|
|
997
|
+
"fallbacks": ["active-window scope denial", "manual unblock"],
|
|
998
|
+
"nextStep": "Prevent two agents from mutating the same tab, group, window, or thread concurrently."
|
|
999
|
+
},
|
|
1000
|
+
{
|
|
1001
|
+
"id": "H7",
|
|
1002
|
+
"group": "H",
|
|
1003
|
+
"name": "Hermes, Codex, Claude, and MCP tool broker",
|
|
1004
|
+
"nativeSurface": "External subagent/tool bus",
|
|
1005
|
+
"nativeHook": "prime-tool-broker",
|
|
1006
|
+
"controlAdapter": "prime.orchestrator.toolBroker.invoke",
|
|
1007
|
+
"responseReader": "toolResultEnvelope",
|
|
1008
|
+
"permission": "storage,network-localhost",
|
|
1009
|
+
"status": "planned",
|
|
1010
|
+
"criteriaProfile": "planned",
|
|
1011
|
+
"evidence": ["perplexity-browser-engine"],
|
|
1012
|
+
"fallbacks": ["direct tool call", "manual handoff"],
|
|
1013
|
+
"nextStep": "Normalize external tool results into Prime command-result envelopes."
|
|
1014
|
+
},
|
|
1015
|
+
{
|
|
1016
|
+
"id": "H8",
|
|
1017
|
+
"group": "H",
|
|
1018
|
+
"name": "Retry and fallback policy",
|
|
1019
|
+
"nativeSurface": "Prime run executor",
|
|
1020
|
+
"nativeHook": "prime-retry-policy",
|
|
1021
|
+
"controlAdapter": "prime.orchestrator.retry",
|
|
1022
|
+
"responseReader": "runAttemptLog",
|
|
1023
|
+
"permission": "storage",
|
|
1024
|
+
"status": "controlled",
|
|
1025
|
+
"criteriaProfile": "controlled",
|
|
1026
|
+
"evidence": ["perplexity-browser-engine"],
|
|
1027
|
+
"fallbacks": ["degrade to extension API", "degrade to manual blocker note"],
|
|
1028
|
+
"nextStep": "Connect retry reason codes to parity-score degradation."
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
"id": "H9",
|
|
1032
|
+
"group": "H",
|
|
1033
|
+
"name": "Human-owned window denial",
|
|
1034
|
+
"nativeSurface": "Equa browser ownership policy",
|
|
1035
|
+
"nativeHook": "profile-access-policy",
|
|
1036
|
+
"controlAdapter": "prime.orchestrator.policy.denyHuman",
|
|
1037
|
+
"responseReader": "router.denial",
|
|
1038
|
+
"permission": "storage,system.display",
|
|
1039
|
+
"status": "controlled",
|
|
1040
|
+
"criteriaProfile": "controlled",
|
|
1041
|
+
"evidence": ["perplexity-access-controls"],
|
|
1042
|
+
"fallbacks": ["ask user to move tab into agent profile", "read-only mode"],
|
|
1043
|
+
"nextStep": "Keep denial visible in sidecar so HITL can be removed by moving state into agent-owned windows."
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"id": "H10",
|
|
1047
|
+
"group": "H",
|
|
1048
|
+
"name": "Parity score gate",
|
|
1049
|
+
"nativeSurface": "Repo-local parity scorer",
|
|
1050
|
+
"nativeHook": "scripts/score-parity.mjs",
|
|
1051
|
+
"controlAdapter": "prime.orchestrator.parity.score",
|
|
1052
|
+
"responseReader": "parity-report.json",
|
|
1053
|
+
"permission": "filesystem",
|
|
1054
|
+
"status": "controlled",
|
|
1055
|
+
"criteriaProfile": "controlled",
|
|
1056
|
+
"evidence": ["perplexity-browser-engine"],
|
|
1057
|
+
"fallbacks": ["manual manifest review", "Spequa scorecard"],
|
|
1058
|
+
"nextStep": "Run in CI as advisory first, then enforce once each vendor-visible adapter has evidence."
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
"id": "I1",
|
|
1062
|
+
"group": "I",
|
|
1063
|
+
"name": "Account plan and status read",
|
|
1064
|
+
"nativeSurface": "Perplexity account page",
|
|
1065
|
+
"nativeHook": "perplexity-account-plan",
|
|
1066
|
+
"controlAdapter": "prime.account.plan.read",
|
|
1067
|
+
"responseReader": "account.visiblePlanState",
|
|
1068
|
+
"permission": "host:perplexity.ai",
|
|
1069
|
+
"status": "setup_required",
|
|
1070
|
+
"criteriaProfile": "setupRequired",
|
|
1071
|
+
"evidence": ["perplexity-access-controls"],
|
|
1072
|
+
"fallbacks": ["manual account settings screenshot", "no-pro fallback route"],
|
|
1073
|
+
"nextStep": "Read only visible plan labels and never store billing or payment details."
|
|
1074
|
+
},
|
|
1075
|
+
{
|
|
1076
|
+
"id": "I2",
|
|
1077
|
+
"group": "I",
|
|
1078
|
+
"name": "Model availability map",
|
|
1079
|
+
"nativeSurface": "Account-visible model menu",
|
|
1080
|
+
"nativeHook": "assistant-panel-model-selector",
|
|
1081
|
+
"controlAdapter": "prime.account.models.inventory",
|
|
1082
|
+
"responseReader": "modelAvailabilityMap",
|
|
1083
|
+
"permission": "host:perplexity.ai",
|
|
1084
|
+
"status": "setup_required",
|
|
1085
|
+
"criteriaProfile": "setupRequired",
|
|
1086
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
1087
|
+
"fallbacks": ["Equa local model inventory", "default model"],
|
|
1088
|
+
"nextStep": "Persist only model labels and availability; keep account identifiers out of reports."
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"id": "I3",
|
|
1092
|
+
"group": "I",
|
|
1093
|
+
"name": "Connector and app auth status",
|
|
1094
|
+
"nativeSurface": "Comet connected services",
|
|
1095
|
+
"nativeHook": "assistant-connectors-settings",
|
|
1096
|
+
"controlAdapter": "prime.account.connectors.audit",
|
|
1097
|
+
"responseReader": "connector.visibleStatus",
|
|
1098
|
+
"permission": "host:perplexity.ai",
|
|
1099
|
+
"status": "setup_required",
|
|
1100
|
+
"criteriaProfile": "setupRequired",
|
|
1101
|
+
"evidence": ["perplexity-access-controls", "perplexity-privacy"],
|
|
1102
|
+
"fallbacks": ["Codex MCP connector status", "manual connector setup"],
|
|
1103
|
+
"nextStep": "Detect visible connector states and route missing auth as setup_required, not failure."
|
|
1104
|
+
},
|
|
1105
|
+
{
|
|
1106
|
+
"id": "I4",
|
|
1107
|
+
"group": "I",
|
|
1108
|
+
"name": "Enterprise and privacy policy sync",
|
|
1109
|
+
"nativeSurface": "Comet privacy/security settings",
|
|
1110
|
+
"nativeHook": "comet-privacy-settings",
|
|
1111
|
+
"controlAdapter": "prime.account.privacy.sync",
|
|
1112
|
+
"responseReader": "privacyPolicySnapshot",
|
|
1113
|
+
"permission": "host:perplexity.ai",
|
|
1114
|
+
"status": "out_of_scope_private_data",
|
|
1115
|
+
"criteriaProfile": "privateOutOfScope",
|
|
1116
|
+
"evidence": ["perplexity-privacy", "perplexity-access-controls"],
|
|
1117
|
+
"fallbacks": ["local Equa policy gate", "read-only visible settings note"],
|
|
1118
|
+
"nextStep": "Never bypass password, cookie, payment, or private-data restrictions; surface required setup instead."
|
|
1119
|
+
},
|
|
1120
|
+
{
|
|
1121
|
+
"id": "J1",
|
|
1122
|
+
"group": "J",
|
|
1123
|
+
"name": "Android and mobile Comet handoff",
|
|
1124
|
+
"nativeSurface": "Comet mobile surfaces",
|
|
1125
|
+
"nativeHook": "mobile-handoff",
|
|
1126
|
+
"controlAdapter": "prime.labs.mobile.handoff",
|
|
1127
|
+
"responseReader": "handoffState",
|
|
1128
|
+
"permission": "none",
|
|
1129
|
+
"status": "planned",
|
|
1130
|
+
"criteriaProfile": "planned",
|
|
1131
|
+
"evidence": ["perplexity-assistant-panel"],
|
|
1132
|
+
"fallbacks": ["desktop-only Prime run", "manual mobile action"],
|
|
1133
|
+
"nextStep": "Treat mobile as a future adapter and keep desktop Prime as source of truth."
|
|
1134
|
+
},
|
|
1135
|
+
{
|
|
1136
|
+
"id": "J2",
|
|
1137
|
+
"group": "J",
|
|
1138
|
+
"name": "Extension permission health",
|
|
1139
|
+
"nativeSurface": "Chromium extension runtime",
|
|
1140
|
+
"nativeHook": "manifest.permissions+chrome.permissions",
|
|
1141
|
+
"controlAdapter": "prime.labs.extension.permissionHealth",
|
|
1142
|
+
"responseReader": "permissionHealthReport",
|
|
1143
|
+
"permission": "storage",
|
|
1144
|
+
"status": "controlled",
|
|
1145
|
+
"criteriaProfile": "controlled",
|
|
1146
|
+
"evidence": ["chrome-tabs-api", "chrome-debugger-api", "chrome-webnavigation-api"],
|
|
1147
|
+
"fallbacks": ["manifest static check", "manual extension reload"],
|
|
1148
|
+
"nextStep": "Fail adapter startup when a required permission is missing or revoked."
|
|
1149
|
+
},
|
|
1150
|
+
{
|
|
1151
|
+
"id": "J3",
|
|
1152
|
+
"group": "J",
|
|
1153
|
+
"name": "Perplexity web app parity",
|
|
1154
|
+
"nativeSurface": "perplexity.ai web app",
|
|
1155
|
+
"nativeHook": "perplexity-web-route-map",
|
|
1156
|
+
"controlAdapter": "prime.labs.webParity.audit",
|
|
1157
|
+
"responseReader": "webParityReport",
|
|
1158
|
+
"permission": "host:perplexity.ai",
|
|
1159
|
+
"status": "planned",
|
|
1160
|
+
"criteriaProfile": "planned",
|
|
1161
|
+
"evidence": ["perplexity-browser-engine"],
|
|
1162
|
+
"fallbacks": ["Comet sidecar route", "MCP web search route"],
|
|
1163
|
+
"nextStep": "Separate browser-native sidecar controls from perplexity.ai web controls in the manifest."
|
|
1164
|
+
},
|
|
1165
|
+
{
|
|
1166
|
+
"id": "J4",
|
|
1167
|
+
"group": "J",
|
|
1168
|
+
"name": "Labs and new capability intake",
|
|
1169
|
+
"nativeSurface": "Perplexity/Comet labs and release drift",
|
|
1170
|
+
"nativeHook": "capability-manifest-intake",
|
|
1171
|
+
"controlAdapter": "prime.labs.capabilityIntake",
|
|
1172
|
+
"responseReader": "manifest.diff",
|
|
1173
|
+
"permission": "filesystem",
|
|
1174
|
+
"status": "controlled",
|
|
1175
|
+
"criteriaProfile": "controlled",
|
|
1176
|
+
"evidence": ["perplexity-browser-engine"],
|
|
1177
|
+
"fallbacks": ["manual docs review", "release note issue"],
|
|
1178
|
+
"nextStep": "Require every newly observed Comet surface to enter this manifest before implementation."
|
|
1179
|
+
}
|
|
1180
|
+
]
|
|
1181
|
+
}
|