@adhamalkhaja/seyola-runtime 0.11.4

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 (135) hide show
  1. package/LICENSE +56 -0
  2. package/README.md +87 -0
  3. package/dist/adapters/claude-code-local/index.d.ts +60 -0
  4. package/dist/adapters/claude-code-local/index.d.ts.map +1 -0
  5. package/dist/adapters/claude-code-local/index.js +270 -0
  6. package/dist/adapters/claude-code-local/index.js.map +1 -0
  7. package/dist/bundle/index.d.ts +60 -0
  8. package/dist/bundle/index.d.ts.map +1 -0
  9. package/dist/bundle/index.js +989 -0
  10. package/dist/bundle/index.js.map +1 -0
  11. package/dist/cli/index.d.ts +12 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +207 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/compile-plan/budgets.d.ts +23 -0
  16. package/dist/compile-plan/budgets.d.ts.map +1 -0
  17. package/dist/compile-plan/budgets.js +55 -0
  18. package/dist/compile-plan/budgets.js.map +1 -0
  19. package/dist/compile-plan/graph.d.ts +40 -0
  20. package/dist/compile-plan/graph.d.ts.map +1 -0
  21. package/dist/compile-plan/graph.js +114 -0
  22. package/dist/compile-plan/graph.js.map +1 -0
  23. package/dist/compile-plan/index.d.ts +28 -0
  24. package/dist/compile-plan/index.d.ts.map +1 -0
  25. package/dist/compile-plan/index.js +423 -0
  26. package/dist/compile-plan/index.js.map +1 -0
  27. package/dist/compile-plan/registries.d.ts +35 -0
  28. package/dist/compile-plan/registries.d.ts.map +1 -0
  29. package/dist/compile-plan/registries.js +81 -0
  30. package/dist/compile-plan/registries.js.map +1 -0
  31. package/dist/compile-plan/resolver.d.ts +24 -0
  32. package/dist/compile-plan/resolver.d.ts.map +1 -0
  33. package/dist/compile-plan/resolver.js +57 -0
  34. package/dist/compile-plan/resolver.js.map +1 -0
  35. package/dist/compile-plan/types.d.ts +192 -0
  36. package/dist/compile-plan/types.d.ts.map +1 -0
  37. package/dist/compile-plan/types.js +7 -0
  38. package/dist/compile-plan/types.js.map +1 -0
  39. package/dist/doctor/index.d.ts +43 -0
  40. package/dist/doctor/index.d.ts.map +1 -0
  41. package/dist/doctor/index.js +224 -0
  42. package/dist/doctor/index.js.map +1 -0
  43. package/dist/init/index.d.ts +53 -0
  44. package/dist/init/index.d.ts.map +1 -0
  45. package/dist/init/index.js +414 -0
  46. package/dist/init/index.js.map +1 -0
  47. package/dist/lib/ajvSetup.d.ts +30 -0
  48. package/dist/lib/ajvSetup.d.ts.map +1 -0
  49. package/dist/lib/ajvSetup.js +44 -0
  50. package/dist/lib/ajvSetup.js.map +1 -0
  51. package/dist/lib/loadJson.d.ts +21 -0
  52. package/dist/lib/loadJson.d.ts.map +1 -0
  53. package/dist/lib/loadJson.js +43 -0
  54. package/dist/lib/loadJson.js.map +1 -0
  55. package/dist/lib/loadYaml.d.ts +18 -0
  56. package/dist/lib/loadYaml.d.ts.map +1 -0
  57. package/dist/lib/loadYaml.js +41 -0
  58. package/dist/lib/loadYaml.js.map +1 -0
  59. package/dist/lib/paths.d.ts +22 -0
  60. package/dist/lib/paths.d.ts.map +1 -0
  61. package/dist/lib/paths.js +61 -0
  62. package/dist/lib/paths.js.map +1 -0
  63. package/dist/run-plan/index.d.ts +17 -0
  64. package/dist/run-plan/index.d.ts.map +1 -0
  65. package/dist/run-plan/index.js +235 -0
  66. package/dist/run-plan/index.js.map +1 -0
  67. package/dist/run-plan/types.d.ts +53 -0
  68. package/dist/run-plan/types.d.ts.map +1 -0
  69. package/dist/run-plan/types.js +6 -0
  70. package/dist/run-plan/types.js.map +1 -0
  71. package/dist/run-step/contextPacket.d.ts +39 -0
  72. package/dist/run-step/contextPacket.d.ts.map +1 -0
  73. package/dist/run-step/contextPacket.js +213 -0
  74. package/dist/run-step/contextPacket.js.map +1 -0
  75. package/dist/run-step/derivation.d.ts +41 -0
  76. package/dist/run-step/derivation.d.ts.map +1 -0
  77. package/dist/run-step/derivation.js +61 -0
  78. package/dist/run-step/derivation.js.map +1 -0
  79. package/dist/run-step/effectExecutor.d.ts +42 -0
  80. package/dist/run-step/effectExecutor.d.ts.map +1 -0
  81. package/dist/run-step/effectExecutor.js +297 -0
  82. package/dist/run-step/effectExecutor.js.map +1 -0
  83. package/dist/run-step/formatExecutor.d.ts +34 -0
  84. package/dist/run-step/formatExecutor.d.ts.map +1 -0
  85. package/dist/run-step/formatExecutor.js +329 -0
  86. package/dist/run-step/formatExecutor.js.map +1 -0
  87. package/dist/run-step/index.d.ts +23 -0
  88. package/dist/run-step/index.d.ts.map +1 -0
  89. package/dist/run-step/index.js +627 -0
  90. package/dist/run-step/index.js.map +1 -0
  91. package/dist/run-step/inputResolver.d.ts +48 -0
  92. package/dist/run-step/inputResolver.d.ts.map +1 -0
  93. package/dist/run-step/inputResolver.js +268 -0
  94. package/dist/run-step/inputResolver.js.map +1 -0
  95. package/dist/run-step/types.d.ts +123 -0
  96. package/dist/run-step/types.d.ts.map +1 -0
  97. package/dist/run-step/types.js +6 -0
  98. package/dist/run-step/types.js.map +1 -0
  99. package/dist/validate-pack/checks/capabilitiesRegistry.d.ts +3 -0
  100. package/dist/validate-pack/checks/capabilitiesRegistry.d.ts.map +1 -0
  101. package/dist/validate-pack/checks/capabilitiesRegistry.js +83 -0
  102. package/dist/validate-pack/checks/capabilitiesRegistry.js.map +1 -0
  103. package/dist/validate-pack/checks/contextPolicies.d.ts +3 -0
  104. package/dist/validate-pack/checks/contextPolicies.d.ts.map +1 -0
  105. package/dist/validate-pack/checks/contextPolicies.js +40 -0
  106. package/dist/validate-pack/checks/contextPolicies.js.map +1 -0
  107. package/dist/validate-pack/checks/mvkExamples.d.ts +10 -0
  108. package/dist/validate-pack/checks/mvkExamples.d.ts.map +1 -0
  109. package/dist/validate-pack/checks/mvkExamples.js +77 -0
  110. package/dist/validate-pack/checks/mvkExamples.js.map +1 -0
  111. package/dist/validate-pack/checks/requiredFiles.d.ts +3 -0
  112. package/dist/validate-pack/checks/requiredFiles.d.ts.map +1 -0
  113. package/dist/validate-pack/checks/requiredFiles.js +35 -0
  114. package/dist/validate-pack/checks/requiredFiles.js.map +1 -0
  115. package/dist/validate-pack/checks/resolutionPolicy.d.ts +3 -0
  116. package/dist/validate-pack/checks/resolutionPolicy.d.ts.map +1 -0
  117. package/dist/validate-pack/checks/resolutionPolicy.js +88 -0
  118. package/dist/validate-pack/checks/resolutionPolicy.js.map +1 -0
  119. package/dist/validate-pack/checks/schemas.d.ts +16 -0
  120. package/dist/validate-pack/checks/schemas.d.ts.map +1 -0
  121. package/dist/validate-pack/checks/schemas.js +70 -0
  122. package/dist/validate-pack/checks/schemas.js.map +1 -0
  123. package/dist/validate-pack/index.d.ts +25 -0
  124. package/dist/validate-pack/index.d.ts.map +1 -0
  125. package/dist/validate-pack/index.js +95 -0
  126. package/dist/validate-pack/index.js.map +1 -0
  127. package/dist/validate-pack/reporting.d.ts +6 -0
  128. package/dist/validate-pack/reporting.d.ts.map +1 -0
  129. package/dist/validate-pack/reporting.js +40 -0
  130. package/dist/validate-pack/reporting.js.map +1 -0
  131. package/dist/validate-pack/types.d.ts +34 -0
  132. package/dist/validate-pack/types.d.ts.map +1 -0
  133. package/dist/validate-pack/types.js +8 -0
  134. package/dist/validate-pack/types.js.map +1 -0
  135. package/package.json +54 -0
