@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.
- package/README.md +30 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-harness.d.ts +20 -0
- package/dist/lib/agent-harness.d.ts.map +1 -0
- package/dist/lib/agent-harness.js +28 -0
- package/dist/lib/agent-harness.js.map +1 -0
- package/dist/lib/briefing/index.d.ts +15 -0
- package/dist/lib/briefing/index.d.ts.map +1 -0
- package/dist/lib/briefing/index.js +13 -0
- package/dist/lib/briefing/index.js.map +1 -0
- package/dist/lib/briefing/render.d.ts +57 -0
- package/dist/lib/briefing/render.d.ts.map +1 -0
- package/dist/lib/briefing/render.js +112 -0
- package/dist/lib/briefing/render.js.map +1 -0
- package/dist/lib/briefing/variables.d.ts +49 -0
- package/dist/lib/briefing/variables.d.ts.map +1 -0
- package/dist/lib/briefing/variables.js +92 -0
- package/dist/lib/briefing/variables.js.map +1 -0
- package/dist/lib/bundle.d.ts +57 -2
- package/dist/lib/bundle.d.ts.map +1 -1
- package/dist/lib/bundle.js +53 -19
- package/dist/lib/bundle.js.map +1 -1
- package/dist/lib/catalogue/aggregate.d.ts +19 -0
- package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
- package/dist/lib/catalogue/aggregate.js +88 -0
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/build.d.ts.map +1 -1
- package/dist/lib/catalogue/build.js +24 -1
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/capabilities.js +18 -4
- package/dist/lib/catalogue/builders/capabilities.js.map +1 -1
- package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts +12 -0
- package/dist/lib/catalogue/builders/feature-subscription-channels.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/feature-subscription-channels.js +197 -0
- package/dist/lib/catalogue/builders/feature-subscription-channels.js.map +1 -0
- package/dist/lib/catalogue/builders/index.d.ts +4 -0
- package/dist/lib/catalogue/builders/index.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/index.js +2 -0
- package/dist/lib/catalogue/builders/index.js.map +1 -1
- package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts +10 -0
- package/dist/lib/catalogue/builders/product-platform-dependencies.d.ts.map +1 -0
- package/dist/lib/catalogue/builders/product-platform-dependencies.js +155 -0
- package/dist/lib/catalogue/builders/product-platform-dependencies.js.map +1 -0
- package/dist/lib/catalogue/canonical-schema.yaml +96 -1
- package/dist/lib/catalogue/traceability-loader.d.ts +17 -0
- package/dist/lib/catalogue/traceability-loader.d.ts.map +1 -1
- package/dist/lib/catalogue/traceability-loader.js +6 -0
- package/dist/lib/catalogue/traceability-loader.js.map +1 -1
- package/dist/lib/generate-briefing/index.d.ts +22 -0
- package/dist/lib/generate-briefing/index.d.ts.map +1 -0
- package/dist/lib/generate-briefing/index.js +77 -0
- package/dist/lib/generate-briefing/index.js.map +1 -0
- package/dist/lib/hooks-seed/copilot.d.ts +93 -0
- package/dist/lib/hooks-seed/copilot.d.ts.map +1 -0
- package/dist/lib/hooks-seed/copilot.js +167 -0
- package/dist/lib/hooks-seed/copilot.js.map +1 -0
- package/dist/lib/hooks-seed/index.d.ts +4 -0
- package/dist/lib/hooks-seed/index.d.ts.map +1 -1
- package/dist/lib/hooks-seed/index.js +2 -0
- package/dist/lib/hooks-seed/index.js.map +1 -1
- package/dist/lib/hooks-seed/lifecycle-mapping.d.ts +12 -0
- package/dist/lib/hooks-seed/lifecycle-mapping.d.ts.map +1 -0
- package/dist/lib/hooks-seed/lifecycle-mapping.js +28 -0
- package/dist/lib/hooks-seed/lifecycle-mapping.js.map +1 -0
- package/dist/lib/init/index.d.ts +6 -4
- package/dist/lib/init/index.d.ts.map +1 -1
- package/dist/lib/init/index.js +5 -26
- package/dist/lib/init/index.js.map +1 -1
- package/dist/lib/init/platform.d.ts +9 -0
- package/dist/lib/init/platform.d.ts.map +1 -1
- package/dist/lib/init/platform.js +8 -2
- package/dist/lib/init/platform.js.map +1 -1
- package/dist/lib/list/discover.d.ts +28 -0
- package/dist/lib/list/discover.d.ts.map +1 -1
- package/dist/lib/list/discover.js +27 -11
- package/dist/lib/list/discover.js.map +1 -1
- package/dist/lib/list/format.d.ts +2 -0
- package/dist/lib/list/format.d.ts.map +1 -1
- package/dist/lib/list/format.js +44 -4
- package/dist/lib/list/format.js.map +1 -1
- package/dist/lib/list/index.d.ts +1 -0
- package/dist/lib/list/index.d.ts.map +1 -1
- package/dist/lib/list/index.js +1 -0
- package/dist/lib/list/index.js.map +1 -1
- package/dist/lib/lock-file.d.ts +23 -5
- package/dist/lib/lock-file.d.ts.map +1 -1
- package/dist/lib/lock-file.js +86 -9
- package/dist/lib/lock-file.js.map +1 -1
- package/dist/lib/pack/builder.d.ts +55 -0
- package/dist/lib/pack/builder.d.ts.map +1 -0
- package/dist/lib/pack/builder.js +226 -0
- package/dist/lib/pack/builder.js.map +1 -0
- package/dist/lib/pack/index.d.ts +26 -0
- package/dist/lib/pack/index.d.ts.map +1 -0
- package/dist/lib/pack/index.js +85 -0
- package/dist/lib/pack/index.js.map +1 -0
- package/dist/lib/pack/leakage.d.ts +55 -0
- package/dist/lib/pack/leakage.d.ts.map +1 -0
- package/dist/lib/pack/leakage.js +133 -0
- package/dist/lib/pack/leakage.js.map +1 -0
- package/dist/lib/pack/schema.d.ts +36 -0
- package/dist/lib/pack/schema.d.ts.map +1 -0
- package/dist/lib/pack/schema.js +63 -0
- package/dist/lib/pack/schema.js.map +1 -0
- package/dist/lib/pack/seed.d.ts +46 -0
- package/dist/lib/pack/seed.d.ts.map +1 -0
- package/dist/lib/pack/seed.js +107 -0
- package/dist/lib/pack/seed.js.map +1 -0
- package/dist/lib/repo-kind.d.ts +8 -4
- package/dist/lib/repo-kind.d.ts.map +1 -1
- package/dist/lib/repo-kind.js +10 -2
- package/dist/lib/repo-kind.js.map +1 -1
- package/dist/lib/sync/briefing-merge.d.ts +34 -0
- package/dist/lib/sync/briefing-merge.d.ts.map +1 -0
- package/dist/lib/sync/briefing-merge.js +82 -0
- package/dist/lib/sync/briefing-merge.js.map +1 -0
- package/dist/lib/sync/config.d.ts +33 -0
- package/dist/lib/sync/config.d.ts.map +1 -0
- package/dist/lib/sync/config.js +40 -0
- package/dist/lib/sync/config.js.map +1 -0
- package/dist/lib/sync/copilot-hooks-merge.d.ts +30 -0
- package/dist/lib/sync/copilot-hooks-merge.d.ts.map +1 -0
- package/dist/lib/sync/copilot-hooks-merge.js +96 -0
- package/dist/lib/sync/copilot-hooks-merge.js.map +1 -0
- package/dist/lib/sync/index.d.ts +40 -3
- package/dist/lib/sync/index.d.ts.map +1 -1
- package/dist/lib/sync/index.js +186 -26
- package/dist/lib/sync/index.js.map +1 -1
- package/dist/lib/sync/source-tag.d.ts +5 -0
- package/dist/lib/sync/source-tag.d.ts.map +1 -0
- package/dist/lib/sync/source-tag.js +34 -0
- package/dist/lib/sync/source-tag.js.map +1 -0
- package/dist/verbs/generate-briefing.d.ts +3 -0
- package/dist/verbs/generate-briefing.d.ts.map +1 -0
- package/dist/verbs/generate-briefing.js +28 -0
- package/dist/verbs/generate-briefing.js.map +1 -0
- package/dist/verbs/init.d.ts.map +1 -1
- package/dist/verbs/init.js +11 -8
- package/dist/verbs/init.js.map +1 -1
- package/dist/verbs/list.d.ts.map +1 -1
- package/dist/verbs/list.js +3 -1
- package/dist/verbs/list.js.map +1 -1
- package/dist/verbs/pack.d.ts +3 -0
- package/dist/verbs/pack.d.ts.map +1 -0
- package/dist/verbs/pack.js +35 -0
- package/dist/verbs/pack.js.map +1 -0
- package/dist/verbs/sync.d.ts.map +1 -1
- package/dist/verbs/sync.js +56 -15
- package/dist/verbs/sync.js.map +1 -1
- 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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"}
|
package/dist/lib/repo-kind.d.ts
CHANGED
|
@@ -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:
|
|
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
|
-
* (
|
|
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:
|
|
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
|
|
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"}
|
package/dist/lib/repo-kind.js
CHANGED
|
@@ -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
|
-
* (
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiBjC;;;;;;GAMG;AACH,MAAM,oBAAoB,GAA4B,IAAI,GAAG,CAAC;IAC5D,mBAAmB;IACnB,cAAc;IACd,sBAAsB;IACtB,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE7D,MAAM,oBAAoB,GAAwC;IAChE,kBAAkB,EAAE,UAAU;IAC9B,qBAAqB,EAAE,aAAa;IACpC,qBAAqB,EAAE,aAAa;IACpC,gBAAgB,EAAE,SAAS;CAC5B,CAAC;AAEF,MAAM,oBAAoB,GAAwC;IAChE,QAAQ,EAAE,kBAAkB;IAC5B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,gBAAgB;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,sBAAsB,GAAmD;IAC7E,mBAAmB,EAAE,UAAU;IAC/B,cAAc,EAAE,aAAa;IAC7B,sBAAsB,EAAE,aAAa;IACrC,kBAAkB,EAAE,SAAS;CAC9B,CAAC;AAEF,MAAM,sBAAsB,GAA0C;IACpE,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,sBAAsB;IACnC,OAAO,EAAE,kBAAkB;CAC5B,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"repo-kind.js","sourceRoot":"","sources":["../../src/lib/repo-kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiBjC;;;;;;GAMG;AACH,MAAM,oBAAoB,GAA4B,IAAI,GAAG,CAAC;IAC5D,mBAAmB;IACnB,cAAc;IACd,sBAAsB;IACtB,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE7D,MAAM,oBAAoB,GAAwC;IAChE,kBAAkB,EAAE,UAAU;IAC9B,qBAAqB,EAAE,aAAa;IACpC,qBAAqB,EAAE,aAAa;IACpC,gBAAgB,EAAE,SAAS;CAC5B,CAAC;AAEF,MAAM,oBAAoB,GAAwC;IAChE,QAAQ,EAAE,kBAAkB;IAC5B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;IAClC,OAAO,EAAE,gBAAgB;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,sBAAsB,GAAmD;IAC7E,mBAAmB,EAAE,UAAU;IAC/B,cAAc,EAAE,aAAa;IAC7B,sBAAsB,EAAE,aAAa;IACrC,kBAAkB,EAAE,SAAS;CAC9B,CAAC;AAEF,MAAM,sBAAsB,GAA0C;IACpE,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,sBAAsB;IACnC,OAAO,EAAE,kBAAkB;CAC5B,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAc;IACnD,OAAO,sBAAsB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,IAAI,oBAAoB,CAAC;AACvC,CAAC;AAED,MAAM,gBAAgB,GAA4B,IAAI,GAAG,CAAC;IACxD,mBAAmB;IACnB,cAAc;IACd,sBAAsB;IACtB,kBAAkB;IAClB,4BAA4B;CAC7B,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,gBAAgB,CAAC,GAAG,CAAC,KAAmB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,6EAA6E;IAC7E,KAAK,MAAM,QAAQ,IAAI,CAAC,cAAc,EAAE,qBAAqB,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAC/D,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,gBAAgB,QAAQ,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CACtE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,IAAc;IAEd,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAgB7D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAyB;IAEzB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC;QAC1C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,gBAAgB,EAAE,IAAI,CAAC,QAAQ;QAC/B,uBAAuB,EAAE,IAAI,CAAC,eAAe;KAC9C,CAAC,CAAC;IAEH,sDAAsD;IACtD,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACtE,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CACN,WAAW,2BAA2B,qEAAqE,CAC5G,CAAC;QACF,uEAAuE;QACvE,4CAA4C;QAC5C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CACN,+DAA+D,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChG,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;IAClE,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClD,GAAG,CAAC,IAAI,CAAC,aAAa,2BAA2B,GAAG,CAAC,CAAC;IAEtD,2CAA2C;IAC3C,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAC9C,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,YAAY,EACjB,IAAI,CACL,CAAC;IACF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CACN,WAAW,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,iDAAiD,IAAI,CAAC,YAAY,GAAG,CAC5H,CAAC;QACF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,GAAG,CAAC,IAAI,CACN,YAAY,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,iCAAiC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9H,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtD,qEAAqE;IACrE,+DAA+D;IAC/D,mEAAmE;IACnE,oEAAoE;IACpE,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC;QAC5C,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC;IAC1B,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAC5C,WAAW,EACX,QAAQ,EACR,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,iBAAiB,EAAE,EACtD,IAAI,CAAC,cAAc,CACpB,CAAC;IACF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,aAAa,UAAU,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|