shadok-ai 0.17.39 → 0.17.40
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 +17 -16
- package/context/agents-skill/SKILL.md +1 -1
- package/context/agents-skill/pilotctl.mjs +3 -6
- package/dist/channels.d.ts +4 -3
- package/dist/channels.js +2 -3
- package/dist/channels.js.map +1 -1
- package/dist/factory-routes.d.ts +8 -11
- package/dist/factory-routes.js +37 -121
- package/dist/factory-routes.js.map +1 -1
- package/dist/factory.d.ts +18 -5
- package/dist/factory.js +38 -14
- package/dist/factory.js.map +1 -1
- package/dist/server.js +36 -72
- package/dist/server.js.map +1 -1
- package/dist/slash-commands.d.ts +1 -1
- package/package.json +1 -1
- package/public/index.html +8 -124
package/README.md
CHANGED
|
@@ -251,7 +251,7 @@ Enter to skip; you can add it later from the web UI).
|
|
|
251
251
|
names that look like a credential or a connection setting get one (`…_TOKEN`,
|
|
252
252
|
`…_KEY`, `…_URL`, `…_ID`…), never `NODE_ENV` nor shadok's own `SHADOK_*`.
|
|
253
253
|
- **`/` commands** — type `/` in the composer and a menu lists the Skill
|
|
254
|
-
Factory skills
|
|
254
|
+
Factory skills the agent has (`/name:name`). ↑/↓ to move, Enter or
|
|
255
255
|
Tab to complete, Escape to close (`GET /commands?session=`). Any other
|
|
256
256
|
Claude Code command still works when typed in full. A message that starts
|
|
257
257
|
with a command goes to the agent bare, without shadok's context line or
|
|
@@ -297,15 +297,15 @@ Enter to skip; you can add it later from the web UI).
|
|
|
297
297
|
open. It is still real history — just out of the way.
|
|
298
298
|
- **Skill Factory**: the flask icon in the header switches the cockpit to the
|
|
299
299
|
**Skills** page, with a slide; click it again to come back. Write a Claude
|
|
300
|
-
Code skill together, people and agents alike,
|
|
301
|
-
|
|
300
|
+
Code skill together, people and agents alike, and share it with the people
|
|
301
|
+
and groups that need it.
|
|
302
302
|
- **The list.** Every skill with its tags, who it is shared with, whether it
|
|
303
303
|
is saved or carries draft changes, where it is used, and how many times it
|
|
304
304
|
ran this week. It can be filtered by tag, by "shared with" and by status
|
|
305
305
|
(draft changes, unused, feedback, archived). Ticked rows can be shared,
|
|
306
306
|
tagged or archived in one go.
|
|
307
|
-
- **The detail panel.** Its numbers,
|
|
308
|
-
agent
|
|
307
|
+
- **The detail panel.** Its numbers, the agents that have it (group by group:
|
|
308
|
+
each agent and its runs), the secrets agents running it get, and its
|
|
309
309
|
feedback.
|
|
310
310
|
- **Creating.** The new-skill form asks for a **name** (what people see) and
|
|
311
311
|
a **technical name** (what agents call it, `/name:name`), proposed from the
|
|
@@ -316,10 +316,11 @@ Enter to skip; you can add it later from the web UI).
|
|
|
316
316
|
(Enter saves, Escape cancels). Only the displayed name changes: agents keep
|
|
317
317
|
calling it by its technical name, so attached agents are not disturbed.
|
|
318
318
|
- **Sharing.** A skill is shared with **only me**, with **one or more
|
|
319
|
-
groups**, or with **everyone
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
319
|
+
groups**, or with **everyone**, and that is where it runs: every agent
|
|
320
|
+
of those groups has it (everyone: every agent; only me: only the agents you
|
|
321
|
+
created, and nobody else sees it). A skill is never given to an agent one
|
|
322
|
+
by one, and having it grants nothing beyond the existing rights: each
|
|
323
|
+
group's own acceptance and the secrets approved for it.
|
|
323
324
|
- **Editing**, on one screen. The skills are listed by name on the left. In
|
|
324
325
|
the middle, the skill reads as one document: *When to use it*,
|
|
325
326
|
*Instructions*, *Needs*, with the scripts folded away for developers. On the
|
|
@@ -327,15 +328,15 @@ Enter to skip; you can add it later from the web UI).
|
|
|
327
328
|
pushes, and its changes show up in the document. Two buttons, no versions
|
|
328
329
|
to manage: **Save draft** keeps your edits while agents keep running the
|
|
329
330
|
last saved skill, and **Save** makes it what they run (`POST
|
|
330
|
-
…/publish`).
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
with `factory.mjs feedback`.
|
|
331
|
+
…/publish`). Idle agents already running it reload onto it at once; the
|
|
332
|
+
others pick it up at their next reload.
|
|
333
|
+
- **Running.** A saved skill is loaded (with `--plugin-dir`, as
|
|
334
|
+
`<name>:<name>`) by every agent it is shared with. To run it on a schedule,
|
|
335
|
+
set the schedule from the agent (its cron), not from the skill. Agents
|
|
336
|
+
report problems with `factory.mjs feedback`.
|
|
336
337
|
- **Secrets travel by name, and only once you approve them.** A saved skill
|
|
337
338
|
asks for the secrets it declares, plus any vault name its code reads. Save
|
|
338
|
-
|
|
339
|
+
lists those names and asks you
|
|
339
340
|
to approve them; agents receive only the names you approved. A save or push
|
|
340
341
|
holding a vault value is refused, and so is a push carrying a symlink or a
|
|
341
342
|
submodule.
|
|
@@ -20,7 +20,7 @@ and automatically starts the shadok-ai server when it is not running (port
|
|
|
20
20
|
|
|
21
21
|
| Command | Effect |
|
|
22
22
|
|---|---|
|
|
23
|
-
| `spawn [--cwd DIR] [--worktree] [--profile NAME] [--name LABEL] [--
|
|
23
|
+
| `spawn [--cwd DIR] [--worktree] [--profile NAME] [--name LABEL] [--resume ID] [--continue]` | creates an agent → `{sessionId, cwd, branch}`. Skill Factory skills are not passed here: the agent runs every factory skill shared with its group (or with everyone, or private to its creator), at the latest release accepted for that group. `--worktree` isolates the agent in a git worktree (`~/.shadok-ai/worktrees/`, branch `shadok-ai/<tag>`). `--profile` gives it a role + its guardrails + its secrets (see below). `--name` sets the agent's tab name in the cockpit (spawn only; a later rename in the UI is kept) — without it the name is derived from the profile/directory, so several agents look alike |
|
|
24
24
|
| `prompt <id> "text" [--timeout s]` | sends a prompt, waits for the end of the turn → `{status:"answer", text, tools}` or `{status:"dialog", question, options, multi}` or `{status:"timeout", screen}` or `{status:"pace-blocked", reason}` |
|
|
25
25
|
| `dialog <id>` | queries the state → `{status:"idle"}` or the pending dialog |
|
|
26
26
|
| `choose <id> <n>` | single-select dialog: picks and commits option n |
|
|
@@ -377,13 +377,10 @@ export function buildStartMsg(flags, env = process.env) {
|
|
|
377
377
|
// later resume never overwrites a rename made in the cockpit. Omitted → the
|
|
378
378
|
// cockpit derives a default from the profile/directory.
|
|
379
379
|
if (flags.name) startMsg.name = flags.name;
|
|
380
|
-
//
|
|
381
|
-
//
|
|
380
|
+
// A factory skill is not given to an agent: every agent its sharing covers
|
|
381
|
+
// runs it. The flag is still parsed so an old command line does not fail.
|
|
382
382
|
if (flags.skill?.length)
|
|
383
|
-
|
|
384
|
-
const m = /^(.+?)(?:@v?(\d+))?$/.exec(String(s));
|
|
385
|
-
return m[2] ? { skill: m[1], release: Number(m[2]) } : { skill: m[1] };
|
|
386
|
-
});
|
|
383
|
+
process.stderr.write("pilotctl: --skill is ignored — a factory skill runs on every agent it is shared with (set that in the Skills panel)\n");
|
|
387
384
|
// "none" is the escape hatch: spawn something deliberately unlinked.
|
|
388
385
|
if (flags.parent === "none") startMsg.parent = null;
|
|
389
386
|
else if (flags.parent) startMsg.parent = flags.parent;
|
package/dist/channels.d.ts
CHANGED
|
@@ -76,9 +76,10 @@ export interface Channel {
|
|
|
76
76
|
/** The `claude` binary version at that real spawn, to flag an agent still on
|
|
77
77
|
* an older binary than the one now installed. Null when it couldn't be read. */
|
|
78
78
|
spawnClaudeVer?: string | null;
|
|
79
|
-
/**
|
|
80
|
-
*
|
|
81
|
-
* it
|
|
79
|
+
/** LEGACY, no longer read: the per-agent factory attachments of before
|
|
80
|
+
* skills ran by sharing (`availableAttachments`, src/factory.ts). Nothing
|
|
81
|
+
* writes it any more; kept in the type so old rows still parse, and still
|
|
82
|
+
* server-owned so a browser PUT cannot reintroduce it. */
|
|
82
83
|
skills?: {
|
|
83
84
|
skill: string;
|
|
84
85
|
release: number;
|
package/dist/channels.js
CHANGED
|
@@ -262,9 +262,8 @@ canSee = () => true) {
|
|
|
262
262
|
for (const k of SERVER_OWNED)
|
|
263
263
|
if (prev[k] !== undefined)
|
|
264
264
|
merged[k] = prev[k];
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
// them (above) nor introduce them on an agent that has none.
|
|
265
|
+
// Legacy factory attachments (no longer read, see `Channel.skills`): a
|
|
266
|
+
// browser PUT can neither change them (above) nor introduce them.
|
|
268
267
|
if (prev.skills === undefined)
|
|
269
268
|
delete merged.skills;
|
|
270
269
|
if (prev.createdBy === undefined)
|
package/dist/channels.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAA2B,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AA2F7B;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClC,CAAC;AAED;;;;;;8DAM8D;AAC9D,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,CAAU,CAAC;AAE7M;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,CAAqC;IACjE,IAAI,CAAC,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAmB,EAAE,SAAiB;IACvE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM,CAChE,CAAC;IACF,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAmB;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;IACrD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAY;IAC3C,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AACD;8EAC8E;AAC9E,MAAM,UAAU,sBAAsB,CAAC,IAAe;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,MAAM,CAAC,GAAI,CAAS,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACrE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AACD,MAAM,UAAU,YAAY;IAC1B,+EAA+E;IAC/E,8EAA8E;IAC9E,0EAA0E;IAC1E,OAAO,gBAAgB,CACrB,sBAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAC3G,OAAO,CAAC,GAAG,EAAE,CACd,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,SAAoC;IACzF,OAAO,CAAC,SAAS,IAAI,SAAS,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB,EAAE,iBAA0B;IAC7E,OAAO,OAAO,IAAI,IAAI,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAe,EAAE,SAAiB;IACjE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;;;GAKG;AACH,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAAC,IAAe,EAAE,KAA+C;IACzF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,SAAS;gBAAG,GAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA+C;IAC3E,YAAY,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,YAAY,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,mBAAmB,CAAC,IAAe,EAAE,MAAc,EAAE,QAAiB;IACpF,OAAO,IAAI,CAAC,IAAI,CACd,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,QAAQ,CACrG,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,QAAiB;IAClE,OAAO,mBAAmB,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAiB,EACjB,UAAqB,EACrB,OAAoB;AACpB;;;;;;;;GAQG;AACH,MAAM,GAA4B,GAAG,EAAE,CAAC,IAAI;IAE5C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5D,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;YAAE,SAAS;QACpD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAAE,SAAS,CAAC,uDAAuD;QAC5F,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,6CAA6C;QAClF,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,uEAAuE;YACvE,yEAAyE;YACzE,0EAA0E;YAC1E,yEAAyE;YACzE,wEAAwE;YACxE,uEAAuE;YACvE,2EAA2E;YAC3E,iEAAiE;YACjE,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,KAAK,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAY,EAAE,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,YAAY;YAAE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAG,MAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtF,uEAAuE;QACvE,kEAAkE;QAClE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC;QACpD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,SAAS,CAAC;QAC1D,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAAE,SAAS;QACpC,kEAAkE;QAClE,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,6EAA6E;IAC7E,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,6EAA6E;IAC7E,sDAAsD;IACtD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI;YAAE,SAAS;QACzD,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;aACzC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAqB,EACrB,OAAoB,EACpB,MAAgC;IAEhC,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1E,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAY,EAAE,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,SAAS;QAC1C,MAAM,GAAG,GAAG,CAAwB,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACtH,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,MAAM,GAAW,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClI,MAAM,CAAC,GAAU;YACf,GAAG,GAAG;YACN,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAClD,MAAM;YACN,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;YACpG,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YAC1D,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,gDAAgD;SACnH,CAAC;QACF,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5H,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,UAAU;IACxB,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7C,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,OAAsB;IAChD,SAAS,CAAC,gBAAgB,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AACzE,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,GAAW,EAAE,EAAW;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,cAAc,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,EAAW;IACjD,SAAS,CAAC,gBAAgB,EAAE,WAAW,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC/C,SAAS,CAAC,gBAAgB,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC1F,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,GAAa;IAC3C,SAAS,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC1E,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,SAAS,CAAC,iBAAiB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IACzB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAChC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,oCAAoC;IAC9C,CAAC;IACD,IAAI,QAAe,CAAC;IACpB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzE,aAAa,CAAC;oBACZ,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;iBACpG,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC;AAwBD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAA4B,EAC5B,SAAiB,EACjB,WAAmB;IAEnB,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,WAAW;QACnC,OAAO,EAAE,EAAE,EAAE,OAAO,IAAI,IAAI;QAC5B,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,IAAI;QAC1B,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI;QACtB,KAAK,EAAE,EAAE,EAAE,KAAK,IAAI,IAAI;QACxB,KAAK,EAAE,CAAC,CAAC,EAAE;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,QAA4B,EAC5B,SAAiB,EACjB,IAAsD,EACtD,WAAmB;IAEnB,MAAM,CAAC,GAAG,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,CAAC;IACrF,OAAO;QACL,GAAG,CAAC;QACJ,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI;QAC/C,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,iEAAiE,CAAC;AAM1F;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,KAAe,EAAE,KAAa;IAC5D,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACzD,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC5E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACpF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,CAAC"}
|
package/dist/factory-routes.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Express, type Request, type Response } from "express";
|
|
2
2
|
import type { Channel } from "./channels.js";
|
|
3
|
+
import { type Attachment } from "./factory.js";
|
|
3
4
|
import { SKILLSMITH_PROFILE_NAME } from "./profiles.js";
|
|
4
5
|
export { SKILLSMITH_PROFILE_NAME };
|
|
5
6
|
export interface FactoryDeps {
|
|
@@ -18,7 +19,7 @@ export interface FactoryDeps {
|
|
|
18
19
|
* vault for everyone made the scan an oracle on secrets of other groups.
|
|
19
20
|
*/
|
|
20
21
|
vault(req: Request): Record<string, string>;
|
|
21
|
-
/** May this request drive (and so
|
|
22
|
+
/** May this request drive (and so list) that agent? Mono-tenant: yes. */
|
|
22
23
|
mayDrive(req: Request, sessionId: string): boolean;
|
|
23
24
|
/** The group an agent's acceptances are keyed by (mono-tenant: always `main`). */
|
|
24
25
|
agentGroup(sessionId: string): string;
|
|
@@ -29,11 +30,12 @@ export interface FactoryDeps {
|
|
|
29
30
|
/** A cockpit group id (or null) → the group acceptances are keyed by. */
|
|
30
31
|
tenantGroup(groupId: string | null): string;
|
|
31
32
|
loadChannels(): Channel[];
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
/** The factory skills an agent runs, derived from sharing + acceptance (`availableAttachments`). */
|
|
34
|
+
skillsOf(sessionId: string): Attachment[];
|
|
35
|
+
/** The releases an agent's CURRENT process was spawned with (`name` → release N). */
|
|
36
|
+
runningSkills(sessionId: string): Record<string, number>;
|
|
37
|
+
/** Re-evaluate every live agent's reload indicator after what they would run changed. */
|
|
38
|
+
onSkillsChanged(): void;
|
|
37
39
|
/** Remove release directories nothing references any more (see `prunePlugins`). */
|
|
38
40
|
prune(): void;
|
|
39
41
|
/** Reload an agent now if it is idle; otherwise it is only marked stale. */
|
|
@@ -56,11 +58,6 @@ export interface FactoryDeps {
|
|
|
56
58
|
user: string | null;
|
|
57
59
|
group: string | null;
|
|
58
60
|
};
|
|
59
|
-
/** An agent's schedules, for "where it runs" (label + prompt). */
|
|
60
|
-
cronsOf(sessionId: string): {
|
|
61
|
-
label: string;
|
|
62
|
-
prompt: string;
|
|
63
|
-
}[];
|
|
64
61
|
audit(row: Record<string, unknown>): void;
|
|
65
62
|
}
|
|
66
63
|
export declare function mountFactory(app: Express, deps: FactoryDeps): void;
|
package/dist/factory-routes.js
CHANGED
|
@@ -6,20 +6,25 @@
|
|
|
6
6
|
* - READ (list, tree, file, log, diff, bundle, scan): anyone past the password
|
|
7
7
|
* gate, an agent included (by its session key).
|
|
8
8
|
* - WRITE by a person: same-origin browser only (create, save, release, accept,
|
|
9
|
-
*
|
|
9
|
+
* duplicate, adopt). Release is open to every editor — it is
|
|
10
10
|
* not the gate, acceptance is; deleting a `Main` skill stays an admin act.
|
|
11
11
|
* - FEEDBACK: any agent (session key) or person — the agents that USE a skill
|
|
12
12
|
* are the ones that find what is wrong with it.
|
|
13
13
|
* - PUSH by an agent: its session key, and its channel's profile must be the
|
|
14
14
|
* managed `Shadok-Skillsmith`. Not every agent of the group: on a
|
|
15
15
|
* single-tenant instance that would be every agent on the machine.
|
|
16
|
+
* - WHO RUNS IT: nobody gives a skill to an agent. Every agent its sharing
|
|
17
|
+
* covers runs its latest release accepted for that agent's group
|
|
18
|
+
* (`availableAttachments`), with only the secrets that acceptance approved —
|
|
19
|
+
* so there is no attach route, and no schedule is made from here (a schedule
|
|
20
|
+
* is the agent's own business).
|
|
16
21
|
* See docs/superpowers/specs/2026-10-29-skill-factory-design.md.
|
|
17
22
|
*/
|
|
18
23
|
import fs from "node:fs";
|
|
19
24
|
import path from "node:path";
|
|
20
25
|
import express from "express";
|
|
21
26
|
import os from "node:os";
|
|
22
|
-
import { accept, acceptanceFor,
|
|
27
|
+
import { accept, acceptanceFor, approvalFrom, pushVerdict, addFeedback, adoptable, adoptSkill, closeFeedback, duplicateSkill, bundleOf, createSkill, cutRelease, deleteSkill, diff, FactoryError, factoryRoot, findSkill, headCommit, listTree, loadRegistry, log, MAIN_GROUP, prepareWorkspace, readFile, scopeError, groupsScope, runStats, updateMeta, cleanTags, scopeVisibleTo, slugify, receivePush, saveFile, scanMain, unreleased, } from "./factory.js";
|
|
23
28
|
import { parseManifest } from "./factory-scan.js";
|
|
24
29
|
import { SKILLSMITH_PROFILE_NAME } from "./profiles.js";
|
|
25
30
|
export { SKILLSMITH_PROFILE_NAME };
|
|
@@ -47,10 +52,12 @@ export function mountFactory(app, deps) {
|
|
|
47
52
|
unreleased: unreleased(s, head),
|
|
48
53
|
bindings: required.map((name) => ({ name, bound: vaultNames.has(name) })),
|
|
49
54
|
latestAccepted: latestAccepted(s, group)?.n ?? null,
|
|
55
|
+
// The agents that HAVE it — derived from its sharing and their group's
|
|
56
|
+
// acceptance, never a list someone keeps (the field name is historical).
|
|
50
57
|
attachedTo: channels
|
|
51
|
-
.
|
|
52
|
-
.
|
|
53
|
-
|
|
58
|
+
.map((c) => ({ c, release: deps.skillsOf(c.sessionId).find((a) => a.skill === s.id)?.release }))
|
|
59
|
+
.filter((x) => x.release != null)
|
|
60
|
+
.map(({ c, release }) => {
|
|
54
61
|
const rel = s.releases.find((r) => r.n === release);
|
|
55
62
|
const mcpHave = new Set(deps.agentMcp(c.sessionId));
|
|
56
63
|
return {
|
|
@@ -58,12 +65,10 @@ export function mountFactory(app, deps) {
|
|
|
58
65
|
name: c.name ?? c.sessionId.slice(0, 8),
|
|
59
66
|
group: c.group ?? null,
|
|
60
67
|
runs: stats.byAgent[s.name]?.[c.sessionId] ?? 0,
|
|
61
|
-
crons: deps.cronsOf(c.sessionId),
|
|
62
68
|
release,
|
|
63
69
|
// What THIS agent gets: each granted secret, present in the vault or not.
|
|
64
70
|
secrets: (rel?.secrets ?? []).map((n) => ({ name: n, bound: vaultNames.has(n), detected: !!rel?.detectedSecrets?.includes(n) })),
|
|
65
71
|
mcp: (rel?.mcp ?? []).map((n) => ({ name: n, present: mcpHave.has(n) })),
|
|
66
|
-
update: (latestAccepted(s, deps.agentGroup(c.sessionId))?.n ?? 0) > release ? latestAccepted(s, deps.agentGroup(c.sessionId)).n : null,
|
|
67
72
|
};
|
|
68
73
|
}),
|
|
69
74
|
feedback: (s.feedback ?? []).slice().reverse(),
|
|
@@ -127,14 +132,13 @@ export function mountFactory(app, deps) {
|
|
|
127
132
|
* its group and creator). A "just me" skill is invisible to everyone else: it
|
|
128
133
|
* answers 404, never 403, so its existence does not leak either.
|
|
129
134
|
*/
|
|
130
|
-
const ctxOf = (c) => ({ group: c?.group ?? null, createdBy: c?.createdBy ?? null });
|
|
131
135
|
const canSee = (req, s) => {
|
|
132
136
|
const agent = deps.callerOf(req);
|
|
133
137
|
if (agent.id) {
|
|
134
138
|
const ch = deps.loadChannels().find((c) => c.sessionId === agent.id);
|
|
135
|
-
// An agent sees what its creator sees
|
|
136
|
-
//
|
|
137
|
-
return scopeVisibleTo(s.owner, ch?.createdBy ?? null)
|
|
139
|
+
// An agent sees what its creator sees (a private skill runs only on its
|
|
140
|
+
// owner's agents, so nothing it runs is hidden from it).
|
|
141
|
+
return scopeVisibleTo(s.owner, ch?.createdBy ?? null);
|
|
138
142
|
}
|
|
139
143
|
return scopeVisibleTo(s.owner, deps.personName(req));
|
|
140
144
|
};
|
|
@@ -182,7 +186,7 @@ export function mountFactory(app, deps) {
|
|
|
182
186
|
agents: channels.map((c) => ({
|
|
183
187
|
sessionId: c.sessionId,
|
|
184
188
|
name: c.name ?? c.sessionId.slice(0, 8),
|
|
185
|
-
skills: c.
|
|
189
|
+
skills: deps.skillsOf(c.sessionId),
|
|
186
190
|
mcp: deps.agentMcp(c.sessionId),
|
|
187
191
|
group: c.group ?? null,
|
|
188
192
|
createdBy: c.createdBy ?? null,
|
|
@@ -248,6 +252,9 @@ export function mountFactory(app, deps) {
|
|
|
248
252
|
patch.description = String(b.description);
|
|
249
253
|
const out = updateMeta(root(), s.id, patch);
|
|
250
254
|
deps.audit({ action: "meta", skill: s.name, ...patch, by: by(req) });
|
|
255
|
+
// Sharing and archiving decide who runs it: their reload indicators move.
|
|
256
|
+
if (patch.owner !== undefined || patch.archived !== undefined)
|
|
257
|
+
deps.onSkillsChanged();
|
|
251
258
|
res.json({ skill: out });
|
|
252
259
|
}
|
|
253
260
|
catch (e) {
|
|
@@ -265,16 +272,8 @@ export function mountFactory(app, deps) {
|
|
|
265
272
|
// Yours: you delete it. Shared (a group's, the organisation's): an admin.
|
|
266
273
|
if (!s.owner.startsWith("user:") && !deps.requireAdmin(req, res, "delete a shared factory skill"))
|
|
267
274
|
return;
|
|
268
|
-
const attached = deps.loadChannels().filter((c) => c.skills?.some((a) => a.skill === s.id));
|
|
269
|
-
if (attached.length && req.query.force !== "1")
|
|
270
|
-
return res.status(409).json({
|
|
271
|
-
error: `attached to ${attached.map((c) => c.name ?? c.sessionId.slice(0, 8)).join(", ")} — detach first or force`,
|
|
272
|
-
});
|
|
273
|
-
for (const c of attached) {
|
|
274
|
-
deps.upsertChannel({ sessionId: c.sessionId, skills: c.skills.filter((a) => a.skill !== s.id) });
|
|
275
|
-
deps.onAttachmentsChanged(c.sessionId);
|
|
276
|
-
}
|
|
277
275
|
deleteSkill(root(), s.id);
|
|
276
|
+
deps.onSkillsChanged();
|
|
278
277
|
deps.audit({ action: "delete", skill: s.name, by: by(req) });
|
|
279
278
|
res.json({ ok: true });
|
|
280
279
|
});
|
|
@@ -416,7 +415,7 @@ export function mountFactory(app, deps) {
|
|
|
416
415
|
fail(res, e);
|
|
417
416
|
}
|
|
418
417
|
});
|
|
419
|
-
// ── Release, accept
|
|
418
|
+
// ── Release, accept — a person's clicks ───────────────────────────────────
|
|
420
419
|
app.post("/factory/skills/:id/release", (req, res) => {
|
|
421
420
|
// Any editor releases (revised 2026-10-31): a release runs nowhere until a
|
|
422
421
|
// person of the running group accepts it, so gating it on admin only blocked
|
|
@@ -446,6 +445,7 @@ export function mountFactory(app, deps) {
|
|
|
446
445
|
if (group && approved) {
|
|
447
446
|
accept(root(), s.id, { group, release: rel.n, by: by(req), secrets: approved });
|
|
448
447
|
deps.audit({ action: "accept", skill: s.name, release: rel.n, tree: rel.tree, group, secrets: approved, by: by(req) });
|
|
448
|
+
deps.onSkillsChanged();
|
|
449
449
|
}
|
|
450
450
|
res.json({ release: rel });
|
|
451
451
|
}
|
|
@@ -471,52 +471,22 @@ export function mountFactory(app, deps) {
|
|
|
471
471
|
try {
|
|
472
472
|
const a = accept(root(), s.id, { group, release: rel.n, by: by(req), secrets: approved });
|
|
473
473
|
deps.audit({ action: "accept", skill: s.name, release: a.release, tree: a.tree, group: a.group, secrets: approved, by: by(req) });
|
|
474
|
+
deps.onSkillsChanged();
|
|
474
475
|
res.json({ acceptance: a });
|
|
475
476
|
}
|
|
476
477
|
catch (e) {
|
|
477
478
|
fail(res, e);
|
|
478
479
|
}
|
|
479
480
|
});
|
|
480
|
-
/**
|
|
481
|
-
* Move every agent running an older release of this skill to release N (it
|
|
482
|
-
* must be accepted), and reload the idle ones now — an explicit click, so an
|
|
483
|
-
* explicit respawn. Busy agents are only marked stale: their own reload applies it.
|
|
484
|
-
*/
|
|
485
|
-
app.post("/factory/skills/:id/update", (req, res) => {
|
|
486
|
-
if (!browser(req, res))
|
|
487
|
-
return;
|
|
488
|
-
const s = skillOr404(req, res);
|
|
489
|
-
if (!s)
|
|
490
|
-
return;
|
|
491
|
-
const rel = s.releases.find((r) => r.n === Number(req.body?.release));
|
|
492
|
-
if (!rel)
|
|
493
|
-
return res.status(404).json({ error: "no such release" });
|
|
494
|
-
if (!acceptedAnywhere(s, rel))
|
|
495
|
-
return res.status(409).json({ error: `v${rel.n} has not been accepted yet` });
|
|
496
|
-
const out = [];
|
|
497
|
-
// Only agents this person may drive, and only where v<N> is accepted for
|
|
498
|
-
// THEIR group: another group's agent is that group's people's decision.
|
|
499
|
-
for (const c of deps.loadChannels()) {
|
|
500
|
-
const cur = c.skills?.find((a) => a.skill === s.id);
|
|
501
|
-
if (!cur || cur.release >= rel.n)
|
|
502
|
-
continue;
|
|
503
|
-
if (!deps.mayDrive(req, c.sessionId) || !acceptanceFor(s, rel, deps.agentGroup(c.sessionId)))
|
|
504
|
-
continue;
|
|
505
|
-
deps.upsertChannel({ sessionId: c.sessionId, skills: c.skills.map((a) => (a.skill === s.id ? { ...a, release: rel.n } : a)) });
|
|
506
|
-
deps.onAttachmentsChanged(c.sessionId);
|
|
507
|
-
out.push({ name: c.name ?? c.sessionId.slice(0, 8), result: deps.reloadIfIdle(c.sessionId) });
|
|
508
|
-
}
|
|
509
|
-
deps.prune();
|
|
510
|
-
deps.audit({ action: "update", skill: s.name, release: rel.n, agents: out.length, by: by(req) });
|
|
511
|
-
res.json({ updated: out });
|
|
512
|
-
});
|
|
513
481
|
/**
|
|
514
482
|
* "Save" in the editor: what is saved is what agents run. One click cuts a
|
|
515
483
|
* release of the current content (or reuses the last one when nothing changed
|
|
516
484
|
* since), accepts it — the person saving is a person of the running group —
|
|
517
|
-
* and
|
|
518
|
-
*
|
|
519
|
-
*
|
|
485
|
+
* and every agent that has the skill runs it from its next spawn (it is
|
|
486
|
+
* derived, `availableAttachments`). The idle ones already RUNNING an older
|
|
487
|
+
* release are reloaded now; the others only see their reload indicator.
|
|
488
|
+
* Versions and approval stay underneath (the plugin dir is content-addressed),
|
|
489
|
+
* they are just no longer a step people take.
|
|
520
490
|
*/
|
|
521
491
|
app.post("/factory/skills/:id/publish", (req, res) => {
|
|
522
492
|
if (!browser(req, res))
|
|
@@ -546,17 +516,18 @@ export function mountFactory(app, deps) {
|
|
|
546
516
|
}
|
|
547
517
|
const updated = [];
|
|
548
518
|
for (const c of deps.loadChannels()) {
|
|
549
|
-
const
|
|
550
|
-
if (
|
|
519
|
+
const running = deps.runningSkills(c.sessionId)[s.name];
|
|
520
|
+
if (running == null || running === rel.n)
|
|
551
521
|
continue;
|
|
552
|
-
// Never
|
|
553
|
-
//
|
|
554
|
-
if (!deps.mayDrive(req, c.sessionId)
|
|
522
|
+
// Never reload an agent this person may not drive, nor one that would
|
|
523
|
+
// not get this release (another group's acceptance, or not shared).
|
|
524
|
+
if (!deps.mayDrive(req, c.sessionId))
|
|
525
|
+
continue;
|
|
526
|
+
if (deps.skillsOf(c.sessionId).find((a) => a.skill === s.id)?.release !== rel.n)
|
|
555
527
|
continue;
|
|
556
|
-
deps.upsertChannel({ sessionId: c.sessionId, skills: c.skills.map((a) => (a.skill === s.id ? { ...a, release: rel.n } : a)) });
|
|
557
|
-
deps.onAttachmentsChanged(c.sessionId);
|
|
558
528
|
updated.push({ name: c.name ?? c.sessionId.slice(0, 8), result: deps.reloadIfIdle(c.sessionId) });
|
|
559
529
|
}
|
|
530
|
+
deps.onSkillsChanged();
|
|
560
531
|
deps.prune();
|
|
561
532
|
res.json({ release: rel, updated });
|
|
562
533
|
}
|
|
@@ -575,7 +546,7 @@ export function mountFactory(app, deps) {
|
|
|
575
546
|
try {
|
|
576
547
|
// The release the reporting agent runs, when it runs this skill at all.
|
|
577
548
|
const running = agent.id
|
|
578
|
-
? deps.
|
|
549
|
+
? deps.skillsOf(agent.id).find((a) => a.skill === s.id)?.release
|
|
579
550
|
: undefined;
|
|
580
551
|
const f = addFeedback(root(), s.id, { by: by(req), text: String(req.body?.text ?? ""), release: running });
|
|
581
552
|
deps.audit({ action: "feedback", skill: s.name, id: f.id, by: by(req) });
|
|
@@ -644,61 +615,6 @@ export function mountFactory(app, deps) {
|
|
|
644
615
|
fail(res, e);
|
|
645
616
|
}
|
|
646
617
|
});
|
|
647
|
-
/**
|
|
648
|
-
* Attach (release N) or detach (release null) a skill on an agent. Never
|
|
649
|
-
* respawns: it marks the agent stale and the person reloads it — killing a
|
|
650
|
-
* working agent because someone clicked in another panel is what the reload
|
|
651
|
-
* indicator exists to avoid.
|
|
652
|
-
*/
|
|
653
|
-
app.post("/factory/attach", (req, res) => {
|
|
654
|
-
if (!browser(req, res))
|
|
655
|
-
return;
|
|
656
|
-
const sessionId = String(req.body?.sessionId ?? "");
|
|
657
|
-
const ch = deps.loadChannels().find((c) => c.sessionId === sessionId);
|
|
658
|
-
// An agent this person may not drive does not exist for them (404, not 403:
|
|
659
|
-
// its id is no confirmation of anything).
|
|
660
|
-
if (!ch || !deps.mayDrive(req, sessionId))
|
|
661
|
-
return res.status(404).json({ error: "no such agent" });
|
|
662
|
-
const s = findSkill(root(), String(req.body?.skill ?? ""));
|
|
663
|
-
if (!s || !canSee(req, s))
|
|
664
|
-
return res.status(404).json({ error: "no such skill" });
|
|
665
|
-
const release = req.body?.release === null ? null : Number(req.body?.release);
|
|
666
|
-
if (release !== null && s.archived)
|
|
667
|
-
return res.status(409).json({ error: "this skill is archived: unarchive it first" });
|
|
668
|
-
const rest = (ch.skills ?? []).filter((a) => a.skill !== s.id);
|
|
669
|
-
const group = deps.agentGroup(sessionId);
|
|
670
|
-
if (release !== null) {
|
|
671
|
-
const rel = s.releases.find((r) => r.n === release);
|
|
672
|
-
if (!rel)
|
|
673
|
-
return res.status(404).json({ error: `no release v${release}` });
|
|
674
|
-
if (!acceptedAnywhere(s, rel))
|
|
675
|
-
return res.status(409).json({ error: `v${rel.n} has not been accepted yet — review and accept it first` });
|
|
676
|
-
// Accepted for ANOTHER group: this person may drive the target, so they
|
|
677
|
-
// are a person of its group, and attaching is their acceptance — with
|
|
678
|
-
// the secrets approved by name, like any acceptance.
|
|
679
|
-
if (!acceptanceFor(s, rel, group)) {
|
|
680
|
-
const approved = approval(rel, req.body?.approveSecrets, res);
|
|
681
|
-
if (!approved)
|
|
682
|
-
return;
|
|
683
|
-
try {
|
|
684
|
-
accept(root(), s.id, { group, release: rel.n, by: by(req), secrets: approved });
|
|
685
|
-
}
|
|
686
|
-
catch (e) {
|
|
687
|
-
return fail(res, e);
|
|
688
|
-
}
|
|
689
|
-
deps.audit({ action: "accept", skill: s.name, release: rel.n, tree: rel.tree, group, secrets: approved, by: by(req) });
|
|
690
|
-
}
|
|
691
|
-
rest.push({ skill: s.id, release: rel.n });
|
|
692
|
-
}
|
|
693
|
-
deps.upsertChannel({ sessionId, skills: rest });
|
|
694
|
-
deps.onAttachmentsChanged(sessionId);
|
|
695
|
-
// `reload: true` — the person asked for it in the same click ("Run on a
|
|
696
|
-
// schedule…" on an existing agent): reload now if idle, else mark stale.
|
|
697
|
-
const reload = req.body?.reload === true ? deps.reloadIfIdle(sessionId) : undefined;
|
|
698
|
-
deps.prune();
|
|
699
|
-
deps.audit({ action: release === null ? "detach" : "attach", skill: s.name, release, agent: sessionId, by: by(req) });
|
|
700
|
-
res.json({ ok: true, skills: rest, ...(reload ? { reload } : {}), note: "applies when the agent is reloaded" });
|
|
701
|
-
});
|
|
702
618
|
}
|
|
703
619
|
/** Append-only audit, beside the store (names and ids only, never a value). */
|
|
704
620
|
export function factoryAudit(row) {
|