@sdd-method/sdd-cli 0.21.0 → 0.23.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 (153) hide show
  1. package/README.md +30 -10
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/agent-harness.d.ts +20 -0
  6. package/dist/lib/agent-harness.d.ts.map +1 -0
  7. package/dist/lib/agent-harness.js +28 -0
  8. package/dist/lib/agent-harness.js.map +1 -0
  9. package/dist/lib/briefing/index.d.ts +15 -0
  10. package/dist/lib/briefing/index.d.ts.map +1 -0
  11. package/dist/lib/briefing/index.js +13 -0
  12. package/dist/lib/briefing/index.js.map +1 -0
  13. package/dist/lib/briefing/render.d.ts +57 -0
  14. package/dist/lib/briefing/render.d.ts.map +1 -0
  15. package/dist/lib/briefing/render.js +112 -0
  16. package/dist/lib/briefing/render.js.map +1 -0
  17. package/dist/lib/briefing/variables.d.ts +49 -0
  18. package/dist/lib/briefing/variables.d.ts.map +1 -0
  19. package/dist/lib/briefing/variables.js +92 -0
  20. package/dist/lib/briefing/variables.js.map +1 -0
  21. package/dist/lib/bundle.d.ts +57 -2
  22. package/dist/lib/bundle.d.ts.map +1 -1
  23. package/dist/lib/bundle.js +53 -19
  24. package/dist/lib/bundle.js.map +1 -1
  25. package/dist/lib/catalogue/aggregate.d.ts +19 -0
  26. package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
  27. package/dist/lib/catalogue/aggregate.js +88 -0
  28. package/dist/lib/catalogue/aggregate.js.map +1 -1
  29. package/dist/lib/catalogue/build.d.ts.map +1 -1
  30. package/dist/lib/catalogue/build.js +24 -1
  31. package/dist/lib/catalogue/build.js.map +1 -1
  32. package/dist/lib/catalogue/builders/capabilities.d.ts.map +1 -1
  33. package/dist/lib/catalogue/builders/capabilities.js +18 -4
  34. package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
  35. package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts +12 -0
  36. package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts.map +1 -0
  37. package/dist/lib/catalogue/builders/feature-subscription-channels.js +197 -0
  38. package/dist/lib/catalogue/builders/feature-subscription-channels.js.map +1 -0
  39. package/dist/lib/catalogue/builders/index.d.ts +4 -0
  40. package/dist/lib/catalogue/builders/index.d.ts.map +1 -1
  41. package/dist/lib/catalogue/builders/index.js +2 -0
  42. package/dist/lib/catalogue/builders/index.js.map +1 -1
  43. package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts +10 -0
  44. package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts.map +1 -0
  45. package/dist/lib/catalogue/builders/product-platform-dependencies.js +155 -0
  46. package/dist/lib/catalogue/builders/product-platform-dependencies.js.map +1 -0
  47. package/dist/lib/catalogue/canonical-schema.yaml +96 -1
  48. package/dist/lib/catalogue/traceability-loader.d.ts +17 -0
  49. package/dist/lib/catalogue/traceability-loader.d.ts.map +1 -1
  50. package/dist/lib/catalogue/traceability-loader.js +6 -0
  51. package/dist/lib/catalogue/traceability-loader.js.map +1 -1
  52. package/dist/lib/generate-briefing/index.d.ts +22 -0
  53. package/dist/lib/generate-briefing/index.d.ts.map +1 -0
  54. package/dist/lib/generate-briefing/index.js +77 -0
  55. package/dist/lib/generate-briefing/index.js.map +1 -0
  56. package/dist/lib/hooks-seed/copilot.d.ts +93 -0
  57. package/dist/lib/hooks-seed/copilot.d.ts.map +1 -0
  58. package/dist/lib/hooks-seed/copilot.js +167 -0
  59. package/dist/lib/hooks-seed/copilot.js.map +1 -0
  60. package/dist/lib/hooks-seed/index.d.ts +4 -0
  61. package/dist/lib/hooks-seed/index.d.ts.map +1 -1
  62. package/dist/lib/hooks-seed/index.js +2 -0
  63. package/dist/lib/hooks-seed/index.js.map +1 -1
  64. package/dist/lib/hooks-seed/lifecycle-mapping.d.ts +12 -0
  65. package/dist/lib/hooks-seed/lifecycle-mapping.d.ts.map +1 -0
  66. package/dist/lib/hooks-seed/lifecycle-mapping.js +28 -0
  67. package/dist/lib/hooks-seed/lifecycle-mapping.js.map +1 -0
  68. package/dist/lib/init/index.d.ts +6 -4
  69. package/dist/lib/init/index.d.ts.map +1 -1
  70. package/dist/lib/init/index.js +5 -26
  71. package/dist/lib/init/index.js.map +1 -1
  72. package/dist/lib/init/platform.d.ts +9 -0
  73. package/dist/lib/init/platform.d.ts.map +1 -1
  74. package/dist/lib/init/platform.js +8 -2
  75. package/dist/lib/init/platform.js.map +1 -1
  76. package/dist/lib/list/discover.d.ts +28 -0
  77. package/dist/lib/list/discover.d.ts.map +1 -1
  78. package/dist/lib/list/discover.js +27 -11
  79. package/dist/lib/list/discover.js.map +1 -1
  80. package/dist/lib/list/format.d.ts +2 -0
  81. package/dist/lib/list/format.d.ts.map +1 -1
  82. package/dist/lib/list/format.js +44 -4
  83. package/dist/lib/list/format.js.map +1 -1
  84. package/dist/lib/list/index.d.ts +1 -0
  85. package/dist/lib/list/index.d.ts.map +1 -1
  86. package/dist/lib/list/index.js +1 -0
  87. package/dist/lib/list/index.js.map +1 -1
  88. package/dist/lib/lock-file.d.ts +23 -5
  89. package/dist/lib/lock-file.d.ts.map +1 -1
  90. package/dist/lib/lock-file.js +86 -9
  91. package/dist/lib/lock-file.js.map +1 -1
  92. package/dist/lib/pack/builder.d.ts +55 -0
  93. package/dist/lib/pack/builder.d.ts.map +1 -0
  94. package/dist/lib/pack/builder.js +226 -0
  95. package/dist/lib/pack/builder.js.map +1 -0
  96. package/dist/lib/pack/index.d.ts +26 -0
  97. package/dist/lib/pack/index.d.ts.map +1 -0
  98. package/dist/lib/pack/index.js +85 -0
  99. package/dist/lib/pack/index.js.map +1 -0
  100. package/dist/lib/pack/leakage.d.ts +55 -0
  101. package/dist/lib/pack/leakage.d.ts.map +1 -0
  102. package/dist/lib/pack/leakage.js +133 -0
  103. package/dist/lib/pack/leakage.js.map +1 -0
  104. package/dist/lib/pack/schema.d.ts +36 -0
  105. package/dist/lib/pack/schema.d.ts.map +1 -0
  106. package/dist/lib/pack/schema.js +63 -0
  107. package/dist/lib/pack/schema.js.map +1 -0
  108. package/dist/lib/pack/seed.d.ts +46 -0
  109. package/dist/lib/pack/seed.d.ts.map +1 -0
  110. package/dist/lib/pack/seed.js +107 -0
  111. package/dist/lib/pack/seed.js.map +1 -0
  112. package/dist/lib/repo-kind.d.ts +8 -4
  113. package/dist/lib/repo-kind.d.ts.map +1 -1
  114. package/dist/lib/repo-kind.js +10 -2
  115. package/dist/lib/repo-kind.js.map +1 -1
  116. package/dist/lib/sync/briefing-merge.d.ts +34 -0
  117. package/dist/lib/sync/briefing-merge.d.ts.map +1 -0
  118. package/dist/lib/sync/briefing-merge.js +82 -0
  119. package/dist/lib/sync/briefing-merge.js.map +1 -0
  120. package/dist/lib/sync/config.d.ts +33 -0
  121. package/dist/lib/sync/config.d.ts.map +1 -0
  122. package/dist/lib/sync/config.js +40 -0
  123. package/dist/lib/sync/config.js.map +1 -0
  124. package/dist/lib/sync/copilot-hooks-merge.d.ts +30 -0
  125. package/dist/lib/sync/copilot-hooks-merge.d.ts.map +1 -0
  126. package/dist/lib/sync/copilot-hooks-merge.js +96 -0
  127. package/dist/lib/sync/copilot-hooks-merge.js.map +1 -0
  128. package/dist/lib/sync/index.d.ts +40 -3
  129. package/dist/lib/sync/index.d.ts.map +1 -1
  130. package/dist/lib/sync/index.js +186 -26
  131. package/dist/lib/sync/index.js.map +1 -1
  132. package/dist/lib/sync/source-tag.d.ts +5 -0
  133. package/dist/lib/sync/source-tag.d.ts.map +1 -0
  134. package/dist/lib/sync/source-tag.js +34 -0
  135. package/dist/lib/sync/source-tag.js.map +1 -0
  136. package/dist/verbs/generate-briefing.d.ts +3 -0
  137. package/dist/verbs/generate-briefing.d.ts.map +1 -0
  138. package/dist/verbs/generate-briefing.js +28 -0
  139. package/dist/verbs/generate-briefing.js.map +1 -0
  140. package/dist/verbs/init.d.ts.map +1 -1
  141. package/dist/verbs/init.js +11 -8
  142. package/dist/verbs/init.js.map +1 -1
  143. package/dist/verbs/list.d.ts.map +1 -1
  144. package/dist/verbs/list.js +3 -1
  145. package/dist/verbs/list.js.map +1 -1
  146. package/dist/verbs/pack.d.ts +3 -0
  147. package/dist/verbs/pack.d.ts.map +1 -0
  148. package/dist/verbs/pack.js +35 -0
  149. package/dist/verbs/pack.js.map +1 -0
  150. package/dist/verbs/sync.d.ts.map +1 -1
  151. package/dist/verbs/sync.js +56 -15
  152. package/dist/verbs/sync.js.map +1 -1
  153. package/package.json +2 -2
