@momentiq/dark-factory-cli 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/adapters/static-schema-lint.js +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +18 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/onboard.d.ts +69 -0
  6. package/dist/commands/onboard.d.ts.map +1 -0
  7. package/dist/commands/onboard.js +323 -0
  8. package/dist/commands/onboard.js.map +1 -0
  9. package/dist/cycle-doc-validator/validate_cycle_doc.py +131 -60
  10. package/dist/doctor.d.ts.map +1 -1
  11. package/dist/doctor.js +20 -0
  12. package/dist/doctor.js.map +1 -1
  13. package/dist/mcp/server.d.ts.map +1 -1
  14. package/dist/mcp/server.js +2 -0
  15. package/dist/mcp/server.js.map +1 -1
  16. package/dist/mcp/tools/onboard.d.ts +6 -0
  17. package/dist/mcp/tools/onboard.d.ts.map +1 -0
  18. package/dist/mcp/tools/onboard.js +115 -0
  19. package/dist/mcp/tools/onboard.js.map +1 -0
  20. package/dist/onboard/analyze.d.ts +7 -0
  21. package/dist/onboard/analyze.d.ts.map +1 -0
  22. package/dist/onboard/analyze.js +86 -0
  23. package/dist/onboard/analyze.js.map +1 -0
  24. package/dist/onboard/analyzer.d.ts +15 -0
  25. package/dist/onboard/analyzer.d.ts.map +1 -0
  26. package/dist/onboard/analyzer.js +52 -0
  27. package/dist/onboard/analyzer.js.map +1 -0
  28. package/dist/onboard/analyzers/ci.d.ts +3 -0
  29. package/dist/onboard/analyzers/ci.d.ts.map +1 -0
  30. package/dist/onboard/analyzers/ci.js +112 -0
  31. package/dist/onboard/analyzers/ci.js.map +1 -0
  32. package/dist/onboard/analyzers/docs.d.ts +3 -0
  33. package/dist/onboard/analyzers/docs.d.ts.map +1 -0
  34. package/dist/onboard/analyzers/docs.js +151 -0
  35. package/dist/onboard/analyzers/docs.js.map +1 -0
  36. package/dist/onboard/analyzers/git.d.ts +3 -0
  37. package/dist/onboard/analyzers/git.d.ts.map +1 -0
  38. package/dist/onboard/analyzers/git.js +87 -0
  39. package/dist/onboard/analyzers/git.js.map +1 -0
  40. package/dist/onboard/analyzers/lockfile.d.ts +3 -0
  41. package/dist/onboard/analyzers/lockfile.d.ts.map +1 -0
  42. package/dist/onboard/analyzers/lockfile.js +285 -0
  43. package/dist/onboard/analyzers/lockfile.js.map +1 -0
  44. package/dist/onboard/analyzers/manifest.d.ts +3 -0
  45. package/dist/onboard/analyzers/manifest.d.ts.map +1 -0
  46. package/dist/onboard/analyzers/manifest.js +228 -0
  47. package/dist/onboard/analyzers/manifest.js.map +1 -0
  48. package/dist/onboard/analyzers/tree.d.ts +3 -0
  49. package/dist/onboard/analyzers/tree.d.ts.map +1 -0
  50. package/dist/onboard/analyzers/tree.js +196 -0
  51. package/dist/onboard/analyzers/tree.js.map +1 -0
  52. package/dist/onboard/apply-plan.d.ts +29 -0
  53. package/dist/onboard/apply-plan.d.ts.map +1 -0
  54. package/dist/onboard/apply-plan.js +80 -0
  55. package/dist/onboard/apply-plan.js.map +1 -0
  56. package/dist/onboard/auto-profile.d.ts +3 -0
  57. package/dist/onboard/auto-profile.d.ts.map +1 -0
  58. package/dist/onboard/auto-profile.js +20 -0
  59. package/dist/onboard/auto-profile.js.map +1 -0
  60. package/dist/onboard/fixtures/replay-git-history.d.ts +20 -0
  61. package/dist/onboard/fixtures/replay-git-history.d.ts.map +1 -0
  62. package/dist/onboard/fixtures/replay-git-history.js +91 -0
  63. package/dist/onboard/fixtures/replay-git-history.js.map +1 -0
  64. package/dist/onboard/generate-plan.d.ts +18 -0
  65. package/dist/onboard/generate-plan.d.ts.map +1 -0
  66. package/dist/onboard/generate-plan.js +68 -0
  67. package/dist/onboard/generate-plan.js.map +1 -0
  68. package/dist/onboard/llm-client.d.ts +45 -0
  69. package/dist/onboard/llm-client.d.ts.map +1 -0
  70. package/dist/onboard/llm-client.js +84 -0
  71. package/dist/onboard/llm-client.js.map +1 -0
  72. package/dist/onboard/prompts/scaffold.md +93 -0
  73. package/dist/onboard/prompts.d.ts +13 -0
  74. package/dist/onboard/prompts.d.ts.map +1 -0
  75. package/dist/onboard/prompts.js +54 -0
  76. package/dist/onboard/prompts.js.map +1 -0
  77. package/dist/onboard/scaffold-schema.d.ts +194 -0
  78. package/dist/onboard/scaffold-schema.d.ts.map +1 -0
  79. package/dist/onboard/scaffold-schema.js +73 -0
  80. package/dist/onboard/scaffold-schema.js.map +1 -0
  81. package/dist/onboard/schema.d.ts +545 -0
  82. package/dist/onboard/schema.d.ts.map +1 -0
  83. package/dist/onboard/schema.js +148 -0
  84. package/dist/onboard/schema.js.map +1 -0
  85. package/dist/onboard/seeders/adr.d.ts +3 -0
  86. package/dist/onboard/seeders/adr.d.ts.map +1 -0
  87. package/dist/onboard/seeders/adr.js +212 -0
  88. package/dist/onboard/seeders/adr.js.map +1 -0
  89. package/dist/onboard/seeders/agent-review-config/cloud.canonical.json +22 -0
  90. package/dist/onboard/seeders/agent-review-config/local.canonical.json +21 -0
  91. package/dist/onboard/seeders/agent-review-config.d.ts +3 -0
  92. package/dist/onboard/seeders/agent-review-config.d.ts.map +1 -0
  93. package/dist/onboard/seeders/agent-review-config.js +38 -0
  94. package/dist/onboard/seeders/agent-review-config.js.map +1 -0
  95. package/dist/onboard/seeders/cycle1-bootstrap.d.ts +3 -0
  96. package/dist/onboard/seeders/cycle1-bootstrap.d.ts.map +1 -0
  97. package/dist/onboard/seeders/cycle1-bootstrap.js +76 -0
  98. package/dist/onboard/seeders/cycle1-bootstrap.js.map +1 -0
  99. package/dist/onboard/seeders/index.d.ts +47 -0
  100. package/dist/onboard/seeders/index.d.ts.map +1 -0
  101. package/dist/onboard/seeders/index.js +37 -0
  102. package/dist/onboard/seeders/index.js.map +1 -0
  103. package/dist/onboard/seeders/runbook.d.ts +13 -0
  104. package/dist/onboard/seeders/runbook.d.ts.map +1 -0
  105. package/dist/onboard/seeders/runbook.js +85 -0
  106. package/dist/onboard/seeders/runbook.js.map +1 -0
  107. package/dist/onboard/seeders/templates/adr.md.tmpl +26 -0
  108. package/dist/onboard/seeders/templates/cycle1-bootstrap.md.tmpl +64 -0
  109. package/dist/onboard/seeders/templates/runbook.md.tmpl +26 -0
  110. package/dist/onboard/template-loader.d.ts +20 -0
  111. package/dist/onboard/template-loader.d.ts.map +1 -0
  112. package/dist/onboard/template-loader.js +143 -0
  113. package/dist/onboard/template-loader.js.map +1 -0
  114. package/dist/onboard/template-ref.d.ts +15 -0
  115. package/dist/onboard/template-ref.d.ts.map +1 -0
  116. package/dist/onboard/template-ref.js +45 -0
  117. package/dist/onboard/template-ref.js.map +1 -0
  118. package/dist/onboard/validate.d.ts +19 -0
  119. package/dist/onboard/validate.d.ts.map +1 -0
  120. package/dist/onboard/validate.js +127 -0
  121. package/dist/onboard/validate.js.map +1 -0
  122. package/dist/onboard/writers/dry-run-renderer.d.ts +6 -0
  123. package/dist/onboard/writers/dry-run-renderer.d.ts.map +1 -0
  124. package/dist/onboard/writers/dry-run-renderer.js +88 -0
  125. package/dist/onboard/writers/dry-run-renderer.js.map +1 -0
  126. package/dist/onboard/writers/emit.d.ts +6 -0
  127. package/dist/onboard/writers/emit.d.ts.map +1 -0
  128. package/dist/onboard/writers/emit.js +29 -0
  129. package/dist/onboard/writers/emit.js.map +1 -0
  130. package/dist/onboard/writers/merge.d.ts +16 -0
  131. package/dist/onboard/writers/merge.d.ts.map +1 -0
  132. package/dist/onboard/writers/merge.js +142 -0
  133. package/dist/onboard/writers/merge.js.map +1 -0
  134. package/dist/onboard/writers/pr-writer.d.ts +44 -0
  135. package/dist/onboard/writers/pr-writer.d.ts.map +1 -0
  136. package/dist/onboard/writers/pr-writer.js +104 -0
  137. package/dist/onboard/writers/pr-writer.js.map +1 -0
  138. package/dist/onboard/writers/skip.d.ts +9 -0
  139. package/dist/onboard/writers/skip.d.ts.map +1 -0
  140. package/dist/onboard/writers/skip.js +9 -0
  141. package/dist/onboard/writers/skip.js.map +1 -0
  142. package/package.json +8 -1
