@descix/cli 1.0.7 → 1.0.9

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 (43) hide show
  1. package/README.md +1 -1
  2. package/agent-assets/guides/README.md +1 -1
  3. package/agent-assets/guides/dynamic-site-pattern.md +7 -16
  4. package/agent-assets/instructions/app-asset-validation.md +1 -1
  5. package/agent-assets/reference/architecture.md +20 -25
  6. package/agent-assets/reference/local-dev.md +1 -6
  7. package/agent-assets/reference/mcp-integration.md +15 -9
  8. package/agent-assets/reference/platform-api-consumer.md +11 -5
  9. package/agent-assets/reference/workspace-config.md +2 -2
  10. package/bin/descix.js +211 -688
  11. package/lib/command-visibility.js +213 -0
  12. package/lib/commands/corpus.js +2 -5
  13. package/lib/commands/kb.js +2 -2
  14. package/lib/commands/media-upload.js +176 -0
  15. package/lib/commands/retired-kb-sync.js +5 -27
  16. package/lib/commands/status.js +0 -9
  17. package/lib/output.js +31 -0
  18. package/lib/sdk-assets.js +28 -0
  19. package/lib/verb-invokes.generated.json +233 -0
  20. package/lib/workspace-config.js +9 -44
  21. package/package.json +6 -2
  22. package/templates/agent-claude.md +1 -3
  23. package/templates/agent-cline.md +1 -2
  24. package/templates/agent-copilot.md +1 -2
  25. package/templates/agent-cursor.md +1 -2
  26. package/templates/scaffolds/microservice/SERVICE_README_sdk.md +1 -1
  27. package/templates/scaffolds/microservice/templates/SERVICE_README_TEMPLATE.md +2 -3
  28. package/agent-assets/rules/descix_mcp.template.mdc +0 -243
  29. package/lib/commands/briefer/errors.js +0 -88
  30. package/lib/commands/briefer/index.js +0 -322
  31. package/lib/commands/briefer/sources/canonical-sources.js +0 -129
  32. package/lib/commands/briefer/sources/entitlements.js +0 -220
  33. package/lib/commands/briefer/sources/environments.js +0 -205
  34. package/lib/commands/briefer/sources/identifiers.js +0 -214
  35. package/lib/commands/briefer/sources/microservice-deploy.js +0 -267
  36. package/lib/commands/briefer/sources/routing.js +0 -275
  37. package/lib/commands/briefer/sources/what-is-not.js +0 -223
  38. package/lib/commands/briefer/stitcher.js +0 -134
  39. package/lib/commands/briefer/util/source-reader.js +0 -502
  40. package/lib/commands/mcp.js +0 -273
  41. package/lib/commands/update.js +0 -581
  42. package/lib/wizard/setup.js +0 -585
  43. package/templates/descix_mcp.mdc +0 -122
