youmd 0.6.21 → 0.6.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/dist/commands/build.d.ts.map +1 -1
  2. package/dist/commands/build.js +0 -1
  3. package/dist/commands/build.js.map +1 -1
  4. package/dist/commands/chat.d.ts.map +1 -1
  5. package/dist/commands/chat.js +283 -184
  6. package/dist/commands/chat.js.map +1 -1
  7. package/dist/commands/export.d.ts +1 -0
  8. package/dist/commands/export.d.ts.map +1 -1
  9. package/dist/commands/export.js +5 -0
  10. package/dist/commands/export.js.map +1 -1
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +21 -1
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/keys.d.ts.map +1 -1
  15. package/dist/commands/keys.js +3 -3
  16. package/dist/commands/keys.js.map +1 -1
  17. package/dist/commands/link.d.ts.map +1 -1
  18. package/dist/commands/link.js +3 -3
  19. package/dist/commands/link.js.map +1 -1
  20. package/dist/commands/login.d.ts +29 -0
  21. package/dist/commands/login.d.ts.map +1 -1
  22. package/dist/commands/login.js +256 -127
  23. package/dist/commands/login.js.map +1 -1
  24. package/dist/commands/logs.js +0 -1
  25. package/dist/commands/logs.js.map +1 -1
  26. package/dist/commands/mcp.d.ts +14 -0
  27. package/dist/commands/mcp.d.ts.map +1 -1
  28. package/dist/commands/mcp.js +284 -28
  29. package/dist/commands/mcp.js.map +1 -1
  30. package/dist/commands/okf.d.ts +12 -0
  31. package/dist/commands/okf.d.ts.map +1 -0
  32. package/dist/commands/okf.js +411 -0
  33. package/dist/commands/okf.js.map +1 -0
  34. package/dist/commands/private.d.ts.map +1 -1
  35. package/dist/commands/private.js +6 -5
  36. package/dist/commands/private.js.map +1 -1
  37. package/dist/commands/project.d.ts.map +1 -1
  38. package/dist/commands/project.js +9 -5
  39. package/dist/commands/project.js.map +1 -1
  40. package/dist/commands/publish.d.ts.map +1 -1
  41. package/dist/commands/publish.js +0 -1
  42. package/dist/commands/publish.js.map +1 -1
  43. package/dist/commands/pull.d.ts +24 -1
  44. package/dist/commands/pull.d.ts.map +1 -1
  45. package/dist/commands/pull.js +114 -14
  46. package/dist/commands/pull.js.map +1 -1
  47. package/dist/commands/push.d.ts +1 -0
  48. package/dist/commands/push.d.ts.map +1 -1
  49. package/dist/commands/push.js +33 -13
  50. package/dist/commands/push.js.map +1 -1
  51. package/dist/commands/register.d.ts +6 -0
  52. package/dist/commands/register.d.ts.map +1 -1
  53. package/dist/commands/register.js +179 -79
  54. package/dist/commands/register.js.map +1 -1
  55. package/dist/commands/skill.d.ts.map +1 -1
  56. package/dist/commands/skill.js +121 -50
  57. package/dist/commands/skill.js.map +1 -1
  58. package/dist/commands/stack.d.ts +16 -0
  59. package/dist/commands/stack.d.ts.map +1 -0
  60. package/dist/commands/stack.js +863 -0
  61. package/dist/commands/stack.js.map +1 -0
  62. package/dist/commands/status.d.ts.map +1 -1
  63. package/dist/commands/status.js +25 -5
  64. package/dist/commands/status.js.map +1 -1
  65. package/dist/commands/sync.d.ts +23 -0
  66. package/dist/commands/sync.d.ts.map +1 -1
  67. package/dist/commands/sync.js +193 -12
  68. package/dist/commands/sync.js.map +1 -1
  69. package/dist/commands/whoami.d.ts.map +1 -1
  70. package/dist/commands/whoami.js +21 -16
  71. package/dist/commands/whoami.js.map +1 -1
  72. package/dist/create.js +0 -0
  73. package/dist/index.js +64 -7
  74. package/dist/index.js.map +1 -1
  75. package/dist/lib/api.d.ts +127 -5
  76. package/dist/lib/api.d.ts.map +1 -1
  77. package/dist/lib/api.js +142 -5
  78. package/dist/lib/api.js.map +1 -1
  79. package/dist/lib/ascii.d.ts +1 -0
  80. package/dist/lib/ascii.d.ts.map +1 -1
  81. package/dist/lib/ascii.js +9 -26
  82. package/dist/lib/ascii.js.map +1 -1
  83. package/dist/lib/canonical-json.d.ts +8 -0
  84. package/dist/lib/canonical-json.d.ts.map +1 -0
  85. package/dist/lib/canonical-json.js +29 -0
  86. package/dist/lib/canonical-json.js.map +1 -0
  87. package/dist/lib/capability-router.d.ts +58 -0
  88. package/dist/lib/capability-router.d.ts.map +1 -0
  89. package/dist/lib/capability-router.js +54 -0
  90. package/dist/lib/capability-router.js.map +1 -0
  91. package/dist/lib/compiler.d.ts +32 -0
  92. package/dist/lib/compiler.d.ts.map +1 -1
  93. package/dist/lib/compiler.js +150 -0
  94. package/dist/lib/compiler.js.map +1 -1
  95. package/dist/lib/config.d.ts +71 -35
  96. package/dist/lib/config.d.ts.map +1 -1
  97. package/dist/lib/config.js +334 -124
  98. package/dist/lib/config.js.map +1 -1
  99. package/dist/lib/decompile.d.ts +6 -1
  100. package/dist/lib/decompile.d.ts.map +1 -1
  101. package/dist/lib/decompile.js +120 -11
  102. package/dist/lib/decompile.js.map +1 -1
  103. package/dist/lib/hash.d.ts.map +1 -1
  104. package/dist/lib/hash.js +2 -19
  105. package/dist/lib/hash.js.map +1 -1
  106. package/dist/lib/heartbeat.d.ts +38 -0
  107. package/dist/lib/heartbeat.d.ts.map +1 -0
  108. package/dist/lib/heartbeat.js +70 -0
  109. package/dist/lib/heartbeat.js.map +1 -0
  110. package/dist/lib/host-link.d.ts +123 -0
  111. package/dist/lib/host-link.d.ts.map +1 -0
  112. package/dist/lib/host-link.js +350 -0
  113. package/dist/lib/host-link.js.map +1 -0
  114. package/dist/lib/merge.d.ts +50 -0
  115. package/dist/lib/merge.d.ts.map +1 -0
  116. package/dist/lib/merge.js +167 -0
  117. package/dist/lib/merge.js.map +1 -0
  118. package/dist/lib/okf-bundle.d.ts +104 -0
  119. package/dist/lib/okf-bundle.d.ts.map +1 -0
  120. package/dist/lib/okf-bundle.js +473 -0
  121. package/dist/lib/okf-bundle.js.map +1 -0
  122. package/dist/lib/okf-health.d.ts +40 -0
  123. package/dist/lib/okf-health.d.ts.map +1 -0
  124. package/dist/lib/okf-health.js +152 -0
  125. package/dist/lib/okf-health.js.map +1 -0
  126. package/dist/lib/okf-stack.d.ts +47 -0
  127. package/dist/lib/okf-stack.d.ts.map +1 -0
  128. package/dist/lib/okf-stack.js +331 -0
  129. package/dist/lib/okf-stack.js.map +1 -0
  130. package/dist/lib/okf-view.d.ts +49 -0
  131. package/dist/lib/okf-view.d.ts.map +1 -0
  132. package/dist/lib/okf-view.js +197 -0
  133. package/dist/lib/okf-view.js.map +1 -0
  134. package/dist/lib/okf.d.ts +130 -0
  135. package/dist/lib/okf.d.ts.map +1 -0
  136. package/dist/lib/okf.js +263 -0
  137. package/dist/lib/okf.js.map +1 -0
  138. package/dist/lib/onboarding.d.ts +17 -0
  139. package/dist/lib/onboarding.d.ts.map +1 -1
  140. package/dist/lib/onboarding.js +224 -207
  141. package/dist/lib/onboarding.js.map +1 -1
  142. package/dist/lib/project.d.ts +5 -0
  143. package/dist/lib/project.d.ts.map +1 -1
  144. package/dist/lib/project.js +8 -0
  145. package/dist/lib/project.js.map +1 -1
  146. package/dist/lib/projectContext.d.ts +201 -0
  147. package/dist/lib/projectContext.d.ts.map +1 -0
  148. package/dist/lib/projectContext.js +597 -0
  149. package/dist/lib/projectContext.js.map +1 -0
  150. package/dist/lib/render.d.ts +38 -1
  151. package/dist/lib/render.d.ts.map +1 -1
  152. package/dist/lib/render.js +83 -18
  153. package/dist/lib/render.js.map +1 -1
  154. package/dist/lib/skill-catalog.d.ts.map +1 -1
  155. package/dist/lib/skill-catalog.js +22 -2
  156. package/dist/lib/skill-catalog.js.map +1 -1
  157. package/dist/lib/skills.d.ts +20 -5
  158. package/dist/lib/skills.d.ts.map +1 -1
  159. package/dist/lib/skills.js +116 -58
  160. package/dist/lib/skills.js.map +1 -1
  161. package/dist/lib/stackEval.d.ts +87 -0
  162. package/dist/lib/stackEval.d.ts.map +1 -0
  163. package/dist/lib/stackEval.js +233 -0
  164. package/dist/lib/stackEval.js.map +1 -0
  165. package/dist/lib/stackImprove.d.ts +49 -0
  166. package/dist/lib/stackImprove.d.ts.map +1 -0
  167. package/dist/lib/stackImprove.js +313 -0
  168. package/dist/lib/stackImprove.js.map +1 -0
  169. package/dist/lib/stackInstall.d.ts +59 -0
  170. package/dist/lib/stackInstall.d.ts.map +1 -0
  171. package/dist/lib/stackInstall.js +162 -0
  172. package/dist/lib/stackInstall.js.map +1 -0
  173. package/dist/lib/stackSafety.d.ts +126 -0
  174. package/dist/lib/stackSafety.d.ts.map +1 -0
  175. package/dist/lib/stackSafety.js +486 -0
  176. package/dist/lib/stackSafety.js.map +1 -0
  177. package/dist/lib/stackUpdate.d.ts +44 -0
  178. package/dist/lib/stackUpdate.d.ts.map +1 -0
  179. package/dist/lib/stackUpdate.js +256 -0
  180. package/dist/lib/stackUpdate.js.map +1 -0
  181. package/dist/lib/stream.d.ts +116 -0
  182. package/dist/lib/stream.d.ts.map +1 -0
  183. package/dist/lib/stream.js +368 -0
  184. package/dist/lib/stream.js.map +1 -0
  185. package/dist/lib/youstack.d.ts +219 -0
  186. package/dist/lib/youstack.d.ts.map +1 -0
  187. package/dist/lib/youstack.js +1049 -0
  188. package/dist/lib/youstack.js.map +1 -0
  189. package/dist/mcp/registry.d.ts +133 -0
  190. package/dist/mcp/registry.d.ts.map +1 -0
  191. package/dist/mcp/registry.js +833 -0
  192. package/dist/mcp/registry.js.map +1 -0
  193. package/dist/mcp/server.d.ts +106 -5
  194. package/dist/mcp/server.d.ts.map +1 -1
  195. package/dist/mcp/server.js +851 -498
  196. package/dist/mcp/server.js.map +1 -1
  197. package/dist/postinstall.js +11 -2
  198. package/dist/postinstall.js.map +1 -1
  199. package/dist/you.d.ts +1 -0
  200. package/dist/you.js +40 -4
  201. package/dist/you.js.map +1 -1
  202. package/examples/youstack-bamfstack-public/docs/quickstart.md +34 -0
  203. package/examples/youstack-bamfstack-public/prompts/creator-draft-starter.md +15 -0
  204. package/examples/youstack-bamfstack-public/skills/bamfstack-start/SKILL.md +36 -0
  205. package/examples/youstack-bamfstack-public/tests/smoke.md +19 -0
  206. package/examples/youstack-bamfstack-public/workflows/creator-growth-workflow.md +22 -0
  207. package/examples/youstack-bamfstack-public/youstack.json +172 -0
  208. package/examples/youstack-personal/docs/quickstart.md +10 -0
  209. package/examples/youstack-personal/skills/youstack-start/SKILL.md +9 -0
  210. package/examples/youstack-personal/tests/smoke.md +9 -0
  211. package/examples/youstack-personal/workflows/startup.md +7 -0
  212. package/examples/youstack-personal/youstack.json +123 -0
  213. package/package.json +3 -3
  214. package/skills/claude-md-generator.md +1 -1
  215. package/skills/meta-improve.md +8 -3
  216. package/skills/proactive-context-fill.md +1 -1
  217. package/skills/youstack-maintainer.md +128 -0
  218. package/skills/youstack-start.md +78 -0
