@descix/cli 1.0.17 → 1.0.18
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/agent-assets/guides/README.md +2 -1
- package/agent-assets/guides/dynamic-site-pattern.md +6 -10
- package/agent-assets/guides/knowledge-only-pattern.md +12 -11
- package/agent-assets/guides/microservice-pattern.md +13 -16
- package/agent-assets/guides/static-site-pattern.md +6 -7
- package/agent-assets/instructions/app-asset-validation.md +61 -59
- package/agent-assets/instructions/onboarding-flow.md +57 -73
- package/agent-assets/instructions/standard-folder-structure.md +39 -36
- package/agent-assets/reference/app-creation.md +27 -33
- package/agent-assets/reference/architecture.md +85 -148
- package/agent-assets/reference/local-dev.md +5 -83
- package/agent-assets/reference/mcp-integration.md +32 -39
- package/agent-assets/reference/workspace-config.md +9 -10
- package/bin/descix.js +5 -0
- package/lib/help-guard.js +85 -0
- package/package.json +1 -1
- package/templates/agent-claude.md +6 -4
- package/templates/agent-cline.md +2 -2
- package/templates/agent-copilot.md +2 -2
- package/templates/agent-cursor.md +2 -2
|
@@ -44,7 +44,8 @@ Does the user need a public website?
|
|
|
44
44
|
### Microservice
|
|
45
45
|
- Backend service with MCP-exposed commands
|
|
46
46
|
- Add `microservice/` folder with `descix microservice init`
|
|
47
|
-
- Commands: `descix microservice register
|
|
47
|
+
- Commands: `descix microservice register -r SERVICE_README.md` (registration also vectorizes the
|
|
48
|
+
README for `tell_me_how` discovery — there is no separate developer step)
|
|
48
49
|
|
|
49
50
|
### Dynamic Site
|
|
50
51
|
- SSR app where microservice serves the site
|
|
@@ -24,12 +24,8 @@ my-dynamic-app/
|
|
|
24
24
|
│ ├── app_description.md
|
|
25
25
|
│ ├── icon.png
|
|
26
26
|
│ └── system_instructions.md
|
|
27
|
-
├──
|
|
28
|
-
│
|
|
29
|
-
│ ├── General/
|
|
30
|
-
│ │ ├── README.md
|
|
31
|
-
│ │ └── user-guide.md
|
|
32
|
-
│ └── chunks/
|
|
27
|
+
├── docs/ # Your RAG content — any location works
|
|
28
|
+
│ └── user-guide.md # named in a corpus manifest (.descix/manifests/General.json)
|
|
33
29
|
├── site/
|
|
34
30
|
│ └── README.md # "Site served by microservice"
|
|
35
31
|
├── microservice/
|
|
@@ -85,9 +81,9 @@ descix microservice init
|
|
|
85
81
|
# 2. Add SSR routes to your service, run it locally behind the gateway
|
|
86
82
|
descix serve
|
|
87
83
|
|
|
88
|
-
# 3. Register
|
|
89
|
-
|
|
90
|
-
descix microservice
|
|
84
|
+
# 3. Register (after the service is deployed — see Deployment). This also vectorizes the
|
|
85
|
+
# README you pass with -r, so tell_me_how can discover the service's tools.
|
|
86
|
+
descix microservice register -r SERVICE_README_myapp.md
|
|
91
87
|
|
|
92
88
|
# 4. Sync KB
|
|
93
89
|
descix kb corpus sync -c <community> -a <app>
|
|
@@ -98,7 +94,7 @@ descix kb corpus sync -c <community> -a <app>
|
|
|
98
94
|
| Capability | Enabled |
|
|
99
95
|
|------------|---------|
|
|
100
96
|
| RAG search | Yes |
|
|
101
|
-
|
|
|
97
|
+
| RAG chat (`ask_question_to_app`) | Yes |
|
|
102
98
|
| Public URL | Yes |
|
|
103
99
|
| MCP tools | Yes |
|
|
104
100
|
| tell_me_how discovery | Yes |
|
|
@@ -23,18 +23,19 @@ my-docs/
|
|
|
23
23
|
│ ├── app_description.md # Required
|
|
24
24
|
│ ├── icon.png # Required (512x512)
|
|
25
25
|
│ └── system_instructions.md # Required
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
└── chunks/ # Processed chunks (JSON)
|
|
26
|
+
├── docs/ # Your content — any location works
|
|
27
|
+
│ ├── getting-started.md
|
|
28
|
+
│ ├── api-reference.md
|
|
29
|
+
│ └── tutorials/
|
|
30
|
+
│ └── ...
|
|
31
|
+
└── .descix/
|
|
32
|
+
└── manifests/
|
|
33
|
+
└── General.json # Corpus manifest — names the docs source(s) above
|
|
35
34
|
```
|
|
36
35
|
|
|
37
|
-
**Note:** No `site/` or `microservice/` folders needed.
|
|
36
|
+
**Note:** No `site/` or `microservice/` folders needed. There is no required KB folder — the
|
|
37
|
+
corpus manifest names whichever git-tracked directory holds your docs (`docs/` above is just an
|
|
38
|
+
example; `kb/General/` also works if that's where content ends up, e.g. from `descix drive pull`).
|
|
38
39
|
|
|
39
40
|
## Configuration (`workspace.json`)
|
|
40
41
|
|
|
@@ -76,7 +77,7 @@ The git path needs no Drive at all: commit markdown, name it in the manifest, ru
|
|
|
76
77
|
| Capability | Enabled |
|
|
77
78
|
|------------|---------|
|
|
78
79
|
| RAG search | Yes |
|
|
79
|
-
|
|
|
80
|
+
| RAG chat (`ask_question_to_app`) | Yes |
|
|
80
81
|
| Public URL | No |
|
|
81
82
|
| MCP tools | No |
|
|
82
83
|
| tell_me_how discovery | No |
|
|
@@ -24,12 +24,9 @@ my-service/
|
|
|
24
24
|
│ ├── app_description.md
|
|
25
25
|
│ ├── icon.png
|
|
26
26
|
│ └── system_instructions.md
|
|
27
|
-
├──
|
|
28
|
-
│
|
|
29
|
-
│
|
|
30
|
-
│ │ ├── README.md
|
|
31
|
-
│ │ └── api-reference.md
|
|
32
|
-
│ └── chunks/
|
|
27
|
+
├── .descix/
|
|
28
|
+
│ └── manifests/
|
|
29
|
+
│ └── General.json # Corpus manifest — names the docs `kb corpus sync` publishes
|
|
33
30
|
├── site/ # Optional frontend
|
|
34
31
|
│ └── ...
|
|
35
32
|
├── microservice/
|
|
@@ -72,7 +69,7 @@ infrastructure for free, and a service that hand-rolls its own config or reads
|
|
|
72
69
|
only shows up later, in the environment where it matters.
|
|
73
70
|
|
|
74
71
|
**This is also why your service is called at its own Cloud Run instance rather than
|
|
75
|
-
through an extra hop at the DeSciX router**
|
|
72
|
+
through an extra hop at the DeSciX router** — direct routing is by design.
|
|
76
73
|
Direct routing is the intended path *because* a service built on the SDK already carries
|
|
77
74
|
the infrastructure the extra hop would otherwise have to add. Read a direct call as the
|
|
78
75
|
architecture working, not as a bypass — the correctness precondition is that the service
|
|
@@ -110,19 +107,19 @@ descix microservice init
|
|
|
110
107
|
|
|
111
108
|
# 2. Implement your commands in commandHandlers/
|
|
112
109
|
|
|
113
|
-
# 3. Publish the service MANIFEST
|
|
114
|
-
descix microservice register
|
|
110
|
+
# 3. Publish the service MANIFEST and vectorize its SERVICE_README in one step
|
|
111
|
+
descix microservice register -r SERVICE_README_myapp.md
|
|
115
112
|
|
|
116
|
-
# 4.
|
|
117
|
-
descix microservice vectorize
|
|
118
|
-
|
|
119
|
-
# 5. Sync KB
|
|
113
|
+
# 4. Sync KB
|
|
120
114
|
descix kb corpus sync -c <community> -a <app>
|
|
121
115
|
```
|
|
122
116
|
|
|
123
117
|
**What registration is, and is not.** It publishes your `manifest.json` — the command list —
|
|
124
|
-
so `tell_me_how` can discover your tools.
|
|
125
|
-
the commands it published.
|
|
118
|
+
and vectorizes the README you pass with `-r`, so `tell_me_how` can discover your tools.
|
|
119
|
+
`scripts/register.js` writes that manifest and logs the commands it published. There is no
|
|
120
|
+
separate developer-facing vectorize step — `descix microservice vectorize` exists but is an
|
|
121
|
+
admin-only utility (for re-vectorizing without re-registering), not part of the normal flow.
|
|
122
|
+
It is a DISCOVERY step.
|
|
126
123
|
|
|
127
124
|
It is not how your service becomes reachable, and nothing here asks you to declare a route or
|
|
128
125
|
a URL. Do not read this step as wiring up addressing.
|
|
@@ -132,7 +129,7 @@ a URL. Do not read this step as wiring up addressing.
|
|
|
132
129
|
| Capability | Enabled |
|
|
133
130
|
|------------|---------|
|
|
134
131
|
| RAG search | Yes |
|
|
135
|
-
|
|
|
132
|
+
| RAG chat (`ask_question_to_app`) | Yes |
|
|
136
133
|
| Public URL | Yes (via service) |
|
|
137
134
|
| MCP tools | Yes |
|
|
138
135
|
| tell_me_how discovery | Yes |
|
|
@@ -24,12 +24,8 @@ my-site/
|
|
|
24
24
|
│ ├── app_description.md
|
|
25
25
|
│ ├── icon.png
|
|
26
26
|
│ └── system_instructions.md
|
|
27
|
-
├──
|
|
28
|
-
│
|
|
29
|
-
│ ├── General/
|
|
30
|
-
│ │ ├── README.md
|
|
31
|
-
│ │ └── ... (markdown for RAG)
|
|
32
|
-
│ └── chunks/
|
|
27
|
+
├── docs/ # Your RAG content — any location works
|
|
28
|
+
│ └── ... (markdown, named in a corpus manifest)
|
|
33
29
|
├── site/ # Static files to deploy
|
|
34
30
|
│ ├── index.html
|
|
35
31
|
│ ├── styles.css
|
|
@@ -39,6 +35,9 @@ my-site/
|
|
|
39
35
|
│ └── dist/ # Build output (if using bundler)
|
|
40
36
|
├── src/ # Source files (not deployed)
|
|
41
37
|
│ └── ...
|
|
38
|
+
├── .descix/
|
|
39
|
+
│ └── manifests/
|
|
40
|
+
│ └── General.json # Corpus manifest — names docs/ as the sync source
|
|
42
41
|
├── package.json
|
|
43
42
|
└── vite.config.js
|
|
44
43
|
```
|
|
@@ -79,7 +78,7 @@ descix site upload
|
|
|
79
78
|
| Capability | Enabled |
|
|
80
79
|
|------------|---------|
|
|
81
80
|
| RAG search | Yes |
|
|
82
|
-
|
|
|
81
|
+
| RAG chat (`ask_question_to_app`) | Yes |
|
|
83
82
|
| Public URL | Yes |
|
|
84
83
|
| MCP tools | No |
|
|
85
84
|
| tell_me_how discovery | No |
|
|
@@ -6,17 +6,20 @@ This document guides the AI agent through validating an app's folder structure a
|
|
|
6
6
|
|
|
7
7
|
### Step 1: Check Folder Structure
|
|
8
8
|
|
|
9
|
-
Verify these
|
|
9
|
+
Verify these exist:
|
|
10
10
|
|
|
11
11
|
```
|
|
12
12
|
{app_folder}/
|
|
13
|
-
├── assets/
|
|
14
|
-
├──
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
└── microservice/ # Required (even if placeholder)
|
|
13
|
+
├── assets/ # Required
|
|
14
|
+
├── .descix/manifests/<KB>.json # Required — the corpus manifest (see Step 3)
|
|
15
|
+
├── site/ # Required (even if placeholder)
|
|
16
|
+
└── microservice/ # Required (even if placeholder)
|
|
18
17
|
```
|
|
19
18
|
|
|
19
|
+
There is no required KB folder. A knowledge base is whatever git-tracked source(s) the corpus
|
|
20
|
+
manifest names — `kb/General/` is one common convention (especially if the app also uses `descix
|
|
21
|
+
drive pull`), but any path works.
|
|
22
|
+
|
|
20
23
|
**If folders are missing**, offer to create them with appropriate placeholder content.
|
|
21
24
|
|
|
22
25
|
### Step 2: Check Required Assets
|
|
@@ -76,33 +79,48 @@ I can create a starter template based on your app description.
|
|
|
76
79
|
|
|
77
80
|
### Step 3: Check Knowledge Base
|
|
78
81
|
|
|
79
|
-
####
|
|
82
|
+
#### `.descix/manifests/<KB>.json`
|
|
83
|
+
|
|
84
|
+
**Check**: A corpus manifest exists at `{app_folder}/.descix/manifests/<KB-name>.json` (default KB
|
|
85
|
+
name is `General`) and its `sources` array names at least one git-tracked path.
|
|
80
86
|
|
|
81
|
-
**
|
|
87
|
+
**This is the real check** — the manifest is what `descix kb corpus sync` reads. There is no
|
|
88
|
+
folder-existence check to run instead of it: a `kb/General/` folder with files in it does nothing
|
|
89
|
+
for RAG until a manifest names it.
|
|
82
90
|
|
|
83
|
-
**If missing**,
|
|
91
|
+
**If missing**, guide the user:
|
|
84
92
|
|
|
85
93
|
```
|
|
86
|
-
Your
|
|
87
|
-
|
|
94
|
+
Your app doesn't have a knowledge base manifest yet. This file
|
|
95
|
+
(.descix/manifests/General.json) tells `descix kb corpus sync` which
|
|
96
|
+
of your git-tracked files to index for RAG.
|
|
88
97
|
|
|
89
|
-
|
|
90
|
-
|
|
98
|
+
Minimal shape:
|
|
99
|
+
{
|
|
100
|
+
"kb_name": "General",
|
|
101
|
+
"sync_mode": "local",
|
|
102
|
+
"sources": [
|
|
103
|
+
{ "path": "docs", "ref": "main", "tier": 1, "doc_type": "documentation" }
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
Which folder(s) in your repo should I name as sources?
|
|
91
108
|
```
|
|
92
109
|
|
|
93
|
-
####
|
|
110
|
+
#### Manifest Sources
|
|
94
111
|
|
|
95
|
-
**Check**:
|
|
112
|
+
**Check**: `descix kb corpus status -a <app_id> -k <KB>` reports at least one tracked file (or run
|
|
113
|
+
`descix kb corpus sync --dry-run --show-walk` to preview the walk before syncing).
|
|
96
114
|
|
|
97
115
|
**If empty**, suggest:
|
|
98
116
|
|
|
99
117
|
```
|
|
100
|
-
Your knowledge base
|
|
101
|
-
based on content
|
|
118
|
+
Your knowledge base manifest has no sources yet (or its sources walk to zero files).
|
|
119
|
+
The AI can only answer questions based on content the manifest names.
|
|
102
120
|
|
|
103
121
|
Suggestions:
|
|
104
|
-
-
|
|
105
|
-
- Create a getting-started.md
|
|
122
|
+
- Point a source at existing documentation
|
|
123
|
+
- Create a getting-started.md and name its folder
|
|
106
124
|
- Add API reference docs
|
|
107
125
|
- Include user guides
|
|
108
126
|
```
|
|
@@ -160,49 +178,31 @@ This app does not have a backend microservice.
|
|
|
160
178
|
|
|
161
179
|
## Pull from Drive Workflow
|
|
162
180
|
|
|
163
|
-
If the app already exists on Drive, offer to pull existing
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
Use: validate_app_assets({ community_id, app_id, check_drive: true })
|
|
169
|
-
|
|
170
|
-
Returns:
|
|
171
|
-
{
|
|
172
|
-
"local_assets": { ... },
|
|
173
|
-
"remote_assets": { ... },
|
|
174
|
-
"missing_locally": ["icon.png", "system_instructions.md"],
|
|
175
|
-
"can_pull": true
|
|
176
|
-
}
|
|
177
|
-
```
|
|
181
|
+
If the app already exists on Drive (Drive-mode authoring), offer to pull existing content.
|
|
182
|
+
**There is no dedicated "check what's on Drive" command** — the canonical tool is `descix drive
|
|
183
|
+
pull` itself, which downloads and converts in one step (nothing to plan around a separate check
|
|
184
|
+
command that doesn't exist).
|
|
178
185
|
|
|
179
186
|
### Offer to Pull
|
|
180
187
|
|
|
181
188
|
```
|
|
182
|
-
|
|
183
|
-
- ✓ app_description.md (234 bytes)
|
|
184
|
-
- ✓ icon.png (45KB)
|
|
185
|
-
- ✓ system_instructions.md (1.2KB)
|
|
189
|
+
Your app may already have content on DeSciX Drive.
|
|
186
190
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
- system_instructions.md
|
|
190
|
-
|
|
191
|
-
Would you like me to pull these from Drive to your local folder?
|
|
192
|
-
[Yes, pull missing assets] [No, I'll create new ones]
|
|
191
|
+
Would you like me to pull it into your local folder?
|
|
192
|
+
[Yes, pull from Drive] [No, I'll create new ones]
|
|
193
193
|
```
|
|
194
194
|
|
|
195
195
|
### Execute Pull
|
|
196
196
|
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
community_id,
|
|
200
|
-
app_id,
|
|
201
|
-
local_path,
|
|
202
|
-
folders: ["assets", "kb"] // Optional: specify which folders
|
|
203
|
-
})
|
|
197
|
+
```bash
|
|
198
|
+
descix drive pull -c <community_id> -a <app_id>
|
|
204
199
|
```
|
|
205
200
|
|
|
201
|
+
This downloads and converts Drive content to local markdown (default KB `General`; pass `-k
|
|
202
|
+
<name>` for another) and reports what it pulled, converted, skipped or left unchanged. Follow up
|
|
203
|
+
with `descix kb corpus sync -a <app_id>` once the pulled files are named in a corpus manifest —
|
|
204
|
+
`descix drive pull` never syncs to Pinecone by itself.
|
|
205
|
+
|
|
206
206
|
## Validation Results Format
|
|
207
207
|
|
|
208
208
|
After validation, report status clearly:
|
|
@@ -212,7 +212,7 @@ After validation, report status clearly:
|
|
|
212
212
|
|
|
213
213
|
### Folder Structure
|
|
214
214
|
✓ assets/ exists
|
|
215
|
-
✓
|
|
215
|
+
✓ .descix/manifests/General.json exists
|
|
216
216
|
✓ site/ exists
|
|
217
217
|
✓ microservice/ exists
|
|
218
218
|
|
|
@@ -222,8 +222,8 @@ After validation, report status clearly:
|
|
|
222
222
|
✓ assets/system_instructions.md (1.2KB)
|
|
223
223
|
|
|
224
224
|
### Knowledge Base
|
|
225
|
-
✓
|
|
226
|
-
✓ 5 documents
|
|
225
|
+
✓ .descix/manifests/General.json names 1 source
|
|
226
|
+
✓ 5 documents tracked (`descix kb corpus status -a my-app -k General`)
|
|
227
227
|
|
|
228
228
|
### Site
|
|
229
229
|
○ site/ contains placeholder only (no UI)
|
|
@@ -303,7 +303,9 @@ Do NOT:
|
|
|
303
303
|
{Describe the desired tone: professional, friendly, technical, etc.}
|
|
304
304
|
```
|
|
305
305
|
|
|
306
|
-
###
|
|
306
|
+
### KB Overview Doc Template
|
|
307
|
+
|
|
308
|
+
Place this wherever your corpus manifest points (e.g. `docs/README.md`):
|
|
307
309
|
|
|
308
310
|
```markdown
|
|
309
311
|
# {App Name} Knowledge Base
|
|
@@ -376,10 +378,10 @@ Always run validation:
|
|
|
376
378
|
|
|
377
379
|
### Before `descix kb corpus sync`
|
|
378
380
|
|
|
379
|
-
1. Check `
|
|
380
|
-
2.
|
|
381
|
-
3. Warn if no
|
|
382
|
-
4. Report total document count
|
|
381
|
+
1. Check `.descix/manifests/<KB>.json` exists
|
|
382
|
+
2. Run `--dry-run --show-walk` and confirm the manifest's sources resolve to at least one file
|
|
383
|
+
3. Warn if no overview doc is named among the sources
|
|
384
|
+
4. Report total document count from the dry-run output
|
|
383
385
|
|
|
384
386
|
### Before `descix site upload`
|
|
385
387
|
|
|
@@ -16,26 +16,28 @@ Purpose: Maps local folders to DeSciX apps and stores all configuration.
|
|
|
16
16
|
|
|
17
17
|
```json
|
|
18
18
|
{
|
|
19
|
-
"version": "2.
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
"version": "2.1",
|
|
20
|
+
"env": {
|
|
21
|
+
"environment": "DEV",
|
|
22
|
+
"apiUrl": "https://dev.descix.net",
|
|
23
|
+
"products": [
|
|
24
|
+
{
|
|
25
|
+
"appId": "daita-appsdk",
|
|
26
|
+
"communityId": "daita",
|
|
27
|
+
"localPath": "daita/appsdk",
|
|
28
|
+
"kbId": "General"
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
]
|
|
31
31
|
},
|
|
32
32
|
"driveConfig": {
|
|
33
|
-
"base_folder_id": "..."
|
|
34
|
-
"base_folder_name": "..."
|
|
33
|
+
"base_folder_id": "..."
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
```
|
|
38
37
|
|
|
38
|
+
A `communities`-keyed block with no `env` block is the removed v1 shape — the loader refuses it:
|
|
39
|
+
`v1 workspace format is not supported. Migrate to v2.1.`
|
|
40
|
+
|
|
39
41
|
**Used for:**
|
|
40
42
|
- CLI auto-detection of community/app from current directory
|
|
41
43
|
- `tell_me_how --scope project` to discover project-specific tools
|
|
@@ -139,20 +141,12 @@ Which mappings should I create?
|
|
|
139
141
|
|
|
140
142
|
For each mapping, create appropriate config:
|
|
141
143
|
|
|
142
|
-
1. **workspace.json** (root level):
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
"primaryCommunity": "{primary_community_id}",
|
|
147
|
-
"directoryMappings": {
|
|
148
|
-
"{folder}": {
|
|
149
|
-
"communityId": "{community_id}",
|
|
150
|
-
"appId": "{app_id}",
|
|
151
|
-
"kbId": "General"
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
144
|
+
1. **workspace.json** (root level) — written by CLI verbs, never by hand:
|
|
145
|
+
```bash
|
|
146
|
+
descix config init --env dev # creates workspace.json, pins env.apiUrl
|
|
147
|
+
descix app init -a {app_id} -c {community_id} -p {folder} # adds env.products[] entry
|
|
155
148
|
```
|
|
149
|
+
Each mapping becomes one `env.products[]` entry (`appId`, `communityId`, `localPath`, `kbId`).
|
|
156
150
|
|
|
157
151
|
## App Configuration Flow
|
|
158
152
|
|
|
@@ -180,10 +174,13 @@ Would you like to:
|
|
|
180
174
|
|
|
181
175
|
For each folder being configured:
|
|
182
176
|
|
|
183
|
-
1. Read
|
|
184
|
-
|
|
177
|
+
1. Read [guides/README.md](../guides/README.md) for the decision tree (Knowledge-Only / Static
|
|
178
|
+
Site / Microservice / Dynamic Site)
|
|
179
|
+
2. Read [app-asset-validation.md](./app-asset-validation.md#folder-analysis-heuristics) for
|
|
180
|
+
detection heuristics
|
|
185
181
|
3. Present options to user with recommendations
|
|
186
|
-
4.
|
|
182
|
+
4. Scaffold with the matching CLI verb: `descix site init` and/or `descix microservice init`
|
|
183
|
+
(there is no `templates/{type}/` to read directly — the CLI copies the right scaffold)
|
|
187
184
|
|
|
188
185
|
### Step 4: Validate Folder Structure
|
|
189
186
|
|
|
@@ -191,12 +188,15 @@ After determining packaging type, ensure the folder follows the [Standard Folder
|
|
|
191
188
|
|
|
192
189
|
```
|
|
193
190
|
{app_folder}/
|
|
194
|
-
├── assets/
|
|
195
|
-
├──
|
|
196
|
-
├── site/
|
|
197
|
-
└── microservice/
|
|
191
|
+
├── assets/ # App identity (required)
|
|
192
|
+
├── .descix/manifests/<KB>.json # Corpus manifest — required for RAG, see below
|
|
193
|
+
├── site/ # Static site (required)
|
|
194
|
+
└── microservice/ # Backend service (required)
|
|
198
195
|
```
|
|
199
196
|
|
|
197
|
+
There is no required KB folder — a knowledge base is whatever git-tracked source(s) the corpus
|
|
198
|
+
manifest names.
|
|
199
|
+
|
|
200
200
|
**Validation Steps:**
|
|
201
201
|
|
|
202
202
|
1. Check if each required folder exists
|
|
@@ -204,54 +204,37 @@ After determining packaging type, ensure the folder follows the [Standard Folder
|
|
|
204
204
|
3. Check if kb/ has a README.md
|
|
205
205
|
4. For missing folders/files, offer to create with placeholders
|
|
206
206
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
execute_remote_command({
|
|
211
|
-
command: "validate_app_structure",
|
|
212
|
-
params: { local_path: "/path/to/app" }
|
|
213
|
-
})
|
|
214
|
-
```
|
|
207
|
+
`validate_app_structure` returns a generic checklist — a folder existing does not mean the KB is
|
|
208
|
+
wired up. **The check that actually matters for RAG is `.descix/manifests/<KB>.json` existing with
|
|
209
|
+
at least one source**, per [app-asset-validation.md](./app-asset-validation.md#step-3-check-knowledge-base).
|
|
215
210
|
|
|
216
211
|
### Step 5: Pull from Drive (Optional)
|
|
217
212
|
|
|
218
|
-
If the app already exists remotely, offer to pull existing
|
|
213
|
+
If the app already exists remotely, offer to pull existing content:
|
|
219
214
|
|
|
220
215
|
```
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
Remote assets found:
|
|
224
|
-
- ✓ app_description.md
|
|
225
|
-
- ✓ icon.png
|
|
226
|
-
- ✓ system_instructions.md
|
|
216
|
+
Your app may already have content on DeSciX Drive.
|
|
227
217
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
Would you like me to pull them from Drive?
|
|
231
|
-
[Yes, pull missing assets] [No, I'll create new ones]
|
|
218
|
+
Would you like me to pull it into your local folder?
|
|
219
|
+
[Yes, pull from Drive] [No, I'll create new ones]
|
|
232
220
|
```
|
|
233
221
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
```javascript
|
|
237
|
-
execute_remote_command({
|
|
238
|
-
command: "pull_app_assets_from_drive",
|
|
239
|
-
params: {
|
|
240
|
-
community_id: "...",
|
|
241
|
-
app_id: "...",
|
|
242
|
-
local_path: "/path/to/app",
|
|
243
|
-
folders: ["assets", "kb"] // Which folders to pull
|
|
244
|
-
}
|
|
245
|
-
})
|
|
222
|
+
```bash
|
|
223
|
+
descix drive pull -c <community_id> -a <app_id>
|
|
246
224
|
```
|
|
247
225
|
|
|
226
|
+
This downloads and converts Drive content to local markdown and reports what changed. It does not
|
|
227
|
+
sync to Pinecone by itself — follow with `descix kb corpus sync` once the pulled files are named
|
|
228
|
+
in a corpus manifest.
|
|
229
|
+
|
|
248
230
|
### Step 6: Create Missing Structure
|
|
249
231
|
|
|
250
232
|
For any missing folders or files:
|
|
251
233
|
|
|
252
|
-
1. Create
|
|
253
|
-
|
|
254
|
-
|
|
234
|
+
1. Create `assets/` with starter `app_description.md` / `system_instructions.md` (or run
|
|
235
|
+
`descix app init`, which scaffolds these for you)
|
|
236
|
+
2. Create a `.descix/manifests/<KB>.json` corpus manifest naming wherever the docs will live
|
|
237
|
+
3. `descix site init` / `descix microservice init` for the code scaffolds
|
|
255
238
|
|
|
256
239
|
```
|
|
257
240
|
Creating standard folder structure...
|
|
@@ -260,7 +243,7 @@ Created:
|
|
|
260
243
|
✓ assets/app_description.md (from template)
|
|
261
244
|
✓ assets/system_instructions.md (from template)
|
|
262
245
|
○ assets/icon.png (TODO: add a 512x512 PNG)
|
|
263
|
-
✓
|
|
246
|
+
✓ .descix/manifests/General.json (empty — add sources once you have docs)
|
|
264
247
|
✓ site/README.md (placeholder)
|
|
265
248
|
✓ microservice/README.md (placeholder)
|
|
266
249
|
|
|
@@ -307,7 +290,8 @@ Once configured, guide user to:
|
|
|
307
290
|
### Sync Commands (in order)
|
|
308
291
|
|
|
309
292
|
1. **Sync app assets**: `descix app sync-assets`
|
|
310
|
-
-
|
|
293
|
+
- Syncs app_description.md, icon.png, system_instructions.md to the platform (Firestore/GCS) —
|
|
294
|
+
not Google Drive
|
|
311
295
|
|
|
312
296
|
2. **Sync knowledge base**: `descix kb corpus sync`
|
|
313
297
|
- Indexes documents to Pinecone for RAG
|
|
@@ -315,14 +299,14 @@ Once configured, guide user to:
|
|
|
315
299
|
3. **Deploy static site** (if applicable): `descix site upload`
|
|
316
300
|
- Uploads site/ contents to GCS
|
|
317
301
|
|
|
318
|
-
4. **Register microservice** (if applicable): `descix microservice register`
|
|
319
|
-
- Registers service
|
|
320
|
-
|
|
302
|
+
4. **Register microservice** (if applicable): `descix microservice register -r SERVICE_README_<name>.md`
|
|
303
|
+
- Registers the service manifest AND vectorizes the README you pass, in one step —
|
|
304
|
+
`tell_me_how` discovery needs no separate developer action
|
|
321
305
|
|
|
322
306
|
### Ongoing Development
|
|
323
307
|
|
|
324
308
|
- Use `tell_me_how` for tool discovery and guidance
|
|
325
|
-
- Use `
|
|
309
|
+
- Use `ask_question_to_app` (or `descix chat`) to test your AI agent
|
|
326
310
|
- Use `validate_app_structure` before syncing to catch issues
|
|
327
311
|
|
|
328
312
|
---
|