@@ -0,0 +1,133 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export async function checkLeakage(opts) {
4
+ const violations = [];
5
+ // 1. Disjointness with declared forward base.
6
+ const forwardBasePaths = await loadForwardBaseManagedPaths(opts);
7
+ const forwardBaseSet = new Set(forwardBasePaths);
8
+ for (const p of opts.seed.managedPaths) {
9
+ if (forwardBaseSet.has(p)) {
10
+ violations.push({
11
+ path: p,
12
+ conflictWith: "forward-base",
13
+ conflictSource: opts.seed.forwardBase.bundle,
14
+ });
15
+ }
16
+ }
17
+ // 2. Disjointness with declared forbidden_paths globs (seed self-contract).
18
+ if (opts.seed.forbiddenPaths) {
19
+ for (const p of opts.seed.managedPaths) {
20
+ for (const pattern of opts.seed.forbiddenPaths) {
21
+ if (matchesGlob(p, pattern)) {
22
+ violations.push({
23
+ path: p,
24
+ conflictWith: "forbidden-pattern",
25
+ conflictSource: pattern,
26
+ });
27
+ }
28
+ }
29
+ }
30
+ }
31
+ return { ok: violations.length === 0, violations };
32
+ }
33
+ async function loadForwardBaseManagedPaths(opts) {
34
+ if (opts.forwardBaseManagedPathsFile) {
35
+ const raw = await readFile(opts.forwardBaseManagedPathsFile, "utf8");
36
+ return raw
37
+ .split("\n")
38
+ .map((l) => l.trim())
39
+ .filter((l) => l.length > 0 && !l.startsWith("#"));
40
+ }
41
+ if (opts.producerRepo) {
42
+ const lockPath = join(opts.producerRepo, "method-baseline.lock");
43
+ try {
44
+ const raw = await readFile(lockPath, "utf8");
45
+ return extractManagedPathsForBundle(raw, opts.seed.forwardBase.bundle);
46
+ }
47
+ catch (err) {
48
+ throw new Error(`Cannot read forward-base managed_paths: ${lockPath} unreadable ` +
49
+ `(${err.message}). Pass --forward-base-managed-paths ` +
50
+ `to provide MANAGED_PATHS.txt directly.`);
51
+ }
52
+ }
53
+ throw new Error("Cannot resolve forward-base managed_paths: provide either " +
54
+ "--producer-repo (with method-baseline.lock present) or " +
55
+ "--forward-base-managed-paths (path to MANAGED_PATHS.txt).");
56
+ }
57
+ /**
58
+ * Extract managed_paths for the named bundle from a method-baseline.lock
59
+ * file. Minimal parser — the lock file is line-oriented YAML and we
60
+ * only need a single nested list per named bundle.
61
+ */
62
+ export function extractManagedPathsForBundle(lockYaml, bundleName) {
63
+ const lines = lockYaml.split("\n");
64
+ let inBundles = false;
65
+ let inTargetBundle = false;
66
+ let inManagedPaths = false;
67
+ const paths = [];
68
+ for (const line of lines) {
69
+ if (line.startsWith("bundles:")) {
70
+ inBundles = true;
71
+ continue;
72
+ }
73
+ if (!inBundles)
74
+ continue;
75
+ if (/^\s*-\s*name:\s*(.+)$/.test(line)) {
76
+ const m = /^\s*-\s*name:\s*(.+)$/.exec(line);
77
+ inTargetBundle = m !== null && m[1]?.trim() === bundleName;
78
+ inManagedPaths = false;
79
+ continue;
80
+ }
81
+ if (inTargetBundle && /^\s+managed_paths:\s*$/.test(line)) {
82
+ inManagedPaths = true;
83
+ continue;
84
+ }
85
+ if (inManagedPaths) {
86
+ const m = /^\s+-\s+(.+)$/.exec(line);
87
+ if (m && m[1]) {
88
+ paths.push(m[1].trim());
89
+ }
90
+ else if (/^\s+\w+:/.test(line) || /^\s*-\s*name:/.test(line)) {
91
+ // End of managed_paths list (either next field or next bundle)
92
+ inManagedPaths = false;
93
+ }
94
+ }
95
+ }
96
+ return paths;
97
+ }
98
+ /**
99
+ * Simple glob matcher supporting `*` (any non-slash chars) and `**`
100
+ * (any chars including slashes). Used for forbidden_paths.
101
+ */
102
+ export function matchesGlob(path, pattern) {
103
+ const re = globToRegex(pattern);
104
+ return re.test(path);
105
+ }
106
+ function globToRegex(pattern) {
107
+ // Escape regex metachars except *, then translate * and **.
108
+ let regex = "";
109
+ let i = 0;
110
+ while (i < pattern.length) {
111
+ const ch = pattern[i];
112
+ if (ch === "*") {
113
+ if (pattern[i + 1] === "*") {
114
+ regex += ".*";
115
+ i += 2;
116
+ }
117
+ else {
118
+ regex += "[^/]*";
119
+ i += 1;
120
+ }
121
+ }
122
+ else if (/[.+?^${}()|[\]\\]/.test(ch)) {
123
+ regex += `\\${ch}`;
124
+ i += 1;
125
+ }
126
+ else {
127
+ regex += ch;
128
+ i += 1;
129
+ }
130
+ }
131
+ return new RegExp(`^${regex}$`);
132
+ }
133
+ //# sourceMappingURL=leakage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leakage.js","sourceRoot":"","sources":["../../../src/lib/pack/leakage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ import type { PackSeed } from "./seed.js";
3
+ export declare const PackSeedSchema: z.ZodObject<{
4
+ version: z.ZodString;
5
+ scope: z.ZodString;
6
+ forwardBase: z.ZodObject<{
7
+ bundle: z.ZodEnum<{
8
+ "platform-baseline": "platform-baseline";
9
+ "app-baseline": "app-baseline";
10
+ "integration-baseline": "integration-baseline";
11
+ "reverse-baseline": "reverse-baseline";
12
+ }>;
13
+ minimumVersion: z.ZodString;
14
+ sourceRepo: z.ZodString;
15
+ }, z.core.$strip>;
16
+ minimumSddCliVersion: z.ZodString;
17
+ description: z.ZodString;
18
+ include: z.ZodOptional<z.ZodArray<z.ZodString>>;
19
+ managedPaths: z.ZodArray<z.ZodString>;
20
+ forbiddenPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
21
+ requiresPack: z.ZodOptional<z.ZodObject<{
22
+ name: z.ZodString;
23
+ version: z.ZodString;
24
+ }, z.core.$strip>>;
25
+ sourcePath: z.ZodString;
26
+ }, z.core.$strip>;
27
+ export interface ValidationError {
28
+ field: string;
29
+ message: string;
30
+ }
31
+ export interface ValidationResult {
32
+ ok: boolean;
33
+ errors: ValidationError[];
34
+ }
35
+ export declare function validateSeed(seed: PackSeed): ValidationResult;
36
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/lib/pack/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAsB1C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;iBAmCzB,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAU7D"}
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for adopter pack seeds. Mirrors
4
+ * docs/method/foundations/schemas/context-pack-seed-schema.yaml.
5
+ *
6
+ * Used by `sdd-cli pack validate` for fast feedback during authoring.
7
+ * The structural parse in seed.ts already enforces presence of required
8
+ * fields; this schema layer adds value-shape checks (semver patterns,
9
+ * known forward-base bundle names, non-empty managed_paths).
10
+ */
11
+ const SEMVER_PATTERN = /^\d+\.\d+\.\d+$/;
12
+ const VERSIONED_RANGE_PATTERN = /^(\^|~|>=)?v?\d+\.\d+\.\d+$/;
13
+ const KNOWN_FORWARD_BASES = [
14
+ "app-baseline",
15
+ "integration-baseline",
16
+ "platform-baseline",
17
+ "reverse-baseline",
18
+ ];
19
+ export const PackSeedSchema = z.object({
20
+ version: z
21
+ .string()
22
+ .regex(SEMVER_PATTERN, "version must be semver (X.Y.Z)"),
23
+ scope: z
24
+ .string()
25
+ .regex(/^[a-z0-9-]+$/, "scope must be lower-kebab-case slug"),
26
+ forwardBase: z.object({
27
+ bundle: z.enum(KNOWN_FORWARD_BASES),
28
+ minimumVersion: z
29
+ .string()
30
+ .regex(/^v\d+\.\d+\.\d+$/, "forward_base.minimum_version must be vX.Y.Z"),
31
+ sourceRepo: z.string().min(1),
32
+ }),
33
+ minimumSddCliVersion: z
34
+ .string()
35
+ .regex(SEMVER_PATTERN, "minimum_sdd_cli_version must be semver (X.Y.Z)"),
36
+ description: z.string().min(1),
37
+ include: z.array(z.string()).optional(),
38
+ managedPaths: z
39
+ .array(z.string().min(1))
40
+ .min(1, "managed_paths must have at least one entry"),
41
+ forbiddenPaths: z.array(z.string()).optional(),
42
+ requiresPack: z
43
+ .object({
44
+ name: z.string().min(1),
45
+ version: z
46
+ .string()
47
+ .regex(VERSIONED_RANGE_PATTERN, "requires_pack.version must be a semver range (e.g. ^v1.2.0)"),
48
+ })
49
+ .optional(),
50
+ sourcePath: z.string(),
51
+ });
52
+ export function validateSeed(seed) {
53
+ const result = PackSeedSchema.safeParse(seed);
54
+ if (result.success) {
55
+ return { ok: true, errors: [] };
56
+ }
57
+ const errors = result.error.issues.map((issue) => ({
58
+ field: issue.path.join("."),
59
+ message: issue.message,
60
+ }));
61
+ return { ok: false, errors };
62
+ }
63
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/lib/pack/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;GAQG;AAEH,MAAM,cAAc,GAAG,iBAAiB,CAAC;AACzC,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AAE9D,MAAM,mBAAmB,GAAG;IAC1B,cAAc;IACd,sBAAsB;IACtB,mBAAmB;IACnB,kBAAkB;CACV,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,cAAc,EAAE,gCAAgC,CAAC;IAC1D,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,KAAK,CAAC,cAAc,EAAE,qCAAqC,CAAC;IAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACnC,cAAc,EAAE,CAAC;aACd,MAAM,EAAE;aACR,KAAK,CAAC,kBAAkB,EAAE,6CAA6C,CAAC;QAC3E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9B,CAAC;IACF,oBAAoB,EAAE,CAAC;SACpB,MAAM,EAAE;SACR,KAAK,CAAC,cAAc,EAAE,gDAAgD,CAAC;IAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,EAAE,4CAA4C,CAAC;IACvD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,YAAY,EAAE,CAAC;SACZ,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,KAAK,CACJ,uBAAuB,EACvB,6DAA6D,CAC9D;KACJ,CAAC;SACD,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAYH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClC,CAAC;IACD,MAAM,MAAM,GAAsB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Adopter pack seed file. Per ADR 0151 + context-pack-seed-schema.yaml.
3
+ *
4
+ * Loaded by `sdd-cli pack build` and `sdd-cli pack validate` from
5
+ * `orchestration/distribution/{pack-name}-seed.yaml` in adopter repos.
6
+ *
7
+ * Includes are resolved before validation: the merged seed presents
8
+ * all `include`'d managed_paths + forbidden_paths concatenated with
9
+ * the host seed's own.
10
+ */
11
+ export interface PackSeed {
12
+ version: string;
13
+ scope: string;
14
+ forwardBase: ForwardBaseRef;
15
+ minimumSddCliVersion: string;
16
+ description: string;
17
+ include?: string[];
18
+ managedPaths: string[];
19
+ forbiddenPaths?: string[];
20
+ requiresPack?: PackRef;
21
+ /**
22
+ * Absolute path to the seed file this was loaded from. Used by the
23
+ * builder to anchor relative payload-source paths.
24
+ */
25
+ sourcePath: string;
26
+ }
27
+ export interface ForwardBaseRef {
28
+ bundle: string;
29
+ minimumVersion: string;
30
+ sourceRepo: string;
31
+ }
32
+ export interface PackRef {
33
+ name: string;
34
+ version: string;
35
+ }
36
+ /**
37
+ * Load a seed file from disk, resolve its `include:` directives,
38
+ * and return a merged PackSeed. Throws if any include cannot be read
39
+ * or if circular includes are detected.
40
+ *
41
+ * NOTE: This does not validate the seed structure — only parses YAML
42
+ * and assembles the typed shape. Use `validateSeed` (separate module)
43
+ * for schema enforcement.
44
+ */
45
+ export declare function loadSeed(seedPath: string): Promise<PackSeed>;
46
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/lib/pack/seed.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,cAAc,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAqBD;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAIlE"}
@@ -0,0 +1,107 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { dirname, isAbsolute, resolve } from "node:path";
3
+ import { parse as parseYaml } from "yaml";
4
+ /**
5
+ * Load a seed file from disk, resolve its `include:` directives,
6
+ * and return a merged PackSeed. Throws if any include cannot be read
7
+ * or if circular includes are detected.
8
+ *
9
+ * NOTE: This does not validate the seed structure — only parses YAML
10
+ * and assembles the typed shape. Use `validateSeed` (separate module)
11
+ * for schema enforcement.
12
+ */
13
+ export async function loadSeed(seedPath) {
14
+ const absPath = isAbsolute(seedPath) ? seedPath : resolve(seedPath);
15
+ const visited = new Set();
16
+ return loadSeedRecursive(absPath, visited);
17
+ }
18
+ async function loadSeedRecursive(absPath, visited) {
19
+ if (visited.has(absPath)) {
20
+ throw new Error(`Circular include detected at ${absPath}`);
21
+ }
22
+ visited.add(absPath);
23
+ let raw;
24
+ try {
25
+ raw = await readFile(absPath, "utf8");
26
+ }
27
+ catch (err) {
28
+ throw new Error(`Cannot read seed file ${absPath}: ${err.message}`);
29
+ }
30
+ const parsed = parseYaml(raw);
31
+ if (parsed === null || typeof parsed !== "object") {
32
+ throw new Error(`Seed file ${absPath} is not a YAML object`);
33
+ }
34
+ const baseDir = dirname(absPath);
35
+ const includes = Array.isArray(parsed.include) ? parsed.include : [];
36
+ const includedManaged = [];
37
+ const includedForbidden = [];
38
+ for (const inc of includes) {
39
+ if (typeof inc !== "string") {
40
+ throw new Error(`Non-string include entry in ${absPath}: ${String(inc)}`);
41
+ }
42
+ const incPath = isAbsolute(inc) ? inc : resolve(baseDir, inc);
43
+ const includedSeed = await loadSeedRecursive(incPath, visited);
44
+ includedManaged.push(...includedSeed.managedPaths);
45
+ if (includedSeed.forbiddenPaths) {
46
+ includedForbidden.push(...includedSeed.forbiddenPaths);
47
+ }
48
+ }
49
+ const own = parsed;
50
+ const managedPaths = [
51
+ ...includedManaged,
52
+ ...asStringArray(own.managed_paths, "managed_paths", absPath),
53
+ ];
54
+ const forbiddenPaths = includedForbidden.length > 0 || Array.isArray(own.forbidden_paths)
55
+ ? [
56
+ ...includedForbidden,
57
+ ...asStringArray(own.forbidden_paths, "forbidden_paths", absPath, true),
58
+ ]
59
+ : undefined;
60
+ const seed = {
61
+ version: asString(own.version, "version", absPath),
62
+ scope: asString(own.scope, "scope", absPath),
63
+ forwardBase: {
64
+ bundle: asString(own.forward_base?.bundle, "forward_base.bundle", absPath),
65
+ minimumVersion: asString(own.forward_base?.minimum_version, "forward_base.minimum_version", absPath),
66
+ sourceRepo: own.forward_base?.source_repo
67
+ ? asString(own.forward_base.source_repo, "forward_base.source_repo", absPath)
68
+ : "sdd-method",
69
+ },
70
+ minimumSddCliVersion: asString(own.minimum_sdd_cli_version, "minimum_sdd_cli_version", absPath),
71
+ description: asString(own.description, "description", absPath),
72
+ managedPaths,
73
+ sourcePath: absPath,
74
+ ...(includes.length > 0 && { include: includes }),
75
+ ...(forbiddenPaths && { forbiddenPaths }),
76
+ ...(own.requires_pack && {
77
+ requiresPack: {
78
+ name: asString(own.requires_pack.name, "requires_pack.name", absPath),
79
+ version: asString(own.requires_pack.version, "requires_pack.version", absPath),
80
+ },
81
+ }),
82
+ };
83
+ return seed;
84
+ }
85
+ function asString(value, field, file) {
86
+ if (typeof value !== "string" || value.length === 0) {
87
+ throw new Error(`Seed field "${field}" must be a non-empty string in ${file}`);
88
+ }
89
+ return value;
90
+ }
91
+ function asStringArray(value, field, file, allowEmpty = false) {
92
+ if (value === undefined || value === null) {
93
+ if (allowEmpty)
94
+ return [];
95
+ throw new Error(`Seed field "${field}" is required in ${file}`);
96
+ }
97
+ if (!Array.isArray(value)) {
98
+ throw new Error(`Seed field "${field}" must be a list in ${file}`);
99
+ }
100
+ for (const entry of value) {
101
+ if (typeof entry !== "string") {
102
+ throw new Error(`Seed field "${field}" entries must be strings in ${file}`);
103
+ }
104
+ }
105
+ return value;
106
+ }
107
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../src/lib/pack/seed.ts"],"names":[],"mappings":"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"}
@@ -13,16 +13,20 @@ export declare function profileFromRepoKind(kind: RepoKind): Profile;
13
13
  export declare function repoKindFromProfile(profile: Profile): RepoKind;