@@ -0,0 +1,414 @@
1
+ /**
2
+ * seyola-runtime init — create a Client Alpha workspace.
3
+ *
4
+ * Idempotent. Safe to rerun. Never overwrites member-owned folders.
5
+ *
6
+ * What it does:
7
+ * 1. Validate args (workspace + pack paths).
8
+ * 2. Validate the pack via validate-pack (refuse to init from a broken pack).
9
+ * 3. Create substrate folders if missing (member-owned, never replace).
10
+ * 4. Copy the pack into <workspace>/.seyola/pack/ (system-owned, replaceable).
11
+ * 5. Copy approved skills into <workspace>/.claude/skills/ (system-owned, replaceable).
12
+ * 6. Write <workspace>/.seyola/version.json (system-owned).
13
+ * 7. Write <workspace>/.claude/settings.json (system-owned).
14
+ * 8. Write GETTING-STARTED.md and README.md if missing.
15
+ *
16
+ * Approved skills for Client Alpha:
17
+ * - linkedin-writer
18
+ * - brand-voice
19
+ * - audience-profile-builder
20
+ * - story-bank-builder
21
+ * - seyola-orchestrator (optional, behind --include-orchestrator)
22
+ *
23
+ * Member-owned folders the init command MUST NOT overwrite if they exist:
24
+ * _foundations, market, clients, runs, output
25
+ */
26
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, statSync, readdirSync, copyFileSync, rmSync } from "node:fs";
27
+ import { join, resolve, dirname, sep } from "node:path";
28
+ import { validatePack } from "../validate-pack/index.js";
29
+ const APPROVED_SKILLS_BASE = [
30
+ { name: "linkedin-writer", source: "skills/layer-3/linkedin-writer" },
31
+ { name: "brand-voice", source: "skills/layer-1/brand-voice" },
32
+ { name: "audience-profile-builder", source: "skills/layer-1/audience-profile-builder" },
33
+ { name: "story-bank-builder", source: "skills/layer-1/story-bank-builder" },
34
+ ];
35
+ const ORCHESTRATOR_SKILL = { name: "seyola-orchestrator", source: "skills/layer-3/seyola-orchestrator" };
36
+ const MEMBER_OWNED_DIRS = ["_foundations", "market", "market/audience-profiles", "market/language-bank", "clients", "runs", "output"];
37
+ const SYSTEM_OWNED_DIRS = [".seyola", ".seyola/pack", ".claude", ".claude/skills"];
38
+ export async function runInit(args) {
39
+ const start = Date.now();
40
+ const workspacePath = resolve(args.workspacePath);
41
+ const packPath = resolve(args.packPath);
42
+ const result = {
43
+ exitCode: 0,
44
+ status: "success",
45
+ workspace_path: workspacePath,
46
+ pack_path: packPath,
47
+ pack_version: "",
48
+ runtime_version: readRuntimeVersion(),
49
+ created: [],
50
+ preserved: [],
51
+ warnings: [],
52
+ errors: [],
53
+ duration_ms: 0,
54
+ };
55
+ if (!existsSync(packPath) || !statSync(packPath).isDirectory()) {
56
+ result.exitCode = 1;
57
+ result.status = "failed";
58
+ result.errors.push({ code: "pack_not_found", message: `--pack '${packPath}' does not exist or is not a directory.` });
59
+ return finalize(args, result, start);
60
+ }
61
+ const manifestPath = join(packPath, "manifests", "universal.pack.json");
62
+ if (!existsSync(manifestPath)) {
63
+ result.exitCode = 1;
64
+ result.status = "failed";
65
+ result.errors.push({ code: "pack_manifest_missing", message: `Pack manifest not found at ${manifestPath}.` });
66
+ return finalize(args, result, start);
67
+ }
68
+ try {
69
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
70
+ result.pack_version = manifest.version ?? "unknown";
71
+ }
72
+ catch (err) {
73
+ result.warnings.push({ code: "pack_manifest_read_warning", message: `Could not read pack version: ${err.message}` });
74
+ }
75
+ // Preflight: pack must validate clean.
76
+ const validation = await validatePack({ packPath, json: true });
77
+ if (validation.exitCode !== 0) {
78
+ result.exitCode = 1;
79
+ result.status = "failed";
80
+ result.errors.push({ code: "pack_validation_failed", message: `Pack at '${packPath}' fails validate-pack. Refusing to init from a broken pack.` });
81
+ return finalize(args, result, start);
82
+ }
83
+ // Create workspace root if missing.
84
+ ensureDir(workspacePath, result);
85
+ // Create substrate folders (member-owned). Each is created only if missing.
86
+ for (const dir of MEMBER_OWNED_DIRS) {
87
+ const abs = join(workspacePath, dir);
88
+ if (existsSync(abs)) {
89
+ result.preserved.push(dir + "/");
90
+ }
91
+ else {
92
+ mkdirSync(abs, { recursive: true });
93
+ result.created.push(dir + "/");
94
+ }
95
+ }
96
+ // Create system-owned folders. These are always replaced (per distribution model).
97
+ for (const dir of SYSTEM_OWNED_DIRS) {
98
+ const abs = join(workspacePath, dir);
99
+ if (!existsSync(abs)) {
100
+ mkdirSync(abs, { recursive: true });
101
+ result.created.push(dir + "/");
102
+ }
103
+ }
104
+ // Copy pack into .seyola/pack/. System-owned: replace if present.
105
+ // Edge case: if the source --pack already IS the destination .seyola/pack/
106
+ // (bundle scenario where setup.sh passes the bundled pack), skip the copy
107
+ // entirely. Otherwise we'd wipe the source before copying and end up with
108
+ // an empty pack directory.
109
+ const seyolaPackDest = join(workspacePath, ".seyola", "pack");
110
+ const samePath = resolve(packPath) === resolve(seyolaPackDest);
111
+ if (samePath) {
112
+ if (!existsSync(seyolaPackDest))
113
+ mkdirSync(seyolaPackDest, { recursive: true });
114
+ result.preserved.push(".seyola/pack/ (already in place from bundle)");
115
+ }
116
+ else {
117
+ if (existsSync(seyolaPackDest) && !args.force) {
118
+ rmSync(seyolaPackDest, { recursive: true, force: true });
119
+ mkdirSync(seyolaPackDest, { recursive: true });
120
+ }
121
+ else if (!existsSync(seyolaPackDest)) {
122
+ mkdirSync(seyolaPackDest, { recursive: true });
123
+ }
124
+ copyDir(packPath, seyolaPackDest, {
125
+ excludeRel: [".git", "node_modules", "dist", "test"],
126
+ });
127
+ result.created.push(".seyola/pack/ (copied from " + packPath + ")");
128
+ }
129
+ // Approved skills: copy into .claude/skills/. System-owned: replace.
130
+ const skillsList = [...APPROVED_SKILLS_BASE];
131
+ if (args.includeOrchestrator)
132
+ skillsList.push(ORCHESTRATOR_SKILL);
133
+ const claudeSkillsDir = join(workspacePath, ".claude", "skills");
134
+ // Wipe any prior approved-skill directories (only the ones we manage).
135
+ for (const skill of [...APPROVED_SKILLS_BASE, ORCHESTRATOR_SKILL]) {
136
+ const candidate = join(claudeSkillsDir, skill.name);
137
+ if (existsSync(candidate)) {
138
+ rmSync(candidate, { recursive: true, force: true });
139
+ }
140
+ }
141
+ for (const skill of skillsList) {
142
+ const sourceAbs = join(packPath, skill.source);
143
+ if (!existsSync(sourceAbs)) {
144
+ result.warnings.push({
145
+ code: "approved_skill_missing",
146
+ message: `Approved skill '${skill.name}' source not found at ${sourceAbs}. Skipping.`,
147
+ });
148
+ continue;
149
+ }
150
+ const dest = join(claudeSkillsDir, skill.name);
151
+ mkdirSync(dest, { recursive: true });
152
+ copyDir(sourceAbs, dest, {});
153
+ result.created.push(`.claude/skills/${skill.name}/`);
154
+ }
155
+ // Write .seyola/version.json. Always rewritten.
156
+ const versionFile = {
157
+ workspace_version: "0.1.0",
158
+ pack_version: result.pack_version,
159
+ runtime_version: result.runtime_version,
160
+ bundle_created_at: new Date().toISOString().slice(0, 10),
161
+ last_updated_at: new Date().toISOString(),
162
+ update_channel: "alpha",
163
+ approved_skills: skillsList.map((s) => s.name),
164
+ };
165
+ writeFileSync(join(workspacePath, ".seyola", "version.json"), JSON.stringify(versionFile, null, 2) + "\n", "utf8");
166
+ result.created.push(".seyola/version.json");
167
+ // Write .claude/settings.json. Always rewritten. Use POSIX-style forward slashes
168
+ // because Bash on Windows strips backslash escapes from unquoted args.
169
+ const posixWorkspace = workspacePath.split(sep).join("/");
170
+ const posixPack = (posixWorkspace + "/.seyola/pack").replace(/\\/g, "/");
171
+ const settings = {
172
+ env: {
173
+ SEYOLA_PACK_PATH: posixPack,
174
+ SEYOLA_WORKSPACE_PATH: posixWorkspace,
175
+ },
176
+ permissions: {
177
+ allow: [
178
+ "Bash(seyola-runtime:*)",
179
+ "Read(.seyola/**)",
180
+ ],
181
+ },
182
+ };
183
+ writeFileSync(join(workspacePath, ".claude", "settings.json"), JSON.stringify(settings, null, 2) + "\n", "utf8");
184
+ result.created.push(".claude/settings.json");
185
+ // README.md and GETTING-STARTED.md — only write if missing (member can edit).
186
+ const readmePath = join(workspacePath, "README.md");
187
+ if (!existsSync(readmePath)) {
188
+ writeFileSync(readmePath, defaultReadme(result.pack_version, result.runtime_version), "utf8");
189
+ result.created.push("README.md");
190
+ }
191
+ else {
192
+ result.preserved.push("README.md");
193
+ }
194
+ const gettingStartedPath = join(workspacePath, "GETTING-STARTED.md");
195
+ if (!existsSync(gettingStartedPath)) {
196
+ writeFileSync(gettingStartedPath, defaultGettingStarted(), "utf8");
197
+ result.created.push("GETTING-STARTED.md");
198
+ }
199
+ else {
200
+ result.preserved.push("GETTING-STARTED.md");
201
+ }
202
+ return finalize(args, result, start);
203
+ }
204
+ function ensureDir(path, result) {
205
+ if (!existsSync(path)) {
206
+ mkdirSync(path, { recursive: true });
207
+ result.created.push(path + "/ (created workspace root)");
208
+ }
209
+ }
210
+ function copyDir(src, dest, opts) {
211
+ const exclude = new Set(opts.excludeRel ?? []);
212
+ if (!existsSync(dest))
213
+ mkdirSync(dest, { recursive: true });
214
+ const entries = readdirSync(src, { withFileTypes: true });
215
+ for (const entry of entries) {
216
+ if (exclude.has(entry.name))
217
+ continue;
218
+ const s = join(src, entry.name);
219
+ const d = join(dest, entry.name);
220
+ if (entry.isDirectory()) {
221
+ copyDir(s, d, opts);
222
+ }
223
+ else if (entry.isFile()) {
224
+ mkdirSync(dirname(d), { recursive: true });
225
+ copyFileSync(s, d);
226
+ }
227
+ }
228
+ }
229
+ function readRuntimeVersion() {
230
+ try {
231
+ const here = dirname(new URL(import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, "$1"));
232
+ for (const candidate of [resolve(here, "../../package.json"), resolve(here, "../../../package.json")]) {
233
+ try {
234
+ const pkg = JSON.parse(readFileSync(candidate, "utf8"));
235
+ if (pkg.version)
236
+ return pkg.version;
237
+ }
238
+ catch {
239
+ // try next
240
+ }
241
+ }
242
+ }
243
+ catch {
244
+ // fall through
245
+ }
246
+ return "unknown";
247
+ }
248
+ function defaultReadme(packVersion, runtimeVersion) {
249
+ return `# Seyola — Client Alpha Workspace
250
+
251
+ This is your Seyola workspace. Open this folder in your terminal, run \`claude\`, and use the slash commands documented in \`GETTING-STARTED.md\`.
252
+
253
+ - Pack version: ${packVersion}
254
+ - Runtime version: ${runtimeVersion}
255
+ - Bundle channel: alpha
256
+
257
+ For step-by-step instructions, see \`GETTING-STARTED.md\`.
258
+
259
+ To check your workspace is healthy at any time:
260
+
261
+ \`\`\`
262
+ seyola-runtime doctor --workspace .
263
+ \`\`\`
264
+ `;
265
+ }
266
+ function defaultGettingStarted() {
267
+ return `# Getting Started with Seyola
268
+
269
+ Welcome. This folder is your Seyola workspace. Everything you create stays here.
270
+
271
+ ## What you need first
272
+
273
+ - Claude Code installed (https://claude.com/claude-code).
274
+ - A Claude subscription (Max recommended for content workflows).
275
+ - This folder open in your terminal.
276
+
277
+ ## Step-by-step (first run)
278
+
279
+ ### Step 1: Open this folder
280
+
281
+ \`\`\`
282
+ cd <path-to-this-folder>
283
+ \`\`\`
284
+
285
+ ### Step 2: Run Claude Code
286
+
287
+ \`\`\`
288
+ claude
289
+ \`\`\`
290
+
291
+ Claude Code will pick up the slash commands available in this workspace.
292
+
293
+ ### Step 3: Build your voice profile
294
+
295
+ \`\`\`
296
+ /brand-voice
297
+ \`\`\`
298
+
299
+ Interactive interview, ~30 minutes. Builds \`_foundations/voice-profile.md\`. Every drafting workflow reads this — running it first matters.
300
+
301
+ ### Step 4: Build your audience profile
302
+
303
+ \`\`\`
304
+ /audience-profile-builder
305
+ \`\`\`
306
+
307
+ Interactive, ~20 minutes. One profile per session. Stored under \`market/audience-profiles/\`.
308
+
309
+ ### Step 5: Build your story bank
310
+
311
+ \`\`\`
312
+ /story-bank-builder
313
+ \`\`\`
314
+
315
+ Interactive, ~30-45 minutes. Surfaces 5-15 signature stories. Stored at \`_foundations/story-bank.md\`.
316
+
317
+ ### Step 6: Write a LinkedIn post
318
+
319
+ \`\`\`
320
+ /linkedin-writer
321
+ \`\`\`
322
+
323
+ Paste an idea or topic. The runtime drafts ONE post in your voice using the Hell-Heaven-Bridge structure. Output lands under \`runs/run-YYYY-MM-DD-li<NN>/\` plus a final exported copy under \`output/socials/\`.
324
+
325
+ ## What gets saved where
326
+
327
+ | Folder | What lives there |
328
+ |---|---|
329
+ | \`_foundations/\` | Your voice profile, story bank. Member-owned. Never overwritten on update. |
330
+ | \`market/\` | Audience profiles, language bank. Member-owned. |
331
+ | \`clients/\` | Per-client engagement folders (proposals, calls, deliverables). Member-owned. |
332
+ | \`runs/\` | Each run of a workflow gets its own folder with TaskSpec, derivation records, and outputs. Member-owned. |
333
+ | \`output/\` | Final exported deliverables ready to ship. Member-owned. |
334
+ | \`.seyola/\` | System parts (pack, runtime version pointer). Replaced on update. Do not edit. |
335
+ | \`.claude/\` | Slash commands and settings. Regenerated on update. Do not edit. |
336
+
337
+ ## Health check
338
+
339
+ If something feels off, run:
340
+
341
+ \`\`\`
342
+ seyola-runtime doctor --workspace .
343
+ \`\`\`
344
+
345
+ It surfaces any missing parts (Claude Code not installed, pack invalid, missing voice profile, etc.).
346
+
347
+ ## What to do if Claude Code is not installed or authenticated
348
+
349
+ 1. Install Claude Code from the official site.
350
+ 2. Run \`claude\` once and complete the authentication flow.
351
+ 3. Verify by running \`claude --version\` (any non-zero output means you're authenticated).
352
+ 4. Come back to this folder and start at Step 2.
353
+
354
+ ## Folders you own (never overwritten on update)
355
+
356
+ \`_foundations/\`, \`market/\`, \`clients/\`, \`runs/\`, \`output/\` belong to you. Updates only touch \`.seyola/\` and \`.claude/\`. If you store anything important, put it under one of the member-owned folders.
357
+
358
+ ## Slash commands available in this alpha
359
+
360
+ - \`/brand-voice\`
361
+ - \`/audience-profile-builder\`
362
+ - \`/story-bank-builder\`
363
+ - \`/linkedin-writer\`
364
+
365
+ That's the complete loop for the alpha. More workflows ship in later releases.
366
+ `;
367
+ }
368
+ function finalize(args, result, start) {
369
+ result.duration_ms = Date.now() - start;
370
+ if (args.json) {
371
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
372
+ }
373
+ else {
374
+ process.stderr.write(formatHuman(result));
375
+ }
376
+ return result;
377
+ }
378
+ function formatHuman(result) {
379
+ const lines = [];
380
+ lines.push("");
381
+ lines.push(`seyola-runtime init: status=${result.status}, exitCode=${result.exitCode}`);
382
+ lines.push(` workspace: ${result.workspace_path}`);
383
+ lines.push(` pack: ${result.pack_path}`);
384
+ lines.push(` pack_version: ${result.pack_version}`);
385
+ lines.push(` runtime_version: ${result.runtime_version}`);
386
+ lines.push(` duration: ${result.duration_ms}ms`);
387
+ if (result.created.length > 0) {
388
+ lines.push("");
389
+ lines.push(" created:");
390
+ for (const c of result.created)
391
+ lines.push(` + ${c}`);
392
+ }
393
+ if (result.preserved.length > 0) {
394
+ lines.push("");
395
+ lines.push(" preserved (member-owned, untouched):");
396
+ for (const p of result.preserved)
397
+ lines.push(` = ${p}`);
398
+ }
399
+ if (result.warnings.length > 0) {
400
+ lines.push("");
401
+ lines.push(" warnings:");
402
+ for (const w of result.warnings)
403
+ lines.push(` [${w.code}] ${w.message}`);
404
+ }
405
+ if (result.errors.length > 0) {
406
+ lines.push("");
407
+ lines.push(" errors:");
408
+ for (const e of result.errors)
409
+ lines.push(` [${e.code}] ${e.message}`);
410
+ }
411
+ lines.push("");
412
+ return lines.join("\n");
413
+ }
414
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import Ajv2020 from "ajv/dist/2020.js";
2
+ import type { ValidateFunction, ErrorObject } from "ajv";
3
+ /**
4
+ * Configures an Ajv instance for draft-2020-12 schemas with the relaxed
5
+ * settings the Seyola contracts require:
6
+ *
7
+ * - strict: false because our schemas use custom x-seyola-* keywords that
8
+ * Ajv would otherwise reject as unknown.
9
+ * - validateFormats: true to enforce date / date-time formats.
10
+ * - $id schemes like "seyola://harness/task-spec/1.0.0" are allowed —
11
+ * Ajv's $id validation is permissive about scheme.
12
+ */
13
+ export declare function makeAjv(): Ajv2020;
14
+ /**
15
+ * Compiles a schema. Returns either the validator or a structured error.
16
+ * Never throws.
17
+ */
18
+ export interface CompileSuccess {
19
+ ok: true;
20
+ validate: ValidateFunction;
21
+ }
22
+ export interface CompileFailure {
23
+ ok: false;
24
+ message: string;
25
+ }
26
+ export type CompileResult = CompileSuccess | CompileFailure;
27
+ export declare function compileSchema(ajv: Ajv2020, schema: unknown): CompileResult;
28
+ /** Formats Ajv error objects into one human-readable line each. */
29
+ export declare function formatAjvErrors(errors: ErrorObject[] | null | undefined): string[];
30
+ //# sourceMappingURL=ajvSetup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajvSetup.d.ts","sourceRoot":"","sources":["../../src/lib/ajvSetup.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAEzD;;;;;;;;;GASG;AACH,wBAAgB,OAAO,IAAI,OAAO,CAQjC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;AAE5D,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,aAAa,CAU1E;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAOlF"}
@@ -0,0 +1,44 @@
1
+ import Ajv2020 from "ajv/dist/2020.js";
2
+ import addFormats from "ajv-formats";
3
+ /**
4
+ * Configures an Ajv instance for draft-2020-12 schemas with the relaxed
5
+ * settings the Seyola contracts require:
6
+ *
7
+ * - strict: false because our schemas use custom x-seyola-* keywords that
8
+ * Ajv would otherwise reject as unknown.
9
+ * - validateFormats: true to enforce date / date-time formats.
10
+ * - $id schemes like "seyola://harness/task-spec/1.0.0" are allowed —
11
+ * Ajv's $id validation is permissive about scheme.
12
+ */
13
+ export function makeAjv() {
14
+ const ajv = new Ajv2020({
15
+ strict: false,
16
+ allErrors: true,
17
+ allowUnionTypes: true,
18
+ });
19
+ addFormats(ajv);
20
+ return ajv;
21
+ }
22
+ export function compileSchema(ajv, schema) {
23
+ try {
24
+ const validate = ajv.compile(schema);
25
+ return { ok: true, validate };
26
+ }
27
+ catch (err) {
28
+ return {
29
+ ok: false,
30
+ message: err instanceof Error ? err.message : String(err),
31
+ };
32
+ }
33
+ }
34
+ /** Formats Ajv error objects into one human-readable line each. */
35
+ export function formatAjvErrors(errors) {
36
+ if (!errors || errors.length === 0)
37
+ return [];
38
+ return errors.map((e) => {
39
+ const path = e.instancePath || "(root)";
40
+ const params = e.params ? ` ${JSON.stringify(e.params)}` : "";
41
+ return `${path} ${e.message ?? ""}${params}`;
42
+ });
43
+ }
44
+ //# sourceMappingURL=ajvSetup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajvSetup.js","sourceRoot":"","sources":["../../src/lib/ajvSetup.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,UAAU,MAAM,aAAa,CAAC;AAGrC;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC;QACtB,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC;AAkBD,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,MAAe;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAgB,CAAC,CAAC;QAC/C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SAC1D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,MAAwC;IACtE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,QAAQ,CAAC;QACxC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface LoadedJson<T = unknown> {
2
+ ok: true;
3
+ path: string;
4
+ data: T;
5
+ }
6
+ export interface LoadJsonError {
7
+ ok: false;
8
+ path: string;
9
+ code: "file_not_found" | "read_error" | "parse_error";
10
+ message: string;
11
+ }
12
+ export type LoadJsonResult<T = unknown> = LoadedJson<T> | LoadJsonError;
13
+ /**
14
+ * Reads a JSON file, parses it, and attaches the source path to any error
15
+ * so downstream validators can point users at the offending file.
16
+ *
17
+ * Never throws. Returns a discriminated union so callers handle failure
18
+ * explicitly.
19
+ */
20
+ export declare function loadJson<T = unknown>(absolutePath: string): LoadJsonResult<T>;
21
+ //# sourceMappingURL=loadJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadJson.d.ts","sourceRoot":"","sources":["../../src/lib/loadJson.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,GAAG,YAAY,GAAG,aAAa,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAiC7E"}
@@ -0,0 +1,43 @@
1
+ import { readFileSync, existsSync } from "node:fs";
2
+ /**
3
+ * Reads a JSON file, parses it, and attaches the source path to any error
4
+ * so downstream validators can point users at the offending file.
5
+ *
6
+ * Never throws. Returns a discriminated union so callers handle failure
7
+ * explicitly.
8
+ */
9
+ export function loadJson(absolutePath) {
10
+ if (!existsSync(absolutePath)) {
11
+ return {
12
+ ok: false,
13
+ path: absolutePath,
14
+ code: "file_not_found",
15
+ message: `File not found: ${absolutePath}`,
16
+ };
17
+ }
18
+ let raw;
19
+ try {
20
+ raw = readFileSync(absolutePath, "utf8");
21
+ }
22
+ catch (err) {
23
+ return {
24
+ ok: false,
25
+ path: absolutePath,
26
+ code: "read_error",
27
+ message: `Could not read file: ${err instanceof Error ? err.message : String(err)}`,
28
+ };
29
+ }
30
+ try {
31
+ const data = JSON.parse(raw);
32
+ return { ok: true, path: absolutePath, data };
33
+ }
34
+ catch (err) {
35
+ return {
36
+ ok: false,
37
+ path: absolutePath,
38
+ code: "parse_error",
39
+ message: `Invalid JSON: ${err instanceof Error ? err.message : String(err)}`,
40
+ };
41
+ }
42
+ }
43
+ //# sourceMappingURL=loadJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadJson.js","sourceRoot":"","sources":["../../src/lib/loadJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAiBnD;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAc,YAAoB;IACxD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,mBAAmB,YAAY,EAAE;SAC3C,CAAC;IACJ,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,wBAAwB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SACpF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;QAClC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface LoadedYaml<T = unknown> {
2
+ ok: true;
3
+ path: string;
4
+ data: T;
5
+ }
6
+ export interface LoadYamlError {
7
+ ok: false;
8
+ path: string;
9
+ code: "file_not_found" | "read_error" | "parse_error";
10
+ message: string;
11
+ }
12
+ export type LoadYamlResult<T = unknown> = LoadedYaml<T> | LoadYamlError;
13
+ /**
14
+ * Reads a YAML file and parses it. Used for TaskSpec and WorkPlan examples.
15
+ * Returns discriminated union so callers handle failure explicitly.
16
+ */
17
+ export declare function loadYaml<T = unknown>(absolutePath: string): LoadYamlResult<T>;
18
+ //# sourceMappingURL=loadYaml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadYaml.d.ts","sourceRoot":"","sources":["../../src/lib/loadYaml.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,GAAG,YAAY,GAAG,aAAa,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;AAExE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAiC7E"}
@@ -0,0 +1,41 @@
1
+ import { readFileSync, existsSync } from "node:fs";
2
+ import { parse as parseYaml } from "yaml";
3
+ /**
4
+ * Reads a YAML file and parses it. Used for TaskSpec and WorkPlan examples.
5
+ * Returns discriminated union so callers handle failure explicitly.
6
+ */
7
+ export function loadYaml(absolutePath) {
8
+ if (!existsSync(absolutePath)) {
9
+ return {
10
+ ok: false,
11
+ path: absolutePath,
12
+ code: "file_not_found",
13
+ message: `File not found: ${absolutePath}`,
14
+ };
15
+ }
16
+ let raw;
17
+ try {
18
+ raw = readFileSync(absolutePath, "utf8");
19
+ }
20
+ catch (err) {
21
+ return {
22
+ ok: false,
23
+ path: absolutePath,
24
+ code: "read_error",
25
+ message: `Could not read file: ${err instanceof Error ? err.message : String(err)}`,
26
+ };
27
+ }
28
+ try {
29
+ const data = parseYaml(raw);
30
+ return { ok: true, path: absolutePath, data };
31
+ }
32
+ catch (err) {
33
+ return {
34
+ ok: false,
35
+ path: absolutePath,
36
+ code: "parse_error",
37
+ message: `Invalid YAML: ${err instanceof Error ? err.message : String(err)}`,
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=loadYaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadYaml.js","sourceRoot":"","sources":["../../src/lib/loadYaml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAiB1C;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAc,YAAoB;IACxD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,mBAAmB,YAAY,EAAE;SAC3C,CAAC;IACJ,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,wBAAwB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SACpF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAM,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}