@widgex/wgx 0.0.0-stage → 0.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/LICENSE.txt +49 -0
- package/README.md +33 -2
- package/ThirdPartyNotices.txt +4685 -0
- package/package.json +30 -4
- package/provider-clis.json +1211 -0
- package/python/XACTOR.md +146 -0
- package/python/browser_actor_host.py +456 -0
- package/python/cdp_page.py +363 -0
- package/python/harness_check.py +77 -0
- package/python/requirements.txt +1 -0
- package/python/test_line_endings.py +185 -0
- package/python/xactor/__init__.py +18 -0
- package/python/xactor/__main__.py +226 -0
- package/python/xactor/api.py +882 -0
- package/python/xactor/bridge.py +784 -0
- package/python/xactor/dom.py +117 -0
- package/python/xactor/man/add_card.md +89 -0
- package/python/xactor/man/agent-vs-fork.md +108 -0
- package/python/xactor/man/agent.md +333 -0
- package/python/xactor/man/ask_model.md +110 -0
- package/python/xactor/man/ask_reference.md +56 -0
- package/python/xactor/man/ask_user.md +103 -0
- package/python/xactor/man/attach_app.md +595 -0
- package/python/xactor/man/attach_ide.md +65 -0
- package/python/xactor/man/attach_ide_surface.md +31 -0
- package/python/xactor/man/await_user.md +214 -0
- package/python/xactor/man/bash.md +142 -0
- package/python/xactor/man/browser-driver.md +137 -0
- package/python/xactor/man/browser_activity.md +53 -0
- package/python/xactor/man/browser_attach.md +84 -0
- package/python/xactor/man/browser_close_tab.md +50 -0
- package/python/xactor/man/browser_detach.md +50 -0
- package/python/xactor/man/browser_exec.md +66 -0
- package/python/xactor/man/browser_focus_tab.md +47 -0
- package/python/xactor/man/browser_hybrid.md +47 -0
- package/python/xactor/man/browser_open.md +50 -0
- package/python/xactor/man/browser_open_tab.md +58 -0
- package/python/xactor/man/browser_plumbing.md +107 -0
- package/python/xactor/man/browser_screenshot.md +56 -0
- package/python/xactor/man/browser_snapshot.md +52 -0
- package/python/xactor/man/browser_tabs.md +67 -0
- package/python/xactor/man/bulletin.md +88 -0
- package/python/xactor/man/capture_page.md +54 -0
- package/python/xactor/man/cd.md +64 -0
- package/python/xactor/man/chess_move.md +53 -0
- package/python/xactor/man/children.md +89 -0
- package/python/xactor/man/close_task.md +14 -0
- package/python/xactor/man/compact.md +75 -0
- package/python/xactor/man/drive.md +140 -0
- package/python/xactor/man/drive_space.md +72 -0
- package/python/xactor/man/driving.md +168 -0
- package/python/xactor/man/edit_file.md +112 -0
- package/python/xactor/man/finding.md +194 -0
- package/python/xactor/man/fork_agent.md +45 -0
- package/python/xactor/man/glob.md +83 -0
- package/python/xactor/man/grep.md +115 -0
- package/python/xactor/man/harness.md +165 -0
- package/python/xactor/man/harness_check.md +70 -0
- package/python/xactor/man/harness_format.md +257 -0
- package/python/xactor/man/highlight.md +66 -0
- package/python/xactor/man/instruct.md +111 -0
- package/python/xactor/man/ls.md +63 -0
- package/python/xactor/man/man.md +86 -0
- package/python/xactor/man/merge_wiz.md +40 -0
- package/python/xactor/man/notebook.md +98 -0
- package/python/xactor/man/overview.md +89 -0
- package/python/xactor/man/permissions.md +137 -0
- package/python/xactor/man/phase.md +150 -0
- package/python/xactor/man/powershell.md +74 -0
- package/python/xactor/man/profiles.md +60 -0
- package/python/xactor/man/project_drive.md +49 -0
- package/python/xactor/man/read_bulletin.md +89 -0
- package/python/xactor/man/read_file.md +90 -0
- package/python/xactor/man/relay.md +216 -0
- package/python/xactor/man/reply.md +72 -0
- package/python/xactor/man/reply_message.md +78 -0
- package/python/xactor/man/report_bug.md +118 -0
- package/python/xactor/man/request_answer.md +142 -0
- package/python/xactor/man/request_merge_decisions.md +121 -0
- package/python/xactor/man/request_operator_action.md +152 -0
- package/python/xactor/man/request_review.md +122 -0
- package/python/xactor/man/request_user_action.md +126 -0
- package/python/xactor/man/return_card.md +71 -0
- package/python/xactor/man/run.md +99 -0
- package/python/xactor/man/sandbox.md +144 -0
- package/python/xactor/man/session_fork.md +74 -0
- package/python/xactor/man/session_harness.md +109 -0
- package/python/xactor/man/session_join.md +102 -0
- package/python/xactor/man/session_land.md +73 -0
- package/python/xactor/man/session_nudge.md +73 -0
- package/python/xactor/man/session_rest.md +73 -0
- package/python/xactor/man/session_scope.md +84 -0
- package/python/xactor/man/session_terminate.md +58 -0
- package/python/xactor/man/session_token.md +78 -0
- package/python/xactor/man/sessions.md +93 -0
- package/python/xactor/man/set_harness.md +15 -0
- package/python/xactor/man/spawn_swarm.md +80 -0
- package/python/xactor/man/submit_evidence.md +54 -0
- package/python/xactor/man/swarm_brief.md +30 -0
- package/python/xactor/man/task_status.md +82 -0
- package/python/xactor/man/tasks.md +47 -0
- package/python/xactor/man/todo_write.md +104 -0
- package/python/xactor/man/update_card.md +70 -0
- package/python/xactor/man/use_profile.md +90 -0
- package/python/xactor/man/use_widget.md +82 -0
- package/python/xactor/man/wait_for_task.md +105 -0
- package/python/xactor/man/widget-model.md +284 -0
- package/python/xactor/man/widgets.md +59 -0
- package/python/xactor/man/write_file.md +76 -0
- package/python/xactor/man/writing-a-widget.md +142 -0
- package/python/xactor/man/xylon.md +120 -0
- package/python/xactor/man/xylon_blame.md +80 -0
- package/python/xactor/man/xylon_read.md +131 -0
- package/python/xactor/man/xylon_search.md +125 -0
- package/python/xactor/manual.py +195 -0
- package/python/xactor/parent_watch.py +115 -0
- package/python/xactor/plan_mode.py +350 -0
- package/python/xactor/sandbox.py +856 -0
- package/python/xactor/seals.py +438 -0
- package/python/xactor/shell_hints.py +210 -0
- package/python/xactor/states/__init__.py +13 -0
- package/python/xactor/states/base.py +523 -0
- package/python/xactor/states/registry.py +274 -0
- package/python/xactor/stdlib_api.py +6345 -0
- package/python/xactor/widgets/__init__.py +1 -0
- package/python/xactor/widgets/github_tokens.py +314 -0
- package/python/xactor/widgets/google_aistudio.py +365 -0
- package/settings-schema.json +403 -0
- package/viewer/index.css +160 -0
- package/viewer/index.js +15 -0
- package/wgx.mjs +290659 -0
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "WidgeX",
|
|
3
|
+
"properties": {
|
|
4
|
+
"widgex.profile.enabled": {
|
|
5
|
+
"type": "boolean",
|
|
6
|
+
"default": false,
|
|
7
|
+
"description": "Profile the extension from startup: CPU samples, event-loop stalls, slow handlers and large webview messages, written to ~/.widgex/profile/<started>/. A profiling build (pnpm build:profile, or build:from --profile) turns this on by itself. Takes effect on the next window reload; 'WidgeX: Start profiling' starts it now."
|
|
8
|
+
},
|
|
9
|
+
"widgex.advancedMode": {
|
|
10
|
+
"type": "boolean",
|
|
11
|
+
"default": false,
|
|
12
|
+
"markdownDescription": "Developer mode — also the switch on Settings ▸ Layout. Shows VS Code's status bar along the bottom (remote, branch, problems), the conversation's Files and Source Control tabs, and the composer's Workflow chip. Off, the window is the conversation and the task column only."
|
|
13
|
+
},
|
|
14
|
+
"widgex.chat.fontSize": {
|
|
15
|
+
"type": "number",
|
|
16
|
+
"default": 13,
|
|
17
|
+
"minimum": 10,
|
|
18
|
+
"maximum": 20,
|
|
19
|
+
"markdownDescription": "The text size of the conversation, in pixels — also the slider on Settings ▸ Layout. Everything in the stream scales with it, code and tool cards included, so they keep their proportions."
|
|
20
|
+
},
|
|
21
|
+
"widgex.xactor.recordCorpus": {
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"default": false,
|
|
24
|
+
"description": "Record what the agent looked for on a page, what the page offered, and which element it picked — to ~/.widgex/xactor-corpus. This is how we measure and improve the browser fallback: every search already computes the ranked candidates and their scores, and throws them away. Off by default because it captures the text of pages you drive. Nothing is sent anywhere; it is a file on this machine."
|
|
25
|
+
},
|
|
26
|
+
"widgex.startLayout": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"enum": [
|
|
29
|
+
"ask",
|
|
30
|
+
"code",
|
|
31
|
+
"web",
|
|
32
|
+
"product",
|
|
33
|
+
"none"
|
|
34
|
+
],
|
|
35
|
+
"enumDescriptions": [
|
|
36
|
+
"Ask, on the empty editor area.",
|
|
37
|
+
"Writing code — opens Files and Work.",
|
|
38
|
+
"Working on the web — opens Browser and Files.",
|
|
39
|
+
"Running the work — opens Work and Browser.",
|
|
40
|
+
"Start with nothing open."
|
|
41
|
+
],
|
|
42
|
+
"default": "ask",
|
|
43
|
+
"description": "Which tabs a window opens with. Left at 'ask', the empty editor area offers the three layouts instead of a list of keyboard shortcuts, and picking one writes it here. Change it whenever; it decides nothing else.",
|
|
44
|
+
"scope": "resource"
|
|
45
|
+
},
|
|
46
|
+
"widgex.preview.maxLive": {
|
|
47
|
+
"type": "number",
|
|
48
|
+
"default": 3,
|
|
49
|
+
"minimum": 1,
|
|
50
|
+
"description": "How many tasks' apps may run at once. Starting one more puts the one you looked at least recently to sleep: it keeps a picture of how it last looked, and one click starts it again. Apps you have on screen, or an agent is using, are never put to sleep."
|
|
51
|
+
},
|
|
52
|
+
"widgex.workbench.followEdits": {
|
|
53
|
+
"type": "boolean",
|
|
54
|
+
"default": true,
|
|
55
|
+
"description": "Open the file an agent just edited in the workbench, at the line it changed. It comes to the front only when that agent's task is on screen and you have not switched tabs or typed in the last 20 seconds; otherwise it opens behind what you are doing."
|
|
56
|
+
},
|
|
57
|
+
"widgex.showCoordinator": {
|
|
58
|
+
"type": "boolean",
|
|
59
|
+
"default": false,
|
|
60
|
+
"description": "List the Coordinator in the sidebar, above your tasks. Off by default for now. It was hidden while it sat in the same strip as the tasks, where it read as task zero and people did work in it — the one thing it is not for. A row of its own, above the list rather than in it, says what it is. Nothing opens onto it: the column still lands on the task you were last in."
|
|
61
|
+
},
|
|
62
|
+
"widgex.layout": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"markdownDescription": "Where the work board and each Settings tab are drawn. Set from **Settings ▸ Layout**, or by hand. `activityBar` is a row of its own in the WidgeX column's task tree (the board's default); `sidePanel` is the widget board, the column's Settings list (the Settings tabs' default); `topTray` and `bottomTray` are the column's top and bottom edges, which hold one item between them; `editor` is a pinned tab in the workbench; `panel` is the bottom panel. A part nothing is placed in is hidden. Tasks and the main sessions are the column itself and are not set here.",
|
|
65
|
+
"properties": {
|
|
66
|
+
"board": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"enum": [
|
|
69
|
+
"activityBar",
|
|
70
|
+
"topTray",
|
|
71
|
+
"bottomTray",
|
|
72
|
+
"editor",
|
|
73
|
+
"panel"
|
|
74
|
+
],
|
|
75
|
+
"default": "activityBar"
|
|
76
|
+
},
|
|
77
|
+
"settings": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"properties": {
|
|
80
|
+
"tasks": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"enum": [
|
|
83
|
+
"activityBar",
|
|
84
|
+
"sidePanel",
|
|
85
|
+
"topTray",
|
|
86
|
+
"bottomTray",
|
|
87
|
+
"editor",
|
|
88
|
+
"panel"
|
|
89
|
+
],
|
|
90
|
+
"default": "sidePanel"
|
|
91
|
+
},
|
|
92
|
+
"models": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"enum": [
|
|
95
|
+
"activityBar",
|
|
96
|
+
"sidePanel",
|
|
97
|
+
"topTray",
|
|
98
|
+
"bottomTray",
|
|
99
|
+
"editor",
|
|
100
|
+
"panel"
|
|
101
|
+
],
|
|
102
|
+
"default": "sidePanel"
|
|
103
|
+
},
|
|
104
|
+
"harnesses": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"enum": [
|
|
107
|
+
"activityBar",
|
|
108
|
+
"sidePanel",
|
|
109
|
+
"topTray",
|
|
110
|
+
"bottomTray",
|
|
111
|
+
"editor",
|
|
112
|
+
"panel"
|
|
113
|
+
],
|
|
114
|
+
"default": "sidePanel"
|
|
115
|
+
},
|
|
116
|
+
"usage": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"enum": [
|
|
119
|
+
"activityBar",
|
|
120
|
+
"sidePanel",
|
|
121
|
+
"topTray",
|
|
122
|
+
"bottomTray",
|
|
123
|
+
"editor",
|
|
124
|
+
"panel"
|
|
125
|
+
],
|
|
126
|
+
"default": "sidePanel"
|
|
127
|
+
},
|
|
128
|
+
"seals": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"enum": [
|
|
131
|
+
"activityBar",
|
|
132
|
+
"sidePanel",
|
|
133
|
+
"topTray",
|
|
134
|
+
"bottomTray",
|
|
135
|
+
"editor",
|
|
136
|
+
"panel"
|
|
137
|
+
],
|
|
138
|
+
"default": "sidePanel"
|
|
139
|
+
},
|
|
140
|
+
"annotations": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"enum": [
|
|
143
|
+
"activityBar",
|
|
144
|
+
"sidePanel",
|
|
145
|
+
"topTray",
|
|
146
|
+
"bottomTray",
|
|
147
|
+
"editor",
|
|
148
|
+
"panel"
|
|
149
|
+
],
|
|
150
|
+
"default": "sidePanel"
|
|
151
|
+
},
|
|
152
|
+
"remotes": {
|
|
153
|
+
"type": "string",
|
|
154
|
+
"enum": [
|
|
155
|
+
"activityBar",
|
|
156
|
+
"sidePanel",
|
|
157
|
+
"topTray",
|
|
158
|
+
"bottomTray",
|
|
159
|
+
"editor",
|
|
160
|
+
"panel"
|
|
161
|
+
],
|
|
162
|
+
"default": "sidePanel"
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"additionalProperties": false
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"additionalProperties": false,
|
|
169
|
+
"default": {
|
|
170
|
+
"board": "activityBar",
|
|
171
|
+
"settings": {}
|
|
172
|
+
},
|
|
173
|
+
"scope": "application"
|
|
174
|
+
},
|
|
175
|
+
"widgex.column.treeSide": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"enum": [
|
|
178
|
+
"auto",
|
|
179
|
+
"left",
|
|
180
|
+
"right"
|
|
181
|
+
],
|
|
182
|
+
"default": "auto",
|
|
183
|
+
"description": "Which edge of the WidgeX column the task tree sits against. It wants the window edge, so the conversation sits inboard of it. 'auto' follows workbench.sideBar.location, which is right unless you have dragged WidgeX into the secondary side bar — nothing can detect that, so set this if the tree ends up against the editor.",
|
|
184
|
+
"enumDescriptions": [
|
|
185
|
+
"Follow workbench.sideBar.location.",
|
|
186
|
+
"Always against the left edge of the column.",
|
|
187
|
+
"Always against the right edge of the column."
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
"widgex.backendUrl": {
|
|
191
|
+
"type": "string",
|
|
192
|
+
"default": "",
|
|
193
|
+
"description": "URL of the WidgeX backend server. Leave empty to use the production backend at https://www.widgex.ai — that is what sign-in and billing talk to. Set it to http://localhost:3000 to develop against a local widgex-backend, or set WIDGEX_BACKEND_URL in the environment, which is used when this is empty."
|
|
194
|
+
},
|
|
195
|
+
"widgex.telemetry.sink": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"enum": [
|
|
198
|
+
"off",
|
|
199
|
+
"local",
|
|
200
|
+
"upload",
|
|
201
|
+
"posthog"
|
|
202
|
+
],
|
|
203
|
+
"enumDescriptions": [
|
|
204
|
+
"Collect nothing at all.",
|
|
205
|
+
"Write events to ~/.widgex/telemetry/ and never send them anywhere.",
|
|
206
|
+
"Write them there and also send them to WidgeX. Nothing is sent to any third-party analytics service.",
|
|
207
|
+
"Old name for 'upload'. Events are no longer sent to PostHog."
|
|
208
|
+
],
|
|
209
|
+
"default": "upload",
|
|
210
|
+
"tags": [
|
|
211
|
+
"telemetry",
|
|
212
|
+
"usesOnlineServices"
|
|
213
|
+
],
|
|
214
|
+
"description": "Where product analytics go. They are sent to WidgeX only, never to a third-party analytics service. Events record which features are used, which models run, which agent tools run, how long they take and how often they fail. They never include your code, file contents, diffs, file paths, repo or branch names, prompts, model output, shell commands, URLs or your email address — and never the arguments to an api.* call, only its name. Once you sign in they are linked to your account. Every event is also written to ~/.widgex/telemetry/ as one JSON object per line, kept 30 days, so you can read exactly what was sent. Set this to 'local' to keep them on this machine, or 'off' to collect nothing. The editor's telemetry.telemetryLevel setting is honoured too: 'off' or 'crash' collects nothing and 'error' sends only error reports; the DO_NOT_TRACK=1 environment variable also collects nothing. Privacy policy: https://www.widgex.ai/privacy"
|
|
215
|
+
},
|
|
216
|
+
"widgex.pythonPath": {
|
|
217
|
+
"type": "string",
|
|
218
|
+
"default": "",
|
|
219
|
+
"description": "Python interpreter used for agent tools, the browser widget and workflow checks. Must be Python 3.10 or newer. Leave empty to search for one automatically — note that on macOS the system python3 is 3.9 and will not work."
|
|
220
|
+
},
|
|
221
|
+
"widgex.harness.tokenCap": {
|
|
222
|
+
"type": "number",
|
|
223
|
+
"default": 400000,
|
|
224
|
+
"minimum": 1000,
|
|
225
|
+
"description": "Lifetime token ceiling for a workflow armed from the chat composer, and for any other workflow laid on a session without one of its own. An armed workflow serves its own turn after each of yours, so this is what bounds it. The cap is checked mid-turn and interrupts when crossed — keep it generous relative to one demo turn, or a walkthrough can be killed while the card is still on screen. There is no \"no cap\": 0 or an unusable value means the default. Turns you type yourself are never counted. Scheduled harnesses have their own limit, set per harness in the Harness Manager (1,000,000 tokens a day unless changed)."
|
|
226
|
+
},
|
|
227
|
+
"widgex.context.compactAtPercent": {
|
|
228
|
+
"type": "number",
|
|
229
|
+
"default": 33,
|
|
230
|
+
"minimum": 10,
|
|
231
|
+
"maximum": 90,
|
|
232
|
+
"markdownDescription": "How full an agent's context may get, as a percentage of the model's context window, before the conversation is compacted into a short rundown. The full transcript stays readable after a compaction, so a low value costs little and keeps every turn cheap. Applies to every provider, from the next turn. Also set on Settings → Routing."
|
|
233
|
+
},
|
|
234
|
+
"widgex.harness.orchestrateByDefault": {
|
|
235
|
+
"type": "boolean",
|
|
236
|
+
"default": false,
|
|
237
|
+
"description": "Run every session you start inside the built-in \"orchestrate\" workflow. The orchestrator plans the work and hands each step to a subagent on its own branch, requiring evidence before it moves on; it holds no permission except spawning, so it cannot read, edit or run anything itself — which is the point, and also what makes it a large change to how a session behaves. Off by default until it has been used enough to trust. Turning it off also releases any session already running one, so it is a way out and not just a way of not starting more."
|
|
238
|
+
},
|
|
239
|
+
"widgex.inbox.shareWithTeam": {
|
|
240
|
+
"type": "boolean",
|
|
241
|
+
"default": true,
|
|
242
|
+
"description": "Show agents' questions, reviews and requests for you in XTADEL's \"Actions for you\", so you can answer them away from this machine. Each one is written, end-to-end encrypted, into its task's folder in the project, where everyone who can read that task can see it — the same people who can already read the task's conversation. Questions about something only this machine can check (a running app, a working copy) are never shared. Off, nothing new is shared and answers from XTADEL are not applied."
|
|
243
|
+
},
|
|
244
|
+
"widgex.hooks.enabled": {
|
|
245
|
+
"type": "boolean",
|
|
246
|
+
"default": true,
|
|
247
|
+
"description": "Let programs on this machine start a workflow through one of its hooks — a git hook, a CI job or a script posting to http://127.0.0.1:<port>/v1/hooks/<id> with the hook's token. Only reachable from this machine, and a hook does nothing until you generate its token. Takes effect after a reload."
|
|
248
|
+
},
|
|
249
|
+
"widgex.hooks.port": {
|
|
250
|
+
"type": "number",
|
|
251
|
+
"default": 7477,
|
|
252
|
+
"minimum": 1,
|
|
253
|
+
"maximum": 65535,
|
|
254
|
+
"description": "Port the local hook server listens on, on 127.0.0.1 only. Change it if another program already uses 7477. Every WidgeX window on this machine should use the same port. Takes effect after a reload."
|
|
255
|
+
},
|
|
256
|
+
"widgex.bugReports.upload": {
|
|
257
|
+
"type": "boolean",
|
|
258
|
+
"default": false,
|
|
259
|
+
"description": "Send bug reports filed by agents to the WidgeX intake service. Reports are always written to .widgex/bugs/ locally; this controls whether they are uploaded. An upload carries the agent's description of the problem, your WidgeX version and platform, and facts about the session (model, settings, cost, error messages, and the project, task and branch names); the conversation excerpt, logs and file list stay on this machine. While analytics are off, each report is asked about first. Privacy policy: https://www.widgex.ai/privacy"
|
|
260
|
+
},
|
|
261
|
+
"widgex.bugReports.endpoint": {
|
|
262
|
+
"type": "string",
|
|
263
|
+
"default": "",
|
|
264
|
+
"description": "Bug report intake URL. Defaults to {backendUrl}/api/bugs when empty. Only used when widgex.bugReports.upload is enabled."
|
|
265
|
+
},
|
|
266
|
+
"widgex.bugReports.intakeKey": {
|
|
267
|
+
"type": "string",
|
|
268
|
+
"default": "",
|
|
269
|
+
"description": "Shared key the bug report intake requires. Identifies a WidgeX build rather than a user, so it is abuse control rather than authentication. Uploads stay queued until this is set."
|
|
270
|
+
},
|
|
271
|
+
"widgex.xylon.saveDirectory": {
|
|
272
|
+
"type": "string",
|
|
273
|
+
"default": "",
|
|
274
|
+
"description": "Directory containing .wxylon context files."
|
|
275
|
+
},
|
|
276
|
+
"widgex.xylon.workingDirectory": {
|
|
277
|
+
"type": "string",
|
|
278
|
+
"default": "",
|
|
279
|
+
"description": "Temporary directory where .wxylon files are unpacked for editing."
|
|
280
|
+
},
|
|
281
|
+
"widgex.browser.useNativeView": {
|
|
282
|
+
"type": "boolean",
|
|
283
|
+
"default": true,
|
|
284
|
+
"description": "Use the native Integrated Browser (BrowserView) instead of WebRTC streaming. Set to false for web/code-server environments."
|
|
285
|
+
},
|
|
286
|
+
"widgex.browser.openInChrome": {
|
|
287
|
+
"type": "boolean",
|
|
288
|
+
"default": false,
|
|
289
|
+
"markdownDescription": "Open pages in a real Chrome, shown as a tab here, instead of the built-in browser — addresses you type, links from the WidgeX column, pull requests, and agents' browsing. Uses Microsoft Edge when Chrome is not installed.\n\nOff by default: pages open in the built-in browser, and when a site refuses it (Google sign-in, for example) WidgeX offers to open that one page in Chrome. **WidgeX: Open in Chrome…** does the same by hand. An agent session already browsing in Chrome stays there until it ends."
|
|
290
|
+
},
|
|
291
|
+
"widgex.xactor.hfactor": {
|
|
292
|
+
"type": "number",
|
|
293
|
+
"default": 1,
|
|
294
|
+
"description": "Humanization speed factor for browser automation. Higher is faster: it divides every delay. 1.0 = normal human speed, 2.0 = 2x faster, 0.5 = 2x slower. Scales all timing (mouse movement, click hold, typing, cognitive pauses)."
|
|
295
|
+
},
|
|
296
|
+
"widgex.providers": {
|
|
297
|
+
"type": "array",
|
|
298
|
+
"default": [],
|
|
299
|
+
"description": "Configured LLM providers and their models. Left empty, the built-in providers are used; setting it replaces them entirely, so new built-ins will not appear until you clear it."
|
|
300
|
+
},
|
|
301
|
+
"widgex.defaultProvider": {
|
|
302
|
+
"type": "string",
|
|
303
|
+
"default": "",
|
|
304
|
+
"description": "Default provider ID for new sessions. Empty until you enable a model; models are off until you turn them on in Model configuration."
|
|
305
|
+
},
|
|
306
|
+
"widgex.defaultModel": {
|
|
307
|
+
"type": "string",
|
|
308
|
+
"default": "",
|
|
309
|
+
"description": "Default model ID for new sessions. Empty until you enable a model."
|
|
310
|
+
},
|
|
311
|
+
"widgex.gitBashPath": {
|
|
312
|
+
"type": "string",
|
|
313
|
+
"default": "",
|
|
314
|
+
"description": "Absolute path to bash.exe. Windows only. The Claude Code CLI requires git-bash and exits immediately without it; set this if Git is installed somewhere non-standard (scoop, winget, portable) and is not being found automatically."
|
|
315
|
+
},
|
|
316
|
+
"widgex.geminiCliPath": {
|
|
317
|
+
"type": "string",
|
|
318
|
+
"default": "",
|
|
319
|
+
"description": "Absolute path to the gemini binary. WidgeX does not ship it — install with 'npm install -g @google/gemini-cli'. Set this only if it is installed somewhere WidgeX cannot find; an editor launched from Finder or the Dock does not inherit a login shell's PATH."
|
|
320
|
+
},
|
|
321
|
+
"widgex.codexCliPath": {
|
|
322
|
+
"type": "string",
|
|
323
|
+
"default": "",
|
|
324
|
+
"description": "Absolute path to the codex-acp binary — the ACP adapter, not the codex CLI itself, which has no ACP mode. WidgeX does not ship it — install with 'npm install -g @agentclientprotocol/codex-acp'. Set this only if it is installed somewhere WidgeX cannot find; an editor launched from Finder or the Dock does not inherit a login shell's PATH."
|
|
325
|
+
},
|
|
326
|
+
"widgex.copilotCliPath": {
|
|
327
|
+
"type": "string",
|
|
328
|
+
"default": "",
|
|
329
|
+
"description": "Absolute path to GitHub's Copilot CLI (copilot). WidgeX does not ship it — install with 'npm install -g @github/copilot', then sign in with 'copilot login'. Set this only if it is installed somewhere WidgeX cannot find; an editor launched from Finder or the Dock does not inherit a login shell's PATH."
|
|
330
|
+
},
|
|
331
|
+
"widgex.panel.openOnStartup": {
|
|
332
|
+
"type": "boolean",
|
|
333
|
+
"default": true,
|
|
334
|
+
"description": "Open the WidgeX board when the window starts into an empty editor area, in place of the Welcome tab. Editors restored from your last session are left alone — the board never opens on top of them. Turn this off to always start with an empty editor area."
|
|
335
|
+
},
|
|
336
|
+
"widgex.xtadel.workSummaries": {
|
|
337
|
+
"type": "boolean",
|
|
338
|
+
"default": true,
|
|
339
|
+
"description": "Write a two or three sentence summary of each conversation once it has been quiet for a few minutes, so your organisation's workspace can say what a stretch of work was. An excerpt of the conversation is sent to a small model you have enabled, or to the conversation's own model when there is none."
|
|
340
|
+
},
|
|
341
|
+
"widgex.landing.suggestCommitMessages": {
|
|
342
|
+
"type": "boolean",
|
|
343
|
+
"default": true,
|
|
344
|
+
"description": "Ask this session's model to write the commit messages a merge needs, instead of using a generic one. The uncommitted diff is sent to whichever provider the session is set to."
|
|
345
|
+
},
|
|
346
|
+
"widgex.models.guidelinesInPrompt": {
|
|
347
|
+
"type": "boolean",
|
|
348
|
+
"default": true,
|
|
349
|
+
"description": "Send your model guidelines — the \"use when\" and \"don't use when\" sentences from Model configuration — to the agent, so it can pick the right model when it spins up a subagent. Composed once per session, so a change takes effect for new sessions. Turn this off to keep the guidelines as notes for yourself only."
|
|
350
|
+
},
|
|
351
|
+
"widgex.drive.onedrive.clientId": {
|
|
352
|
+
"type": "string",
|
|
353
|
+
"default": "",
|
|
354
|
+
"description": "Application (client) ID of an Azure app registration used to reach OneDrive. Needs the delegated scopes Files.ReadWrite and offline_access, and http://127.0.0.1 registered under \"Mobile and desktop applications\". Not a secret: a desktop app is a public client and signs in with PKCE."
|
|
355
|
+
},
|
|
356
|
+
"widgex.drive.onedrive.tenant": {
|
|
357
|
+
"type": "string",
|
|
358
|
+
"default": "",
|
|
359
|
+
"description": "Directory (tenant) ID, for a single-tenant app registration. Leave empty to use \"common\", which accepts both personal and work Microsoft accounts."
|
|
360
|
+
},
|
|
361
|
+
"widgex.drive.dropbox.appKey": {
|
|
362
|
+
"type": "string",
|
|
363
|
+
"default": "",
|
|
364
|
+
"description": "App key of a Dropbox app used to reach Dropbox. Create one at https://www.dropbox.com/developers/apps (Scoped access, Full Dropbox) with the permissions account_info.read, files.metadata.read, files.metadata.write, files.content.read, files.content.write and sharing.read, and add the loopback redirect URI http://127.0.0.1:47619/dropbox-callback under OAuth 2 → Redirect URIs (Dropbox matches it exactly, port included). Not a secret: a desktop app is a public client and signs in with PKCE."
|
|
365
|
+
},
|
|
366
|
+
"widgex.drive.syncIntervalMinutes": {
|
|
367
|
+
"type": "number",
|
|
368
|
+
"default": 5,
|
|
369
|
+
"description": "How often each document hub pulls changes from its drive."
|
|
370
|
+
},
|
|
371
|
+
"widgex.drive.maxFileSizeMb": {
|
|
372
|
+
"type": "number",
|
|
373
|
+
"default": 50,
|
|
374
|
+
"description": "Files larger than this are left in the drive and never mirrored. Keeps a hub from importing a video library alongside the documents."
|
|
375
|
+
},
|
|
376
|
+
"widgex.xylon.sync.enabled": {
|
|
377
|
+
"type": "boolean",
|
|
378
|
+
"default": false,
|
|
379
|
+
"description": "Sync projects you share yourself (with your own devices or with people you invite). Off by default: transcripts contain whatever the agent read, so publishing them is opt-in. A repository that belongs to an organisation project you are a member of syncs to that organisation regardless — working in it is the consent, and WidgeX says so the first time."
|
|
380
|
+
},
|
|
381
|
+
"widgex.xylon.sync.durableIntervalMs": {
|
|
382
|
+
"type": "number",
|
|
383
|
+
"default": 300000,
|
|
384
|
+
"description": "How often a shared session is uploaded. Long on purpose — each upload is a billed write, and collaborators still see work sooner because pulling is on its own faster clock."
|
|
385
|
+
},
|
|
386
|
+
"widgex.xylon.sync.durableMaxBytes": {
|
|
387
|
+
"type": "number",
|
|
388
|
+
"default": 1048576,
|
|
389
|
+
"description": "Upload early once this much transcript is waiting, rather than sitting on it until the interval elapses."
|
|
390
|
+
},
|
|
391
|
+
"widgex.xylon.syncDirectory": {
|
|
392
|
+
"type": "string",
|
|
393
|
+
"default": "",
|
|
394
|
+
"description": "Where sync bookkeeping is kept. Empty derives ~/.widgex/wxylon/sync — deliberately outside the working tree, so it is never zipped into an archive."
|
|
395
|
+
},
|
|
396
|
+
"widgex.work.continuationBudget": {
|
|
397
|
+
"type": "number",
|
|
398
|
+
"default": 0,
|
|
399
|
+
"minimum": 0,
|
|
400
|
+
"markdownDescription": "Weighted tokens one card may spend before it is moved to **Failed**.\n\nA card whose session stops early is woken again rather than left sitting — see the board's Failed column for what stopped. This is the ceiling that ends a session that will never finish. **0 turns it off**, which leaves the Coordinator's judgement as the only thing that can stop a runaway.\n\nThe unit is the weighted token figure the spend page reports, so a number here can be compared against what the board already shows you."
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
package/viewer/index.css
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/* The file viewer: VS Code's dark theme, read-only. */
|
|
2
|
+
:root {
|
|
3
|
+
--bg: #1e1e1e; --side: #252526; --tabs: #2d2d2d; --border: #3c3c3c; --fg: #d4d4d4;
|
|
4
|
+
--dim: #858585; --accent: #0e639c; --mark: rgba(255, 213, 79, 0.13); --markEdge: #e5c07b;
|
|
5
|
+
color-scheme: dark;
|
|
6
|
+
}
|
|
7
|
+
* { box-sizing: border-box; }
|
|
8
|
+
html, body, #root { height: 100%; margin: 0; }
|
|
9
|
+
body { background: var(--bg); color: var(--fg); font: 13px/1.4 system-ui, -apple-system, "Segoe UI", sans-serif; }
|
|
10
|
+
.shell { display: flex; height: 100%; }
|
|
11
|
+
.tree { width: 260px; flex: none; background: var(--side); border-right: 1px solid var(--border); overflow: auto; padding-bottom: 12px; user-select: none; }
|
|
12
|
+
.tree-title { font-size: 11px; letter-spacing: .06em; color: var(--dim); padding: 10px 12px 6px; }
|
|
13
|
+
.row { display: flex; gap: 4px; align-items: center; height: 22px; padding-right: 8px; cursor: pointer; white-space: nowrap; color: #cccccc; }
|
|
14
|
+
.row:hover { background: #2a2d2e; }
|
|
15
|
+
.row.current { background: #37373d; color: #ffffff; }
|
|
16
|
+
.twisty { width: 12px; flex: none; color: var(--dim); font-size: 10px; }
|
|
17
|
+
.folder { color: #cccccc; }
|
|
18
|
+
main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
|
|
19
|
+
.tabs { display: flex; background: var(--tabs); height: 35px; flex: none; }
|
|
20
|
+
.tab { padding: 0 16px; display: flex; align-items: center; color: #969696; border-right: 1px solid #252526; }
|
|
21
|
+
.tab.active { background: var(--bg); color: #ffffff; border-top: 1px solid var(--accent); }
|
|
22
|
+
.crumbs { padding: 4px 16px; color: #a9a9a9; font-size: 12px; flex: none; border-bottom: 1px solid #2b2b2b; }
|
|
23
|
+
.body { flex: 1; overflow: auto; }
|
|
24
|
+
.note { padding: 24px; color: var(--dim); }
|
|
25
|
+
|
|
26
|
+
.code { border-collapse: collapse; font: 13px/19px Consolas, "Cascadia Code", Menlo, monospace; width: 100%; }
|
|
27
|
+
.code td { padding: 0; vertical-align: top; }
|
|
28
|
+
.gutter { color: #6e7681; text-align: right; padding: 0 16px 0 12px !important; user-select: none; width: 1%; white-space: nowrap; }
|
|
29
|
+
.line { white-space: pre; padding-right: 24px !important; }
|
|
30
|
+
.line code { font: inherit; }
|
|
31
|
+
tr.marked { background: var(--mark); }
|
|
32
|
+
tr.marked .gutter { color: #c6c6c6; box-shadow: inset 2px 0 0 var(--markEdge); }
|
|
33
|
+
|
|
34
|
+
.annotator { display: flex; flex-direction: column; height: 100%; }
|
|
35
|
+
.toolbar { display: flex; gap: 6px; align-items: center; padding: 6px 12px; background: var(--tabs); border-bottom: 1px solid var(--border); flex: none; }
|
|
36
|
+
.toolbar .spacer { flex: 1; }
|
|
37
|
+
button { background: #3a3d41; color: #ffffff; border: 1px solid transparent; border-radius: 2px; padding: 4px 10px; font: inherit; cursor: pointer; }
|
|
38
|
+
button:hover:not(:disabled) { background: #45494e; }
|
|
39
|
+
button:disabled { opacity: .45; cursor: default; }
|
|
40
|
+
button.on { border-color: #007fd4; background: #094771; }
|
|
41
|
+
button.primary { background: var(--accent); }
|
|
42
|
+
button.primary:hover { background: #1177bb; }
|
|
43
|
+
button.swatch { width: 18px; height: 18px; padding: 0; border-radius: 50%; }
|
|
44
|
+
button.swatch.on { outline: 2px solid #ffffff; outline-offset: 1px; }
|
|
45
|
+
.status { padding: 6px 12px; background: #1b2b3a; color: #9cdcfe; flex: none; }
|
|
46
|
+
.stage { position: relative; margin: 16px auto; max-width: calc(100% - 32px); }
|
|
47
|
+
.stage.image img { display: block; max-width: 100%; height: auto; background: repeating-conic-gradient(#2a2a2a 0% 25%, #333 0% 50%) 50% / 16px 16px; }
|
|
48
|
+
.stage.html { width: calc(100% - 32px); }
|
|
49
|
+
.stage.html iframe { display: block; width: 100%; height: 78vh; border: 1px solid var(--border); background: #ffffff; }
|
|
50
|
+
.overlay { position: absolute; inset: 0; width: 100%; height: 100%; touch-action: none; }
|
|
51
|
+
.overlay.tool-pen { cursor: crosshair; }
|
|
52
|
+
.overlay.tool-pin { cursor: copy; }
|
|
53
|
+
.overlay.tool-look { pointer-events: none; }
|
|
54
|
+
.pin { position: absolute; transform: translate(-50%, -50%); z-index: 2; }
|
|
55
|
+
.pin .dot { width: 24px; height: 24px; padding: 0; border-radius: 50%; background: #c586c0; border: 2px solid #ffffff; font-weight: 700; }
|
|
56
|
+
.pin .label { position: absolute; left: 30px; top: -2px; background: #252526; border: 1px solid var(--border); padding: 3px 8px; white-space: pre-wrap; width: max-content; max-width: 280px; }
|
|
57
|
+
.pin .bubble { position: absolute; left: 30px; top: -6px; background: #252526; border: 1px solid #007fd4; padding: 8px; width: 280px; }
|
|
58
|
+
.pin textarea { width: 100%; min-height: 70px; background: #3c3c3c; color: var(--fg); border: 1px solid var(--border); font: inherit; padding: 6px; resize: vertical; }
|
|
59
|
+
.bubble-actions { display: flex; justify-content: flex-end; gap: 6px; margin-top: 6px; }
|
|
60
|
+
|
|
61
|
+
pre code.hljs {
|
|
62
|
+
display: block;
|
|
63
|
+
overflow-x: auto;
|
|
64
|
+
padding: 1em
|
|
65
|
+
}
|
|
66
|
+
code.hljs {
|
|
67
|
+
padding: 3px 5px
|
|
68
|
+
}
|
|
69
|
+
/*
|
|
70
|
+
* Visual Studio 2015 dark style
|
|
71
|
+
* Author: Nicolas LLOBERA <nllobera@gmail.com>
|
|
72
|
+
*/
|
|
73
|
+
.hljs {
|
|
74
|
+
background: #1E1E1E;
|
|
75
|
+
color: #DCDCDC
|
|
76
|
+
}
|
|
77
|
+
.hljs-keyword,
|
|
78
|
+
.hljs-literal,
|
|
79
|
+
.hljs-symbol,
|
|
80
|
+
.hljs-name {
|
|
81
|
+
color: #569CD6
|
|
82
|
+
}
|
|
83
|
+
.hljs-link {
|
|
84
|
+
color: #569CD6;
|
|
85
|
+
text-decoration: underline
|
|
86
|
+
}
|
|
87
|
+
.hljs-built_in,
|
|
88
|
+
.hljs-type {
|
|
89
|
+
color: #4EC9B0
|
|
90
|
+
}
|
|
91
|
+
.hljs-number,
|
|
92
|
+
.hljs-class {
|
|
93
|
+
color: #B8D7A3
|
|
94
|
+
}
|
|
95
|
+
.hljs-string,
|
|
96
|
+
.hljs-meta .hljs-string {
|
|
97
|
+
color: #D69D85
|
|
98
|
+
}
|
|
99
|
+
.hljs-regexp,
|
|
100
|
+
.hljs-template-tag {
|
|
101
|
+
color: #9A5334
|
|
102
|
+
}
|
|
103
|
+
.hljs-subst,
|
|
104
|
+
.hljs-function,
|
|
105
|
+
.hljs-title,
|
|
106
|
+
.hljs-params,
|
|
107
|
+
.hljs-formula {
|
|
108
|
+
color: #DCDCDC
|
|
109
|
+
}
|
|
110
|
+
.hljs-comment,
|
|
111
|
+
.hljs-quote {
|
|
112
|
+
color: #57A64A;
|
|
113
|
+
font-style: italic
|
|
114
|
+
}
|
|
115
|
+
.hljs-doctag {
|
|
116
|
+
color: #608B4E
|
|
117
|
+
}
|
|
118
|
+
.hljs-meta,
|
|
119
|
+
.hljs-meta .hljs-keyword,
|
|
120
|
+
.hljs-tag {
|
|
121
|
+
color: #9B9B9B
|
|
122
|
+
}
|
|
123
|
+
.hljs-variable,
|
|
124
|
+
.hljs-template-variable {
|
|
125
|
+
color: #BD63C5
|
|
126
|
+
}
|
|
127
|
+
.hljs-attr,
|
|
128
|
+
.hljs-attribute {
|
|
129
|
+
color: #9CDCFE
|
|
130
|
+
}
|
|
131
|
+
.hljs-section {
|
|
132
|
+
color: gold
|
|
133
|
+
}
|
|
134
|
+
.hljs-emphasis {
|
|
135
|
+
font-style: italic
|
|
136
|
+
}
|
|
137
|
+
.hljs-strong {
|
|
138
|
+
font-weight: bold
|
|
139
|
+
}
|
|
140
|
+
/*.hljs-code {
|
|
141
|
+
font-family:'Monospace';
|
|
142
|
+
}*/
|
|
143
|
+
.hljs-bullet,
|
|
144
|
+
.hljs-selector-tag,
|
|
145
|
+
.hljs-selector-id,
|
|
146
|
+
.hljs-selector-class,
|
|
147
|
+
.hljs-selector-attr,
|
|
148
|
+
.hljs-selector-pseudo {
|
|
149
|
+
color: #D7BA7D
|
|
150
|
+
}
|
|
151
|
+
.hljs-addition {
|
|
152
|
+
background-color: #144212;
|
|
153
|
+
display: inline-block;
|
|
154
|
+
width: 100%
|
|
155
|
+
}
|
|
156
|
+
.hljs-deletion {
|
|
157
|
+
background-color: #600;
|
|
158
|
+
display: inline-block;
|
|
159
|
+
width: 100%
|
|
160
|
+
}
|