14
14
  /**
15
15
  * Returns the profile a bundle authoritatively claims, or null for
16
- * additive bundles that don't claim a profile of their own.
16
+ * additive bundles that don't claim a profile of their own. Accepts
17
+ * arbitrary strings (adopter pack names per ADR 0151) and returns null
18
+ * for any name not in the closed sdd-method bundle set.
17
19
  */
18
- export declare function profileFromBundleName(name: BundleName): Profile | null;
20
+ export declare function profileFromBundleName(name: string): Profile | null;
19
21
  export declare function bundleNameFromProfile(profile: Profile): BundleName;
20
22
  /**
21
23
  * Forward-base bundles set `.sdd-repo-kind` and qualify as the base
22
24
  * layer that additive extensions compose on top of. Additive bundles
23
- * (e.g. `reverse-extension-baseline`) return false.
25
+ * (sdd-method's `reverse-extension-baseline` and ADR 0151 adopter
26
+ * packs) return false. Accepts arbitrary strings; unknown names return
27
+ * false.
24
28
  */
25
- export declare function isForwardBase(name: BundleName): boolean;
29
+ export declare function isForwardBase(name: string): boolean;
26
30
  /**
27
31
  * Maps repo-kind → forward-base bundle name. Used when migrating a
28
32
  * legacy v1 lock file (which doesn't record bundle name) to v2.
@@ -1 +1 @@
1
- {"version":3,"file":"repo-kind.d.ts","sourceRoot":"","sources":["../../src/lib/repo-kind.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,QAAQ,GAChB,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,gBAAgB,CAAC;AAErB,MAAM,MAAM,UAAU,GAClB,mBAAmB,GACnB,cAAc,GACd,sBAAsB,GACtB,kBAAkB,GAClB,4BAA4B,CAAC;AAgBjC,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAmC7D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE3D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAE9D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI,CAEtE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAElE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAEjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAUD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAoB7E;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAEf"}
1
+ {"version":3,"file":"repo-kind.d.ts","sourceRoot":"","sources":["../../src/lib/repo-kind.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,QAAQ,GAChB,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,gBAAgB,CAAC;AAErB,MAAM,MAAM,UAAU,GAClB,mBAAmB,GACnB,cAAc,GACd,sBAAsB,GACtB,kBAAkB,GAClB,4BAA4B,CAAC;AAgBjC,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAmC7D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE3D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAGlE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAElE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAEjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAUD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAoB7E;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -58,9 +58,13 @@ export function repoKindFromProfile(profile) {
58
58
  }
59
59
  /**
60
60
  * Returns the profile a bundle authoritatively claims, or null for
61
- * additive bundles that don't claim a profile of their own.
61
+ * additive bundles that don't claim a profile of their own. Accepts
62
+ * arbitrary strings (adopter pack names per ADR 0151) and returns null
63
+ * for any name not in the closed sdd-method bundle set.
62
64
  */