@@ -0,0 +1,194 @@
1
+ import { z } from "zod";
2
+ export declare const SCAFFOLD_PLAN_SCHEMA_VERSION: 1;
3
+ export declare const SOURCE_ANALYSIS_SCHEMA_VERSION: 1;
4
+ export declare const SCAFFOLD_PLAN_BYTE_BUDGET = 64512;
5
+ export declare const FILE_PLAN_CONTENT_CAP = 16384;
6
+ export declare const SCAFFOLD_PLAN_FILES_CAP = 100;
7
+ export declare const SCAFFOLD_PLAN_SUMMARY_CAP = 800;
8
+ declare const EmitPlan: z.ZodObject<{
9
+ path: z.ZodString;
10
+ action: z.ZodLiteral<"emit">;
11
+ rationale: z.ZodString;
12
+ tailored_content: z.ZodString;
13
+ }, "strict", z.ZodTypeAny, {
14
+ path: string;
15
+ action: "emit";
16
+ rationale: string;
17
+ tailored_content: string;
18
+ }, {
19
+ path: string;
20
+ action: "emit";
21
+ rationale: string;
22
+ tailored_content: string;
23
+ }>;
24
+ declare const MergePlan: z.ZodObject<{
25
+ path: z.ZodString;
26
+ action: z.ZodLiteral<"merge">;
27
+ rationale: z.ZodString;
28
+ tailored_content: z.ZodString;
29
+ }, "strict", z.ZodTypeAny, {
30
+ path: string;
31
+ action: "merge";
32
+ rationale: string;
33
+ tailored_content: string;
34
+ }, {
35
+ path: string;
36
+ action: "merge";
37
+ rationale: string;
38
+ tailored_content: string;
39
+ }>;
40
+ declare const SkipPlan: z.ZodObject<{
41
+ path: z.ZodString;
42
+ action: z.ZodLiteral<"skip">;
43
+ rationale: z.ZodString;
44
+ }, "strict", z.ZodTypeAny, {
45
+ path: string;
46
+ action: "skip";
47
+ rationale: string;
48
+ }, {
49
+ path: string;
50
+ action: "skip";
51
+ rationale: string;
52
+ }>;
53
+ export declare const FilePlanSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject<{
54
+ path: z.ZodString;
55
+ action: z.ZodLiteral<"emit">;
56
+ rationale: z.ZodString;
57
+ tailored_content: z.ZodString;
58
+ }, "strict", z.ZodTypeAny, {
59
+ path: string;
60
+ action: "emit";
61
+ rationale: string;
62
+ tailored_content: string;
63
+ }, {
64
+ path: string;
65
+ action: "emit";
66
+ rationale: string;
67
+ tailored_content: string;
68
+ }>, z.ZodObject<{
69
+ path: z.ZodString;
70
+ action: z.ZodLiteral<"merge">;
71
+ rationale: z.ZodString;
72
+ tailored_content: z.ZodString;
73
+ }, "strict", z.ZodTypeAny, {
74
+ path: string;
75
+ action: "merge";
76
+ rationale: string;
77
+ tailored_content: string;
78
+ }, {
79
+ path: string;
80
+ action: "merge";
81
+ rationale: string;
82
+ tailored_content: string;
83
+ }>, z.ZodObject<{
84
+ path: z.ZodString;
85
+ action: z.ZodLiteral<"skip">;
86
+ rationale: z.ZodString;
87
+ }, "strict", z.ZodTypeAny, {
88
+ path: string;
89
+ action: "skip";
90
+ rationale: string;
91
+ }, {
92
+ path: string;
93
+ action: "skip";
94
+ rationale: string;
95
+ }>]>;
96
+ export declare const ScaffoldPlanSchema: z.ZodObject<{
97
+ schemaVersion: z.ZodLiteral<1>;
98
+ sourceAnalysisSchemaVersion: z.ZodLiteral<1>;
99
+ templateRef: z.ZodEffects<z.ZodString, string, string>;
100
+ generatedAtIso: z.ZodString;
101
+ files: z.ZodArray<z.ZodDiscriminatedUnion<"action", [z.ZodObject<{
102
+ path: z.ZodString;
103
+ action: z.ZodLiteral<"emit">;
104
+ rationale: z.ZodString;
105
+ tailored_content: z.ZodString;
106
+ }, "strict", z.ZodTypeAny, {
107
+ path: string;
108
+ action: "emit";
109
+ rationale: string;
110
+ tailored_content: string;
111
+ }, {
112
+ path: string;
113
+ action: "emit";
114
+ rationale: string;
115
+ tailored_content: string;
116
+ }>, z.ZodObject<{
117
+ path: z.ZodString;
118
+ action: z.ZodLiteral<"merge">;
119
+ rationale: z.ZodString;
120
+ tailored_content: z.ZodString;
121
+ }, "strict", z.ZodTypeAny, {
122
+ path: string;
123
+ action: "merge";
124
+ rationale: string;
125
+ tailored_content: string;
126
+ }, {
127
+ path: string;
128
+ action: "merge";
129
+ rationale: string;
130
+ tailored_content: string;
131
+ }>, z.ZodObject<{
132
+ path: z.ZodString;
133
+ action: z.ZodLiteral<"skip">;
134
+ rationale: z.ZodString;
135
+ }, "strict", z.ZodTypeAny, {
136
+ path: string;
137
+ action: "skip";
138
+ rationale: string;
139
+ }, {
140
+ path: string;
141
+ action: "skip";
142
+ rationale: string;
143
+ }>]>, "many">;
144
+ summary: z.ZodString;
145
+ }, "strict", z.ZodTypeAny, {
146
+ schemaVersion: 1;
147
+ summary: string;
148
+ files: ({
149
+ path: string;
150
+ action: "emit";
151
+ rationale: string;
152
+ tailored_content: string;
153
+ } | {
154
+ path: string;
155
+ action: "merge";
156
+ rationale: string;
157
+ tailored_content: string;
158
+ } | {
159
+ path: string;
160
+ action: "skip";
161
+ rationale: string;
162
+ })[];
163
+ sourceAnalysisSchemaVersion: 1;
164
+ templateRef: string;
165
+ generatedAtIso: string;
166
+ }, {
167
+ schemaVersion: 1;
168
+ summary: string;
169
+ files: ({
170
+ path: string;
171
+ action: "emit";
172
+ rationale: string;
173
+ tailored_content: string;
174
+ } | {
175
+ path: string;
176
+ action: "merge";
177
+ rationale: string;
178
+ tailored_content: string;
179
+ } | {
180
+ path: string;
181
+ action: "skip";
182
+ rationale: string;
183
+ })[];
184
+ sourceAnalysisSchemaVersion: 1;
185
+ templateRef: string;
186
+ generatedAtIso: string;
187
+ }>;
188
+ export type ScaffoldPlan = z.infer<typeof ScaffoldPlanSchema>;
189
+ export type FilePlan = z.infer<typeof FilePlanSchema>;
190
+ export type EmitFilePlan = z.infer<typeof EmitPlan>;
191
+ export type MergeFilePlan = z.infer<typeof MergePlan>;
192
+ export type SkipFilePlan = z.infer<typeof SkipPlan>;
193
+ export {};
194
+ //# sourceMappingURL=scaffold-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-schema.d.ts","sourceRoot":"","sources":["../../src/onboard/scaffold-schema.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,4BAA4B,EAAG,CAAU,CAAC;AACvD,eAAO,MAAM,8BAA8B,EAAG,CAAU,CAAC;AACzD,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;EAKH,CAAC;AAEZ,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;EAKJ,CAAC;AAEZ,QAAA,MAAM,QAAQ;;;;;;;;;;;;EAIH,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIzB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBpB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,73 @@
1
+ // packages/cli/src/onboard/scaffold-schema.ts
2
+ //
3
+ // ScaffoldPlan — Stage B output envelope (cycle 15 Phase B).
4
+ //
5
+ // The LLM (Stage B) consumes a RepoAnalysis (Phase A) + a sage-blueprint
6
+ // template directory and emits a ScaffoldPlan: per-file action decisions
7
+ // (emit | merge | skip) with rationale and (for emit/merge) the tailored
8
+ // body content. Discriminated union on `action` makes the LLM tool-call
9
+ // shape unambiguous and Zod-rejects mixed states.
10
+ //
11
+ // Budget contract: serialized ScaffoldPlan ≤ 64 KB; per-file tailored_content
12
+ // ≤ 16 KB; files[] ≤ 100. Per-file cap + files cap together bound the LLM
13
+ // context AND the writer cost.
14
+ import { z } from "zod";
15
+ import { parseTemplateRef, TEMPLATE_REF_SHAPE_RE } from "./template-ref.js";
16
+ export const SCAFFOLD_PLAN_SCHEMA_VERSION = 1;
17
+ export const SOURCE_ANALYSIS_SCHEMA_VERSION = 1;
18
+ export const SCAFFOLD_PLAN_BYTE_BUDGET = 64_512;
19
+ export const FILE_PLAN_CONTENT_CAP = 16_384;
20
+ export const SCAFFOLD_PLAN_FILES_CAP = 100;
21
+ export const SCAFFOLD_PLAN_SUMMARY_CAP = 800;
22
+ const EmitPlan = z.object({
23
+ path: z.string().min(1).max(512),
24
+ action: z.literal("emit"),
25
+ rationale: z.string().min(1).max(800),
26
+ tailored_content: z.string().max(FILE_PLAN_CONTENT_CAP),
27
+ }).strict();
28
+ const MergePlan = z.object({
29
+ path: z.string().min(1).max(512),
30
+ action: z.literal("merge"),
31
+ rationale: z.string().min(1).max(800),
32
+ tailored_content: z.string().max(FILE_PLAN_CONTENT_CAP),
33
+ }).strict();
34
+ const SkipPlan = z.object({
35
+ path: z.string().min(1).max(512),
36
+ action: z.literal("skip"),
37
+ rationale: z.string().min(1).max(800),
38
+ }).strict();
39
+ export const FilePlanSchema = z.discriminatedUnion("action", [
40
+ EmitPlan,
41
+ MergePlan,
42
+ SkipPlan,
43
+ ]);
44
+ export const ScaffoldPlanSchema = z.object({
45
+ schemaVersion: z.literal(SCAFFOLD_PLAN_SCHEMA_VERSION),
46
+ sourceAnalysisSchemaVersion: z.literal(SOURCE_ANALYSIS_SCHEMA_VERSION),
47
+ templateRef: z
48
+ .string()
49
+ .regex(TEMPLATE_REF_SHAPE_RE, {
50
+ message: "templateRef must match gh:<owner>/<repo>@<ref> or file:///<abs-path>@<ref>",
51
+ })
52
+ .refine((s) => {
53
+ try {
54
+ parseTemplateRef(s);
55
+ return true;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }, (s) => {
61
+ try {
62
+ parseTemplateRef(s);
63
+ return { message: "(unreachable — refine should have passed)" };
64
+ }
65
+ catch (e) {
66
+ return { message: e instanceof Error ? e.message : String(e) };
67
+ }
68
+ }),
69
+ generatedAtIso: z.string().datetime({ offset: false }),
70
+ files: z.array(FilePlanSchema).max(SCAFFOLD_PLAN_FILES_CAP),
71
+ summary: z.string().max(SCAFFOLD_PLAN_SUMMARY_CAP),
72
+ }).strict();
73
+ //# sourceMappingURL=scaffold-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-schema.js","sourceRoot":"","sources":["../../src/onboard/scaffold-schema.ts"],"names":[],"mappings":"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"}