flipstream 0.4.0 → 0.6.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 (103) hide show
  1. package/README.md +357 -27
  2. package/dist/commands/auth/login.js +7 -1
  3. package/dist/commands/auth/status.js +29 -3
  4. package/dist/commands/catalog.d.ts +15 -0
  5. package/dist/commands/catalog.js +110 -0
  6. package/dist/commands/connections/list.d.ts +1 -0
  7. package/dist/commands/connections/list.js +31 -4
  8. package/dist/commands/contract.d.ts +11 -0
  9. package/dist/commands/contract.js +35 -0
  10. package/dist/commands/health.d.ts +10 -0
  11. package/dist/commands/health.js +31 -0
  12. package/dist/commands/log/add.d.ts +16 -0
  13. package/dist/commands/log/add.js +48 -0
  14. package/dist/commands/log/list.d.ts +19 -0
  15. package/dist/commands/log/list.js +43 -0
  16. package/dist/commands/query.d.ts +15 -2
  17. package/dist/commands/query.js +255 -42
  18. package/dist/commands/skills/install.d.ts +16 -0
  19. package/dist/commands/skills/install.js +55 -0
  20. package/dist/commands/workspaces/connections.js +6 -3
  21. package/dist/commands/workspaces/get.js +4 -2
  22. package/dist/commands/workspaces/list.js +3 -0
  23. package/dist/lib/api/admin-client.d.ts +5 -0
  24. package/dist/lib/api/admin-client.js +19 -0
  25. package/dist/lib/api/connections.d.ts +0 -1
  26. package/dist/lib/api/connections.js +0 -25
  27. package/dist/lib/api/errors.d.ts +1 -0
  28. package/dist/lib/api/errors.js +13 -2
  29. package/dist/lib/api/http.d.ts +2 -0
  30. package/dist/lib/api/http.js +40 -4
  31. package/dist/lib/api/hydrate.d.ts +10 -0
  32. package/dist/lib/api/hydrate.js +46 -0
  33. package/dist/lib/api/ids.d.ts +1 -0
  34. package/dist/lib/api/ids.js +5 -0
  35. package/dist/lib/api/log.d.ts +22 -0
  36. package/dist/lib/api/log.js +56 -0
  37. package/dist/lib/api/projections.d.ts +1 -0
  38. package/dist/lib/api/projections.js +23 -0
  39. package/dist/lib/api/short-uuid.d.ts +1 -0
  40. package/dist/lib/api/short-uuid.js +30 -0
  41. package/dist/lib/auth/claims.js +3 -3
  42. package/dist/lib/auth/flow.js +8 -1
  43. package/dist/lib/auth/headless.js +14 -10
  44. package/dist/lib/auth/refresh.js +21 -1
  45. package/dist/lib/command/admin.d.ts +1 -0
  46. package/dist/lib/command/admin.js +21 -0
  47. package/dist/lib/command/base.d.ts +4 -0
  48. package/dist/lib/command/base.js +97 -3
  49. package/dist/lib/command/flags.d.ts +4 -0
  50. package/dist/lib/command/flags.js +11 -0
  51. package/dist/lib/command/planner.d.ts +9 -0
  52. package/dist/lib/command/planner.js +14 -0
  53. package/dist/lib/config/constants.d.ts +3 -1
  54. package/dist/lib/config/constants.js +14 -1
  55. package/dist/lib/config/xdg.d.ts +4 -0
  56. package/dist/lib/config/xdg.js +56 -1
  57. package/dist/lib/errors.d.ts +20 -1
  58. package/dist/lib/errors.js +132 -13
  59. package/dist/lib/output/dialogs.d.ts +27 -0
  60. package/dist/lib/output/dialogs.js +94 -0
  61. package/dist/lib/output/interactivity.d.ts +11 -0
  62. package/dist/lib/output/interactivity.js +48 -0
  63. package/dist/lib/output/redact.d.ts +1 -0
  64. package/dist/lib/output/redact.js +12 -0
  65. package/dist/lib/output/runlog.d.ts +3 -0
  66. package/dist/lib/output/runlog.js +72 -0
  67. package/dist/lib/output/sanitize.d.ts +2 -0
  68. package/dist/lib/output/sanitize.js +57 -0
  69. package/dist/lib/output/sidecar.d.ts +30 -0
  70. package/dist/lib/output/sidecar.js +58 -0
  71. package/dist/lib/output/table.js +5 -1
  72. package/dist/lib/output/trace.d.ts +11 -0
  73. package/dist/lib/output/trace.js +89 -0
  74. package/dist/lib/planner/catalog.d.ts +26 -0
  75. package/dist/lib/planner/catalog.js +60 -0
  76. package/dist/lib/planner/client.d.ts +14 -0
  77. package/dist/lib/planner/client.js +47 -0
  78. package/dist/lib/planner/connection.d.ts +14 -0
  79. package/dist/lib/planner/connection.js +139 -0
  80. package/dist/lib/planner/diagnose.d.ts +8 -0
  81. package/dist/lib/planner/diagnose.js +50 -0
  82. package/dist/lib/planner/errors.d.ts +14 -0
  83. package/dist/lib/planner/errors.js +129 -0
  84. package/dist/lib/planner/filters.d.ts +8 -0
  85. package/dist/lib/planner/filters.js +74 -0
  86. package/dist/lib/planner/request.d.ts +24 -0
  87. package/dist/lib/planner/request.js +51 -0
  88. package/dist/lib/planner/suggest.d.ts +2 -0
  89. package/dist/lib/planner/suggest.js +45 -0
  90. package/dist/lib/planner/vocabulary.d.ts +9 -0
  91. package/dist/lib/planner/vocabulary.js +95 -0
  92. package/dist/lib/skills/install.d.ts +24 -0
  93. package/dist/lib/skills/install.js +69 -0
  94. package/dist/lib/store/keyring.d.ts +3 -0
  95. package/dist/lib/store/keyring.js +45 -2
  96. package/dist/lib/store/memory-store.d.ts +1 -0
  97. package/dist/lib/store/memory-store.js +5 -0
  98. package/docs/AGENT-CONTRACT.md +238 -0
  99. package/oclif.manifest.json +606 -8
  100. package/package.json +22 -3
  101. package/skill/SKILL.md +55 -0
  102. package/dist/lib/auth/register.d.ts +0 -4
  103. package/dist/lib/auth/register.js +0 -43
