zinkee 0.1.44 → 0.1.46
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 +4 -0
- package/dist/chunk-MHEVRMDX.js +1230 -0
- package/dist/chunk-MHEVRMDX.js.map +1 -0
- package/{src/utils/examples.ts → dist/examples-67U5IRBS.js} +866 -1141
- package/dist/examples-67U5IRBS.js.map +1 -0
- package/dist/index.js +1145 -8456
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
- package/.github/workflows/npm-publish.yml +0 -77
- package/.github/workflows/pr-checks.yml +0 -36
- package/AGENTS.md +0 -110
- package/docs/cli-contract.md +0 -41
- package/docs/npm-release.md +0 -64
- package/docs/superpowers/plans/2026-03-24-zinkee-cli-implementation.md +0 -837
- package/docs/superpowers/plans/2026-03-25-cli-backend-error-contract.md +0 -503
- package/docs/superpowers/plans/2026-03-26-display-freeform-create.md +0 -389
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-backend-blockers.md +0 -172
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-design.md +0 -1576
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-checklist.md +0 -215
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-design.md +0 -492
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-status.md +0 -307
- package/docs/superpowers/specs/2026-07-30-cli-pr-checks-design.md +0 -37
- package/src/api/automations.ts +0 -404
- package/src/api/comments.ts +0 -51
- package/src/api/displays.ts +0 -337
- package/src/api/document-templates.ts +0 -110
- package/src/api/files.ts +0 -50
- package/src/api/formulas.test.ts +0 -65
- package/src/api/formulas.ts +0 -67
- package/src/api/logs.ts +0 -34
- package/src/api/navigation.ts +0 -70
- package/src/api/records.ts +0 -184
- package/src/api/schemas.ts +0 -148
- package/src/api/teamspace.ts +0 -110
- package/src/cli-examples.ts +0 -130
- package/src/cli-runner.ts +0 -95
- package/src/client.test.ts +0 -189
- package/src/client.ts +0 -269
- package/src/command-registry.ts +0 -882
- package/src/commands/automations.test.ts +0 -1030
- package/src/commands/automations.ts +0 -2102
- package/src/commands/comments.test.ts +0 -214
- package/src/commands/comments.ts +0 -303
- package/src/commands/config.test.ts +0 -81
- package/src/commands/config.ts +0 -150
- package/src/commands/displays.test.ts +0 -1105
- package/src/commands/displays.ts +0 -1442
- package/src/commands/document-templates.test.ts +0 -569
- package/src/commands/document-templates.ts +0 -563
- package/src/commands/files.test.ts +0 -284
- package/src/commands/files.ts +0 -280
- package/src/commands/formulas.test.ts +0 -194
- package/src/commands/formulas.ts +0 -243
- package/src/commands/logs.test.ts +0 -123
- package/src/commands/logs.ts +0 -159
- package/src/commands/navigation.test.ts +0 -211
- package/src/commands/navigation.ts +0 -348
- package/src/commands/profiles.test.ts +0 -191
- package/src/commands/profiles.ts +0 -303
- package/src/commands/records.test.ts +0 -860
- package/src/commands/records.ts +0 -883
- package/src/commands/schemas.test.ts +0 -1252
- package/src/commands/schemas.ts +0 -890
- package/src/commands/teamspace.test.ts +0 -229
- package/src/commands/teamspace.ts +0 -546
- package/src/completion/engine.test.ts +0 -138
- package/src/completion/engine.ts +0 -168
- package/src/completion/install.test.ts +0 -179
- package/src/completion/install.ts +0 -260
- package/src/completion/runtime.ts +0 -150
- package/src/completion/scripts.ts +0 -91
- package/src/config.test.ts +0 -362
- package/src/config.ts +0 -294
- package/src/index.test.ts +0 -217
- package/src/index.ts +0 -8
- package/src/parsers/expressions.test.ts +0 -95
- package/src/parsers/expressions.ts +0 -128
- package/src/parsers/kv.test.ts +0 -35
- package/src/parsers/kv.ts +0 -49
- package/src/parsers/selectors.test.ts +0 -23
- package/src/parsers/selectors.ts +0 -29
- package/src/program.ts +0 -64
- package/src/runtime-context.ts +0 -103
- package/src/types.ts +0 -76
- package/src/utils/argv-rewrite.test.ts +0 -149
- package/src/utils/argv-rewrite.ts +0 -269
- package/src/utils/errors.test.ts +0 -85
- package/src/utils/errors.ts +0 -191
- package/src/utils/examples.test.ts +0 -374
- package/src/utils/output.test.ts +0 -65
- package/src/utils/output.ts +0 -154
- package/src/utils/schema-fields.ts +0 -1016
- package/tsconfig.json +0 -20
- package/tsup.config.ts +0 -13
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
# Zinkee CLI E2E Status
|
|
2
|
-
|
|
3
|
-
Estado de pruebas E2E reales ejecutadas contra el perfil `local` de:
|
|
4
|
-
|
|
5
|
-
- `/Users/david/.config/zinkee/config.toml`
|
|
6
|
-
|
|
7
|
-
Las pruebas se han lanzado contra el binario real:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
node dist/index.js ...
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Preflight y Contrato Global
|
|
14
|
-
|
|
15
|
-
- [x] `node dist/index.js --json config validate`
|
|
16
|
-
- [x] `node dist/index.js --json --profile local profiles get local`
|
|
17
|
-
- [x] `node dist/index.js --json --profile local schemas list`
|
|
18
|
-
- [x] `--read-only` bloquea escrituras con `exitCode = 7`
|
|
19
|
-
- [x] `--example` validado en E2E real
|
|
20
|
-
- [x] errores JSON validados en más casos representativos
|
|
21
|
-
|
|
22
|
-
Notas transversales:
|
|
23
|
-
|
|
24
|
-
- `--example` está validado en real, pero la cobertura es irregular: por ejemplo `automations create`, `schemas fields create` y `navigation resources move` sí tienen ejemplo, mientras `schemas get`, `records update`, `files upload`, `teamspace folders create`, `automations folders create`, `automations webhook set` y `automations connections create` no.
|
|
25
|
-
- `--json` no se respeta en todos los errores: fallos de runtime sí devuelven `{ error, meta }`, pero errores de parseo/Commander como `schemas get` sin argumento siguen saliendo en texto plano.
|
|
26
|
-
- muchos `400`/`404` siguen colapsando a `code="unknown_error"` aunque el backend sí devuelve JSON estructurado con `reason`, `action`, `requestId` y `timestamp`; la CLI está perdiendo esa información.
|
|
27
|
-
- la ayuda global anuncia `--example` sin explicar bien la ruta de comando esperada, así que desde fuera hay algo de prueba y error.
|
|
28
|
-
|
|
29
|
-
## Files E2E
|
|
30
|
-
|
|
31
|
-
Estado: `PASS`
|
|
32
|
-
|
|
33
|
-
Recursos usados:
|
|
34
|
-
|
|
35
|
-
- `0349c88d-65e0-40a4-b8f5-72025de79308`
|
|
36
|
-
- `5cbaacc7-0b5e-43d5-893f-22eb5826e0f4`
|
|
37
|
-
|
|
38
|
-
- [x] upload
|
|
39
|
-
- [x] storage info
|
|
40
|
-
- [x] download binario
|
|
41
|
-
- [x] `--json --output`
|
|
42
|
-
- [x] delete
|
|
43
|
-
- [x] cleanup remoto
|
|
44
|
-
- [x] cleanup local
|
|
45
|
-
|
|
46
|
-
## Navigation E2E
|
|
47
|
-
|
|
48
|
-
Estado: `PASS`
|
|
49
|
-
|
|
50
|
-
Run id:
|
|
51
|
-
|
|
52
|
-
- `e2e-nav-20260324203721-22108`
|
|
53
|
-
|
|
54
|
-
Recursos usados:
|
|
55
|
-
|
|
56
|
-
- folder id: `506bba9e-2756-40f0-a58d-3588c6fee35e`
|
|
57
|
-
|
|
58
|
-
- [x] create folder
|
|
59
|
-
- [x] get folder por UUID
|
|
60
|
-
- [x] get folder por nombre exacto
|
|
61
|
-
- [x] update folder
|
|
62
|
-
- [x] move resource
|
|
63
|
-
- [x] delete folder
|
|
64
|
-
- [x] cleanup correcto
|
|
65
|
-
|
|
66
|
-
## Teamspace E2E
|
|
67
|
-
|
|
68
|
-
Estado: `PASS_WITH_CONCERNS`
|
|
69
|
-
|
|
70
|
-
Run id:
|
|
71
|
-
|
|
72
|
-
- `e2e-team-20260324203721-31756`
|
|
73
|
-
|
|
74
|
-
Recursos usados:
|
|
75
|
-
|
|
76
|
-
- folder id: `e7ec8dc8-0e5a-4c52-b019-3433557b116a`
|
|
77
|
-
|
|
78
|
-
- [x] create folder
|
|
79
|
-
- [x] list folders
|
|
80
|
-
- [x] list con `--include-resources`
|
|
81
|
-
- [x] get folder por UUID
|
|
82
|
-
- [x] get folder por nombre exacto
|
|
83
|
-
- [x] update folder
|
|
84
|
-
- [x] publish resource
|
|
85
|
-
- [x] unpublish resource
|
|
86
|
-
- [x] delete folder
|
|
87
|
-
- [x] cleanup correcto
|
|
88
|
-
- [x] `folders get` devuelve el recurso completo
|
|
89
|
-
|
|
90
|
-
Nota:
|
|
91
|
-
|
|
92
|
-
- el comando `teamspace folders get` está devolviendo el selector resuelto (`{ kind, value }`) en vez del recurso de carpeta completo
|
|
93
|
-
|
|
94
|
-
## Schemas E2E
|
|
95
|
-
|
|
96
|
-
Estado: `PARTIAL`
|
|
97
|
-
|
|
98
|
-
Run útil observado:
|
|
99
|
-
|
|
100
|
-
- `e2e-schema-20260324193743-256e46`
|
|
101
|
-
|
|
102
|
-
Recursos observados:
|
|
103
|
-
|
|
104
|
-
- schema id: `4d90b9e8-3f1f-411e-9ed9-b2b92bdef3a0`
|
|
105
|
-
- field ids:
|
|
106
|
-
- `d1d8fd9a-5646-4453-b0d8-af9466211463`
|
|
107
|
-
- `13cd6117-3fe0-4408-81f7-71368bfb2475`
|
|
108
|
-
|
|
109
|
-
- [x] create schema
|
|
110
|
-
- [x] get schema por slug
|
|
111
|
-
- [x] get schema por UUID
|
|
112
|
-
- [x] create field sin `config`
|
|
113
|
-
- [x] create field en schema temporal
|
|
114
|
-
- [x] list fields
|
|
115
|
-
- [x] get field
|
|
116
|
-
- [x] update field sin `config`
|
|
117
|
-
- [x] update field en schema temporal
|
|
118
|
-
- [x] update schema
|
|
119
|
-
- [x] delete field
|
|
120
|
-
- [x] delete schema
|
|
121
|
-
- [ ] create field con `config`
|
|
122
|
-
|
|
123
|
-
Fallos observados:
|
|
124
|
-
|
|
125
|
-
- `schemas fields create` con `config` devuelve `400`
|
|
126
|
-
- el backend responde `reason=schema_field_create_request_invalid`, pero la CLI lo aplana a `unknown_error`
|
|
127
|
-
|
|
128
|
-
## Records E2E
|
|
129
|
-
|
|
130
|
-
Estado: `PARTIAL`
|
|
131
|
-
|
|
132
|
-
Schema real usado:
|
|
133
|
-
|
|
134
|
-
- `contacts`
|
|
135
|
-
- id: `2eb8bdcf-6d9c-4fbb-9018-7fa8180f4c5e`
|
|
136
|
-
|
|
137
|
-
Records temporales usados:
|
|
138
|
-
|
|
139
|
-
- `038efec2-73ef-4f7a-a8fe-b30990ff923e`
|
|
140
|
-
- `76d5fdce-5bfa-4a0d-809b-ab6d97237c99`
|
|
141
|
-
|
|
142
|
-
- [x] create record sobre schema real existente
|
|
143
|
-
- [x] delete record sobre schema real existente
|
|
144
|
-
- [x] create record sobre schema temporal recién creado
|
|
145
|
-
- [ ] query real sobre schema temporal
|
|
146
|
-
- [x] update real sobre schema temporal
|
|
147
|
-
- [x] delete real sobre schema temporal
|
|
148
|
-
|
|
149
|
-
Nota:
|
|
150
|
-
|
|
151
|
-
- el rojo anterior de `records create` sobre schema temporal ya no reproduce tras los últimos fixes
|
|
152
|
-
- `records create` y `records query` siguen fallando si se usa el slug del schema temporal aunque la ayuda diga `schema uuid or slug`
|
|
153
|
-
- el backend responde `reason=schema_id_invalid` y pide UUID real en el path `schemaId`; no es un slug que resuelva la CLI en esas rutas
|
|
154
|
-
- `records query` sobre schema temporal funciona por UUID y con `--where`, pero sin filtro devolvió `data: []` aunque el record existía
|
|
155
|
-
|
|
156
|
-
## Comments E2E
|
|
157
|
-
|
|
158
|
-
Estado: `PASS`
|
|
159
|
-
|
|
160
|
-
- [x] list comments sobre record real
|
|
161
|
-
- [x] create comment sobre record real
|
|
162
|
-
- [x] create comment sobre schema `commentable`
|
|
163
|
-
- [x] list comment en schema de prueba
|
|
164
|
-
|
|
165
|
-
## Displays E2E
|
|
166
|
-
|
|
167
|
-
Estado: `PARTIAL`
|
|
168
|
-
|
|
169
|
-
Run id:
|
|
170
|
-
|
|
171
|
-
- `e2e-disp-20260324203805-21463`
|
|
172
|
-
|
|
173
|
-
Recursos usados:
|
|
174
|
-
|
|
175
|
-
- display id: `1cf8e169-22cc-42ce-9f9f-9908fc2f9a00`
|
|
176
|
-
- variable id: `a6f156ab-8394-4315-ba33-d268eec2fffe`
|
|
177
|
-
|
|
178
|
-
- [x] create display
|
|
179
|
-
- [x] get display
|
|
180
|
-
- [x] get layout
|
|
181
|
-
- [x] create tab con layout compatible (`side_tabs_widgets`)
|
|
182
|
-
- [x] create variable
|
|
183
|
-
- [x] create widget con `--type table`
|
|
184
|
-
- [x] delete variable
|
|
185
|
-
- [x] delete created tab
|
|
186
|
-
- [x] delete created widget
|
|
187
|
-
- [x] list widgets
|
|
188
|
-
- [x] get widget
|
|
189
|
-
- [x] list tabs
|
|
190
|
-
- [x] update display
|
|
191
|
-
- [x] update layout
|
|
192
|
-
- [ ] create tab en más layouts válidos
|
|
193
|
-
- [x] update tab
|
|
194
|
-
- [x] delete tab
|
|
195
|
-
- [x] list/get/update variable completo
|
|
196
|
-
- [x] update widget
|
|
197
|
-
- [x] delete widget
|
|
198
|
-
- [x] navigation-targets lifecycle
|
|
199
|
-
- [x] cross-widget-filter lifecycle
|
|
200
|
-
- [x] delete display con cleanup correcto
|
|
201
|
-
|
|
202
|
-
Fallos observados:
|
|
203
|
-
|
|
204
|
-
- `displays tabs create` devuelve `400` fuera del caso validado `side_tabs_widgets`; en real siguió fallando en `widget_row_tabs` y `top_bar_tabs`
|
|
205
|
-
|
|
206
|
-
Nota:
|
|
207
|
-
|
|
208
|
-
- `displays widgets create` ya funciona para el caso `--type table`
|
|
209
|
-
- `displays tabs create` ya funciona para `side_tabs_widgets`
|
|
210
|
-
- los intentos `chart`/`text` siguen sin validarse en real
|
|
211
|
-
- `displays delete` ya no reproduce el `500`; en esta tanda el cleanup real quedó OK
|
|
212
|
-
|
|
213
|
-
## Automations E2E
|
|
214
|
-
|
|
215
|
-
Estado: `PARTIAL`
|
|
216
|
-
|
|
217
|
-
- [x] folders list
|
|
218
|
-
- [x] folders create
|
|
219
|
-
- [x] folders update
|
|
220
|
-
- [x] folders delete
|
|
221
|
-
- [x] folders move
|
|
222
|
-
- [x] automations list
|
|
223
|
-
- [x] automations get
|
|
224
|
-
- [ ] automations create
|
|
225
|
-
- [ ] automations update
|
|
226
|
-
- [x] automations delete
|
|
227
|
-
- [x] activate
|
|
228
|
-
- [x] deactivate
|
|
229
|
-
- [x] trigger get
|
|
230
|
-
- [ ] trigger set
|
|
231
|
-
- [x] actions list
|
|
232
|
-
- [x] actions add
|
|
233
|
-
- [ ] actions update
|
|
234
|
-
- [x] actions delete
|
|
235
|
-
- [x] flow get
|
|
236
|
-
- [x] flow set
|
|
237
|
-
- [x] webhook get
|
|
238
|
-
- [x] webhook set
|
|
239
|
-
- [x] webhook delete
|
|
240
|
-
- [x] plugins list
|
|
241
|
-
- [x] plugins get
|
|
242
|
-
- [x] connections list
|
|
243
|
-
- [x] connections get
|
|
244
|
-
- [ ] connections create
|
|
245
|
-
- [x] connections update
|
|
246
|
-
- [x] connections delete
|
|
247
|
-
|
|
248
|
-
- [x] read-only block on folder writes
|
|
249
|
-
- [x] reversible activate/deactivate on existing test automation
|
|
250
|
-
|
|
251
|
-
Fallos observados:
|
|
252
|
-
|
|
253
|
-
- `automations create` devuelve `400` con `reason=automation_create_payload_invalid`
|
|
254
|
-
- `automations update` devuelve `200` pero no aplica la mutación observada en real
|
|
255
|
-
- `trigger set`, `actions update` y `connections create` siguen devolviendo `4xx` genéricos en las rutas probadas
|
|
256
|
-
|
|
257
|
-
Nota:
|
|
258
|
-
|
|
259
|
-
- varias rutas write solo fueron utilizables de forma fiable con `--raw`: `actions add`, `webhook set` y `connections update`
|
|
260
|
-
- `connections update` ya no parece romper el parser en la forma `--set path=value`, pero la mutación es parcial: `name` sí cambia y `config.headerName` no
|
|
261
|
-
- `automations update` manda `PATCH` con `{"name","description"}`, pero el backend devuelve el recurso con `name` y `description` originales
|
|
262
|
-
|
|
263
|
-
## Flujos Cruzados
|
|
264
|
-
|
|
265
|
-
- [x] schema -> record -> comment
|
|
266
|
-
- [x] schema -> navigation -> teamspace
|
|
267
|
-
- [x] schema -> display
|
|
268
|
-
- [ ] schema -> automation
|
|
269
|
-
|
|
270
|
-
Notas:
|
|
271
|
-
|
|
272
|
-
- `schema -> navigation -> teamspace` quedó validado con schema temporal `e964e712-ec1d-43ca-98a0-55c3631114d4`, folder de navigation `ff639d7d-a715-47e7-b626-240656a5fbad` y folder de teamspace `21807303-d9da-445d-a08e-cebcd9c49535`
|
|
273
|
-
- `schema -> display` quedó validado creando un widget table sobre un schema temporal en display `1ebcc70c-1513-4e5c-b3fe-0e9874506e25`
|
|
274
|
-
- `schema -> automation` sigue bloqueado porque `automations create` devolvió `400` también con `--trigger-type record_created --trigger-schema <uuid>`
|
|
275
|
-
|
|
276
|
-
## Prioridad Recomendada
|
|
277
|
-
|
|
278
|
-
- [x] arreglar `schemas get` por slug
|
|
279
|
-
- [x] arreglar `schemas fields update`
|
|
280
|
-
- [x] arreglar `comments create`
|
|
281
|
-
- [x] arreglar `records create` sobre schema temporal
|
|
282
|
-
- [ ] arreglar `schemas fields create` con `config`
|
|
283
|
-
- [x] probar `comments create` sobre schema realmente `commentable` como flujo dedicado
|
|
284
|
-
- [x] arreglar `displays delete`
|
|
285
|
-
- [ ] ampliar `displays tabs` más allá del caso compatible ya validado
|
|
286
|
-
- [ ] ampliar `displays widgets` más allá del caso compatible ya validado
|
|
287
|
-
- [ ] cerrar E2E de `automations` en `create/update/trigger/actions/connections` sin depender de `--raw`
|
|
288
|
-
|
|
289
|
-
## Estado Global
|
|
290
|
-
|
|
291
|
-
- [x] CLI funcional y estable en local
|
|
292
|
-
- [x] binario real validado
|
|
293
|
-
- [x] varios dominios con E2E verde real
|
|
294
|
-
- [x] fallos actuales ya son de integración real, no de scaffolding
|
|
295
|
-
|
|
296
|
-
## Bloqueos Reales Pendientes
|
|
297
|
-
|
|
298
|
-
- [ ] `schemas fields create` con `config`
|
|
299
|
-
- en real devuelve `400` para `POST /api/v2/schemas/{id}/fields` con `reason=schema_field_create_request_invalid`
|
|
300
|
-
- [ ] `automations create`
|
|
301
|
-
- en real devuelve `400` con `reason=automation_create_payload_invalid` incluso con payload alineado con la ayuda y con el ejemplo expuesto por la CLI
|
|
302
|
-
- [ ] `automations update`
|
|
303
|
-
- en real devuelve `200`, pero el objeto sale sin los cambios observados
|
|
304
|
-
- [ ] `records create/query` con slug
|
|
305
|
-
- en real devuelve `400` con `reason=schema_id_invalid`; esas rutas del backend exigen UUID real en `schemaId`
|
|
306
|
-
- [ ] `automations connections update` para paths anidados
|
|
307
|
-
- en real acepta el patch y actualiza campos planos como `name`, pero ignora claves anidadas como `config.headerName`
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# CLI pull request checks
|
|
2
|
-
|
|
3
|
-
## Context
|
|
4
|
-
|
|
5
|
-
The CLI repository has no GitHub Actions workflow that validates pull
|
|
6
|
-
requests. Its documented local quality gate consists of tests, TypeScript type
|
|
7
|
-
checking, and a production build.
|
|
8
|
-
|
|
9
|
-
## Decision
|
|
10
|
-
|
|
11
|
-
Add `.github/workflows/pr-checks.yml` and run it for pull requests targeting
|
|
12
|
-
`main`. The workflow will grant only `contents: read` permission and use one
|
|
13
|
-
Ubuntu job so dependencies are installed once.
|
|
14
|
-
|
|
15
|
-
The job will:
|
|
16
|
-
|
|
17
|
-
1. Check out the repository.
|
|
18
|
-
2. Set up Node.js 24 with npm dependency caching.
|
|
19
|
-
3. Install the locked dependency graph with `npm ci`.
|
|
20
|
-
4. Run `npm test`.
|
|
21
|
-
5. Run `npm run typecheck`.
|
|
22
|
-
6. Run `npm run build`.
|
|
23
|
-
|
|
24
|
-
Each quality check will be a separate step so GitHub identifies the failing
|
|
25
|
-
gate directly. A failure in any step will fail the job and prevent subsequent
|
|
26
|
-
steps from running.
|
|
27
|
-
|
|
28
|
-
## Scope
|
|
29
|
-
|
|
30
|
-
The workflow will not publish packages, deploy artifacts, access secrets,
|
|
31
|
-
change versions, run on pushes, or test a Node.js version matrix.
|
|
32
|
-
|
|
33
|
-
## Verification
|
|
34
|
-
|
|
35
|
-
Validate the workflow YAML and inspect its trigger, permissions, Node version,
|
|
36
|
-
dependency installation, and commands. Run the same three quality checks
|
|
37
|
-
locally from the CLI repository before completion.
|