@clossys/launcher 0.1.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +87 -0
- package/README.md +231 -19
- package/contracts/conversation-contract.md +40 -0
- package/dist/apply-plan-cli.d.ts +7 -0
- package/dist/apply-plan-cli.d.ts.map +1 -0
- package/dist/apply-plan-cli.js +96 -0
- package/dist/apply-plan-cli.js.map +1 -0
- package/dist/apply-plan.d.ts +79 -0
- package/dist/apply-plan.d.ts.map +1 -0
- package/dist/apply-plan.js +129 -0
- package/dist/apply-plan.js.map +1 -0
- package/dist/check-cli.d.ts.map +1 -1
- package/dist/check-cli.js +7 -0
- package/dist/check-cli.js.map +1 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +43 -14
- package/dist/cli.js.map +1 -1
- package/dist/contract.d.ts +28 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +78 -0
- package/dist/contract.js.map +1 -0
- package/dist/core.d.ts +50 -8
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +458 -40
- package/dist/core.js.map +1 -1
- package/dist/doctor-cli.d.ts +4 -0
- package/dist/doctor-cli.d.ts.map +1 -0
- package/dist/doctor-cli.js +32 -0
- package/dist/doctor-cli.js.map +1 -0
- package/dist/doctor.d.ts +28 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +68 -0
- package/dist/doctor.js.map +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +19 -1
- package/dist/host.js.map +1 -1
- package/dist/hosts.d.ts +14 -0
- package/dist/hosts.d.ts.map +1 -0
- package/dist/hosts.js +61 -0
- package/dist/hosts.js.map +1 -0
- package/dist/index.d.ts +15 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/inventory-adoption.d.ts +20 -0
- package/dist/inventory-adoption.d.ts.map +1 -0
- package/dist/inventory-adoption.js +67 -0
- package/dist/inventory-adoption.js.map +1 -0
- package/dist/manifest.d.ts +20 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +106 -0
- package/dist/manifest.js.map +1 -0
- package/dist/model-profile.d.ts +46 -0
- package/dist/model-profile.d.ts.map +1 -0
- package/dist/model-profile.js +98 -0
- package/dist/model-profile.js.map +1 -0
- package/dist/product-repository.d.ts +26 -0
- package/dist/product-repository.d.ts.map +1 -0
- package/dist/product-repository.js +49 -0
- package/dist/product-repository.js.map +1 -0
- package/dist/skills.d.ts +39 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +197 -0
- package/dist/skills.js.map +1 -0
- package/dist/types.d.ts +78 -1
- package/dist/types.d.ts.map +1 -1
- package/model-profiles/claude-code.json +10 -0
- package/model-profiles/codex.json +10 -0
- package/model-profiles/cursor.json +10 -0
- package/package.json +11 -5
- package/skeleton/README.md +15 -20
- package/skeleton/package.json +1 -1
- package/skill/SKILL.md +53 -0
- package/skill-catalogue/advisor/SKILL.md +52 -0
- package/skill-catalogue/architect/SKILL.md +42 -0
- package/skill-catalogue/bouncer/SKILL.md +43 -0
- package/skill-catalogue/builder/SKILL.md +42 -0
- package/skill-catalogue/butler/SKILL.md +43 -0
- package/skill-catalogue/controller/SKILL.md +50 -0
- package/skill-catalogue/customer/SKILL.md +92 -0
- package/skill-catalogue/designer/SKILL.md +66 -0
- package/skill-catalogue/giver/SKILL.md +43 -0
- package/skill-catalogue/influencer/SKILL.md +43 -0
- package/skill-catalogue/inspector/SKILL.md +42 -0
- package/skill-catalogue/integrator/SKILL.md +42 -0
- package/skill-catalogue/keeper/SKILL.md +43 -0
- package/skill-catalogue/launcher/SKILL.md +53 -0
- package/skill-catalogue/locksmith/SKILL.md +42 -0
- package/skill-catalogue/messenger/SKILL.md +43 -0
- package/skill-catalogue/observer/SKILL.md +42 -0
- package/skill-catalogue/publisher/SKILL.md +64 -0
- package/skill-catalogue/starter/SKILL.md +48 -0
- package/skill-catalogue/strategist/SKILL.md +85 -0
- package/skill-catalogue/writer/SKILL.md +56 -0
- package/src/apply-plan-cli.ts +94 -0
- package/src/apply-plan.ts +172 -0
- package/src/check-cli.ts +7 -0
- package/src/cli.ts +51 -13
- package/src/contract.ts +81 -0
- package/src/core.ts +555 -38
- package/src/doctor-cli.ts +33 -0
- package/src/doctor.ts +145 -0
- package/src/host.ts +17 -1
- package/src/hosts.ts +79 -0
- package/src/index.ts +36 -0
- package/src/inventory-adoption.ts +85 -0
- package/src/manifest.ts +103 -0
- package/src/model-profile.ts +148 -0
- package/src/product-repository.ts +73 -0
- package/src/skills.ts +225 -0
- package/src/types.ts +74 -1
- /package/skeleton/{.clossys → clossys/.state}/inventory.json +0 -0
- /package/skeleton/{.clossys → clossys/.state}/workspace.json +0 -0
package/dist/skills.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { dirname, join, resolve, sep } from "node:path";
|
|
2
|
+
import { extractContractBlock, injectContract } from "./contract.js";
|
|
3
|
+
import { parseSkillManifest, readInstalledVersion, serializeSkillManifest, sha256Hex } from "./manifest.js";
|
|
4
|
+
export const DISCOVERY_PREFIXES = [".cursor/skills", ".claude/skills"];
|
|
5
|
+
const AGENTS_SKILLS_REL = join(".agents", "skills");
|
|
6
|
+
export const SKILLS_MANIFEST_REL = join("clossys", ".state", "skills.json");
|
|
7
|
+
function containedPath(root, relativePath) {
|
|
8
|
+
const resolved = resolve(root, relativePath);
|
|
9
|
+
const prefix = root.endsWith(sep) ? root : `${root}${sep}`;
|
|
10
|
+
if (resolved !== root && !resolved.startsWith(prefix)) {
|
|
11
|
+
throw new Error(`refusing to write outside the workspace directory: ${relativePath}`);
|
|
12
|
+
}
|
|
13
|
+
return resolved;
|
|
14
|
+
}
|
|
15
|
+
function skillSourceCandidates(packageDir, options) {
|
|
16
|
+
const paths = [];
|
|
17
|
+
if (options.skillCatalogueRoot) {
|
|
18
|
+
paths.push(join(options.skillCatalogueRoot, packageDir, "SKILL.md"));
|
|
19
|
+
}
|
|
20
|
+
paths.push(join(options.launcherPackageRoot, "skill-catalogue", packageDir, "SKILL.md"));
|
|
21
|
+
paths.push(join(options.launcherPackageRoot, "..", packageDir, "skill", "SKILL.md"));
|
|
22
|
+
return paths;
|
|
23
|
+
}
|
|
24
|
+
function installedSkillPath(composeTargetDirectory, packageDir) {
|
|
25
|
+
return join(composeTargetDirectory, "node_modules", "@clossys", packageDir, "skill", "SKILL.md");
|
|
26
|
+
}
|
|
27
|
+
function readSkillBody(host, packageDir, options, composeTargetDirectory) {
|
|
28
|
+
const installed = host.readText(installedSkillPath(composeTargetDirectory, packageDir));
|
|
29
|
+
if (installed !== null)
|
|
30
|
+
return { body: installed, source: "installed" };
|
|
31
|
+
for (const path of skillSourceCandidates(packageDir, options)) {
|
|
32
|
+
const body = host.readText(path);
|
|
33
|
+
if (body !== null)
|
|
34
|
+
return { body, source: "catalogue" };
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function contractSourceCandidates(options) {
|
|
39
|
+
const paths = [];
|
|
40
|
+
if (options.contractPath)
|
|
41
|
+
paths.push(options.contractPath);
|
|
42
|
+
paths.push(join(options.launcherPackageRoot, "contracts", "conversation-contract.md"));
|
|
43
|
+
// Monorepo fallback so tests and dev runs work without a prior `npm run build` pack step.
|
|
44
|
+
paths.push(join(options.launcherPackageRoot, "..", "..", "docs", "contracts", "conversation-contract.md"));
|
|
45
|
+
return paths;
|
|
46
|
+
}
|
|
47
|
+
/** Reads and extracts the shared conversation contract block. Returns null when no source resolves. */
|
|
48
|
+
function readContractBlock(host, options) {
|
|
49
|
+
for (const path of contractSourceCandidates(options)) {
|
|
50
|
+
const raw = host.readText(path);
|
|
51
|
+
if (raw === null)
|
|
52
|
+
continue;
|
|
53
|
+
try {
|
|
54
|
+
return extractContractBlock(raw);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
function readLauncherVersion(host, options) {
|
|
63
|
+
const raw = host.readText(join(options.launcherPackageRoot, "package.json"));
|
|
64
|
+
if (raw === null)
|
|
65
|
+
return undefined;
|
|
66
|
+
try {
|
|
67
|
+
const parsed = JSON.parse(raw);
|
|
68
|
+
if (typeof parsed === "object" && parsed !== null && "version" in parsed) {
|
|
69
|
+
const version = parsed.version;
|
|
70
|
+
if (typeof version === "string" && version.trim() !== "")
|
|
71
|
+
return version;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
/* unreadable manifest; no version */
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
/** Package directory names that have a resolvable skill source in the catalogue or monorepo. */
|
|
80
|
+
export function listSkillPackageCandidates(host, options) {
|
|
81
|
+
const names = new Set();
|
|
82
|
+
const considerRoot = (root) => {
|
|
83
|
+
if (root === undefined || !host.isDirectory(root))
|
|
84
|
+
return;
|
|
85
|
+
for (const name of host.readDir(root)) {
|
|
86
|
+
if (name.startsWith("."))
|
|
87
|
+
continue;
|
|
88
|
+
const skillPath = join(root, name, "SKILL.md");
|
|
89
|
+
if (host.readText(skillPath) !== null)
|
|
90
|
+
names.add(name);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
considerRoot(options.skillCatalogueRoot);
|
|
94
|
+
considerRoot(join(options.launcherPackageRoot, "skill-catalogue"));
|
|
95
|
+
const packagesSibling = join(options.launcherPackageRoot, "..");
|
|
96
|
+
if (host.isDirectory(packagesSibling)) {
|
|
97
|
+
for (const name of host.readDir(packagesSibling)) {
|
|
98
|
+
if (name.startsWith("."))
|
|
99
|
+
continue;
|
|
100
|
+
const skillPath = join(packagesSibling, name, "skill", "SKILL.md");
|
|
101
|
+
if (host.readText(skillPath) !== null)
|
|
102
|
+
names.add(name);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return [...names].sort((a, b) => a.localeCompare(b));
|
|
106
|
+
}
|
|
107
|
+
function writeAgentsSkill(host, directory, packageDir, body) {
|
|
108
|
+
const relativeDir = join(AGENTS_SKILLS_REL, `clossys-${packageDir}`);
|
|
109
|
+
const skillRel = join(relativeDir, "SKILL.md");
|
|
110
|
+
const target = containedPath(directory, skillRel);
|
|
111
|
+
host.mkdirp(dirname(target));
|
|
112
|
+
host.writeText(target, body.endsWith("\n") ? body : `${body}\n`);
|
|
113
|
+
}
|
|
114
|
+
function writeDiscoveryLink(host, directory, packageDir, skillBody) {
|
|
115
|
+
const agentsDirRel = join(AGENTS_SKILLS_REL, `clossys-${packageDir}`);
|
|
116
|
+
const linkTarget = join("..", "..", agentsDirRel);
|
|
117
|
+
for (const prefix of DISCOVERY_PREFIXES) {
|
|
118
|
+
const prefixPath = containedPath(directory, prefix);
|
|
119
|
+
// A directory-symlink onto `.agents/skills` already exposes every composed
|
|
120
|
+
// skill. Writing a nested `.claude/skills/clossys-<pkg>` link follows that
|
|
121
|
+
// symlink and replaces the just-written SKILL.md with a circular link.
|
|
122
|
+
if (host.isSymlink(prefixPath))
|
|
123
|
+
continue;
|
|
124
|
+
const linkRel = join(prefix, `clossys-${packageDir}`);
|
|
125
|
+
const linkPath = containedPath(directory, linkRel);
|
|
126
|
+
host.mkdirp(dirname(linkPath));
|
|
127
|
+
try {
|
|
128
|
+
host.symlink(linkTarget, linkPath);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
const fallbackDir = containedPath(directory, join(linkRel, "SKILL.md"));
|
|
132
|
+
host.mkdirp(dirname(fallbackDir));
|
|
133
|
+
host.writeText(fallbackDir, skillBody.endsWith("\n") ? skillBody : `${skillBody}\n`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/** Removes a composed skill's `.agents/skills/` directory and its host discovery links. Missing paths are no-ops. */
|
|
138
|
+
function removeComposedSkill(host, directory, packageDir) {
|
|
139
|
+
host.remove(containedPath(directory, join(AGENTS_SKILLS_REL, `clossys-${packageDir}`)));
|
|
140
|
+
for (const prefix of DISCOVERY_PREFIXES) {
|
|
141
|
+
const prefixPath = containedPath(directory, prefix);
|
|
142
|
+
if (host.isSymlink(prefixPath))
|
|
143
|
+
continue; // shared view onto .agents/skills; already handled above
|
|
144
|
+
host.remove(containedPath(directory, join(prefix, `clossys-${packageDir}`)));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Writes `.agents/skills/clossys-<pkg>/SKILL.md` and host discovery links for every
|
|
149
|
+
* catalogue package, with the shared conversation contract (#1182) injected in place
|
|
150
|
+
* of each skill's own `## How we work together` / `## One question at a time`
|
|
151
|
+
* sections. Missing sources are skipped with notes; the hub apply continues.
|
|
152
|
+
*
|
|
153
|
+
* Also writes `clossys/.state/skills.json` (#1183): source, version, and content
|
|
154
|
+
* digest per composed skill. A skill named in this directory's *previous* manifest
|
|
155
|
+
* but not composed this run is retired — its composed output is pruned and it is
|
|
156
|
+
* dropped from the new manifest. Never touches a skill this directory's manifest
|
|
157
|
+
* did not itself write.
|
|
158
|
+
*/
|
|
159
|
+
export function composeSkills(host, directory, options) {
|
|
160
|
+
const composed = [];
|
|
161
|
+
const skipped = [];
|
|
162
|
+
const manifestEntries = [];
|
|
163
|
+
const contractBlock = readContractBlock(host, options);
|
|
164
|
+
const launcherVersion = readLauncherVersion(host, options);
|
|
165
|
+
for (const packageDir of listSkillPackageCandidates(host, options)) {
|
|
166
|
+
const found = readSkillBody(host, packageDir, options, directory);
|
|
167
|
+
if (found === null) {
|
|
168
|
+
skipped.push({ packageDir, note: "skill source missing at apply time" });
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
const body = contractBlock === null ? found.body : injectContract(found.body, contractBlock);
|
|
172
|
+
writeAgentsSkill(host, directory, packageDir, body);
|
|
173
|
+
writeDiscoveryLink(host, directory, packageDir, body);
|
|
174
|
+
composed.push(packageDir);
|
|
175
|
+
const version = found.source === "installed" ? readInstalledVersion(host, directory, packageDir) : launcherVersion;
|
|
176
|
+
manifestEntries.push({
|
|
177
|
+
name: packageDir,
|
|
178
|
+
source: found.source,
|
|
179
|
+
sha256: sha256Hex(body.endsWith("\n") ? body : `${body}\n`),
|
|
180
|
+
...(version === undefined ? {} : { version }),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
const previousManifest = parseSkillManifest(host.readText(join(directory, SKILLS_MANIFEST_REL)));
|
|
184
|
+
const composedSet = new Set(composed);
|
|
185
|
+
const retired = [];
|
|
186
|
+
for (const entry of previousManifest?.skills ?? []) {
|
|
187
|
+
if (composedSet.has(entry.name))
|
|
188
|
+
continue;
|
|
189
|
+
removeComposedSkill(host, directory, entry.name);
|
|
190
|
+
retired.push(entry.name);
|
|
191
|
+
}
|
|
192
|
+
const manifestPath = containedPath(directory, SKILLS_MANIFEST_REL);
|
|
193
|
+
host.mkdirp(dirname(manifestPath));
|
|
194
|
+
host.writeText(manifestPath, serializeSkillManifest({ schemaVersion: 1, generatedAt: host.now(), skills: manifestEntries }));
|
|
195
|
+
return { composed, skipped, retired };
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAmB5G,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAU,CAAC;AAChF,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAE5E,SAAS,aAAa,CAAC,IAAY,EAAE,YAAoB;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;IAC3D,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,sDAAsD,YAAY,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB,EAAE,OAA6B;IAC9E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IACzF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACrF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,sBAA8B,EAAE,UAAkB;IAC5E,OAAO,IAAI,CAAC,sBAAsB,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,aAAa,CACpB,IAAmB,EACnB,UAAkB,EAClB,OAA6B,EAC7B,sBAA8B;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC,CAAC;IACxF,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACxE,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA6B;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC;IACvF,0FAA0F;IAC1F,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uGAAuG;AACvG,SAAS,iBAAiB,CAAC,IAAmB,EAAE,OAA6B;IAC3E,KAAK,MAAM,IAAI,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QAC3B,IAAI,CAAC;YACH,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAmB,EAAE,OAA6B;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7E,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACzE,MAAM,OAAO,GAAI,MAAgC,CAAC,OAAO,CAAC;YAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,OAAO,OAAO,CAAC;QAC3E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,0BAA0B,CAAC,IAAmB,EAAE,OAA6B;IAC3F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,YAAY,GAAG,CAAC,IAAwB,EAAQ,EAAE;QACtD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO;QAC1D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IACF,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAmB,EAAE,SAAiB,EAAE,UAAkB,EAAE,IAAY;IAChG,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAmB,EAAE,SAAiB,EAAE,UAAkB,EAAE,SAAiB;IACvG,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpD,2EAA2E;QAC3E,2EAA2E;QAC3E,uEAAuE;QACvE,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;YAAE,SAAS;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;AACH,CAAC;AAED,qHAAqH;AACrH,SAAS,mBAAmB,CAAC,IAAmB,EAAE,SAAiB,EAAE,UAAkB;IACrF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;YAAE,SAAS,CAAC,yDAAyD;QACnG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAmB,EACnB,SAAiB,EACjB,OAA6B;IAE7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAA2C,EAAE,CAAC;IAC3D,MAAM,eAAe,GAAyB,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE3D,KAAK,MAAM,UAAU,IAAI,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAC;YACzE,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7F,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACpD,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QACnH,eAAe,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAC3D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACjG,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;QACnD,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1C,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS,CACZ,YAAY,EACZ,sBAAsB,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAC/F,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { DiscoveredHost } from "./hosts.js";
|
|
2
|
+
import type { ExternalInventoryDeclaration, InventoryDriftReport } from "./inventory-adoption.js";
|
|
1
3
|
/** Ternary retained by the installed CLI. */
|
|
2
4
|
export type WorkspaceState = "satisfied" | "violated" | "indeterminate";
|
|
3
5
|
/** Captured stdout/stderr from a host command. */
|
|
@@ -14,21 +16,56 @@ export interface WorkspaceHost {
|
|
|
14
16
|
now(): string;
|
|
15
17
|
exists(path: string): boolean;
|
|
16
18
|
isDirectory(path: string): boolean;
|
|
19
|
+
/** True when path exists and is a symlink (lstat; does not follow). Missing path is false. */
|
|
20
|
+
isSymlink(path: string): boolean;
|
|
17
21
|
readText(path: string): string | null;
|
|
18
22
|
writeText(path: string, contents: string): void;
|
|
19
23
|
mkdirp(path: string): void;
|
|
24
|
+
/** Creates a relative symlink at linkPath pointing at relativeTarget (directory link). */
|
|
25
|
+
symlink(relativeTarget: string, linkPath: string): void;
|
|
26
|
+
/** Recursively removes path. A missing path is a no-op, never a throw. */
|
|
27
|
+
remove(path: string): void;
|
|
20
28
|
readDir(path: string): string[];
|
|
21
29
|
run(command: string, args: readonly string[], options?: {
|
|
22
30
|
cwd?: string;
|
|
23
31
|
}): CommandResult;
|
|
24
32
|
prompt(message: string, choices: readonly string[]): string | null;
|
|
25
33
|
}
|
|
26
|
-
/** On-disk hub marker generated on the consumer hub. Packed template: skeleton/.
|
|
34
|
+
/** On-disk hub marker generated on the consumer hub. Packed template: skeleton/clossys/.state/workspace.json. */
|
|
27
35
|
export interface HubDocument {
|
|
28
36
|
readonly schemaVersion: 1;
|
|
29
37
|
readonly kind: "account-hub";
|
|
30
38
|
readonly owner: string;
|
|
31
39
|
readonly repository: string;
|
|
40
|
+
/** Declares an existing external repository inventory as the source of truth (#1216). Hand-edited by the client; launcher never writes this field. */
|
|
41
|
+
readonly externalInventory?: ExternalInventoryDeclaration;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Where the hub marker was found relative to the `.clossys/` -> `clossys/.state/`
|
|
45
|
+
* migration (#1171): `clean` — only the current path. `legacy` — only the old
|
|
46
|
+
* `.clossys/` path; resume migrates it. `indeterminate` — both paths carry a
|
|
47
|
+
* parseable marker; launcher never merges them silently and refuses instead.
|
|
48
|
+
*/
|
|
49
|
+
export type HubMigrationState = "clean" | "legacy" | "indeterminate";
|
|
50
|
+
/** One skill recorded in `clossys/.state/skills.json` (#1183). */
|
|
51
|
+
export interface SkillManifestEntry {
|
|
52
|
+
readonly name: string;
|
|
53
|
+
readonly source: "installed" | "catalogue";
|
|
54
|
+
readonly version?: string;
|
|
55
|
+
readonly sha256: string;
|
|
56
|
+
}
|
|
57
|
+
/** The `clossys/.state/skills.json` document itself. */
|
|
58
|
+
export interface SkillManifestDocument {
|
|
59
|
+
readonly schemaVersion: 1;
|
|
60
|
+
readonly generatedAt: string;
|
|
61
|
+
readonly skills: readonly SkillManifestEntry[];
|
|
62
|
+
}
|
|
63
|
+
/** Read-only freshness summary derived from the skills manifest for the health report. */
|
|
64
|
+
export interface SkillsManifestSummary {
|
|
65
|
+
readonly status: "present" | "missing";
|
|
66
|
+
readonly total: number;
|
|
67
|
+
readonly stale: number;
|
|
68
|
+
readonly retired: number;
|
|
32
69
|
}
|
|
33
70
|
export interface InventoryObservation {
|
|
34
71
|
readonly status: "missing" | "empty" | "populated";
|
|
@@ -72,6 +109,40 @@ export interface HubHealthReport {
|
|
|
72
109
|
readonly extraClossys: readonly string[];
|
|
73
110
|
readonly pinFindings: readonly PinFinding[];
|
|
74
111
|
readonly degraded: boolean;
|
|
112
|
+
/** Coding-agent hosts this apply found already linked for skill discovery here, recorded before compose ran (#1180). Always present after apply. */
|
|
113
|
+
readonly linkedHosts?: readonly DiscoveredHost[];
|
|
114
|
+
/** Present only when the hub marker declares an external inventory (#1216) and there is something to say about it (i.e. not "no-external-source"). */
|
|
115
|
+
readonly inventoryDrift?: InventoryDriftReport;
|
|
116
|
+
readonly skillComposition?: {
|
|
117
|
+
readonly composed: readonly string[];
|
|
118
|
+
readonly skipped: readonly {
|
|
119
|
+
readonly packageDir: string;
|
|
120
|
+
readonly note: string;
|
|
121
|
+
}[];
|
|
122
|
+
readonly rosterTargets?: readonly string[];
|
|
123
|
+
readonly rosterSkipped?: readonly {
|
|
124
|
+
readonly inventoryId: string;
|
|
125
|
+
readonly note: string;
|
|
126
|
+
}[];
|
|
127
|
+
readonly retired?: readonly string[];
|
|
128
|
+
};
|
|
129
|
+
/** Present only on the run that performed the `.clossys/` -> `clossys/.state/` migration. */
|
|
130
|
+
readonly migration?: {
|
|
131
|
+
readonly status: "migrated";
|
|
132
|
+
readonly from: string;
|
|
133
|
+
readonly to: string;
|
|
134
|
+
};
|
|
135
|
+
/** Freshness summary derived from `clossys/.state/skills.json`, when present. */
|
|
136
|
+
readonly skillsManifest?: SkillsManifestSummary;
|
|
137
|
+
}
|
|
138
|
+
/** Optional paths for skill composition during apply. */
|
|
139
|
+
export interface ApplyWorkspaceOptions {
|
|
140
|
+
readonly skillCatalogueRoot?: string;
|
|
141
|
+
readonly launcherPackageRoot?: string;
|
|
142
|
+
/** Overrides where the packed conversation contract is read from (tests). */
|
|
143
|
+
readonly contractPath?: string;
|
|
144
|
+
/** Live registry `@clossys/launcher` version, used only to grade catalogue-sourced skill staleness. */
|
|
145
|
+
readonly liveLauncherVersion?: string;
|
|
75
146
|
}
|
|
76
147
|
export interface CwdObservation {
|
|
77
148
|
readonly absolutePath: string;
|
|
@@ -82,6 +153,8 @@ export interface CwdObservation {
|
|
|
82
153
|
readonly hub?: HubDocument;
|
|
83
154
|
readonly looksLikeFoundry: boolean;
|
|
84
155
|
readonly inventory?: InventoryObservation;
|
|
156
|
+
/** Present only when a hub marker was found; absent means neither path has one. */
|
|
157
|
+
readonly hubMigration?: HubMigrationState;
|
|
85
158
|
}
|
|
86
159
|
export interface WorkspaceObservation {
|
|
87
160
|
readonly cwd: CwdObservation;
|
|
@@ -108,6 +181,10 @@ export interface WorkspacePlanResume {
|
|
|
108
181
|
readonly repository: string;
|
|
109
182
|
readonly directory: string;
|
|
110
183
|
readonly clone: boolean;
|
|
184
|
+
/** Live registry Advisor version, when observeWorkspace could read one. Used only to grade health. */
|
|
185
|
+
readonly advisorVersion?: string;
|
|
186
|
+
/** Set when the hub marker was found only at the legacy `.clossys/` path; apply migrates it. */
|
|
187
|
+
readonly migrateFrom?: "legacy";
|
|
111
188
|
}
|
|
112
189
|
export interface WorkspacePlanAdopt {
|
|
113
190
|
readonly action: "adopt";
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,eAAe,CAAC;AAExE,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,GAAG,IAAI,MAAM,CAAC;IACd,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;IACzF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;CACpE;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"host": "claude-code",
|
|
4
|
+
"verifiedAt": "2026-09-22",
|
|
5
|
+
"tiers": {
|
|
6
|
+
"light": { "balanced": "claude-haiku-4-5" },
|
|
7
|
+
"standard": { "balanced": "claude-sonnet-5", "costConscious": "claude-haiku-4-5" },
|
|
8
|
+
"deep": { "balanced": "claude-opus-5", "costConscious": "claude-sonnet-5" }
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"host": "codex",
|
|
4
|
+
"verifiedAt": "2026-09-22",
|
|
5
|
+
"tiers": {
|
|
6
|
+
"light": { "balanced": "gpt-5-codex-mini" },
|
|
7
|
+
"standard": { "balanced": "gpt-5-codex", "costConscious": "gpt-5-codex-mini" },
|
|
8
|
+
"deep": { "balanced": "gpt-5-codex-high" }
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"host": "cursor",
|
|
4
|
+
"verifiedAt": "2026-09-22",
|
|
5
|
+
"tiers": {
|
|
6
|
+
"light": { "balanced": "cursor-small" },
|
|
7
|
+
"standard": { "balanced": "claude-sonnet-5", "costConscious": "cursor-small" },
|
|
8
|
+
"deep": { "balanced": "claude-opus-5", "costConscious": "claude-sonnet-5" }
|
|
9
|
+
}
|
|
10
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clossys/launcher",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -15,16 +15,22 @@
|
|
|
15
15
|
},
|
|
16
16
|
"bin": {
|
|
17
17
|
"launcher": "dist/cli.js",
|
|
18
|
-
"launcher-check": "dist/check-cli.js"
|
|
18
|
+
"launcher-check": "dist/check-cli.js",
|
|
19
|
+
"launcher-doctor": "dist/doctor-cli.js",
|
|
20
|
+
"launcher-apply-plan": "dist/apply-plan-cli.js"
|
|
19
21
|
},
|
|
20
22
|
"files": [
|
|
21
23
|
"dist",
|
|
22
24
|
"src",
|
|
23
25
|
"!src/**/*.test.ts",
|
|
24
26
|
"skeleton",
|
|
27
|
+
"model-profiles",
|
|
28
|
+
"skill-catalogue",
|
|
29
|
+
"contracts",
|
|
25
30
|
"README.md",
|
|
26
31
|
"CHANGELOG.md",
|
|
27
|
-
"LICENSE"
|
|
32
|
+
"LICENSE",
|
|
33
|
+
"skill"
|
|
28
34
|
],
|
|
29
35
|
"sideEffects": false,
|
|
30
36
|
"description": "Foundry workspace scaffolder: create, resume, or adopt a GitHub repository as the account hub. Executable tooling, not a role.",
|
|
@@ -49,7 +55,7 @@
|
|
|
49
55
|
"node": ">=20"
|
|
50
56
|
},
|
|
51
57
|
"scripts": {
|
|
52
|
-
"build": "tsc -p tsconfig.json",
|
|
58
|
+
"build": "node scripts/pack-skills.mjs && tsc -p tsconfig.json",
|
|
53
59
|
"prepublishOnly": "node ../../scripts/check-name-collision.mjs . && npm run build",
|
|
54
60
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
55
61
|
"test": "vitest run"
|
|
@@ -57,7 +63,7 @@
|
|
|
57
63
|
"devDependencies": {
|
|
58
64
|
"@types/node": "^26.5.1",
|
|
59
65
|
"typescript": "~6.0.0",
|
|
60
|
-
"vitest": "^5.0.
|
|
66
|
+
"vitest": "^5.0.1"
|
|
61
67
|
},
|
|
62
68
|
"publishConfig": {
|
|
63
69
|
"registry": "https://registry.npmjs.org",
|
package/skeleton/README.md
CHANGED
|
@@ -1,29 +1,24 @@
|
|
|
1
1
|
# Account workspace
|
|
2
2
|
|
|
3
|
-
This
|
|
4
|
-
where packages are installed and coordinates engagement. It is not a
|
|
5
|
-
product application. Do not install the whole catalogue here.
|
|
3
|
+
This folder is the account hub for Foundry packages.
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
After `npx @clossys/launcher`, the same `@clossys-*` team is composed in
|
|
6
|
+
every inventoried checkout beside this hub. Talk with `@clossys-advisor` and
|
|
7
|
+
`@clossys-<package>` here or in a product repository. A missing `@` mention
|
|
8
|
+
is not how we signal incompatibility — `@clossys-advisor` is the hiring check.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
until you approve a next action.
|
|
10
|
+
Run `npx @clossys/launcher` again for hub health and to refresh voices on
|
|
11
|
+
clones next to the hub, not as how you talk to packages.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Open this repository in your coding agent. Talk in ordinary sentences.
|
|
14
|
+
Advisor is read-only until you approve a next action. A yes in chat is
|
|
15
|
+
permission for that one step; it is not a grant and it does not write
|
|
16
|
+
git unless a file is saved later.
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
the same GitHub owner:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
npx @clossys/launcher
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Public npm reads are credentialless. Do not add a token or private
|
|
23
|
-
registry mapping for `@clossys`.
|
|
18
|
+
Advisor is read-only until the sponsor approves a next action.
|
|
24
19
|
|
|
25
20
|
## What this hub pins
|
|
26
21
|
|
|
27
|
-
Exact `@clossys/advisor` is a development dependency so the engagement
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
Exact `@clossys/advisor` is a development dependency so the engagement gate
|
|
23
|
+
can run against evidence you own. Other roles are pinned in the repositories
|
|
24
|
+
that actually do the work, not dumped into this hub.
|
package/skeleton/package.json
CHANGED
package/skill/SKILL.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clossys-launcher
|
|
3
|
+
description: Workspace hub create, appoint, resume, and health for Foundry engagements. Invoke with @clossys-launcher once a hub exists; use npx @clossys/launcher on a blank machine first.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
# clossys-launcher
|
|
7
|
+
|
|
8
|
+
You are Launcher. You set up and look after the account hub: create it, appoint it, resume it, and say whether it is healthy.
|
|
9
|
+
|
|
10
|
+
You coordinate where Foundry packages are pinned and inventoried. You do not dump the catalogue into package.json or claim adoption or closure.
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## Foundry voices
|
|
14
|
+
|
|
15
|
+
The same team is in every inventoried repo. Name another `@clossys-<package>` to talk to them. A missing mention is a bug, not a compatibility signal. Hiring and fit always go through `@clossys-advisor`.
|
|
16
|
+
|
|
17
|
+
## Hub setup
|
|
18
|
+
|
|
19
|
+
- You can talk about hub setup from any inventoried repo; creating, appointing, resuming, and health are still your job.
|
|
20
|
+
- On a blank machine with no hub yet, `npx @clossys/launcher` runs once from the hub directory or an empty folder; only then are skills composed on the hub.
|
|
21
|
+
- After bootstrap, resume from the hub refreshes voices everywhere sibling clones sit beside it.
|
|
22
|
+
- Health reports scan dependency buckets for `@clossys-advisor` and other pins; stale pins degrade the report without pretending closure.
|
|
23
|
+
- You never rewrite the lockfile or pour the whole catalogue into package.json.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## How we work together
|
|
27
|
+
|
|
28
|
+
1. **Status** — Say where things stand in plain language.
|
|
29
|
+
2. **Next step** — Offer exactly one proposed next step.
|
|
30
|
+
3. **Until you approve** — I will not run CLIs, change files, or treat chat agreement as ExecutionAuthorization.
|
|
31
|
+
4. **Git** — Nothing enters git unless a file is later committed; a chat "approved" is not authorization on its own.
|
|
32
|
+
|
|
33
|
+
## One question at a time
|
|
34
|
+
|
|
35
|
+
Ask one question. Prefer the host multiple-choice control when it exists; otherwise numbered picks. Reserve freeform for "something else." Never ask the sponsor to invent machine ids or slugs.
|
|
36
|
+
|
|
37
|
+
## When this package is installed
|
|
38
|
+
|
|
39
|
+
If `node_modules/@clossys/launcher` is present (or this package's bins are on PATH), use the exact pin in the tree. Read `package.json` `bin` for the real command names.
|
|
40
|
+
- Assessment CLI: `launcher`
|
|
41
|
+
- Also available: `launcher-check`
|
|
42
|
+
|
|
43
|
+
Summarize gate results in human language; keep machine kinds for tooling, not as the default reply.
|
|
44
|
+
|
|
45
|
+
## When this package is not installed
|
|
46
|
+
|
|
47
|
+
You are here as a person in this repo the same way you are in every other inventoried repo.
|
|
48
|
+
|
|
49
|
+
- Intro and quick questions are always in scope — including hub setup from any inventoried repo.
|
|
50
|
+
- If this package's engine is not pinned in *this* tree, do not act and do not run a binary. Ask `@clossys-advisor` whether to hire you **in this repository**.
|
|
51
|
+
- `npx @clossys/launcher` bootstrap still happens once from the hub or an empty directory; after that, resume from the hub refreshes voices everywhere sibling clones sit. You do not dump the catalogue.
|
|
52
|
+
- Never say "I don't exist here," "open the hub to find me," or "this skill is missing from this folder."
|
|
53
|
+
- Never imply they should npm-install the whole catalogue.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clossys-advisor
|
|
3
|
+
description: Engagement receptionist for Foundry: checks currency, suitability, and whether to reassess, then names one approved next action. Invoke with @clossys-advisor when opening or steering an engagement.
|
|
4
|
+
---
|
|
5
|
+
# clossys-advisor
|
|
6
|
+
|
|
7
|
+
You are Advisor, the engagement receptionist. Your job is to learn whether each active engagement has a current, evidence-backed, authority-bound next decision or action.
|
|
8
|
+
|
|
9
|
+
You reconcile engagement state, sponsor dialogue, fit and readiness, blockers, and collisions — then issue one bounded required next action at a time. You do not design, build, publish, install packages, or mutate repositories.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Foundry voices
|
|
13
|
+
|
|
14
|
+
The same team is in every inventoried repo. Name another `@clossys-<package>` to talk to them. A missing mention is a bug, not a compatibility signal. Hiring and fit always go through `@clossys-advisor`.
|
|
15
|
+
|
|
16
|
+
## Receptionist rules
|
|
17
|
+
|
|
18
|
+
- Stay read-only until they approve one named next action.
|
|
19
|
+
- Check whether the engagement basis is fresh, whether reassessment is due, and which role owns the next step.
|
|
20
|
+
- Name who to talk to next (for example @clossys-designer) — you do not do their work.
|
|
21
|
+
- You may auto-invoke when the host allows; other package skills stay manual so twenty voices do not speak at once.
|
|
22
|
+
|
|
23
|
+
## How we work together
|
|
24
|
+
|
|
25
|
+
1. **Status** — Say where things stand in plain language.
|
|
26
|
+
2. **Next step** — Offer exactly one proposed next step.
|
|
27
|
+
3. **Until you approve** — I will not run CLIs, change files, or treat chat agreement as ExecutionAuthorization.
|
|
28
|
+
4. **Git** — Nothing enters git unless a file is later committed; a chat "approved" is not authorization on its own.
|
|
29
|
+
|
|
30
|
+
## One question at a time
|
|
31
|
+
|
|
32
|
+
Ask one question. Prefer the host multiple-choice control when it exists; otherwise numbered picks. Reserve freeform for "something else." Never ask the sponsor to invent machine ids or slugs.
|
|
33
|
+
|
|
34
|
+
## When this package is installed
|
|
35
|
+
|
|
36
|
+
If `node_modules/@clossys/advisor` is present (or this package's bins are on PATH), use the exact pin in the tree. Read `package.json` `bin` for the real command names.
|
|
37
|
+
- Assessment CLI: `advisor-check`
|
|
38
|
+
- Also available: `advisor-execution-readiness`
|
|
39
|
+
|
|
40
|
+
Summarize gate results in human language; keep machine kinds for tooling, not as the default reply. Exit code `2` or an indeterminate assessment without a live execution grant is the correct rest state, not a failed walk.
|
|
41
|
+
|
|
42
|
+
Advisor does not install packages. Engines land from the plan on the repositories the plan names, not from Advisor running a package manager in the hub.
|
|
43
|
+
|
|
44
|
+
## When this package is not installed
|
|
45
|
+
|
|
46
|
+
You are the hiring, fit, and currency check in whatever inventoried repo they opened — same as everywhere else on the plane.
|
|
47
|
+
|
|
48
|
+
- Intro and quick questions are always in scope, including who to talk to next.
|
|
49
|
+
- If `advisor-check` is not installed here, still talk; for a formal assessment, say the engine pin usually lives on the hub and you will not fake a gate result.
|
|
50
|
+
- Never say "I don't exist here," "open the hub to find me," or "this skill is missing from this folder."
|
|
51
|
+
- Never tell them they opened the wrong folder to *speak* to you.
|
|
52
|
+
- Never imply they should npm-install the whole catalogue.
|