sideby 0.13.1 → 0.15.0

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.
Files changed (85) hide show
  1. package/README.md +2 -1
  2. package/dist/build.json +1 -1
  3. package/dist/src/cli/commands.d.ts +4 -2
  4. package/dist/src/cli/commands.js +194 -11
  5. package/dist/src/cli/format.js +7 -3
  6. package/dist/src/cli/json-schemas.js +104 -3
  7. package/dist/src/cli/main.js +27 -7
  8. package/dist/src/core/config.d.ts +28 -0
  9. package/dist/src/core/config.js +54 -1
  10. package/dist/src/core/handoff-enable.js +10 -5
  11. package/dist/src/core/launch.d.ts +5 -0
  12. package/dist/src/core/launch.js +14 -3
  13. package/dist/src/core/quota-fetch.d.ts +22 -0
  14. package/dist/src/core/quota-fetch.js +98 -0
  15. package/dist/src/core/quota-levels.d.ts +3 -2
  16. package/dist/src/core/quota-levels.js +8 -4
  17. package/dist/src/core/quota-store.d.ts +19 -0
  18. package/dist/src/core/quota-store.js +62 -0
  19. package/dist/src/core/skill-check.d.ts +16 -0
  20. package/dist/src/core/skill-check.js +47 -3
  21. package/dist/src/core/update.d.ts +67 -1
  22. package/dist/src/core/update.js +147 -37
  23. package/dist/src/families/grok/handoff-hook.d.ts +6 -0
  24. package/dist/src/families/grok/handoff-hook.js +45 -2
  25. package/dist/src/families/grok/handoff.d.ts +6 -1
  26. package/dist/src/families/grok/handoff.js +30 -13
  27. package/dist/src/families/grok/index.js +5 -0
  28. package/dist/src/families/grok/quota-log.d.ts +30 -0
  29. package/dist/src/families/grok/quota-log.js +140 -0
  30. package/dist/src/families/grok/quota.d.ts +5 -0
  31. package/dist/src/families/grok/quota.js +112 -0
  32. package/dist/src/panel/handler.d.ts +13 -3
  33. package/dist/src/panel/handler.js +81 -8
  34. package/dist/src/panel/i18n.d.ts +138 -8
  35. package/dist/src/panel/i18n.js +301 -41
  36. package/dist/src/panel/page-logic.d.ts +59 -2
  37. package/dist/src/panel/page-logic.js +99 -6
  38. package/dist/src/panel/page-script.js +769 -175
  39. package/dist/src/panel/page-styles.js +83 -15
  40. package/dist/src/panel/page.js +3 -0
  41. package/dist/src/runtime.d.ts +32 -2
  42. package/dist/src/runtime.js +64 -21
  43. package/dist/src/types.d.ts +49 -1
  44. package/package.json +3 -2
  45. package/schemas/alias.json +1 -1
  46. package/schemas/app-install.json +1 -1
  47. package/schemas/app-uninstall.json +1 -1
  48. package/schemas/browser-open.json +1 -1
  49. package/schemas/browser-switch.json +1 -1
  50. package/schemas/browser.json +1 -1
  51. package/schemas/config.json +60 -0
  52. package/schemas/desktop-remove.json +1 -1
  53. package/schemas/desktop.json +1 -1
  54. package/schemas/doctor.json +1 -1
  55. package/schemas/error.json +1 -1
  56. package/schemas/families.json +1 -1
  57. package/schemas/handoff-disable.json +1 -1
  58. package/schemas/handoff-enable.json +1 -1
  59. package/schemas/handoff-ready.json +1 -1
  60. package/schemas/handoff-setup.json +1 -1
  61. package/schemas/handoff-status.json +282 -1
  62. package/schemas/handoff-teardown.json +1 -1
  63. package/schemas/list.json +6 -1
  64. package/schemas/model.json +1 -1
  65. package/schemas/new.json +1 -1
  66. package/schemas/next.json +1 -1
  67. package/schemas/order.json +148 -0
  68. package/schemas/pin.json +126 -0
  69. package/schemas/plugins.json +1 -1
  70. package/schemas/quota-check.json +88 -0
  71. package/schemas/quota-setup.json +1 -1
  72. package/schemas/quota-teardown.json +1 -1
  73. package/schemas/quota.json +15 -2
  74. package/schemas/remote-control.json +1 -1
  75. package/schemas/tune-change.json +1 -1
  76. package/schemas/tune.json +1 -1
  77. package/schemas/unpin.json +126 -0
  78. package/schemas/update-auto.json +84 -0
  79. package/schemas/update.json +79 -1
  80. package/skills/sideby/SKILL.md +7 -3
  81. package/skills/sideby/references/diagnose.md +2 -1
  82. package/skills/sideby/references/handoff.md +9 -1
  83. package/skills/sideby/references/panel.md +28 -0
  84. package/skills/sideby/references/quota.md +11 -1
  85. package/skills/sideby/references/update.md +6 -2