63
65
  export function profileFromBundleName(name) {
66
+ if (!isBundleName(name))
67
+ return null;
64
68
  return PROFILE_BY_BUNDLE_NAME[name] ?? null;
65
69
  }
66
70
  export function bundleNameFromProfile(profile) {
@@ -69,9 +73,13 @@ export function bundleNameFromProfile(profile) {
69
73
  /**
70
74
  * Forward-base bundles set `.sdd-repo-kind` and qualify as the base
71
75
  * layer that additive extensions compose on top of. Additive bundles
72
- * (e.g. `reverse-extension-baseline`) return false.
76
+ * (sdd-method's `reverse-extension-baseline` and ADR 0151 adopter
77
+ * packs) return false. Accepts arbitrary strings; unknown names return
78
+ * false.
73
79
  */
74
80
  export function isForwardBase(name) {
81
+ if (!isBundleName(name))
82
+ return false;
75
83
  return FORWARD_BASE_BUNDLES.has(name);
76
84
  }
77
85
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"repo-kind.js","sourceRoot":"","sources":["../../src/lib/repo-kind.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repo-kind.js","sourceRoot":"","sources":["../../src/lib/repo-kind.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Briefing-layer sync per ADR 0148.
3
+ *
4
+ * Two files participate, with different semantics:
5
+ *
6
+ * - `agent-instructions.md` — fully method-managed; unconditional
7
+ * overwrite on every sync. No marker-aware merge.
8
+ * - Harness wrapper (`CLAUDE.md` / `AGENTS.md` / …) — partially
9
+ * method-managed. The `<!-- method-managed: begin/end -->` block
10
+ * is overwritten; adopter content around it survives via the
11
+ * existing `writeMarkedBlockFile` machinery (same pattern as
12
+ * `.github/workflows/method-validation.yml`).
13
+ *
14
+ * Both files are rendered from templates that ship in the bundle at
15
+ * `<target>/orchestration/templates/briefing/...`. Older bundles
16
+ * pre-dating ADR 0148 won't carry the templates; this module skips
17
+ * gracefully with a log line in that case.
18
+ */
19
+ import type { AgentHarness } from "../agent-harness.js";
20
+ import type { RepoKind } from "../repo-kind.js";
21
+ export interface BriefingSyncOptions {
22
+ readonly targetRepo: string;
23
+ readonly repoKind: RepoKind;
24
+ readonly baselineVersion: string;
25
+ readonly agentHarness: AgentHarness;
26
+ readonly allowOverwrite: boolean;
27
+ }
28
+ export interface BriefingSyncResult {
29
+ readonly log: readonly string[];
30
+ /** Path of the file refused, or null when not refused. */
31
+ readonly refused: string | null;
32
+ }
33
+ export declare function syncBriefingFiles(opts: BriefingSyncOptions): Promise<BriefingSyncResult>;
34
+ //# sourceMappingURL=briefing-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefing-merge.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/briefing-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAWxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAqE7B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Briefing-layer sync per ADR 0148.
3
+ *
4
+ * Two files participate, with different semantics:
5
+ *
6
+ * - `agent-instructions.md` — fully method-managed; unconditional
7
+ * overwrite on every sync. No marker-aware merge.
8
+ * - Harness wrapper (`CLAUDE.md` / `AGENTS.md` / …) — partially
9
+ * method-managed. The `<!-- method-managed: begin/end -->` block
10
+ * is overwritten; adopter content around it survives via the
11
+ * existing `writeMarkedBlockFile` machinery (same pattern as
12
+ * `.github/workflows/method-validation.yml`).
13
+ *
14
+ * Both files are rendered from templates that ship in the bundle at
15
+ * `<target>/orchestration/templates/briefing/...`. Older bundles
16
+ * pre-dating ADR 0148 won't carry the templates; this module skips
17
+ * gracefully with a log line in that case.
18
+ */
19
+ import { access, mkdir, writeFile } from "node:fs/promises";
20
+ import { dirname, join } from "node:path";
21
+ import { AGENT_INSTRUCTIONS_REL_PATH, WRAPPER_BLOCK_BEGIN, WRAPPER_BLOCK_END, extractWrapperBlock, harnessWrapperOutputPath, renderAgentInstructions, renderHarnessWrapper, resolveBriefingVariables, } from "../briefing/index.js";
22
+ import { writeMarkedBlockFile } from "./yaml-block-merge.js";
23
+ export async function syncBriefingFiles(opts) {
24
+ const log = [];
25
+ const vars = await resolveBriefingVariables({
26
+ targetRepo: opts.targetRepo,
27
+ repoKindOverride: opts.repoKind,
28
+ baselineVersionOverride: opts.baselineVersion,
29
+ });
30
+ // 1. agent-instructions.md — unconditional overwrite.
31
+ const aiRender = await renderAgentInstructions(opts.targetRepo, vars);
32
+ if (aiRender === null) {
33
+ log.push(`Skipped ${AGENT_INSTRUCTIONS_REL_PATH}: bundle does not ship a briefing template (pre-ADR-0148 baseline).`);
34
+ // If the agent-instructions template is missing the wrapper one almost
35
+ // certainly is too — skip the rest as well.
36
+ return { log, refused: null };
37
+ }
38
+ if (aiRender.unresolved.length > 0) {
39
+ log.push(`Warning: agent-instructions.md has unresolved placeholders: ${aiRender.unresolved.join(", ")}`);
40
+ }
41
+ const aiPath = join(opts.targetRepo, AGENT_INSTRUCTIONS_REL_PATH);
42
+ await mkdir(dirname(aiPath), { recursive: true });
43
+ await writeFile(aiPath, aiRender.content, "utf8");
44
+ log.push(`Refreshed ${AGENT_INSTRUCTIONS_REL_PATH}.`);
45
+ // 2. Harness wrapper — marker-aware merge.
46
+ const wrapperRender = await renderHarnessWrapper(opts.targetRepo, opts.agentHarness, vars);
47
+ if (wrapperRender === null) {
48
+ log.push(`Skipped ${harnessWrapperOutputPath(opts.agentHarness)}: bundle does not ship a wrapper template for ${opts.agentHarness}.`);
49
+ return { log, refused: null };
50
+ }
51
+ if (wrapperRender.unresolved.length > 0) {
52
+ log.push(`Warning: ${harnessWrapperOutputPath(opts.agentHarness)} has unresolved placeholders: ${wrapperRender.unresolved.join(", ")}`);
53
+ }
54
+ const wrapperRel = harnessWrapperOutputPath(opts.agentHarness);
55
+ const wrapperPath = join(opts.targetRepo, wrapperRel);
56
+ // Mirror the ci-workflow sync pattern: when the target file does not
57
+ // yet exist, write the full rendered template (block + adopter
58
+ // section template). When it exists, write only the method-managed
59
+ // block — writeMarkedBlockFile preserves adopter content around it.
60
+ const wrapperExists = await fileExists(wrapperPath);
61
+ const incoming = wrapperExists
62
+ ? extractWrapperBlock(wrapperRender.content)
63
+ : wrapperRender.content;
64
+ const mergeResult = await writeMarkedBlockFile(wrapperPath, incoming, { begin: WRAPPER_BLOCK_BEGIN, end: WRAPPER_BLOCK_END }, opts.allowOverwrite);
65
+ if (mergeResult.refused) {
66
+ return { log, refused: wrapperRel };
67
+ }
68
+ if (mergeResult.changed) {
69
+ log.push(`Refreshed ${wrapperRel}.`);
70
+ }
71
+ return { log, refused: null };
72
+ }
73
+ async function fileExists(path) {
74
+ try {
75
+ await access(path);
76
+ return true;
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ //# sourceMappingURL=briefing-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefing-merge.js","sourceRoot":"","sources":["../../../src/lib/sync/briefing-merge.ts"],"names":[],"mappings":"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"}