toga-ai 1.0.42 → 1.0.43
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/knowledge/INDEX.md +5 -5
- package/knowledge/clients/compass-canada/INDEX.md +1 -1
- package/knowledge/clients/compass-canada/profile.md +1 -0
- package/knowledge/clients/compass-usa/INDEX.md +1 -1
- package/knowledge/clients/compass-usa/profile.md +1 -0
- package/knowledge/clients/elite/INDEX.md +1 -1
- package/knowledge/clients/elite/profile.md +1 -0
- package/knowledge/clients/nycdoe/INDEX.md +1 -1
- package/knowledge/clients/nycdoe/profile.md +1 -0
- package/knowledge/clients/prudential/INDEX.md +1 -1
- package/knowledge/clients/prudential/profile.md +1 -0
- package/knowledge.js +7 -2
- package/package.json +1 -1
- package/skills/capture/SKILL.md +34 -0
- package/skills/kickoff/SKILL.md +8 -5
package/knowledge/INDEX.md
CHANGED
|
@@ -17,9 +17,9 @@ _Auto-generated by `knowledge.js index`. Do not hand-edit._
|
|
|
17
17
|
|
|
18
18
|
## Clients
|
|
19
19
|
|
|
20
|
-
- **compass-canada
|
|
21
|
-
- **compass-usa
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
20
|
+
- **Compass Canada** (`compass-canada`) → [clients/compass-canada/INDEX.md](clients/compass-canada/INDEX.md)
|
|
21
|
+
- **Compass USA** (`compass-usa`) → [clients/compass-usa/INDEX.md](clients/compass-usa/INDEX.md)
|
|
22
|
+
- **Elite** (`elite`) → [clients/elite/INDEX.md](clients/elite/INDEX.md)
|
|
23
|
+
- **New York City Department of Education** (`nycdoe`) → [clients/nycdoe/INDEX.md](clients/nycdoe/INDEX.md)
|
|
24
|
+
- **Prudential Financial** (`prudential`) → [clients/prudential/INDEX.md](clients/prudential/INDEX.md)
|
|
25
25
|
|
package/knowledge.js
CHANGED
|
@@ -252,12 +252,16 @@ function cmdIndex() {
|
|
|
252
252
|
|
|
253
253
|
// per-client INDEX.md
|
|
254
254
|
const clientsDir = path.join(ROOT, 'clients');
|
|
255
|
+
const clientFormalNames = {}; // slug -> formal name (from profile.md `name:`)
|
|
255
256
|
if (fs.existsSync(clientsDir)) {
|
|
256
257
|
for (const client of fs.readdirSync(clientsDir, { withFileTypes: true }).filter(e => e.isDirectory()).map(e => e.name)) {
|
|
257
258
|
const clientDir = path.join(clientsDir, client);
|
|
258
259
|
const clientDocs = docs.filter(d => d.file.startsWith(clientDir + path.sep));
|
|
260
|
+
const profileDoc = clientDocs.find(d => path.basename(d.file) === 'profile.md');
|
|
261
|
+
const formalName = (profileDoc && profileDoc.data.name) || client;
|
|
262
|
+
clientFormalNames[client] = formalName;
|
|
259
263
|
const lines = [
|
|
260
|
-
`# Client: ${client}
|
|
264
|
+
`# Client: ${formalName} \`${client}\``,
|
|
261
265
|
'',
|
|
262
266
|
'| Doc | Framework | Summary | Files |',
|
|
263
267
|
'|-----|-----------|---------|-------|',
|
|
@@ -284,7 +288,7 @@ function cmdIndex() {
|
|
|
284
288
|
? fs.readdirSync(clientsDir, { withFileTypes: true }).filter(e => e.isDirectory()).map(e => e.name) : [];
|
|
285
289
|
master.push('## Clients', '');
|
|
286
290
|
if (clientNames.length === 0) master.push('_No client knowledge captured yet._', '');
|
|
287
|
-
else { for (const c of clientNames) master.push(`- **${c}** → [clients/${c}/INDEX.md](clients/${c}/INDEX.md)`); master.push(''); }
|
|
291
|
+
else { for (const c of clientNames) master.push(`- **${clientFormalNames[c] || c}** (\`${c}\`) → [clients/${c}/INDEX.md](clients/${c}/INDEX.md)`); master.push(''); }
|
|
288
292
|
writeIndex(path.join(ROOT, 'INDEX.md'), master);
|
|
289
293
|
|
|
290
294
|
console.log('index rebuilt: ' + docs.length + ' doc(s) across ' + registry.length + ' registered repo(s).');
|
|
@@ -340,6 +344,7 @@ function cmdValidate() {
|
|
|
340
344
|
const isClientDoc = d.rel.startsWith('clients/');
|
|
341
345
|
if (isClientDoc) {
|
|
342
346
|
if (!d.data.client || d.data.client === 'shared') { fail(`${d.rel}: client doc must set a real "client"`); ok = false; }
|
|
347
|
+
if (path.basename(d.rel) === 'profile.md' && !d.data.name) { fail(`${d.rel}: client profile must set a formal "name" (e.g. name: "Compass USA")`); ok = false; }
|
|
343
348
|
} else {
|
|
344
349
|
// framework/apps doc: framework + repo must match the path
|
|
345
350
|
const parts = d.rel.split('/'); // <fw>/apps/<repo>/... OR <fw>/standards/...
|
package/package.json
CHANGED
package/skills/capture/SKILL.md
CHANGED
|
@@ -146,6 +146,8 @@ For every doc, set/refresh frontmatter: `framework`, `repo`, `project`, `client`
|
|
|
146
146
|
`type`, `status`, `updated` (today's date), `owners`, `files`, `related`.
|
|
147
147
|
Set `owners` to `["<AUTHOR_USERNAME>"]` from Step 1b — **never leave it empty**; when a doc
|
|
148
148
|
already has owners, add `AUTHOR_USERNAME` if missing rather than replacing.
|
|
149
|
+
For a client `profile.md`, set the dedicated `name:` field to the client's **formal name**
|
|
150
|
+
(distinct from `title`, the doc title) — `validate` requires it; see New-client onboarding.
|
|
149
151
|
Add `related:` cross-links. Append new repos to `<TEAM_REPO>/knowledge/registry.json`.
|
|
150
152
|
|
|
151
153
|
## Step 6 — Validate, index, mirror back (mandatory)
|
|
@@ -355,6 +357,38 @@ Ask **all** — assume nothing (a heuristic may seed a default to confirm):
|
|
|
355
357
|
|
|
356
358
|
Append the entry to `registry.json`, then continue. `validate` will confirm consistency.
|
|
357
359
|
|
|
360
|
+
## New-client onboarding (client has no `knowledge/clients/<slug>/` folder yet)
|
|
361
|
+
|
|
362
|
+
When this session's work is for a client with no `clients/<slug>/` folder, before writing
|
|
363
|
+
any client docs:
|
|
364
|
+
|
|
365
|
+
1. **Slug** — confirm the folder slug (lowercase, hyphenated, e.g. `compass-usa`). The slug
|
|
366
|
+
is used only for the folder name.
|
|
367
|
+
2. **Formal name** — **ASK the developer for the client's formal name** (e.g. "Compass USA",
|
|
368
|
+
"New York City Department of Education"). **Never invent it from the slug.**
|
|
369
|
+
3. Create `clients/<slug>/profile.md` with the formal name in the dedicated `name:` field
|
|
370
|
+
(distinct from `title`). `validate` **requires** `name:` on every client profile — a
|
|
371
|
+
profile missing it fails the build.
|
|
372
|
+
|
|
373
|
+
```markdown
|
|
374
|
+
---
|
|
375
|
+
title: <Client> Profile
|
|
376
|
+
name: "<Formal Client Name>" # formal name; the slug is only the folder
|
|
377
|
+
framework: "<1.0|2.0>"
|
|
378
|
+
project: <Project>
|
|
379
|
+
client: <slug>
|
|
380
|
+
type: profile
|
|
381
|
+
status: active
|
|
382
|
+
updated: <YYYY-MM-DD>
|
|
383
|
+
owners: ["<AUTHOR_USERNAME>"]
|
|
384
|
+
files: []
|
|
385
|
+
related: []
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## Summary
|
|
389
|
+
Who the client is and what their integration does.
|
|
390
|
+
```
|
|
391
|
+
|
|
358
392
|
---
|
|
359
393
|
|
|
360
394
|
### After Capture
|
package/skills/kickoff/SKILL.md
CHANGED
|
@@ -117,8 +117,10 @@ Ask these in one message. **Present the repos/projects you already know** (read
|
|
|
117
117
|
choice;** a session often spans more than one repo/project, so always let the developer
|
|
118
118
|
pick several. If they pick a repo not listed, run **New-repo onboarding** (below) for
|
|
119
119
|
each new repo before continuing.
|
|
120
|
-
4. **Client** — which client is this for, or "shared / internal"? **List EVERY
|
|
121
|
-
|
|
120
|
+
4. **Client** — which client is this for, or "shared / internal"? **List EVERY client by its
|
|
121
|
+
formal name** — read the `name:` field from each `knowledge/clients/<slug>/profile.md`
|
|
122
|
+
and show the **formal name, not the slug** (fall back to a title-cased slug only if
|
|
123
|
+
`name:` is missing). Include "shared / internal" and "a new client". Do not show only a
|
|
122
124
|
subset.
|
|
123
125
|
5. **What are you building or changing?** (a sentence — used to pick relevant feature docs.)
|
|
124
126
|
|
|
@@ -142,9 +144,10 @@ and naturally supports multi-select.
|
|
|
142
144
|
N. a new repo not listed
|
|
143
145
|
|
|
144
146
|
**Which client?** (one, or "shared / internal")
|
|
145
|
-
1.
|
|
146
|
-
2.
|
|
147
|
-
|
|
147
|
+
1. Compass Canada
|
|
148
|
+
2. Compass USA
|
|
149
|
+
3. Elite
|
|
150
|
+
... every client's FORMAL name (from clients/<slug>/profile.md `name:`), not the slug ...
|
|
148
151
|
S. shared / internal
|
|
149
152
|
X. a new client
|
|
150
153
|
```
|