@@ -252,6 +252,66 @@
252
252
  "additionalProperties": false,
253
253
  "description": "Browser Sign-ins (spec §3.24, ADR-0023)."
254
254
  },
255
+ "display": {
256
+ "type": "object",
257
+ "properties": {
258
+ "families": {
259
+ "type": "array",
260
+ "items": {
261
+ "type": "string",
262
+ "minLength": 1
263
+ },
264
+ "uniqueItems": true,
265
+ "description": "Family ids in the order the Panel and `sideby list` show them; families not listed follow in their usual order."
266
+ },
267
+ "accounts": {
268
+ "type": "object",
269
+ "patternProperties": {
270
+ "^.*$": {
271
+ "type": "array",
272
+ "items": {
273
+ "type": "string",
274
+ "minLength": 1
275
+ },
276
+ "uniqueItems": true
277
+ }
278
+ },
279
+ "description": "Per family, account names (not refs or short commands) in the order they are shown; accounts not listed follow, main first, then by name."
280
+ },
281
+ "pinned": {
282
+ "type": "object",
283
+ "patternProperties": {
284
+ "^.*$": {
285
+ "type": "array",
286
+ "items": {
287
+ "type": "string",
288
+ "minLength": 1
289
+ },
290
+ "uniqueItems": true
291
+ }
292
+ },
293
+ "description": "Per family, the names of the accounts pinned to the top of their group, in the order they are shown; they lead the group in every sort. Resetting the order keeps them."
294
+ }
295
+ },
296
+ "additionalProperties": false,
297
+ "description": "Display Order (spec §3.25): the order you gave families and accounts in the Panel, and the accounts you pinned. Display only: it never changes which account a Handoff picks."
298
+ },
299
+ "quota": {
300
+ "type": "object",
301
+ "properties": {
302
+ "check": {
303
+ "type": "object",
304
+ "patternProperties": {
305
+ "^.*$": {
306
+ "type": "boolean"
307
+ }
308
+ },
309
+ "description": "Per family, whether sideby may ask for Quota in a way that costs a request (Grok: its own CLI asks xAI, at most every 15 minutes per account). On by default; `false` turns it off. Off in CI."
310
+ }
311
+ },
312
+ "additionalProperties": false,
313
+ "description": "Quota that sideby asks for (spec §3.26, ADR-0025)."
314
+ },
255
315
  "shellInitFile": {
256
316
  "type": "object",
257
317
  "properties": {
@@ -80,7 +80,7 @@
80
80
  },
81
81
  "command": {
82
82
  "type": "string",
83
- "description": "Updates the installed sideby skill (run it after the user agrees)."
83
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
84
84
  },
85
85
  "message": {
86
86
  "type": "string"
@@ -128,7 +128,7 @@
128
128
  },
129
129
  "command": {
130
130
  "type": "string",
131
- "description": "Updates the installed sideby skill (run it after the user agrees)."
131
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
132
132
  },
133
133
  "message": {
134
134
  "type": "string"
@@ -276,7 +276,7 @@
276
276
  },
277
277
  "command": {
278
278
  "type": "string",
279
- "description": "Updates the installed sideby skill (run it after the user agrees)."
279
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
280
280
  },
281
281
  "message": {
282
282
  "type": "string"
@@ -72,7 +72,7 @@
72
72
  },
73
73
  "command": {
74
74
  "type": "string",
75
- "description": "Updates the installed sideby skill (run it after the user agrees)."
75
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
76
76
  },
77
77
  "message": {
78
78
  "type": "string"
@@ -262,7 +262,7 @@
262
262
  },
263
263
  "command": {
264
264
  "type": "string",
265
- "description": "Updates the installed sideby skill (run it after the user agrees)."
265
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
266
266
  },
267
267
  "message": {
268
268
  "type": "string"
@@ -153,7 +153,7 @@
153
153
  },
154
154
  "command": {
155
155
  "type": "string",
156
- "description": "Updates the installed sideby skill (run it after the user agrees)."
156
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
157
157
  },
158
158
  "message": {
159
159
  "type": "string"
@@ -153,7 +153,7 @@
153
153
  },
154
154
  "command": {
155
155
  "type": "string",
156
- "description": "Updates the installed sideby skill (run it after the user agrees)."
156
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
157
157
  },
158
158
  "message": {
159
159
  "type": "string"
@@ -77,7 +77,7 @@
77
77
  },
78
78
  "command": {
79
79
  "type": "string",
80
- "description": "Updates the installed sideby skill (run it after the user agrees)."
80
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
81
81
  },
82
82
  "message": {
83
83
  "type": "string"
@@ -107,7 +107,7 @@
107
107
  },
108
108
  "command": {
109
109
  "type": "string",
110
- "description": "Updates the installed sideby skill (run it after the user agrees)."
110
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
111
111
  },
112
112
  "message": {
113
113
  "type": "string"
@@ -17,6 +17,287 @@
17
17
  "type": "number",
18
18
  "const": 1
19
19
  },
20
+ "overview": {
21
+ "type": "object",
22
+ "required": [
23
+ "settings",
24
+ "takeover",
25
+ "recent"
26
+ ],
27
+ "properties": {
28
+ "settings": {
29
+ "type": "object",
30
+ "required": [
31
+ "auto",
32
+ "sameFamily",
33
+ "prepareAt",
34
+ "threshold",
35
+ "waitIfResetWithinMinutes",
36
+ "countdownSeconds",
37
+ "crossOrganization",
38
+ "families"
39
+ ],
40
+ "properties": {
41
+ "auto": {
42
+ "type": "boolean"
43
+ },
44
+ "sameFamily": {
45
+ "type": "boolean"
46
+ },
47
+ "prepareAt": {
48
+ "type": "number"
49
+ },
50
+ "threshold": {
51
+ "type": "number"
52
+ },
53
+ "waitIfResetWithinMinutes": {
54
+ "type": "number"
55
+ },
56
+ "countdownSeconds": {
57
+ "type": "number"
58
+ },
59
+ "crossOrganization": {
60
+ "type": "array",
61
+ "items": {
62
+ "type": "string"
63
+ }
64
+ },
65
+ "families": {
66
+ "type": "object",
67
+ "patternProperties": {
68
+ "^.*$": {
69
+ "type": "object",
70
+ "required": [
71
+ "policy",
72
+ "order"
73
+ ],
74
+ "properties": {
75
+ "policy": {
76
+ "anyOf": [
77
+ {
78
+ "type": "string",
79
+ "const": "pressure"
80
+ },
81
+ {
82
+ "type": "string",
83
+ "const": "order"
84
+ }
85
+ ]
86
+ },
87
+ "order": {
88
+ "type": "array",
89
+ "items": {
90
+ "type": "string"
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ },
99
+ "takeover": {
100
+ "type": "array",
101
+ "items": {
102
+ "type": "object",
103
+ "required": [
104
+ "ref",
105
+ "family",
106
+ "starts",
107
+ "decision"
108
+ ],
109
+ "properties": {
110
+ "ref": {
111
+ "type": "string"
112
+ },
113
+ "family": {
114
+ "type": "string"
115
+ },
116
+ "starts": {
117
+ "type": "array",
118
+ "items": {
119
+ "anyOf": [
120
+ {
121
+ "type": "string",
122
+ "const": "quota"
123
+ },
124
+ {
125
+ "type": "string",
126
+ "const": "limit"
127
+ }
128
+ ]
129
+ }
130
+ },
131
+ "decision": {
132
+ "anyOf": [
133
+ {
134
+ "type": "object",
135
+ "required": [
136
+ "kind",
137
+ "ref"
138
+ ],
139
+ "properties": {
140
+ "kind": {
141
+ "type": "string",
142
+ "const": "pick"
143
+ },
144
+ "ref": {
145
+ "type": "string"
146
+ },
147
+ "skipped": {
148
+ "type": "array",
149
+ "items": {
150
+ "type": "object",
151
+ "required": [
152
+ "ref",
153
+ "reason"
154
+ ],
155
+ "properties": {
156
+ "ref": {
157
+ "type": "string"
158
+ },
159
+ "reason": {
160
+ "type": "string"
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
166
+ },
167
+ {
168
+ "type": "object",
169
+ "required": [
170
+ "kind",
171
+ "until"
172
+ ],
173
+ "properties": {
174
+ "kind": {
175
+ "type": "string",
176
+ "const": "wait"
177
+ },
178
+ "until": {
179
+ "type": "string"
180
+ }
181
+ }
182
+ },
183
+ {
184
+ "type": "object",
185
+ "required": [
186
+ "kind",
187
+ "reason"
188
+ ],
189
+ "properties": {
190
+ "kind": {
191
+ "type": "string",
192
+ "const": "none"
193
+ },
194
+ "reason": {
195
+ "type": "string"
196
+ },
197
+ "earliestReset": {
198
+ "type": "object",
199
+ "required": [
200
+ "ref",
201
+ "at"
202
+ ],
203
+ "properties": {
204
+ "ref": {
205
+ "type": "string"
206
+ },
207
+ "at": {
208
+ "type": "string"
209
+ }
210
+ }
211
+ },
212
+ "skipped": {
213
+ "type": "array",
214
+ "items": {
215
+ "type": "object",
216
+ "required": [
217
+ "ref",
218
+ "reason"
219
+ ],
220
+ "properties": {
221
+ "ref": {
222
+ "type": "string"
223
+ },
224
+ "reason": {
225
+ "type": "string"
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ }
232
+ ]
233
+ }
234
+ }
235
+ }
236
+ },
237
+ "recent": {
238
+ "type": "array",
239
+ "items": {
240
+ "type": "object",
241
+ "required": [
242
+ "from",
243
+ "to",
244
+ "at",
245
+ "trigger",
246
+ "briefSource"
247
+ ],
248
+ "properties": {
249
+ "from": {
250
+ "type": "string"
251
+ },
252
+ "to": {
253
+ "type": "string"
254
+ },
255
+ "at": {
256
+ "type": "string"
257
+ },
258
+ "trigger": {
259
+ "anyOf": [
260
+ {
261
+ "type": "string",
262
+ "const": "threshold"
263
+ },
264
+ {
265
+ "type": "string",
266
+ "const": "limit"
267
+ },
268
+ {
269
+ "type": "string",
270
+ "const": "manual"
271
+ },
272
+ {
273
+ "type": "null"
274
+ }
275
+ ]
276
+ },
277
+ "briefSource": {
278
+ "anyOf": [
279
+ {
280
+ "type": "string",
281
+ "const": "agent"
282
+ },
283
+ {
284
+ "type": "string",
285
+ "const": "sideby"
286
+ },
287
+ {
288
+ "type": "string",
289
+ "const": "user"
290
+ },
291
+ {
292
+ "type": "null"
293
+ }
294
+ ]
295
+ }
296
+ }
297
+ }
298
+ }
299
+ }
300
+ },
20
301
  "auto": {
21
302
  "type": "boolean"
22
303
  },
@@ -184,7 +465,7 @@
184
465
  },
185
466
  "command": {
186
467
  "type": "string",
187
- "description": "Updates the installed sideby skill (run it after the user agrees)."
468
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
188
469
  },
189
470
  "message": {
190
471
  "type": "string"
@@ -77,7 +77,7 @@
77
77
  },
78
78
  "command": {
79
79
  "type": "string",
80
- "description": "Updates the installed sideby skill (run it after the user agrees)."
80
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
81
81
  },
82
82
  "message": {
83
83
  "type": "string"
package/schemas/list.json CHANGED
@@ -160,6 +160,11 @@
160
160
  },
161
161
  "description": "The other accounts signed in as the same login (same family, email and organization), which share one quota (spec §3.21). Absent when there are none."
162
162
  },
163
+ "pinned": {
164
+ "type": "boolean",
165
+ "const": true,
166
+ "description": "Pinned to the top of its family in the Panel and `sideby list` (spec §3.25). Display only; absent when not pinned."
167
+ },
163
168
  "problems": {
164
169
  "type": "array",
165
170
  "items": {
@@ -308,7 +313,7 @@
308
313
  },
309
314
  "command": {
310
315
  "type": "string",
311
- "description": "Updates the installed sideby skill (run it after the user agrees)."
316
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
312
317
  },
313
318
  "message": {
314
319
  "type": "string"
@@ -216,7 +216,7 @@
216
216
  },
217
217
  "command": {
218
218
  "type": "string",
219
- "description": "Updates the installed sideby skill (run it after the user agrees)."
219
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
220
220
  },
221
221
  "message": {
222
222
  "type": "string"
package/schemas/new.json CHANGED
@@ -246,7 +246,7 @@
246
246
  },
247
247
  "command": {
248
248
  "type": "string",
249
- "description": "Updates the installed sideby skill (run it after the user agrees)."
249
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
250
250
  },
251
251
  "message": {
252
252
  "type": "string"
package/schemas/next.json CHANGED
@@ -186,7 +186,7 @@
186
186
  },
187
187
  "command": {
188
188
  "type": "string",
189
- "description": "Updates the installed sideby skill (run it after the user agrees)."
189
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
190
190
  },
191
191
  "message": {
192
192
  "type": "string"
@@ -0,0 +1,148 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "sideby/order.json",
4
+ "type": "object",
5
+ "required": [
6
+ "schemaVersion",
7
+ "display",
8
+ "families"
9
+ ],
10
+ "properties": {
11
+ "schemaVersion": {
12
+ "type": "number",
13
+ "const": 1
14
+ },
15
+ "display": {
16
+ "type": "object",
17
+ "properties": {
18
+ "families": {
19
+ "type": "array",
20
+ "items": {
21
+ "type": "string"
22
+ }
23
+ },
24
+ "accounts": {
25
+ "type": "object",
26
+ "patternProperties": {
27
+ "^.*$": {
28
+ "type": "array",
29
+ "items": {
30
+ "type": "string"
31
+ }
32
+ }
33
+ }
34
+ },
35
+ "pinned": {
36
+ "type": "object",
37
+ "patternProperties": {
38
+ "^.*$": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "string"
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ },
48
+ "families": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "object",
52
+ "required": [
53
+ "family",
54
+ "accounts"
55
+ ],
56
+ "properties": {
57
+ "family": {
58
+ "type": "string"
59
+ },
60
+ "accounts": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "object",
64
+ "required": [
65
+ "name",
66
+ "ref",
67
+ "pinned"
68
+ ],
69
+ "properties": {
70
+ "name": {
71
+ "type": "string"
72
+ },
73
+ "ref": {
74
+ "type": "string"
75
+ },
76
+ "pinned": {
77
+ "type": "boolean"
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+ },
85
+ "_notice": {
86
+ "type": "object",
87
+ "properties": {
88
+ "update": {
89
+ "type": "object",
90
+ "required": [
91
+ "current",
92
+ "latest",
93
+ "command",
94
+ "message"
95
+ ],
96
+ "properties": {
97
+ "current": {
98
+ "type": "string"
99
+ },
100
+ "latest": {
101
+ "type": "string"
102
+ },
103
+ "command": {
104
+ "type": "string",
105
+ "description": "Run it after the user agrees: it shows the plan and exits 10; then --yes."
106
+ },
107
+ "message": {
108
+ "type": "string"
109
+ }
110
+ }
111
+ },
112
+ "skill": {
113
+ "type": "object",
114
+ "required": [
115
+ "installed",
116
+ "current",
117
+ "command",
118
+ "message"
119
+ ],
120
+ "properties": {
121
+ "installed": {
122
+ "anyOf": [
123
+ {
124
+ "type": "string"
125
+ },
126
+ {
127
+ "type": "null"
128
+ }
129
+ ],
130
+ "description": "The skill's version; null when it has none."
131
+ },
132
+ "current": {
133
+ "type": "string"
134
+ },
135
+ "command": {
136
+ "type": "string",
137
+ "description": "`sideby update`, which updates the skill with sideby: run it after the user agrees; it shows the plan and exits 10, then --yes."
138
+ },
139
+ "message": {
140
+ "type": "string"
141
+ }
142
+ }
143
+ }
144
+ },
145
+ "description": "Not the answer to the task: mention it briefly afterwards and offer to update."
146
+ }
147
+ }
148
+ }