@@ -1,13 +1,232 @@
1
1
  {
2
2
  "commands": {
3
+ "catalog": {
4
+ "aliases": [],
5
+ "args": {
6
+ "source": {
7
+ "description": "A source name (omit to list every source).",
8
+ "name": "source",
9
+ "required": false
10
+ }
11
+ },
12
+ "description": "Print the request vocabulary the query planner accepts. The names shown ARE what `query` takes: `-d` and `-m` and filter keys use an item's `name` (the wire name, e.g. search_date), never its `label` (what a human reads, e.g. Date). Read from the SERVICE, never from a local data-model checkout — the two differ exactly when it matters most, right after a version bump.",
13
+ "examples": [
14
+ "<%= config.bin %> catalog",
15
+ "<%= config.bin %> catalog gsc",
16
+ "<%= config.bin %> catalog gsc --json"
17
+ ],
18
+ "flags": {
19
+ "json": {
20
+ "description": "Format output as json.",
21
+ "helpGroup": "GLOBAL",
22
+ "name": "json",
23
+ "allowNo": false,
24
+ "type": "boolean"
25
+ },
26
+ "host": {
27
+ "char": "H",
28
+ "description": "OAuth provider host (defaults to the prod issuer).",
29
+ "name": "host",
30
+ "hasDynamicHelp": false,
31
+ "multiple": false,
32
+ "type": "option"
33
+ },
34
+ "ndjson": {
35
+ "description": "Stream output as NDJSON (one compact JSON object per line).",
36
+ "name": "ndjson",
37
+ "allowNo": false,
38
+ "type": "boolean"
39
+ },
40
+ "timeout": {
41
+ "description": "Network timeout in milliseconds.",
42
+ "name": "timeout",
43
+ "hasDynamicHelp": false,
44
+ "multiple": false,
45
+ "type": "option"
46
+ },
47
+ "verbose": {
48
+ "aliases": [
49
+ "debug"
50
+ ],
51
+ "description": "Print redacted diagnostics to stderr.",
52
+ "name": "verbose",
53
+ "allowNo": false,
54
+ "type": "boolean"
55
+ },
56
+ "auth-host": {
57
+ "description": "OAuth issuer host for credentials/refresh (defaults to the prod issuer).",
58
+ "name": "auth-host",
59
+ "hasDynamicHelp": false,
60
+ "multiple": false,
61
+ "type": "option"
62
+ },
63
+ "url": {
64
+ "description": "Query-planner base URL (default: the prod planner; env FLIPSTREAM_PLANNER_URL).",
65
+ "name": "url",
66
+ "hasDynamicHelp": false,
67
+ "multiple": false,
68
+ "type": "option"
69
+ }
70
+ },
71
+ "hasDynamicHelp": false,
72
+ "hiddenAliases": [],
73
+ "id": "catalog",
74
+ "pluginAlias": "flipstream",
75
+ "pluginName": "flipstream",
76
+ "pluginType": "core",
77
+ "strict": true,
78
+ "summary": "Show the dimensions and metrics a source accepts.",
79
+ "enableJsonFlag": true,
80
+ "isESM": true,
81
+ "relativePath": [
82
+ "dist",
83
+ "commands",
84
+ "catalog.js"
85
+ ]
86
+ },
87
+ "contract": {
88
+ "aliases": [],
89
+ "args": {},
90
+ "description": "Print docs/AGENT-CONTRACT.md — the frozen machine contract (output modes, exit codes, error envelope, per-command JSON shapes) — to stdout, from the installed package, no network needed. Context self-service for agents: read this before driving the CLI programmatically.",
91
+ "examples": [
92
+ "<%= config.bin %> contract",
93
+ "<%= config.bin %> contract --json"
94
+ ],
95
+ "flags": {
96
+ "json": {
97
+ "description": "Format output as json.",
98
+ "helpGroup": "GLOBAL",
99
+ "name": "json",
100
+ "allowNo": false,
101
+ "type": "boolean"
102
+ },
103
+ "host": {
104
+ "char": "H",
105
+ "description": "OAuth provider host (defaults to the prod issuer).",
106
+ "name": "host",
107
+ "hasDynamicHelp": false,
108
+ "multiple": false,
109
+ "type": "option"
110
+ },
111
+ "ndjson": {
112
+ "description": "Stream output as NDJSON (one compact JSON object per line).",
113
+ "name": "ndjson",
114
+ "allowNo": false,
115
+ "type": "boolean"
116
+ },
117
+ "timeout": {
118
+ "description": "Network timeout in milliseconds.",
119
+ "name": "timeout",
120
+ "hasDynamicHelp": false,
121
+ "multiple": false,
122
+ "type": "option"
123
+ },
124
+ "verbose": {
125
+ "aliases": [
126
+ "debug"
127
+ ],
128
+ "description": "Print redacted diagnostics to stderr.",
129
+ "name": "verbose",
130
+ "allowNo": false,
131
+ "type": "boolean"
132
+ }
133
+ },
134
+ "hasDynamicHelp": false,
135
+ "hiddenAliases": [],
136
+ "id": "contract",
137
+ "pluginAlias": "flipstream",
138
+ "pluginName": "flipstream",
139
+ "pluginType": "core",
140
+ "strict": true,
141
+ "summary": "Print the agent contract (machine-facing promises) to stdout.",
142
+ "enableJsonFlag": true,
143
+ "isESM": true,
144
+ "relativePath": [
145
+ "dist",
146
+ "commands",
147
+ "contract.js"
148
+ ]
149
+ },
150
+ "health": {
151
+ "aliases": [],
152
+ "args": {},
153
+ "description": "Check that the query planner is answering. This is the ONE endpoint that takes no token, so it separates \"the service is down\" from \"my credentials are wrong\" before any auth debugging starts.",
154
+ "examples": [
155
+ "<%= config.bin %> health",
156
+ "<%= config.bin %> health --json",
157
+ "<%= config.bin %> health --url http://localhost:8080"
158
+ ],
159
+ "flags": {
160
+ "json": {
161
+ "description": "Format output as json.",
162
+ "helpGroup": "GLOBAL",
163
+ "name": "json",
164
+ "allowNo": false,
165
+ "type": "boolean"
166
+ },
167
+ "host": {
168
+ "char": "H",
169
+ "description": "OAuth provider host (defaults to the prod issuer).",
170
+ "name": "host",
171
+ "hasDynamicHelp": false,
172
+ "multiple": false,
173
+ "type": "option"
174
+ },
175
+ "ndjson": {
176
+ "description": "Stream output as NDJSON (one compact JSON object per line).",
177
+ "name": "ndjson",
178
+ "allowNo": false,
179
+ "type": "boolean"
180
+ },
181
+ "timeout": {
182
+ "description": "Network timeout in milliseconds.",
183
+ "name": "timeout",
184
+ "hasDynamicHelp": false,
185
+ "multiple": false,
186
+ "type": "option"
187
+ },
188
+ "verbose": {
189
+ "aliases": [
190
+ "debug"
191
+ ],
192
+ "description": "Print redacted diagnostics to stderr.",
193
+ "name": "verbose",
194
+ "allowNo": false,
195
+ "type": "boolean"
196
+ },
197
+ "url": {
198
+ "description": "Query-planner base URL (default: the prod planner; env FLIPSTREAM_PLANNER_URL).",
199
+ "name": "url",
200
+ "hasDynamicHelp": false,
201
+ "multiple": false,
202
+ "type": "option"
203
+ }
204
+ },
205
+ "hasDynamicHelp": false,
206
+ "hiddenAliases": [],
207
+ "id": "health",
208
+ "pluginAlias": "flipstream",
209
+ "pluginName": "flipstream",
210
+ "pluginType": "core",
211
+ "strict": true,
212
+ "summary": "Check that the query planner is reachable.",
213
+ "enableJsonFlag": true,
214
+ "isESM": true,
215
+ "relativePath": [
216
+ "dist",
217
+ "commands",
218
+ "health.js"
219
+ ]
220
+ },
3
221
  "query": {
4
222
  "aliases": [],
5
223
  "args": {},
6
- "description": "Send an OPAQUE JSON body (--body, --body-file, or piped stdin) to the Flipstream data API and print the structured JSON response. The CLI never constructs, validates, or transforms the query payload — the body is forwarded verbatim (your agent/Skill builds it).",
224
+ "description": "Send a LOGICAL query (source + dimensions + metrics + filters) to the Flipstream query planner, which resolves which physical table answers it and returns the rows. Run `flipstream catalog <source>` first — the names it prints ARE what -d, -m and filter keys take. --body/--body-file/stdin still forwards a JSON body verbatim for shapes the flags cannot express.",
7
225
  "examples": [
8
- "<%= config.bin %> query --body '{\"opaque\":true}'",
9
- "echo '{\"opaque\":true}' | <%= config.bin %> query",
10
- "<%= config.bin %> query --body-file query.json --json"
226
+ "<%= config.bin %> catalog gsc",
227
+ "<%= config.bin %> query --source gsc --connection-id <id|name> -d search_date -d query -m clicks -f 'search_date=2026-01-01..2026-02-01' --rows 20",
228
+ "<%= config.bin %> query --source gsc --connection-id <id> -d query -m clicks --dry-run",
229
+ "<%= config.bin %> query --body-file request.json --json"
11
230
  ],
12
231
  "flags": {
13
232
  "json": {
@@ -54,8 +273,15 @@
54
273
  "multiple": false,
55
274
  "type": "option"
56
275
  },
276
+ "url": {
277
+ "description": "Query-planner base URL (default: the prod planner; env FLIPSTREAM_PLANNER_URL).",
278
+ "name": "url",
279
+ "hasDynamicHelp": false,
280
+ "multiple": false,
281
+ "type": "option"
282
+ },
57
283
  "body": {
58
- "description": "Opaque JSON request body as a string.",
284
+ "description": "Send this JSON body verbatim.",
59
285
  "exclusive": [
60
286
  "body-file"
61
287
  ],
@@ -65,11 +291,84 @@
65
291
  "type": "option"
66
292
  },
67
293
  "body-file": {
68
- "description": "Path to a file holding the opaque JSON request body.",
294
+ "description": "Path to a file holding the JSON body verbatim (\"-\" reads stdin).",
69
295
  "name": "body-file",
70
296
  "hasDynamicHelp": false,
71
297
  "multiple": false,
72
298
  "type": "option"
299
+ },
300
+ "connection-id": {
301
+ "description": "Connection UUID, or a name to look up.",
302
+ "name": "connection-id",
303
+ "hasDynamicHelp": false,
304
+ "multiple": false,
305
+ "type": "option"
306
+ },
307
+ "dimension": {
308
+ "char": "d",
309
+ "description": "Dimension name (repeatable).",
310
+ "name": "dimension",
311
+ "hasDynamicHelp": false,
312
+ "multiple": true,
313
+ "type": "option"
314
+ },
315
+ "dry-run": {
316
+ "description": "Print the request body and send nothing.",
317
+ "name": "dry-run",
318
+ "allowNo": false,
319
+ "type": "boolean"
320
+ },
321
+ "filter": {
322
+ "char": "f",
323
+ "description": "Filter as col=a,b | col=from..to | col=<json> (repeatable). 'col=' is refused.",
324
+ "name": "filter",
325
+ "hasDynamicHelp": false,
326
+ "multiple": true,
327
+ "type": "option"
328
+ },
329
+ "metric": {
330
+ "char": "m",
331
+ "description": "Metric name (repeatable).",
332
+ "name": "metric",
333
+ "hasDynamicHelp": false,
334
+ "multiple": true,
335
+ "type": "option"
336
+ },
337
+ "offset": {
338
+ "description": "Row offset.",
339
+ "name": "offset",
340
+ "hasDynamicHelp": false,
341
+ "multiple": false,
342
+ "type": "option"
343
+ },
344
+ "rows": {
345
+ "description": "Row limit (default 100).",
346
+ "name": "rows",
347
+ "hasDynamicHelp": false,
348
+ "multiple": false,
349
+ "type": "option"
350
+ },
351
+ "sort": {
352
+ "char": "s",
353
+ "description": "FIELD[:asc|desc] (repeatable).",
354
+ "name": "sort",
355
+ "hasDynamicHelp": false,
356
+ "multiple": true,
357
+ "type": "option"
358
+ },
359
+ "source": {
360
+ "description": "The dataset discriminator, e.g. gsc.",
361
+ "name": "source",
362
+ "hasDynamicHelp": false,
363
+ "multiple": false,
364
+ "type": "option"
365
+ },
366
+ "table": {
367
+ "description": "Physical table — honoured only for an unmodelled source.",
368
+ "name": "table",
369
+ "hasDynamicHelp": false,
370
+ "multiple": false,
371
+ "type": "option"
73
372
  }
74
373
  },
75
374
  "hasDynamicHelp": false,
@@ -79,7 +378,7 @@
79
378
  "pluginName": "flipstream",
80
379
  "pluginType": "core",
81
380
  "strict": true,
82
- "summary": "Run an opaque query against the Flipstream data API.",
381
+ "summary": "Run a logical query against the Flipstream query planner.",
83
382
  "enableJsonFlag": true,
84
383
  "isESM": true,
85
384
  "relativePath": [
@@ -518,6 +817,9 @@
518
817
  "type": "option"
519
818
  },
520
819
  "workspace": {
820
+ "aliases": [
821
+ "ws"
822
+ ],
521
823
  "description": "List only this workspace's connections (UUID).",
522
824
  "name": "workspace",
523
825
  "hasDynamicHelp": false,
@@ -542,6 +844,302 @@
542
844
  "list.js"
543
845
  ]
544
846
  },
847
+ "log:add": {
848
+ "aliases": [
849
+ "logs:add"
850
+ ],
851
+ "args": {
852
+ "message": {
853
+ "description": "The log entry text.",
854
+ "name": "message",
855
+ "required": true
856
+ }
857
+ },
858
+ "description": "Add an entry to a workspace's log (the logbook). You give the workspace (--workspace/--ws) and the message; the organization is derived from the workspace, and the dates default to now (override with --start/--end). Returns the created entry. Targets the OAuth/admin host.",
859
+ "examples": [
860
+ "<%= config.bin %> log add \"shipped the new pipeline\" --workspace <id>",
861
+ "<%= config.bin %> log add \"kickoff call done\" --ws <id> --json"
862
+ ],
863
+ "flags": {
864
+ "json": {
865
+ "description": "Format output as json.",
866
+ "helpGroup": "GLOBAL",
867
+ "name": "json",
868
+ "allowNo": false,
869
+ "type": "boolean"
870
+ },
871
+ "host": {
872
+ "char": "H",
873
+ "description": "OAuth provider host (defaults to the prod issuer).",
874
+ "name": "host",
875
+ "hasDynamicHelp": false,
876
+ "multiple": false,
877
+ "type": "option"
878
+ },
879
+ "ndjson": {
880
+ "description": "Stream output as NDJSON (one compact JSON object per line).",
881
+ "name": "ndjson",
882
+ "allowNo": false,
883
+ "type": "boolean"
884
+ },
885
+ "timeout": {
886
+ "description": "Network timeout in milliseconds.",
887
+ "name": "timeout",
888
+ "hasDynamicHelp": false,
889
+ "multiple": false,
890
+ "type": "option"
891
+ },
892
+ "verbose": {
893
+ "aliases": [
894
+ "debug"
895
+ ],
896
+ "description": "Print redacted diagnostics to stderr.",
897
+ "name": "verbose",
898
+ "allowNo": false,
899
+ "type": "boolean"
900
+ },
901
+ "end": {
902
+ "description": "End date (ISO 8601). Defaults to now.",
903
+ "name": "end",
904
+ "hasDynamicHelp": false,
905
+ "multiple": false,
906
+ "type": "option"
907
+ },
908
+ "start": {
909
+ "description": "Start date (ISO 8601). Defaults to now.",
910
+ "name": "start",
911
+ "hasDynamicHelp": false,
912
+ "multiple": false,
913
+ "type": "option"
914
+ },
915
+ "workspace": {
916
+ "aliases": [
917
+ "ws"
918
+ ],
919
+ "description": "Workspace id (UUID) the entry belongs to.",
920
+ "name": "workspace",
921
+ "required": true,
922
+ "hasDynamicHelp": false,
923
+ "multiple": false,
924
+ "type": "option"
925
+ }
926
+ },
927
+ "hasDynamicHelp": false,
928
+ "hiddenAliases": [],
929
+ "id": "log:add",
930
+ "pluginAlias": "flipstream",
931
+ "pluginName": "flipstream",
932
+ "pluginType": "core",
933
+ "strict": true,
934
+ "summary": "Add an entry to a workspace's log.",
935
+ "enableJsonFlag": true,
936
+ "isESM": true,
937
+ "relativePath": [
938
+ "dist",
939
+ "commands",
940
+ "log",
941
+ "add.js"
942
+ ]
943
+ },
944
+ "log:list": {
945
+ "aliases": [
946
+ "logs:list"
947
+ ],
948
+ "args": {},
949
+ "description": "Read a workspace's log entries (the logbook). --workspace is required — a log entry only makes sense in a workspace's context, so there is no account-wide read. Shows each entry's description, dates, and author; the full record (including any new fields like tags) is under --json. Targets the OAuth/admin host.",
950
+ "examples": [
951
+ "<%= config.bin %> log list --workspace <id>",
952
+ "<%= config.bin %> logs list --ws <id> --json",
953
+ "<%= config.bin %> log list --ws <id> --all"
954
+ ],
955
+ "flags": {
956
+ "json": {
957
+ "description": "Format output as json.",
958
+ "helpGroup": "GLOBAL",
959
+ "name": "json",
960
+ "allowNo": false,
961
+ "type": "boolean"
962
+ },
963
+ "host": {
964
+ "char": "H",
965
+ "description": "OAuth provider host (defaults to the prod issuer).",
966
+ "name": "host",
967
+ "hasDynamicHelp": false,
968
+ "multiple": false,
969
+ "type": "option"
970
+ },
971
+ "ndjson": {
972
+ "description": "Stream output as NDJSON (one compact JSON object per line).",
973
+ "name": "ndjson",
974
+ "allowNo": false,
975
+ "type": "boolean"
976
+ },
977
+ "timeout": {
978
+ "description": "Network timeout in milliseconds.",
979
+ "name": "timeout",
980
+ "hasDynamicHelp": false,
981
+ "multiple": false,
982
+ "type": "option"
983
+ },
984
+ "verbose": {
985
+ "aliases": [
986
+ "debug"
987
+ ],
988
+ "description": "Print redacted diagnostics to stderr.",
989
+ "name": "verbose",
990
+ "allowNo": false,
991
+ "type": "boolean"
992
+ },
993
+ "all": {
994
+ "description": "Fetch every page (drains pagination).",
995
+ "name": "all",
996
+ "allowNo": false,
997
+ "type": "boolean"
998
+ },
999
+ "limit": {
1000
+ "description": "Page size.",
1001
+ "name": "limit",
1002
+ "default": 50,
1003
+ "hasDynamicHelp": false,
1004
+ "multiple": false,
1005
+ "type": "option"
1006
+ },
1007
+ "offset": {
1008
+ "description": "Starting offset.",
1009
+ "name": "offset",
1010
+ "default": 0,
1011
+ "hasDynamicHelp": false,
1012
+ "multiple": false,
1013
+ "type": "option"
1014
+ },
1015
+ "q": {
1016
+ "description": "Free-text filter.",
1017
+ "name": "q",
1018
+ "hasDynamicHelp": false,
1019
+ "multiple": false,
1020
+ "type": "option"
1021
+ },
1022
+ "sort": {
1023
+ "description": "Sort field.",
1024
+ "name": "sort",
1025
+ "hasDynamicHelp": false,
1026
+ "multiple": false,
1027
+ "type": "option"
1028
+ },
1029
+ "workspace": {
1030
+ "aliases": [
1031
+ "ws"
1032
+ ],
1033
+ "description": "The workspace whose log to read (UUID).",
1034
+ "name": "workspace",
1035
+ "required": true,
1036
+ "hasDynamicHelp": false,
1037
+ "multiple": false,
1038
+ "type": "option"
1039
+ }
1040
+ },
1041
+ "hasDynamicHelp": false,
1042
+ "hiddenAliases": [],
1043
+ "id": "log:list",
1044
+ "pluginAlias": "flipstream",
1045
+ "pluginName": "flipstream",
1046
+ "pluginType": "core",
1047
+ "strict": true,
1048
+ "summary": "Read a workspace's log entries.",
1049
+ "enableJsonFlag": true,
1050
+ "isESM": true,
1051
+ "relativePath": [
1052
+ "dist",
1053
+ "commands",
1054
+ "log",
1055
+ "list.js"
1056
+ ]
1057
+ },
1058
+ "skills:install": {
1059
+ "aliases": [],
1060
+ "args": {},
1061
+ "description": "Install the flipstream skill (SKILL.md) into the global skills directory of every detected AI coding agent (Claude Code, Codex, Cursor, OpenCode). Detection is local env/dir inspection only — nothing is reported anywhere. The skill teaches an agent to retrieve the command surface and data vocabulary from the CLI instead of guessing.",
1062
+ "examples": [
1063
+ "<%= config.bin %> skills install",
1064
+ "<%= config.bin %> skills install --yes",
1065
+ "<%= config.bin %> skills install --agent claude-code --agent codex"
1066
+ ],
1067
+ "flags": {
1068
+ "json": {
1069
+ "description": "Format output as json.",
1070
+ "helpGroup": "GLOBAL",
1071
+ "name": "json",
1072
+ "allowNo": false,
1073
+ "type": "boolean"
1074
+ },
1075
+ "host": {
1076
+ "char": "H",
1077
+ "description": "OAuth provider host (defaults to the prod issuer).",
1078
+ "name": "host",
1079
+ "hasDynamicHelp": false,
1080
+ "multiple": false,
1081
+ "type": "option"
1082
+ },
1083
+ "ndjson": {
1084
+ "description": "Stream output as NDJSON (one compact JSON object per line).",
1085
+ "name": "ndjson",
1086
+ "allowNo": false,
1087
+ "type": "boolean"
1088
+ },
1089
+ "timeout": {
1090
+ "description": "Network timeout in milliseconds.",
1091
+ "name": "timeout",
1092
+ "hasDynamicHelp": false,
1093
+ "multiple": false,
1094
+ "type": "option"
1095
+ },
1096
+ "verbose": {
1097
+ "aliases": [
1098
+ "debug"
1099
+ ],
1100
+ "description": "Print redacted diagnostics to stderr.",
1101
+ "name": "verbose",
1102
+ "allowNo": false,
1103
+ "type": "boolean"
1104
+ },
1105
+ "agent": {
1106
+ "description": "Install for this agent id only (repeatable). Known: claude-code, codex, cursor, opencode.",
1107
+ "name": "agent",
1108
+ "hasDynamicHelp": false,
1109
+ "multiple": true,
1110
+ "options": [
1111
+ "claude-code",
1112
+ "codex",
1113
+ "cursor",
1114
+ "opencode"
1115
+ ],
1116
+ "type": "option"
1117
+ },
1118
+ "yes": {
1119
+ "char": "y",
1120
+ "description": "Install without asking.",
1121
+ "name": "yes",
1122
+ "allowNo": false,
1123
+ "type": "boolean"
1124
+ }
1125
+ },
1126
+ "hasDynamicHelp": false,
1127
+ "hiddenAliases": [],
1128
+ "id": "skills:install",
1129
+ "pluginAlias": "flipstream",
1130
+ "pluginName": "flipstream",
1131
+ "pluginType": "core",
1132
+ "strict": true,
1133
+ "summary": "Install the flipstream skill for detected AI coding agents.",
1134
+ "enableJsonFlag": true,
1135
+ "isESM": true,
1136
+ "relativePath": [
1137
+ "dist",
1138
+ "commands",
1139
+ "skills",
1140
+ "install.js"
1141
+ ]
1142
+ },
545
1143
  "workspaces:connections": {
546
1144
  "aliases": [
547
1145
  "ws:connections"
@@ -847,5 +1445,5 @@
847
1445
  ]
848
1446
  }
849
1447
  },
850
- "version": "0.4.0"
1448
+ "version": "0.6.0"
851
1449
  }