@@ -0,0 +1,233 @@
1
+ {
2
+ "admin-login": [
3
+ "admin_bootstrap_login"
4
+ ],
5
+ "airdrop execute-queue": [
6
+ "airdrop_execute_queue"
7
+ ],
8
+ "app delete": [
9
+ "delete_app"
10
+ ],
11
+ "app init": [
12
+ "create_app_for_community",
13
+ "get_product_context",
14
+ "init_git_mode_kb"
15
+ ],
16
+ "app invite": [
17
+ "create_app_invite"
18
+ ],
19
+ "app list": [
20
+ "fetch_my_purchases"
21
+ ],
22
+ "app media-upload": [
23
+ "get_asset_upload_token"
24
+ ],
25
+ "app open": [],
26
+ "app set-api-url": [
27
+ "update_app_metadata"
28
+ ],
29
+ "app set-default-model": [
30
+ "clear_app_default_model",
31
+ "set_app_default_model"
32
+ ],
33
+ "app set-listed": [
34
+ "update_app"
35
+ ],
36
+ "app set-localpath": [],
37
+ "app set-name": [
38
+ "update_app"
39
+ ],
40
+ "app set-port": [],
41
+ "app set-price": [
42
+ "update_app_metadata"
43
+ ],
44
+ "app set-repo": [
45
+ "set_app_repo"
46
+ ],
47
+ "app set-site": [],
48
+ "app sync-assets": [
49
+ "sync_app_assets"
50
+ ],
51
+ "app unmap": [],
52
+ "buy chains": [],
53
+ "buy poll": [
54
+ "get_quote_status"
55
+ ],
56
+ "buy quote": [
57
+ "create_crypto_quote"
58
+ ],
59
+ "buy status": [
60
+ "get_quote_status"
61
+ ],
62
+ "chat": [
63
+ "ask_multiple_apps",
64
+ "ask_question_to_app"
65
+ ],
66
+ "clone": [
67
+ "get_repo_credentials"
68
+ ],
69
+ "community check-token": [
70
+ "check_token_symbol_available"
71
+ ],
72
+ "community contract": [
73
+ "get_contract_details"
74
+ ],
75
+ "community create": [
76
+ "create_community_skeleton"
77
+ ],
78
+ "community delete": [
79
+ "delete_community"
80
+ ],
81
+ "community deploy-token": [
82
+ "deploy_contract"
83
+ ],
84
+ "community info": [
85
+ "get_community"
86
+ ],
87
+ "community link-token": [
88
+ "link_contract_to_community"
89
+ ],
90
+ "community list": [
91
+ "find_communities"
92
+ ],
93
+ "community rename": [
94
+ "rename_community"
95
+ ],
96
+ "config init": [],
97
+ "config set-dev-certs": [],
98
+ "config set-env": [],
99
+ "config set-gateway-port": [],
100
+ "config set-powch-url": [],
101
+ "config set-site-url": [],
102
+ "config set-url": [],
103
+ "config show": [],
104
+ "credits balance": [
105
+ "get_credit_balance"
106
+ ],
107
+ "credits buy": [
108
+ "create_stripe_checkout_session"
109
+ ],
110
+ "credits grant": [
111
+ "grant_credits"
112
+ ],
113
+ "credits history": [
114
+ "get_credit_history"
115
+ ],
116
+ "credits refund": [
117
+ "refund_credits"
118
+ ],
119
+ "doctor": [],
120
+ "drive pull": [],
121
+ "drive push": [],
122
+ "health": [],
123
+ "init": [
124
+ "find_communities",
125
+ "resolve_invite"
126
+ ],
127
+ "kb clear-override-model": [
128
+ "clear_kb_model_override"
129
+ ],
130
+ "kb corpus status": [],
131
+ "kb corpus sync": [
132
+ "get_kb_rag_status",
133
+ "get_product_context",
134
+ "kb_delete_chunks",
135
+ "kb_list_file_ids",
136
+ "kb_sync_chunks",
137
+ "list_knowledge_bases"
138
+ ],
139
+ "kb delete": [
140
+ "delete_knowledge_base"
141
+ ],
142
+ "kb doctor": [
143
+ "get_kb_rag_status"
144
+ ],
145
+ "kb list": [
146
+ "list_knowledge_bases"
147
+ ],
148
+ "kb set-override-model": [
149
+ "set_kb_model_override"
150
+ ],
151
+ "login": [
152
+ "device_check_status",
153
+ "device_request_login",
154
+ "sync_auto_purchases"
155
+ ],
156
+ "logout": [],
157
+ "mcp execute": [],
158
+ "mcp-serve": [],
159
+ "microservice health": [
160
+ "service_health_check"
161
+ ],
162
+ "microservice init": [],
163
+ "microservice list": [
164
+ "list_services"
165
+ ],
166
+ "microservice register": [
167
+ "register_service"
168
+ ],
169
+ "microservice register-delegate": [
170
+ "fetch_my_purchases",
171
+ "register_delegate"
172
+ ],
173
+ "microservice reload": [
174
+ "reload_service_manifests"
175
+ ],
176
+ "microservice restart": [],
177
+ "microservice vectorize": [
178
+ "vectorize_service_readme"
179
+ ],
180
+ "new-chat": [],
181
+ "purchases": [
182
+ "fetch_my_purchases"
183
+ ],
184
+ "quickstart": [
185
+ "device_check_status",
186
+ "device_request_login",
187
+ "find_communities",
188
+ "resolve_invite",
189
+ "sync_auto_purchases"
190
+ ],
191
+ "reconnect": [
192
+ "reconnect_by_wallet"
193
+ ],
194
+ "referral create": [
195
+ "generate_referral_code"
196
+ ],
197
+ "role create": [
198
+ "create_role"
199
+ ],
200
+ "serve": [],
201
+ "site delete": [
202
+ "delete_site_files"
203
+ ],
204
+ "site init": [],
205
+ "site list": [
206
+ "list_site_files"
207
+ ],
208
+ "site status": [
209
+ "get_site_manifest"
210
+ ],
211
+ "site upload": [
212
+ "confirm_site_deploy",
213
+ "get_site_build_config",
214
+ "get_site_deploy_token"
215
+ ],
216
+ "stats": [
217
+ "get_user_community_stats"
218
+ ],
219
+ "status": [],
220
+ "store generate-summary": [
221
+ "generate_entity_summary"
222
+ ],
223
+ "store search": [
224
+ "search_store"
225
+ ],
226
+ "tell-me-how": [
227
+ "tell_me_how"
228
+ ],
229
+ "whoami": [
230
+ "fetch_my_purchases",
231
+ "validate_session"
232
+ ]
233
+ }
@@ -263,11 +263,9 @@ export class WorkspaceConfig {
263
263
  * Live means the actual object inside this.env — mutate it and save() persists the mutation.
264
264
  * getAppByAppId() and getAppEntry() both return copies and are useless for writing.
265
265
  *
266
- * This existed as three byte-identical copies (setSitePort, setMicroservicePort,
267
- * setStaticSite) and `set-localpath` hand-rolled a FOURTH variant in bin/descix.js that
268
- * walked env.products ONLY. That omission is the whole reason the platform app silently
269
- * failed: the loop found nothing, wrote nothing, and the command still printed success.
270
- * A fourth copy here would have reproduced the same class of bug, so there is now one.
266
+ * The one lookup every entry setter (setMicroservicePort, setStaticSite, setLocalPath) uses. A
267
+ * private walk of env.products ONLY misses the platform app, finds nothing, writes nothing and
268
+ * still reports success.
271
269
  *
272
270
  * @param {string} appId - App identifier
273
271
  * @returns {Object} the live env.platform or env.products[] entry
@@ -289,8 +287,7 @@ export class WorkspaceConfig {
289
287
  /**
290
288
  * Update an app's localPath in env.platform or env.products[].
291
289
  *
292
- * The canonical write path for localPath, and the sibling that was missing while
293
- * setSitePort/setMicroservicePort/setStaticSite all existed. Backs `descix app set-localpath`.
290
+ * The canonical write path for localPath. Backs `descix app set-localpath`.
294
291
  *
295
292
  * localPath MUST be workspace-root-relative. It is validated here through
296
293
  * resolveWorkspacePath — the LOADER'S OWN resolver, not a second copy of its rules — so a
@@ -807,48 +804,16 @@ export class WorkspaceConfig {
807
804
  return this.save();
808
805
  }
809
806
 
810
- /**
811
- * Update an app's site.port in env.products[] (or env.platform if it is the platform app).
812
- *
813
- * Pass `null` to remove site.port; if site.{} becomes empty, site.{} is also deleted.
814
- * Persists via save() at the end — same auto-save pattern as setEnvironment().
815
- * Hard-fails if appId is not mapped in env.platform or env.products.
816
- *
817
- * @param {string} appId - App identifier (must exist in env.platform or env.products)
818
- * @param {number|string|null} port - Port number to set, or null to remove site.port
819
- * @returns {Promise<string>} Path to saved config (from save())
820
- */
821
- async setSitePort(appId, port) {
822
- if (!appId) throw new Error('appId is required');
823
-
824
- const entry = this._liveEnvEntry(appId);
825
-
826
- if (port === null || port === undefined) {
827
- // Remove site.port; clean up empty site.{}
828
- if (entry.site) {
829
- delete entry.site.port;
830
- if (Object.keys(entry.site).length === 0) {
831
- delete entry.site;
832
- }
833
- }
834
- } else {
835
- if (!entry.site) entry.site = {};
836
- entry.site.port = port;
837
- }
838
-
839
- return this.save();
840
- }
841
-
842
807
  /**
843
808
  * Update an app's microservice.port in env.products[] (or env.platform if it is the platform app).
844
809
  *
845
- * Parallel to setSitePort(), but operates on the entry's microservice.{} slot.
810
+ * Operates on the entry's microservice.{} slot.
846
811
  * This is the canonical write path for the microservice port that `descix microservice init`
847
812
  * reads (and hard-fails on if missing). Backs the `descix app set-port` command, closing
848
813
  * WS-CLI-MESH-ROUTING-GAP without hand-editing workspace.json.
849
814
  *
850
815
  * Pass `null` to remove microservice.port; if microservice.{} becomes empty, it is also deleted.
851
- * Persists via save() at the end — same auto-save pattern as setSitePort()/setEnvironment().
816
+ * Persists via save() at the end — same auto-save pattern as setEnvironment().
852
817
  * Hard-fails if appId is not mapped in env.platform or env.products.
853
818
  *
854
819
  * @param {string} appId - App identifier (must exist in env.platform or env.products)
@@ -879,7 +844,7 @@ export class WorkspaceConfig {
879
844
  /**
880
845
  * Update an app's site config in env.products[] (or env.platform if it is the platform app).
881
846
  *
882
- * Parallel to setSitePort()/setMicroservicePort(), but operates on the entry's site.{} slot's
847
+ * Parallel to setMicroservicePort(), but operates on the entry's site.{} slot's
883
848
  * static-site fields. This is the canonical write path for site.static — the relative path the
884
849
  * dev gateway's staticSitePlugin serves at /p/{appId}/ (see createViteProxyConfig:
885
850
  * site.static is resolved against the app's localPath; "." means the localPath itself).
@@ -888,7 +853,7 @@ export class WorkspaceConfig {
888
853
  *
889
854
  * Mutates site.static and/or site.port. Pass static === null to remove site.static; pass
890
855
  * port === null to remove site.port. If site.{} becomes empty after removals it is deleted.
891
- * Persists via save() at the end — same auto-save pattern as setSitePort()/setMicroservicePort().
856
+ * Persists via save() at the end — same auto-save pattern as setMicroservicePort().
892
857
  * Hard-fails if appId is not mapped in env.platform or env.products.
893
858
  *
894
859
  * @param {string} appId - App identifier (must exist in env.platform or env.products)
@@ -914,7 +879,7 @@ export class WorkspaceConfig {
914
879
  }
915
880
  }
916
881
 
917
- // site.port — set or remove (parallel to setSitePort, for static+devCommand sites)
882
+ // site.port — set or remove (for static+devCommand sites)
918
883
  if ('port' in fields) {
919
884
  if (fields.port === null || fields.port === undefined) {
920
885
  delete entry.site.port;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descix/cli",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "DeSciX CLI and MCP Server - Unified command-line interface for DeSciX platform",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,7 +16,8 @@
16
16
  "scripts": {
17
17
  "test": "node --test \"tests/*.test.js\"",
18
18
  "pack": "npm pack",
19
- "check:doc-paths": "node scripts/check-doc-paths.js"
19
+ "check:doc-paths": "node scripts/check-doc-paths.js",
20
+ "briefer": "node scripts/briefer/run.mjs"
20
21
  },
21
22
  "keywords": [
22
23
  "descix",
@@ -41,6 +42,9 @@
41
42
  "ora": "^9.0.0",
42
43
  "@descix/platform-api": "^2.0.0"
43
44
  },
45
+ "devDependencies": {
46
+ "acorn": "^8.18.0"
47
+ },
44
48
  "files": [
45
49
  "bin",
46
50
  "lib",
@@ -159,7 +159,7 @@ To see your app in a browser:
159
159
  | Goal | Command |
160
160
  |------|---------|
161
161
  | Serve `site/` locally | `npx serve site/` or `python3 -m http.server -d site/` on any port |
162
- | Register port with DeSciX | `descix site servelocal <port> -c <community> -a <app>` |
162
+ | Register a framework dev-server port with DeSciX | `descix app set-site -a <app> --port <port>` (writes `env.products[].site.port`) |
163
163
  | Run your app on the DeSciX gateway | `cd <app dir> && descix serve` — one HTTPS origin, the shell opens ON your app (**standalone** = initial view, not a reduced mode — platform views stay reachable) |
164
164
 
165
165
  A plain static server is enough to look at your HTML. `descix serve` is what you
@@ -257,8 +257,6 @@ Every app has three parts:
257
257
 
258
258
  - `descix status` may report "No workspace found" even when `.descix/workspace.json`
259
259
  exists. This is a known bug — continue with explicit flags.
260
- - `descix status` may suggest `descix setup` — that command doesn't exist. Use
261
- `descix init -c <community> -a <app> -p .` instead.
262
260
 
263
261
  ## Cloud Brain Alignment
264
262
 
@@ -121,7 +121,7 @@ descix kb corpus status -c <community> -a <app>
121
121
  | Goal | Command |
122
122
  |------|---------|
123
123
  | Serve `site/` locally | `npx serve site/` or `python3 -m http.server -d site/` on any port |
124
- | Register port with DeSciX | `descix site servelocal <port> -c <community> -a <app>` |
124
+ | Register a framework dev-server port with DeSciX | `descix app set-site -a <app> --port <port>` (writes `env.products[].site.port`) |
125
125
  | Run your app on the DeSciX gateway | `cd <app dir> && descix serve` — one HTTPS origin, the shell opens ON your app (**standalone** = initial view, not a reduced mode — platform views stay reachable) |
126
126
 
127
127
  A plain static server is enough to look at your HTML. `descix serve` is what you
@@ -171,7 +171,6 @@ gateway does not rewrite paths.
171
171
  ## Known CLI Quirks
172
172
 
173
173
  - `descix status` may show "No workspace found" even when config exists — use explicit flags
174
- - `descix status` may suggest `descix setup` — use `descix init` instead
175
174
 
176
175
  ## Cloud Brain Alignment
177
176
 
@@ -121,7 +121,7 @@ descix kb corpus status -c <community> -a <app>
121
121
  | Goal | Command |
122
122
  |------|---------|
123
123
  | Serve `site/` locally | `npx serve site/` or `python3 -m http.server -d site/` on any port |
124
- | Register port with DeSciX | `descix site servelocal <port> -c <community> -a <app>` |
124
+ | Register a framework dev-server port with DeSciX | `descix app set-site -a <app> --port <port>` (writes `env.products[].site.port`) |
125
125
  | Run your app on the DeSciX gateway | `cd <app dir> && descix serve` — one HTTPS origin, the shell opens ON your app (**standalone** = initial view, not a reduced mode — platform views stay reachable) |
126
126
 
127
127
  A plain static server is enough to look at your HTML. `descix serve` is what you
@@ -171,7 +171,6 @@ gateway does not rewrite paths.
171
171
  ## Known CLI Quirks
172
172
 
173
173
  - `descix status` may show "No workspace found" even when config exists — use explicit flags
174
- - `descix status` may suggest `descix setup` — use `descix init` instead
175
174
 
176
175
  ## Cloud Brain Alignment
177
176
 
@@ -121,7 +121,7 @@ descix kb corpus status -c <community> -a <app>
121
121
  | Goal | Command |
122
122
  |------|---------|
123
123
  | Serve `site/` locally | `npx serve site/` or `python3 -m http.server -d site/` on any port |
124
- | Register port with DeSciX | `descix site servelocal <port> -c <community> -a <app>` |
124
+ | Register a framework dev-server port with DeSciX | `descix app set-site -a <app> --port <port>` (writes `env.products[].site.port`) |
125
125
  | Run your app on the DeSciX gateway | `cd <app dir> && descix serve` — one HTTPS origin, the shell opens ON your app (**standalone** = initial view, not a reduced mode — platform views stay reachable) |
126
126
 
127
127
  A plain static server is enough to look at your HTML. `descix serve` is what you
@@ -171,7 +171,6 @@ gateway does not rewrite paths.
171
171
  ## Known CLI Quirks
172
172
 
173
173
  - `descix status` may show "No workspace found" even when config exists — use explicit flags
174
- - `descix status` may suggest `descix setup` — use `descix init` instead
175
174
 
176
175
  ## Cloud Brain Alignment
177
176
 
@@ -112,7 +112,7 @@ descix tell-me-how --scope discovery "What AI training tools exist?"
112
112
  ### descix app init
113
113
 
114
114
  **Description:** Create (if needed) and initialize an app: platform record + default KB + local workspace registration and scaffold. Idempotent.
115
- **Use when:** Starting a new project or hydrating an existing app. This is the single canonical path — the old two-step `app create` then `app init` is deleted; `descix app create` now hard-fails naming this replacement.
115
+ **Use when:** Starting a new project or hydrating an existing app. This is the one command that creates an app.
116
116
  **Options:**
117
117
  - `-a, --app <app_id>` (required): App ID. With `-c` this is the app NAME to create.
118
118
  - `-c, --community <id>`: Community ID — required to create an app that does not exist yet
@@ -13,8 +13,7 @@ Run this sequence ONCE to stand up a microservice that can call the mesh
13
13
  `/apifront` broker:
14
14
 
15
15
  ```bash
16
- descix app create -c {community} -a {app} # create the app (or hydrate an existing one)
17
- descix app init -a {community}-{app} # scaffold site/ kb/ microservice/
16
+ descix app init -c {community} -a {app} # create the app (or hydrate an existing one) and scaffold it
18
17
  descix app set-port -a {community}-{app} -p {port} # assign the microservice's loopback port in workspace.json
19
18
  descix microservice register # register the service manifest with the Core gateway
20
19
  # then: cp dev-overrides.example.json dev-overrides.json and fill in the developer credential
@@ -117,7 +116,7 @@ descix microservice register # register the service manifest
117
116
  **Example:**
118
117
  ```bash
119
118
  # Using the CLI
120
- descix service call {command_name} --param1 value
119
+ descix mcp execute --tool {command_name} --params '{"param1": "value"}'
121
120
 
122
121
  # Or via tell_me_how
123
122
  tell_me_how("I want to {describe the workflow goal}")