@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,57 @@
1
+ /**
2
+ * Resolver dry-run for typed-config inputs. Walks the 8-step precedence
3
+ * declared in .composer/resolution-policy.json. Returns the address that
4
+ * WOULD be selected (does not commit; that's M3 work). Lockfile takes
5
+ * precedence when present.
6
+ */
7
+ /**
8
+ * Resolve a typed-config family by walking precedence.
9
+ *
10
+ * For M2 we only need:
11
+ * - lockfile (if present) → use the address
12
+ * - else first config of the family in member > creator > pack > universal scope
13
+ *
14
+ * No member/creator scopes ship in the v1.9.4 pack, so most resolution
15
+ * lands at universal.
16
+ */
17
+ export function resolveConfig(family, configs, lockfile) {
18
+ // Step 1: lockfile pin (loose match: any resolved value with this family).
19
+ if (lockfile?.resolved_values) {
20
+ for (const [, val] of Object.entries(lockfile.resolved_values)) {
21
+ const parsed = parseAddress(val.address);
22
+ if (parsed && parsed.family === family) {
23
+ return {
24
+ address: val.address,
25
+ source: "lockfile",
26
+ config: configs.configs[val.address],
27
+ };
28
+ }
29
+ }
30
+ }
31
+ // Steps 3-6: walk by scope precedence.
32
+ const scopeOrder = ["member", "creator", "pack", "universal"];
33
+ for (const scope of scopeOrder) {
34
+ for (const [address, entry] of Object.entries(configs.configs)) {
35
+ if (entry.type_family === family && entry.scope === scope) {
36
+ return { address, source: scope, config: entry };
37
+ }
38
+ }
39
+ }
40
+ return { address: "", source: "unresolved" };
41
+ }
42
+ function parseAddress(address) {
43
+ // Format: scope:family:name@version (e.g., universal:voice:plain-business@v1)
44
+ const at = address.lastIndexOf("@");
45
+ if (at < 0)
46
+ return null;
47
+ const head = address.slice(0, at);
48
+ const version = address.slice(at + 1);
49
+ const parts = head.split(":");
50
+ if (parts.length < 3)
51
+ return null;
52
+ const scope = parts[0];
53
+ const family = parts[1];
54
+ const name = parts.slice(2).join(":");
55
+ return { scope, family, name, version };
56
+ }
57
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/compile-plan/resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,OAAwB,EACxB,QAAyB;IAEzB,2EAA2E;IAC3E,IAAI,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACvC,OAAO;oBACL,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;iBACrC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9D,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/D,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAkC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAChF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,8EAA8E;IAC9E,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Internal types for compile-plan. Mirrors the structures we read from the
3
+ * pack registries and the WorkPlan we emit. Kept loose deliberately —
4
+ * strict generation from JSON Schema is a future enhancement.
5
+ */
6
+ export interface TaskSpec {
7
+ id: string;
8
+ raw_intent: string;
9
+ parsed: {
10
+ artifact_target: string;
11
+ domain?: string;
12
+ source_material?: Array<{
13
+ type: string;
14
+ ref?: string;
15
+ content?: string;
16
+ description?: string;
17
+ }>;
18
+ audience?: string;
19
+ quality_bar?: string[];
20
+ format_target?: string;
21
+ };
22
+ constraints?: {
23
+ deadline?: string;
24
+ deadline_time?: string;
25
+ confidentiality?: string;
26
+ max_token_budget?: number;
27
+ max_wall_clock_seconds?: number;
28
+ must_use_skills?: string[];
29
+ must_avoid_skills?: string[];
30
+ };
31
+ success_criteria?: Array<{
32
+ rubric: string;
33
+ threshold: number;
34
+ scope?: "per_step" | "final";
35
+ }>;
36
+ boundary: {
37
+ risk_class: string;
38
+ requires_human_approval_for?: string[];
39
+ data_egress_allowed?: boolean;
40
+ side_effects_allowed?: boolean;
41
+ };
42
+ context?: Record<string, unknown>;
43
+ }
44
+ export interface CapabilityEntry {
45
+ operation?: string;
46
+ artifact_family?: string;
47
+ output_artifact_type?: string;
48
+ input_artifact_types?: string[];
49
+ input_source?: string;
50
+ input_format?: string;
51
+ output_format?: string;
52
+ domain?: string;
53
+ risk_class?: string;
54
+ confidentiality_class?: string;
55
+ cost_class?: string;
56
+ latency_class?: string;
57
+ verifiability?: string;
58
+ verify_rubric?: string | string[];
59
+ requires_tools?: string[];
60
+ requires_configs?: string[];
61
+ requires_effects?: string[];
62
+ can_chain_after?: string[];
63
+ can_chain_before?: string[];
64
+ provided_by_skills?: string[];
65
+ provider_status?: string;
66
+ description?: string;
67
+ format_adapter_id?: string;
68
+ format_config_address?: string;
69
+ effect_request_template?: {
70
+ type?: string;
71
+ target_template?: string;
72
+ };
73
+ }
74
+ export interface CapabilityRegistry {
75
+ capabilities: Record<string, CapabilityEntry>;
76
+ }
77
+ export interface ArtifactEntry {
78
+ family: string;
79
+ description?: string;
80
+ required_sections?: string[];
81
+ optional_sections?: string[];
82
+ valid_formats?: string[];
83
+ quality_rubrics?: string[];
84
+ typical_inputs?: string[];
85
+ typical_skills?: string[];
86
+ typical_format_adapters?: string[];
87
+ typical_effects?: string[];
88
+ risk_class_default?: string;
89
+ introduced_by_pack?: string;
90
+ }
91
+ export interface ArtifactRegistry {
92
+ artifact_types: Record<string, ArtifactEntry>;
93
+ }
94
+ export interface ConfigEntry {
95
+ type_family: string;
96
+ scope: string;
97
+ name: string;
98
+ version: string;
99
+ source_file?: string;
100
+ valid_from?: string;
101
+ valid_to?: string | null;
102
+ shape_contract?: string;
103
+ shape_version?: string;
104
+ }
105
+ export interface ConfigsRegistry {
106
+ configs: Record<string, ConfigEntry>;
107
+ }
108
+ export interface TypeRegistry {
109
+ families: Record<string, {
110
+ shape_contract: string;
111
+ shape_version: string;
112
+ introduced_by_pack: string;
113
+ }>;
114
+ }
115
+ export interface ResolutionPolicy {
116
+ resolution_order: Array<{
117
+ level: string;
118
+ step: number;
119
+ description: string;
120
+ }>;
121
+ }
122
+ export interface PlanningPolicy {
123
+ compilation_algorithm: Record<string, unknown>;
124
+ determinism_guarantees?: Record<string, unknown>;
125
+ }
126
+ export interface Lockfile {
127
+ lockfile_version: number;
128
+ resolved_values?: Record<string, {
129
+ address: string;
130
+ }>;
131
+ installed_packs?: Record<string, {
132
+ version: string;
133
+ manifest_hash?: string;
134
+ }>;
135
+ }
136
+ export interface WorkPlanStep {
137
+ id: string;
138
+ kind: "skill" | "format" | "tool" | "effect" | "branch" | "parallel" | "subagent";
139
+ capability?: string;
140
+ skill_ref?: string;
141
+ adapter?: string;
142
+ tool?: string;
143
+ effect_request?: {
144
+ type?: string;
145
+ target?: string;
146
+ payload?: unknown;
147
+ };
148
+ depends_on?: string[];
149
+ inputs?: Record<string, unknown>;
150
+ produces?: string;
151
+ verify?: string | string[];
152
+ context_budget?: {
153
+ max_tokens?: number;
154
+ skill_instructions?: number;
155
+ retrieved_evidence?: number;
156
+ working_state?: number;
157
+ };
158
+ requires_approval?: boolean;
159
+ }
160
+ export interface WorkPlan {
161
+ id: string;
162
+ task_spec_ref: string;
163
+ compiler_version?: string;
164
+ compiled_at?: string;
165
+ context_budget?: {
166
+ max_total_tokens?: number;
167
+ model_default?: string;
168
+ };
169
+ steps: WorkPlanStep[];
170
+ fallback_tree?: Record<string, string>;
171
+ artifacts_produced?: Array<{
172
+ type: string;
173
+ path: string;
174
+ produced_by_step?: string;
175
+ }>;
176
+ effects_to_commit?: Array<{
177
+ id: string;
178
+ risk: string;
179
+ idempotent?: boolean;
180
+ }>;
181
+ }
182
+ export interface CompilationWarning {
183
+ code: string;
184
+ message: string;
185
+ details?: Record<string, unknown>;
186
+ }
187
+ export interface CompilationError {
188
+ code: string;
189
+ message: string;
190
+ details?: Record<string, unknown>;
191
+ }
192
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/compile-plan/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Internal types for compile-plan. Mirrors the structures we read from the
3
+ * pack registries and the WorkPlan we emit. Kept loose deliberately —
4
+ * strict generation from JSON Schema is a future enhancement.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/compile-plan/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * seyola-runtime doctor — health check for a Client Alpha workspace.
3
+ *
4
+ * Reports each check as PASS / WARN / FAIL with a one-line message.
5
+ * Exit 0 if no FAIL items. Exit 1 if any FAIL.
6
+ *
7
+ * Checks:
8
+ * - Claude Code on PATH (best-effort; warning if not detectable).
9
+ * - Runtime version present.
10
+ * - Pack path exists and validate-pack passes.
11
+ * - .seyola/version.json exists and parses.
12
+ * - .claude/skills/ exists and contains the approved skills.
13
+ * - Required workspace folders exist.
14
+ * - Workspace is writable.
15
+ * - Member substrate status (voice profile, audience profile, story bank).
16
+ */
17
+ export interface DoctorInputs {
18
+ workspacePath: string;
19
+ json?: boolean;
20
+ }
21
+ type CheckLevel = "pass" | "warn" | "fail";
22
+ export interface DoctorCheck {
23
+ name: string;
24
+ level: CheckLevel;
25
+ message: string;
26
+ details?: Record<string, unknown>;
27
+ }
28
+ export interface DoctorResult {
29
+ exitCode: number;
30
+ status: "healthy" | "degraded" | "broken";
31
+ workspace_path: string;
32
+ pack_path?: string;
33
+ versions: {
34
+ runtime: string;
35
+ pack?: string;
36
+ workspace?: string;
37
+ };
38
+ checks: DoctorCheck[];
39
+ duration_ms: number;
40
+ }
41
+ export declare function runDoctor(args: DoctorInputs): Promise<DoctorResult>;
42
+ export {};
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAsJzE"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * seyola-runtime doctor — health check for a Client Alpha workspace.
3
+ *
4
+ * Reports each check as PASS / WARN / FAIL with a one-line message.
5
+ * Exit 0 if no FAIL items. Exit 1 if any FAIL.
6
+ *
7
+ * Checks:
8
+ * - Claude Code on PATH (best-effort; warning if not detectable).
9
+ * - Runtime version present.
10
+ * - Pack path exists and validate-pack passes.
11
+ * - .seyola/version.json exists and parses.
12
+ * - .claude/skills/ exists and contains the approved skills.
13
+ * - Required workspace folders exist.
14
+ * - Workspace is writable.
15
+ * - Member substrate status (voice profile, audience profile, story bank).
16
+ */
17
+ import { existsSync, readFileSync, statSync, accessSync, constants as fsConstants, writeFileSync, unlinkSync, readdirSync } from "node:fs";
18
+ import { join, resolve, dirname } from "node:path";
19
+ import { execSync } from "node:child_process";
20
+ import { validatePack } from "../validate-pack/index.js";
21
+ const APPROVED_SKILL_NAMES = ["linkedin-writer", "brand-voice", "audience-profile-builder", "story-bank-builder"];
22
+ export async function runDoctor(args) {
23
+ const start = Date.now();
24
+ const ws = resolve(args.workspacePath);
25
+ const result = {
26
+ exitCode: 0,
27
+ status: "healthy",
28
+ workspace_path: ws,
29
+ versions: { runtime: readRuntimeVersion() },
30
+ checks: [],
31
+ duration_ms: 0,
32
+ };
33
+ // 1. Workspace exists.
34
+ if (!existsSync(ws) || !statSync(ws).isDirectory()) {
35
+ result.checks.push({ name: "workspace_exists", level: "fail", message: `Workspace directory does not exist at '${ws}'.` });
36
+ return finalize(args, result, start);
37
+ }
38
+ result.checks.push({ name: "workspace_exists", level: "pass", message: `Workspace at ${ws}.` });
39
+ // 2. Workspace writable.
40
+ try {
41
+ const probe = join(ws, ".seyola-doctor-probe");
42
+ writeFileSync(probe, "x", "utf8");
43
+ unlinkSync(probe);
44
+ result.checks.push({ name: "workspace_writable", level: "pass", message: "Workspace is writable." });
45
+ }
46
+ catch (err) {
47
+ result.checks.push({ name: "workspace_writable", level: "fail", message: `Workspace is not writable: ${err.message}` });
48
+ }
49
+ // 3. Required folders exist.
50
+ const requiredDirs = ["_foundations", "market", "clients", "runs", "output", ".seyola", ".claude", ".claude/skills"];
51
+ for (const d of requiredDirs) {
52
+ const abs = join(ws, d);
53
+ if (existsSync(abs) && statSync(abs).isDirectory()) {
54
+ result.checks.push({ name: `dir:${d}`, level: "pass", message: `${d}/ present.` });
55
+ }
56
+ else {
57
+ result.checks.push({ name: `dir:${d}`, level: "fail", message: `${d}/ missing. Run 'seyola-runtime init' to repair.` });
58
+ }
59
+ }
60
+ // 4. version.json
61
+ const versionPath = join(ws, ".seyola", "version.json");
62
+ if (!existsSync(versionPath)) {
63
+ result.checks.push({ name: "version_json", level: "fail", message: ".seyola/version.json missing." });
64
+ }
65
+ else {
66
+ try {
67
+ const v = JSON.parse(readFileSync(versionPath, "utf8"));
68
+ result.versions.pack = v.pack_version;
69
+ result.versions.workspace = v.workspace_version;
70
+ result.checks.push({
71
+ name: "version_json",
72
+ level: "pass",
73
+ message: `version.json: workspace=${v.workspace_version}, pack=${v.pack_version}, runtime=${v.runtime_version}.`,
74
+ });
75
+ }
76
+ catch (err) {
77
+ result.checks.push({ name: "version_json", level: "fail", message: `.seyola/version.json malformed: ${err.message}` });
78
+ }
79
+ }
80
+ // 5. Pack present and validate-pack clean.
81
+ const packDir = join(ws, ".seyola", "pack");
82
+ if (!existsSync(packDir)) {
83
+ result.checks.push({ name: "pack_present", level: "fail", message: `.seyola/pack/ missing. Run 'seyola-runtime init --workspace . --pack <source>'.` });
84
+ }
85
+ else {
86
+ result.pack_path = packDir;
87
+ const validation = await validatePack({ packPath: packDir, json: true });
88
+ if (validation.exitCode === 0) {
89
+ result.checks.push({ name: "validate_pack", level: "pass", message: "validate-pack clean." });
90
+ }
91
+ else {
92
+ result.checks.push({
93
+ name: "validate_pack",
94
+ level: "fail",
95
+ message: `validate-pack failed. Run 'seyola-runtime validate-pack --pack ${packDir}' for details.`,
96
+ });
97
+ }
98
+ }
99
+ // 6. Approved skills exposed under .claude/skills/.
100
+ const skillsDir = join(ws, ".claude", "skills");
101
+ if (existsSync(skillsDir)) {
102
+ const exposed = readdirSync(skillsDir, { withFileTypes: true })
103
+ .filter((e) => e.isDirectory())
104
+ .map((e) => e.name);
105
+ for (const name of APPROVED_SKILL_NAMES) {
106
+ const skillFile = join(skillsDir, name, "SKILL.md");
107
+ if (exposed.includes(name) && existsSync(skillFile)) {
108
+ result.checks.push({ name: `skill:${name}`, level: "pass", message: `/${name} exposed.` });
109
+ }
110
+ else {
111
+ result.checks.push({
112
+ name: `skill:${name}`,
113
+ level: "fail",
114
+ message: `/${name} missing under .claude/skills/. Run 'seyola-runtime init' to repair.`,
115
+ });
116
+ }
117
+ }
118
+ }
119
+ // 7. Member substrate status.
120
+ const voiceFile = join(ws, "_foundations", "voice-profile.md");
121
+ if (existsSync(voiceFile)) {
122
+ result.checks.push({ name: "substrate:voice", level: "pass", message: "_foundations/voice-profile.md present." });
123
+ }
124
+ else {
125
+ result.checks.push({ name: "substrate:voice", level: "warn", message: "No voice profile yet. Run /brand-voice in chat to build it." });
126
+ }
127
+ const audienceDir = join(ws, "market", "audience-profiles");
128
+ let audienceCount = 0;
129
+ if (existsSync(audienceDir)) {
130
+ audienceCount = readdirSync(audienceDir, { withFileTypes: true }).filter((e) => e.isFile() && e.name.endsWith(".md")).length;
131
+ }
132
+ if (audienceCount > 0) {
133
+ result.checks.push({ name: "substrate:audience", level: "pass", message: `market/audience-profiles/ has ${audienceCount} profile(s).` });
134
+ }
135
+ else {
136
+ result.checks.push({ name: "substrate:audience", level: "warn", message: "No audience profiles yet. Run /audience-profile-builder in chat." });
137
+ }
138
+ const storyFile = join(ws, "_foundations", "story-bank.md");
139
+ if (existsSync(storyFile)) {
140
+ result.checks.push({ name: "substrate:story", level: "pass", message: "_foundations/story-bank.md present." });
141
+ }
142
+ else {
143
+ result.checks.push({ name: "substrate:story", level: "warn", message: "No story bank yet. Run /story-bank-builder in chat." });
144
+ }
145
+ // 8. Claude Code on PATH (best-effort).
146
+ try {
147
+ execSync("claude --version", { stdio: "pipe", timeout: 5000 });
148
+ result.checks.push({ name: "claude_code", level: "pass", message: "Claude Code is on PATH." });
149
+ }
150
+ catch {
151
+ result.checks.push({
152
+ name: "claude_code",
153
+ level: "warn",
154
+ message: "Could not detect Claude Code on PATH. Install from https://claude.com/claude-code if you have not yet.",
155
+ });
156
+ }
157
+ // Roll up.
158
+ const fails = result.checks.filter((c) => c.level === "fail").length;
159
+ const warns = result.checks.filter((c) => c.level === "warn").length;
160
+ if (fails > 0) {
161
+ result.status = "broken";
162
+ result.exitCode = 1;
163
+ }
164
+ else if (warns > 0) {
165
+ result.status = "degraded";
166
+ result.exitCode = 0;
167
+ }
168
+ else {
169
+ result.status = "healthy";
170
+ result.exitCode = 0;
171
+ }
172
+ return finalize(args, result, start);
173
+ }
174
+ function readRuntimeVersion() {
175
+ try {
176
+ const here = dirname(new URL(import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, "$1"));
177
+ for (const candidate of [resolve(here, "../../package.json"), resolve(here, "../../../package.json")]) {
178
+ try {
179
+ const pkg = JSON.parse(readFileSync(candidate, "utf8"));
180
+ if (pkg.version)
181
+ return pkg.version;
182
+ }
183
+ catch {
184
+ // try next
185
+ }
186
+ }
187
+ }
188
+ catch {
189
+ // fall through
190
+ }
191
+ return "unknown";
192
+ }
193
+ void fsConstants;
194
+ void accessSync;
195
+ function finalize(args, result, start) {
196
+ result.duration_ms = Date.now() - start;
197
+ if (args.json) {
198
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
199
+ }
200
+ else {
201
+ process.stderr.write(formatHuman(result));
202
+ }
203
+ return result;
204
+ }
205
+ function formatHuman(result) {
206
+ const lines = [];
207
+ lines.push("");
208
+ lines.push(`seyola-runtime doctor: status=${result.status}, exitCode=${result.exitCode}`);
209
+ lines.push(` workspace: ${result.workspace_path}`);
210
+ lines.push(` runtime: ${result.versions.runtime}`);
211
+ if (result.versions.pack)
212
+ lines.push(` pack: ${result.versions.pack}`);
213
+ if (result.versions.workspace)
214
+ lines.push(` workspace ver: ${result.versions.workspace}`);
215
+ lines.push(` duration: ${result.duration_ms}ms`);
216
+ lines.push("");
217
+ for (const c of result.checks) {
218
+ const tag = c.level === "pass" ? "PASS" : c.level === "warn" ? "WARN" : "FAIL";
219
+ lines.push(` ${tag.padEnd(4)} ${c.name.padEnd(28)} ${c.message}`);
220
+ }
221
+ lines.push("");
222
+ return lines.join("\n");
223
+ }
224
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
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
+ export interface InitInputs {
27
+ workspacePath: string;
28
+ packPath: string;
29
+ includeOrchestrator?: boolean;
30
+ force?: boolean;
31
+ json?: boolean;
32
+ }
33
+ export interface InitResult {
34
+ exitCode: number;
35
+ status: "success" | "failed";
36
+ workspace_path: string;
37
+ pack_path: string;
38
+ pack_version: string;
39
+ runtime_version: string;
40
+ created: string[];
41
+ preserved: string[];
42
+ warnings: Array<{
43
+ code: string;
44
+ message: string;
45
+ }>;
46
+ errors: Array<{
47
+ code: string;
48
+ message: string;
49
+ }>;
50
+ duration_ms: number;
51
+ }
52
+ export declare function runInit(args: InitInputs): Promise<InitResult>;
53
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;CACrB;AAcD,wBAAsB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CA4KnE"}