@@ -0,0 +1,59 @@
1
+ /**
2
+ * P9 — stack install from the public registry.
3
+ *
4
+ * Fetches a YouStack from GET /api/v1/stacks/registry/{user}/{slug},
5
+ * validates the manifest, writes files to ./stacks/<slug>/ (or --dir),
6
+ * then runs the host-link engine to emit .claude/skills/<name>/SKILL.md.
7
+ *
8
+ * Error paths:
9
+ * not_found — unknown user or stack slug
10
+ * conflict — target dir already exists (use --force to overwrite)
11
+ * invalid_manifest — manifest fails validateYouStackManifest
12
+ */
13
+ import { type YouStackManifest } from "./youstack";
14
+ export interface StackInstallOptions {
15
+ /** Override target base directory. Defaults to process.cwd(). */
16
+ dir?: string;
17
+ /** Overwrite an existing stacks/<slug>/ directory. */
18
+ force?: boolean;
19
+ }
20
+ export interface StackInstallResult {
21
+ slug: string;
22
+ targetDir: string;
23
+ filesWritten: string[];
24
+ hostLinks: string[];
25
+ /** Stack manifest as parsed from the registry response. */
26
+ manifest: YouStackManifest;
27
+ }
28
+ export interface RegistryFile {
29
+ path: string;
30
+ size: number;
31
+ content: string;
32
+ }
33
+ export interface RegistryResponse {
34
+ user: string;
35
+ slug: string;
36
+ manifest: unknown;
37
+ files: RegistryFile[];
38
+ fileCount: number;
39
+ truncated: boolean;
40
+ syncedAt: number;
41
+ stale: boolean;
42
+ }
43
+ /**
44
+ * Fetch the registry entry for <user>/<slug> from the Convex site.
45
+ * Throws with a descriptive message on network error or non-2xx response.
46
+ */
47
+ export declare function fetchRegistryEntry(user: string, slug: string): Promise<RegistryResponse>;
48
+ /**
49
+ * Install a YouStack from the public registry.
50
+ *
51
+ * 1. Fetch manifest + files from /api/v1/stacks/registry/{user}/{slug}.
52
+ * 2. Validate the manifest with validateYouStackManifest.
53
+ * 3. Write files to <baseDir>/stacks/<slug>/ (refuses if dir exists without --force).
54
+ * 4. Run linkYouStackAdapters to emit .claude/skills/<name>/SKILL.md.
55
+ *
56
+ * Returns StackInstallResult on success. Throws on any error.
57
+ */
58
+ export declare function installStack(user: string, slug: string, options?: StackInstallOptions): Promise<StackInstallResult>;
59
+ //# sourceMappingURL=stackInstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackInstall.d.ts","sourceRoot":"","sources":["../../src/lib/stackInstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC,CAiC3B;AAUD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAuE7B"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ /**
3
+ * P9 — stack install from the public registry.
4
+ *
5
+ * Fetches a YouStack from GET /api/v1/stacks/registry/{user}/{slug},
6
+ * validates the manifest, writes files to ./stacks/<slug>/ (or --dir),
7
+ * then runs the host-link engine to emit .claude/skills/<name>/SKILL.md.
8
+ *
9
+ * Error paths:
10
+ * not_found — unknown user or stack slug
11
+ * conflict — target dir already exists (use --force to overwrite)
12
+ * invalid_manifest — manifest fails validateYouStackManifest
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.fetchRegistryEntry = fetchRegistryEntry;
49
+ exports.installStack = installStack;
50
+ const fs = __importStar(require("fs"));
51
+ const path = __importStar(require("path"));
52
+ const config_1 = require("./config");
53
+ const api_1 = require("./api");
54
+ const youstack_1 = require("./youstack");
55
+ // ── Registry fetch ─────────────────────────────────────────────────────────────
56
+ /**
57
+ * Fetch the registry entry for <user>/<slug> from the Convex site.
58
+ * Throws with a descriptive message on network error or non-2xx response.
59
+ */
60
+ async function fetchRegistryEntry(user, slug) {
61
+ const base = (0, config_1.getConvexSiteUrl)();
62
+ const url = `${base}/api/v1/stacks/registry/${encodeURIComponent(user)}/${encodeURIComponent(slug)}`;
63
+ let res;
64
+ try {
65
+ res = await fetch(url, {
66
+ headers: { Accept: "application/json" },
67
+ signal: AbortSignal.timeout(15000),
68
+ });
69
+ }
70
+ catch (err) {
71
+ throw new Error(err instanceof Error ? err.message : "network error fetching registry");
72
+ }
73
+ let data;
74
+ try {
75
+ data = await res.json();
76
+ }
77
+ catch {
78
+ throw new Error(`registry returned non-JSON (status ${res.status})`);
79
+ }
80
+ if (!res.ok) {
81
+ const msg = (0, api_1.apiErrorMessage)(data) ?? `registry error ${res.status}`;
82
+ const code = res.status === 404 ? "not_found" : "registry_error";
83
+ const err = new Error(msg);
84
+ err.code = code;
85
+ err.status = res.status;
86
+ throw err;
87
+ }
88
+ return data;
89
+ }
90
+ // ── Write helpers ─────────────────────────────────────────────────────────────
91
+ function ensureDir(dirPath) {
92
+ fs.mkdirSync(dirPath, { recursive: true });
93
+ }
94
+ // ── Main install function ─────────────────────────────────────────────────────
95
+ /**
96
+ * Install a YouStack from the public registry.
97
+ *
98
+ * 1. Fetch manifest + files from /api/v1/stacks/registry/{user}/{slug}.
99
+ * 2. Validate the manifest with validateYouStackManifest.
100
+ * 3. Write files to <baseDir>/stacks/<slug>/ (refuses if dir exists without --force).
101
+ * 4. Run linkYouStackAdapters to emit .claude/skills/<name>/SKILL.md.
102
+ *
103
+ * Returns StackInstallResult on success. Throws on any error.
104
+ */
105
+ async function installStack(user, slug, options = {}) {
106
+ const baseDir = path.resolve(options.dir ?? process.cwd());
107
+ const targetDir = path.join(baseDir, "stacks", slug);
108
+ // Conflict check BEFORE the network call so fast failure is instant.
109
+ if (!options.force && fs.existsSync(targetDir)) {
110
+ const err = new Error(`stacks/${slug}/ already exists. Use --force to overwrite.`);
111
+ err.code = "conflict";
112
+ throw err;
113
+ }
114
+ // Fetch from registry.
115
+ const entry = await fetchRegistryEntry(user, slug);
116
+ // Validate the manifest.
117
+ const validation = (0, youstack_1.validateYouStackManifest)(entry.manifest);
118
+ if (!validation.ok) {
119
+ const err = new Error(`invalid manifest: ${validation.errors.join("; ")}`);
120
+ err.code = "invalid_manifest";
121
+ err.validationErrors = validation.errors;
122
+ throw err;
123
+ }
124
+ const manifest = entry.manifest;
125
+ // Write files.
126
+ ensureDir(targetDir);
127
+ const filesWritten = [];
128
+ for (const file of entry.files) {
129
+ // Strip the leading stacks/<slug>/ prefix so paths are relative to targetDir.
130
+ const relPath = file.path.replace(/^stacks\/[^/]+\//, "");
131
+ if (!relPath)
132
+ continue;
133
+ const dest = path.join(targetDir, relPath);
134
+ ensureDir(path.dirname(dest));
135
+ fs.writeFileSync(dest, file.content, "utf8");
136
+ filesWritten.push(dest);
137
+ }
138
+ // Find the manifest file we just wrote.
139
+ const manifestPath = filesWritten.find((p) => /\/(youstack|manifest)\.(json|ya?ml)$/i.test(p)) ?? path.join(targetDir, "youstack.json");
140
+ // Run the host-link engine (emits .claude/skills/<name>/SKILL.md etc.).
141
+ const loaded = {
142
+ manifest,
143
+ manifestPath,
144
+ rootDir: targetDir,
145
+ validation,
146
+ };
147
+ const linkResults = (0, youstack_1.linkYouStackAdapters)(loaded, {
148
+ hosts: ["claude-code"],
149
+ targetDir: baseDir,
150
+ });
151
+ const hostLinks = linkResults
152
+ .filter((r) => r.wrote)
153
+ .map((r) => r.targetPath);
154
+ return {
155
+ slug,
156
+ targetDir,
157
+ filesWritten,
158
+ hostLinks,
159
+ manifest,
160
+ };
161
+ }
162
+ //# sourceMappingURL=stackInstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackInstall.js","sourceRoot":"","sources":["../../src/lib/stackInstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * stackSafety.ts — machine-checkable T0-T3 safety contract for YouStack manifests.
3
+ *
4
+ * SELF-IMPROVING-SYSTEM-DESIGN.md §4 defines the four tiers:
5
+ * T0 read-only suggestions (diagnostics, inspect, brief)
6
+ * T1 additive writes to local scratch, always logged
7
+ * T2 modify skills/stacks/identity sections — propose-only unless mode grants more
8
+ * T3 visibility widening, publishing, remote push, deletions, irreversible ops
9
+ *
10
+ * Mode semantics (enforced, not advisory):
11
+ * observe → read-only; smoke/guard FAIL (not warn) if write_local capability exists
12
+ * propose → writes only to proposals/ directory
13
+ * auto_pr → branch + PR, never main; requires humanGate.required === true
14
+ * auto_apply_local→ requires improvement.evals non-empty AND evals green
15
+ */
16
+ import type { YouStackManifest } from "./youstack";
17
+ export type SafetyTier = "T0" | "T1" | "T2" | "T3";
18
+ export type SafetyCapabilityKey = "fs_write" | "network" | "shell" | "auto_pr";
19
+ export interface SafetyCapabilities {
20
+ fs_write?: boolean;
21
+ network?: boolean;
22
+ shell?: boolean;
23
+ auto_pr?: boolean;
24
+ }
25
+ export interface SafetyHumanGate {
26
+ required: boolean;
27
+ /** Scopes that always require explicit human approval (required at T3). */
28
+ scopes?: string[];
29
+ }
30
+ /**
31
+ * The `safety` section inside youstack.json.
32
+ * Extend YouStackManifest with this via `manifest.safety`.
33
+ */
34
+ export interface StackSafetyContract {
35
+ tier: SafetyTier;
36
+ capabilities: SafetyCapabilities;
37
+ humanGate: SafetyHumanGate;
38
+ }
39
+ export interface ContractViolation {
40
+ capability: SafetyCapabilityKey;
41
+ reason: string;
42
+ tierRule: string;
43
+ }
44
+ export interface ContractValidationResult {
45
+ ok: boolean;
46
+ violations: ContractViolation[];
47
+ warnings: string[];
48
+ }
49
+ /**
50
+ * Parse the `safety` section from a raw manifest object.
51
+ * Returns null if the section is absent.
52
+ */
53
+ export declare function parseSafetyContract(manifest: YouStackManifest | Record<string, unknown>): StackSafetyContract | null;
54
+ /**
55
+ * Validate a safety contract against the T0-T3 tier rules.
56
+ *
57
+ * T0: no fs_write, no auto_pr, no shell.
58
+ * T1: no auto_pr.
59
+ * T2: auto_pr only if humanGate.required === true.
60
+ * T3: humanGate MUST list explicit scopes (non-empty).
61
+ */
62
+ export declare function validateSafetyContract(contract: StackSafetyContract): ContractValidationResult;
63
+ /**
64
+ * Returns true if the declared contract allows the given capability.
65
+ * Used by the guard and runtime routing hook.
66
+ */
67
+ export declare function tierAllows(contract: StackSafetyContract, capability: SafetyCapabilityKey): boolean;
68
+ export interface InferredCapabilities {
69
+ fs_write: boolean;
70
+ shell: boolean;
71
+ auto_pr: boolean;
72
+ network: boolean;
73
+ sources: {
74
+ fs_write: string[];
75
+ shell: string[];
76
+ auto_pr: string[];
77
+ network: string[];
78
+ };
79
+ }
80
+ /**
81
+ * Scan a manifest's declared capabilities (and improvement policy) for hints
82
+ * that imply specific capability flags. Returns what was inferred and which
83
+ * capability IDs triggered each flag.
84
+ */
85
+ export declare function inferCapabilitiesFromManifest(manifest: YouStackManifest): InferredCapabilities;
86
+ export interface GuardCheckResult {
87
+ capability: SafetyCapabilityKey;
88
+ status: "PASS" | "VIOLATION";
89
+ declared: boolean;
90
+ inferred: boolean;
91
+ inferredFrom: string[];
92
+ tierRule: string;
93
+ message: string;
94
+ }
95
+ export interface StackGuardResult {
96
+ ok: boolean;
97
+ tier: SafetyTier;
98
+ manifestPath: string;
99
+ checks: GuardCheckResult[];
100
+ contractViolations: ContractViolation[];
101
+ warnings: string[];
102
+ }
103
+ /**
104
+ * Run the full guard check against a loaded manifest.
105
+ * Called from the `youmd stack guard` subcommand and from runYouStackDoctor.
106
+ */
107
+ export declare function runStackGuard(manifest: YouStackManifest, manifestPath: string): StackGuardResult;
108
+ /**
109
+ * Mode-compatibility check: verifies the improvement.mode is consistent
110
+ * with the declared safety tier.
111
+ *
112
+ * `observe` → T0 or T1 only; smoke/guard FAIL if a write_local capability exists
113
+ * `propose` → T1 or T2; writes to proposals/ only
114
+ * `auto_pr` → T2 or T3; requires humanGate.required
115
+ * `auto_apply_local` → T2 or T3; requires non-empty evals
116
+ */
117
+ export declare function checkModeConsistency(manifest: YouStackManifest, contract: StackSafetyContract): {
118
+ ok: boolean;
119
+ violations: string[];
120
+ };
121
+ /**
122
+ * Refusal message for runtime enforcement — the one-line message the routing
123
+ * hook emits when a request exceeds the declared tier.
124
+ */
125
+ export declare function tierRefusalMessage(contract: StackSafetyContract, requestedCapability: SafetyCapabilityKey): string;
126
+ //# sourceMappingURL=stackSafety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackSafety.d.ts","sourceRoot":"","sources":["../../src/lib/stackSafety.ts"],"names":[],"mappings":"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"}