@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceability-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/traceability-loader.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,wEAAwE;AACxE,qEAAqE;AACrE,+DAA+D;AAC/D,uEAAuE;AACvE,kEAAkE;AAClE,EAAE;AACF,uFAAuF;AACvF,8DAA8D;AAE9D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAG1C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"traceability-loader.js","sourceRoot":"","sources":["../../../src/lib/catalogue/traceability-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `sdd-cli generate-briefing` — regenerate `agent-instructions.md` +
|
|
3
|
+
* the harness wrapper for an existing SDD repo without pulling a
|
|
4
|
+
* bundle. Reuses the briefing-merge sync helpers so behaviour matches
|
|
5
|
+
* what `sdd-cli sync` writes (the templates already on disk are the
|
|
6
|
+
* source of truth).
|
|
7
|
+
*
|
|
8
|
+
* Replaces the v0.3.0 `generate-claude-md` verb whose rich-content
|
|
9
|
+
* output diverges from the ADR 0148 thin-pointer shape.
|
|
10
|
+
*/
|
|
11
|
+
import { resolveAgentHarness, type AgentHarness } from "../agent-harness.js";
|
|
12
|
+
export interface GenerateBriefingOptions {
|
|
13
|
+
readonly targetDir: string;
|
|
14
|
+
readonly agentHarness?: AgentHarness;
|
|
15
|
+
readonly allowOverwrite: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface GenerateBriefingResult {
|
|
18
|
+
readonly exitCode: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function runGenerateBriefing(opts: GenerateBriefingOptions, stdout?: (line: string) => void): Promise<GenerateBriefingResult>;
|
|
21
|
+
export { resolveAgentHarness };
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/generate-briefing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,EAEL,mBAAmB,EACnB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,uBAAuB,EAC7B,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAA2C,GACpE,OAAO,CAAC,sBAAsB,CAAC,CAyEjC;AAGD,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `sdd-cli generate-briefing` — regenerate `agent-instructions.md` +
|
|
3
|
+
* the harness wrapper for an existing SDD repo without pulling a
|
|
4
|
+
* bundle. Reuses the briefing-merge sync helpers so behaviour matches
|
|
5
|
+
* what `sdd-cli sync` writes (the templates already on disk are the
|
|
6
|
+
* source of truth).
|
|
7
|
+
*
|
|
8
|
+
* Replaces the v0.3.0 `generate-claude-md` verb whose rich-content
|
|
9
|
+
* output diverges from the ADR 0148 thin-pointer shape.
|
|
10
|
+
*/
|
|
11
|
+
import { access } from "node:fs/promises";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { AGENT_INSTRUCTIONS_REL_PATH, BRIEFING_TEMPLATE_ROOT, harnessWrapperOutputPath, } from "../briefing/index.js";
|
|
14
|
+
import { syncBriefingFiles } from "../sync/briefing-merge.js";
|
|
15
|
+
import { DEFAULT_AGENT_HARNESS, resolveAgentHarness, } from "../agent-harness.js";
|
|
16
|
+
import { readRepoKind } from "../repo-kind.js";
|
|
17
|
+
import { readLockFile } from "../lock-file.js";
|
|
18
|
+
export async function runGenerateBriefing(opts, stdout = (line) => process.stdout.write(line)) {
|
|
19
|
+
const repoKind = await readRepoKind(opts.targetDir);
|
|
20
|
+
if (repoKind === null) {
|
|
21
|
+
stdout(fail(`Not an SDD repo: no .sdd-repo-kind marker in ${opts.targetDir}`));
|
|
22
|
+
return { exitCode: 1 };
|
|
23
|
+
}
|
|
24
|
+
const lock = await readLockFile(opts.targetDir);
|
|
25
|
+
if (!lock) {
|
|
26
|
+
stdout(fail(`Cannot regenerate briefing: method-baseline.lock missing at ${opts.targetDir}. Run sdd-cli sync first.`));
|
|
27
|
+
return { exitCode: 1 };
|
|
28
|
+
}
|
|
29
|
+
const forwardBase = lock.bundles.find((b) => b.isForwardBase);
|
|
30
|
+
if (!forwardBase) {
|
|
31
|
+
stdout(fail(`Cannot regenerate briefing: no forward-base bundle in method-baseline.lock at ${opts.targetDir}.`));
|
|
32
|
+
return { exitCode: 1 };
|
|
33
|
+
}
|
|
34
|
+
// Templates ship in the bundle and land here on sync. Refusing
|
|
35
|
+
// up-front when they're absent gives a clearer error than the
|
|
36
|
+
// graceful skip downstream.
|
|
37
|
+
const templatesPresent = await fileExists(join(opts.targetDir, BRIEFING_TEMPLATE_ROOT, "agent-instructions.md.hbs"));
|
|
38
|
+
if (!templatesPresent) {
|
|
39
|
+
stdout(fail(`Briefing templates not found under ${BRIEFING_TEMPLATE_ROOT}/ — sync against a baseline that ships ADR 0148 templates first.`));
|
|
40
|
+
return { exitCode: 1 };
|
|
41
|
+
}
|
|
42
|
+
const result = await syncBriefingFiles({
|
|
43
|
+
targetRepo: opts.targetDir,
|
|
44
|
+
repoKind,
|
|
45
|
+
baselineVersion: forwardBase.bundleVersion,
|
|
46
|
+
agentHarness: opts.agentHarness ?? DEFAULT_AGENT_HARNESS,
|
|
47
|
+
allowOverwrite: opts.allowOverwrite,
|
|
48
|
+
});
|
|
49
|
+
if (result.refused) {
|
|
50
|
+
stdout(fail(`${result.refused} has adopter edits outside the method-managed markers. Re-run with --allow-overwrite to replace the file.`));
|
|
51
|
+
return { exitCode: 1 };
|
|
52
|
+
}
|
|
53
|
+
for (const line of result.log)
|
|
54
|
+
stdout(info(line));
|
|
55
|
+
if (result.log.length === 0) {
|
|
56
|
+
stdout(info(`Briefing files already match templates — no changes (${AGENT_INSTRUCTIONS_REL_PATH}, ${harnessWrapperOutputPath(opts.agentHarness ?? DEFAULT_AGENT_HARNESS)}).`));
|
|
57
|
+
}
|
|
58
|
+
return { exitCode: 0 };
|
|
59
|
+
}
|
|
60
|
+
// Re-export so the verb layer can use the validator without an extra import line.
|
|
61
|
+
export { resolveAgentHarness };
|
|
62
|
+
async function fileExists(path) {
|
|
63
|
+
try {
|
|
64
|
+
await access(path);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function info(msg) {
|
|
72
|
+
return `[INFO] ${msg}\n`;
|
|
73
|
+
}
|
|
74
|
+
function fail(msg) {
|
|
75
|
+
return `[FAIL] ${msg}\n`;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/generate-briefing/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builders + drift detection for the method-managed GitHub Copilot CLI
|
|
3
|
+
* hooks, per `docs/method/methods/hook-contracts.md` (Hook 1, Hook 2)
|
|
4
|
+
* and the portable contracts in `hook-portable-contract-schema.yaml`.
|
|
5
|
+
*
|
|
6
|
+
* The Copilot CLI surface differs from Claude Code in three ways
|
|
7
|
+
* (per ADR 0141 §4.3 + hook-contracts.md):
|
|
8
|
+
*
|
|
9
|
+
* 1. Hook configs live in per-event JSON files (`.github/hooks/<event>.json`),
|
|
10
|
+
* not a single settings.json.
|
|
11
|
+
* 2. No per-tool matcher — every `preToolUse` hook fires for every
|
|
12
|
+
* tool, with in-script filtering instead.
|
|
13
|
+
* 3. Approval semantic is declarative (`approval: deny-on-nonzero`)
|
|
14
|
+
* rather than exit-code based.
|
|
15
|
+
*
|
|
16
|
+
* Ownership is sentinel-based, same as Claude Code: the `bash` and
|
|
17
|
+
* `powershell` command strings carry `# sdd-method-managed:true`.
|
|
18
|
+
* Adopter-added events in the same `events[]` array lack the sentinel
|
|
19
|
+
* and survive sync.
|
|
20
|
+
*/
|
|
21
|
+
import { type PortableLifecycleEventClass } from "./lifecycle-mapping.js";
|
|
22
|
+
/**
|
|
23
|
+
* The shape of one event entry in `.github/hooks/<event>.json`.
|
|
24
|
+
* `command` may be either a single shell string or a per-shell object —
|
|
25
|
+
* we always emit the per-shell object for Windows/PowerShell parity.
|
|
26
|
+
*/
|
|
27
|
+
export interface CopilotHookCommand {
|
|
28
|
+
readonly bash: string;
|
|
29
|
+
readonly powershell: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CopilotHookEvent {
|
|
32
|
+
readonly type: string;
|
|
33
|
+
readonly command: CopilotHookCommand;
|
|
34
|
+
readonly timeout_ms?: number;
|
|
35
|
+
readonly approval?: "always-allow" | "deny-on-nonzero";
|
|
36
|
+
}
|
|
37
|
+
export interface CopilotHookFile {
|
|
38
|
+
readonly version: 1;
|
|
39
|
+
readonly events: readonly CopilotHookEvent[];
|
|
40
|
+
readonly [key: string]: unknown;
|
|
41
|
+
}
|
|
42
|
+
export declare function copilotHookFilePath(portable: PortableLifecycleEventClass): string;
|
|
43
|
+
/**
|
|
44
|
+
* Hook 1 — `block-edits-to-method-managed-paths` (pre_tool_use).
|
|
45
|
+
* Copilot CLI has no per-tool matcher, so the script
|
|
46
|
+
* (orchestration/scripts/copilot-method-guard.{sh,ps1}) does the
|
|
47
|
+
* filtering on tool name in addition to the path check. Method-side
|
|
48
|
+
* authors the scripts; we just emit the wiring.
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildCopilotPreToolUseEvent(): CopilotHookEvent;
|
|
51
|
+
/**
|
|
52
|
+
* Hook 2 — `validate-adr-structure-on-session-start` (session_start).
|
|
53
|
+
* Output is surfaced as session-baseline context; non-blocking
|
|
54
|
+
* (`approval: always-allow`) to match the portable contract's `warn`
|
|
55
|
+
* exit-code semantic.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildCopilotSessionStartEvent(): CopilotHookEvent;
|
|
58
|
+
/**
|
|
59
|
+
* Method-managed Copilot CLI hook surface. The map is portable-class →
|
|
60
|
+
* `{ filePath, events: [method-managed events to write] }`. The
|
|
61
|
+
* settings-merge pass walks this to render each `.github/hooks/*.json`
|
|
62
|
+
* file with sentinel-based ownership.
|
|
63
|
+
*/
|
|
64
|
+
export type CopilotHookSurface = Readonly<Record<PortableLifecycleEventClass, {
|
|
65
|
+
filePath: string;
|
|
66
|
+
events: readonly CopilotHookEvent[];
|
|
67
|
+
}>>;
|
|
68
|
+
export declare function buildMethodManagedCopilotHooks(): Partial<CopilotHookSurface>;
|
|
69
|
+
/**
|
|
70
|
+
* An event entry is method-managed iff its `command.bash` (or
|
|
71
|
+
* `command.powershell`) carries the sentinel.
|
|
72
|
+
*/
|
|
73
|
+
export declare function isMethodManagedEvent(event: CopilotHookEvent): boolean;
|
|
74
|
+
export interface CopilotMergeResult {
|
|
75
|
+
readonly file: CopilotHookFile;
|
|
76
|
+
/** True iff a method-managed event differs from incoming or was added. */
|
|
77
|
+
readonly changed: boolean;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Upsert method-managed events into an existing hook file. Adopter-
|
|
81
|
+
* added events (no sentinel) survive. An unmarked adopter event that
|
|
82
|
+
* is equivalent (modulo sentinel) to a method-managed event we're
|
|
83
|
+
* adding gets de-duped — same safety net as the Claude Code merge
|
|
84
|
+
* post-v0.12.2.
|
|
85
|
+
*/
|
|
86
|
+
export declare function upsertCopilotHookFile(existing: CopilotHookFile | null, owned: readonly CopilotHookEvent[]): CopilotMergeResult;
|
|
87
|
+
/**
|
|
88
|
+
* Detect adopter drift: an event still carrying the sentinel but whose
|
|
89
|
+
* content no longer matches the canonical version we'd write. Returns
|
|
90
|
+
* `true` iff drift is present.
|
|
91
|
+
*/
|
|
92
|
+
export declare function detectCopilotHookDrift(existing: CopilotHookFile | null, owned: readonly CopilotHookEvent[]): boolean;
|
|
93
|
+
//# sourceMappingURL=copilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks-seed/copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAmB,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAI3F;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAUD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,2BAA2B,GACpC,MAAM,CAQR;AAOD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,IAAI,gBAAgB,CAY9D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,IAAI,gBAAgB,CAchE;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CACvC,MAAM,CACJ,2BAA2B,EAC3B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,CAC1D,CACF,CAAC;AAEF,wBAAgB,8BAA8B,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAW5E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAUrE;AA4BD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,GAAG,IAAI,EAChC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GACjC,kBAAkB,CA6BpB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,GAAG,IAAI,EAChC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GACjC,OAAO,CAKT"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builders + drift detection for the method-managed GitHub Copilot CLI
|
|
3
|
+
* hooks, per `docs/method/methods/hook-contracts.md` (Hook 1, Hook 2)
|
|
4
|
+
* and the portable contracts in `hook-portable-contract-schema.yaml`.
|
|
5
|
+
*
|
|
6
|
+
* The Copilot CLI surface differs from Claude Code in three ways
|
|
7
|
+
* (per ADR 0141 §4.3 + hook-contracts.md):
|
|
8
|
+
*
|
|
9
|
+
* 1. Hook configs live in per-event JSON files (`.github/hooks/<event>.json`),
|
|
10
|
+
* not a single settings.json.
|
|
11
|
+
* 2. No per-tool matcher — every `preToolUse` hook fires for every
|
|
12
|
+
* tool, with in-script filtering instead.
|
|
13
|
+
* 3. Approval semantic is declarative (`approval: deny-on-nonzero`)
|
|
14
|
+
* rather than exit-code based.
|
|
15
|
+
*
|
|
16
|
+
* Ownership is sentinel-based, same as Claude Code: the `bash` and
|
|
17
|
+
* `powershell` command strings carry `# sdd-method-managed:true`.
|
|
18
|
+
* Adopter-added events in the same `events[]` array lack the sentinel
|
|
19
|
+
* and survive sync.
|
|
20
|
+
*/
|
|
21
|
+
import { METHOD_MANAGED_SENTINEL } from "./types.js";
|
|
22
|
+
import { nativeEventName } from "./lifecycle-mapping.js";
|
|
23
|
+
const HARNESS = "github-copilot-cli";
|
|
24
|
+
/** Filename per portable lifecycle class. */
|
|
25
|
+
const HOOK_FILE_BY_PORTABLE = {
|
|
26
|
+
pre_tool_use: "pre-tool-use.json",
|
|
27
|
+
session_start: "session-start.json",
|
|
28
|
+
};
|
|
29
|
+
export function copilotHookFilePath(portable) {
|
|
30
|
+
const name = HOOK_FILE_BY_PORTABLE[portable];
|
|
31
|
+
if (!name) {
|
|
32
|
+
throw new Error(`No Copilot CLI hook file mapped for portable class "${portable}"`);
|
|
33
|
+
}
|
|
34
|
+
return `.github/hooks/${name}`;
|
|
35
|
+
}
|
|
36
|
+
function withSentinel(command) {
|
|
37
|
+
if (command.includes(METHOD_MANAGED_SENTINEL))
|
|
38
|
+
return command;
|
|
39
|
+
return `${command} ${METHOD_MANAGED_SENTINEL}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Hook 1 — `block-edits-to-method-managed-paths` (pre_tool_use).
|
|
43
|
+
* Copilot CLI has no per-tool matcher, so the script
|
|
44
|
+
* (orchestration/scripts/copilot-method-guard.{sh,ps1}) does the
|
|
45
|
+
* filtering on tool name in addition to the path check. Method-side
|
|
46
|
+
* authors the scripts; we just emit the wiring.
|
|
47
|
+
*/
|
|
48
|
+
export function buildCopilotPreToolUseEvent() {
|
|
49
|
+
return {
|
|
50
|
+
type: nativeEventName(HARNESS, "pre_tool_use"),
|
|
51
|
+
command: {
|
|
52
|
+
bash: withSentinel("./orchestration/scripts/copilot-method-guard.sh"),
|
|
53
|
+
powershell: withSentinel("./orchestration/scripts/copilot-method-guard.ps1"),
|
|
54
|
+
},
|
|
55
|
+
timeout_ms: 5000,
|
|
56
|
+
approval: "deny-on-nonzero",
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Hook 2 — `validate-adr-structure-on-session-start` (session_start).
|
|
61
|
+
* Output is surfaced as session-baseline context; non-blocking
|
|
62
|
+
* (`approval: always-allow`) to match the portable contract's `warn`
|
|
63
|
+
* exit-code semantic.
|
|
64
|
+
*/
|
|
65
|
+
export function buildCopilotSessionStartEvent() {
|
|
66
|
+
return {
|
|
67
|
+
type: nativeEventName(HARNESS, "session_start"),
|
|
68
|
+
command: {
|
|
69
|
+
bash: withSentinel("sdd-cli validate --validator adr-structure 2>&1 | head -20"),
|
|
70
|
+
powershell: withSentinel("sdd-cli validate --validator adr-structure 2>&1 | Select-Object -First 20"),
|
|
71
|
+
},
|
|
72
|
+
timeout_ms: 30000,
|
|
73
|
+
approval: "always-allow",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function buildMethodManagedCopilotHooks() {
|
|
77
|
+
return {
|
|
78
|
+
pre_tool_use: {
|
|
79
|
+
filePath: copilotHookFilePath("pre_tool_use"),
|
|
80
|
+
events: [buildCopilotPreToolUseEvent()],
|
|
81
|
+
},
|
|
82
|
+
session_start: {
|
|
83
|
+
filePath: copilotHookFilePath("session_start"),
|
|
84
|
+
events: [buildCopilotSessionStartEvent()],
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* An event entry is method-managed iff its `command.bash` (or
|
|
90
|
+
* `command.powershell`) carries the sentinel.
|
|
91
|
+
*/
|
|
92
|
+
export function isMethodManagedEvent(event) {
|
|
93
|
+
const bash = typeof event.command?.bash === "string" ? event.command.bash : "";
|
|
94
|
+
const ps = typeof event.command?.powershell === "string"
|
|
95
|
+
? event.command.powershell
|
|
96
|
+
: "";
|
|
97
|
+
return (bash.includes(METHOD_MANAGED_SENTINEL) ||
|
|
98
|
+
ps.includes(METHOD_MANAGED_SENTINEL));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Strip the sentinel and trailing whitespace from a command string so
|
|
102
|
+
* two commands can be compared modulo ownership marker. Symmetric to
|
|
103
|
+
* the Claude Code merge logic.
|
|
104
|
+
*/
|
|
105
|
+
function normaliseCommandString(command) {
|
|
106
|
+
return command.replace(METHOD_MANAGED_SENTINEL, "").trimEnd();
|
|
107
|
+
}
|
|
108
|
+
function eventsEquivalentExcludingSentinel(a, b) {
|
|
109
|
+
if (a.type !== b.type)
|
|
110
|
+
return false;
|
|
111
|
+
if (a.approval !== b.approval)
|
|
112
|
+
return false;
|
|
113
|
+
if (a.timeout_ms !== b.timeout_ms)
|
|
114
|
+
return false;
|
|
115
|
+
const aBash = a.command?.bash ?? "";
|
|
116
|
+
const bBash = b.command?.bash ?? "";
|
|
117
|
+
const aPs = a.command?.powershell ?? "";
|
|
118
|
+
const bPs = b.command?.powershell ?? "";
|
|
119
|
+
return (normaliseCommandString(aBash) === normaliseCommandString(bBash) &&
|
|
120
|
+
normaliseCommandString(aPs) === normaliseCommandString(bPs));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Upsert method-managed events into an existing hook file. Adopter-
|
|
124
|
+
* added events (no sentinel) survive. An unmarked adopter event that
|
|
125
|
+
* is equivalent (modulo sentinel) to a method-managed event we're
|
|
126
|
+
* adding gets de-duped — same safety net as the Claude Code merge
|
|
127
|
+
* post-v0.12.2.
|
|
128
|
+
*/
|
|
129
|
+
export function upsertCopilotHookFile(existing, owned) {
|
|
130
|
+
const currentEvents = existing?.events ?? [];
|
|
131
|
+
let dedupedAny = false;
|
|
132
|
+
const adopterEvents = currentEvents.filter((evt) => {
|
|
133
|
+
if (isMethodManagedEvent(evt))
|
|
134
|
+
return false;
|
|
135
|
+
const equivalent = owned.some((o) => eventsEquivalentExcludingSentinel(evt, o));
|
|
136
|
+
if (equivalent) {
|
|
137
|
+
dedupedAny = true;
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
});
|
|
142
|
+
const before = currentEvents.filter((e) => isMethodManagedEvent(e));
|
|
143
|
+
const after = owned;
|
|
144
|
+
const methodChanged = JSON.stringify(before) !== JSON.stringify(after);
|
|
145
|
+
const nextFile = {
|
|
146
|
+
version: 1,
|
|
147
|
+
events: [...adopterEvents, ...owned],
|
|
148
|
+
};
|
|
149
|
+
return {
|
|
150
|
+
file: nextFile,
|
|
151
|
+
changed: methodChanged || dedupedAny,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Detect adopter drift: an event still carrying the sentinel but whose
|
|
156
|
+
* content no longer matches the canonical version we'd write. Returns
|
|
157
|
+
* `true` iff drift is present.
|
|
158
|
+
*/
|
|
159
|
+
export function detectCopilotHookDrift(existing, owned) {
|
|
160
|
+
if (!existing)
|
|
161
|
+
return false;
|
|
162
|
+
const existingMethod = existing.events.filter((e) => isMethodManagedEvent(e));
|
|
163
|
+
if (existingMethod.length === 0)
|
|
164
|
+
return false;
|
|
165
|
+
return JSON.stringify(existingMethod) !== JSON.stringify(owned);
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../src/lib/hooks-seed/copilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,4 +14,8 @@ export { METHOD_MANAGED_SENTINEL, isMethodManagedMatcher } from "./types.js";
|
|
|
14
14
|
export { buildMethodManagedHooks } from "./entries.js";
|
|
15
15
|
export { detectHooksDrift, upsertMethodManagedHooks, } from "./merge.js";
|
|
16
16
|
export type { HooksUpsertResult } from "./merge.js";
|
|
17
|
+
export { buildMethodManagedCopilotHooks, copilotHookFilePath, detectCopilotHookDrift, isMethodManagedEvent, upsertCopilotHookFile, } from "./copilot.js";
|
|
18
|
+
export type { CopilotHookCommand, CopilotHookEvent, CopilotHookFile, CopilotHookSurface, CopilotMergeResult, } from "./copilot.js";
|
|
19
|
+
export { nativeEventName, } from "./lifecycle-mapping.js";
|
|
20
|
+
export type { PortableLifecycleEventClass } from "./lifecycle-mapping.js";
|
|
17
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks-seed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,UAAU,EACV,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks-seed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,UAAU,EACV,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -12,4 +12,6 @@
|
|
|
12
12
|
export { METHOD_MANAGED_SENTINEL, isMethodManagedMatcher } from "./types.js";
|
|
13
13
|
export { buildMethodManagedHooks } from "./entries.js";
|
|
14
14
|
export { detectHooksDrift, upsertMethodManagedHooks, } from "./merge.js";
|
|
15
|
+
export { buildMethodManagedCopilotHooks, copilotHookFilePath, detectCopilotHookDrift, isMethodManagedEvent, upsertCopilotHookFile, } from "./copilot.js";
|
|
16
|
+
export { nativeEventName, } from "./lifecycle-mapping.js";
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/hooks-seed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/hooks-seed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAStB,OAAO,EACL,eAAe,GAChB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portable lifecycle event class → harness-native event mapping per
|
|
3
|
+
* ADR 0141 §4.3 and the table in `docs/method/foundations/lifecycle-event-classes.yaml`.
|
|
4
|
+
*
|
|
5
|
+
* Adding a new harness binding is mechanical: extend `AgentHarness`
|
|
6
|
+
* in src/lib/agent-harness.ts and add a row here. Hook builders
|
|
7
|
+
* consume this mapping rather than hand-coding native event names.
|
|
8
|
+
*/
|
|
9
|
+
import type { AgentHarness } from "../agent-harness.js";
|
|
10
|
+
export type PortableLifecycleEventClass = "pre_tool_use" | "post_tool_use" | "user_prompt_submit" | "session_start" | "session_stop";
|
|
11
|
+
export declare function nativeEventName(harness: AgentHarness, portable: PortableLifecycleEventClass): string;
|
|
12
|
+
//# sourceMappingURL=lifecycle-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-mapping.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks-seed/lifecycle-mapping.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,MAAM,2BAA2B,GACnC,cAAc,GACd,eAAe,GACf,oBAAoB,GACpB,eAAe,GACf,cAAc,CAAC;AAqBnB,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,2BAA2B,GACpC,MAAM,CAER"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portable lifecycle event class → harness-native event mapping per
|
|
3
|
+
* ADR 0141 §4.3 and the table in `docs/method/foundations/lifecycle-event-classes.yaml`.
|
|
4
|
+
*
|
|
5
|
+
* Adding a new harness binding is mechanical: extend `AgentHarness`
|
|
6
|
+
* in src/lib/agent-harness.ts and add a row here. Hook builders
|
|
7
|
+
* consume this mapping rather than hand-coding native event names.
|
|
8
|
+
*/
|
|
9
|
+
const MAPPINGS = {
|
|
10
|
+
"claude-code": {
|
|
11
|
+
pre_tool_use: "PreToolUse",
|
|
12
|
+
post_tool_use: "PostToolUse",
|
|
13
|
+
user_prompt_submit: "UserPromptSubmit",
|
|
14
|
+
session_start: "SessionStart",
|
|
15
|
+
session_stop: "Stop",
|
|
16
|
+
},
|
|
17
|
+
"github-copilot-cli": {
|
|
18
|
+
pre_tool_use: "preToolUse",
|
|
19
|
+
post_tool_use: "postToolUse",
|
|
20
|
+
user_prompt_submit: "userPromptSubmitted",
|
|
21
|
+
session_start: "sessionStart",
|
|
22
|
+
session_stop: "agentStop",
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export function nativeEventName(harness, portable) {
|
|
26
|
+
return MAPPINGS[harness][portable];
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=lifecycle-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-mapping.js","sourceRoot":"","sources":["../../../src/lib/hooks-seed/lifecycle-mapping.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,QAAQ,GAEV;IACF,aAAa,EAAE;QACb,YAAY,EAAE,YAAY;QAC1B,aAAa,EAAE,aAAa;QAC5B,kBAAkB,EAAE,kBAAkB;QACtC,aAAa,EAAE,cAAc;QAC7B,YAAY,EAAE,MAAM;KACrB;IACD,oBAAoB,EAAE;QACpB,YAAY,EAAE,YAAY;QAC1B,aAAa,EAAE,aAAa;QAC5B,kBAAkB,EAAE,qBAAqB;QACzC,aAAa,EAAE,cAAc;QAC7B,YAAY,EAAE,WAAW;KAC1B;CACF,CAAC;AAEF,MAAM,UAAU,eAAe,CAC7B,OAAqB,EACrB,QAAqC;IAErC,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC"}
|
package/dist/lib/init/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentHarness } from "../agent-harness.js";
|
|
1
2
|
import { type Profile } from "../repo-kind.js";
|
|
2
3
|
import { type IntegrationProfileType } from "./integration.js";
|
|
3
4
|
export interface InitOptions {
|
|
@@ -9,11 +10,12 @@ export interface InitOptions {
|
|
|
9
10
|
dryRun: boolean;
|
|
10
11
|
platformRoot?: string;
|
|
11
12
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* Target agent harness per ADR 0141 §4.6. Drives which hooks
|
|
14
|
+
* baseline gets seeded and which wrappers are emitted. The CLI verb
|
|
15
|
+
* resolves the default (`claude-code`) before calling in; callers
|
|
16
|
+
* MAY pass `undefined` to mean the same thing in test paths.
|
|
15
17
|
*/
|
|
16
|
-
agentHarness?:
|
|
18
|
+
agentHarness?: AgentHarness;
|
|
17
19
|
appId?: string;
|
|
18
20
|
integrationId?: string;
|
|
19
21
|
profileType?: IntegrationProfileType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/init/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/init/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAItE,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,kBAAkB,CAAC;AAK1B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAG5B,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA8BD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,WAAW,EACjB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAA2C,GACpE,OAAO,CAAC,UAAU,CAAC,CA8GrB"}
|
package/dist/lib/init/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { execFile as execFileCb } from "node:child_process";
|
|
2
|
-
import { access, mkdir
|
|
2
|
+
import { access, mkdir } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
5
|
import { loadBundle } from "../bundle.js";
|
|
@@ -7,7 +7,6 @@ import { profileFromBundleName } from "../repo-kind.js";
|
|
|
7
7
|
import { runSync } from "../sync/index.js";
|
|
8
8
|
import { runValidate } from "../validate/index.js";
|
|
9
9
|
import { scaffoldAppProfile } from "./app.js";
|
|
10
|
-
import { renderAppClaudeMd, renderIntegrationClaudeMd, renderPlatformClaudeMd, } from "./claude-md.js";
|
|
11
10
|
import { scaffoldIntegrationProfile, } from "./integration.js";
|
|
12
11
|
import { derivePlatformId, scaffoldPlatformProfile } from "./platform.js";
|
|
13
12
|
const execFile = promisify(execFileCb);
|
|
@@ -94,9 +93,9 @@ export async function runInit(opts, stdout = (line) => process.stdout.write(line
|
|
|
94
93
|
stdout(fail("Sync failed during init; target repo may be partially populated"));
|
|
95
94
|
return { exitCode: syncResult.exitCode };
|
|
96
95
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
// Briefing files (`agent-instructions.md` + harness wrapper) are
|
|
97
|
+
// emitted by the sync step's `syncBriefingFiles` pass per ADR 0148.
|
|
98
|
+
// No init-time write needed; sync handles fresh-vs-existing.
|
|
100
99
|
if (opts.gitInit) {
|
|
101
100
|
const alreadyGit = await pathExists(join(opts.targetDir, ".git"));
|
|
102
101
|
if (alreadyGit) {
|
|
@@ -152,27 +151,6 @@ function displayId(opts) {
|
|
|
152
151
|
}
|
|
153
152
|
return opts.platformName ?? "<unknown-platform>";
|
|
154
153
|
}
|
|
155
|
-
function renderClaudeMdForProfile(opts) {
|
|
156
|
-
if (opts.profile === "application") {
|
|
157
|
-
return renderAppClaudeMd({
|
|
158
|
-
appId: opts.appId,
|
|
159
|
-
...(opts.platformName ? { platformName: opts.platformName } : {}),
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
if (opts.profile === "integration") {
|
|
163
|
-
return renderIntegrationClaudeMd({
|
|
164
|
-
integrationId: opts.integrationId,
|
|
165
|
-
profileType: opts.profileType,
|
|
166
|
-
...(opts.providerName ? { providerName: opts.providerName } : {}),
|
|
167
|
-
...(opts.platformName ? { platformName: opts.platformName } : {}),
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
const platformName = opts.platformName;
|
|
171
|
-
return renderPlatformClaudeMd({
|
|
172
|
-
platformName,
|
|
173
|
-
platformId: opts.platformId ?? derivePlatformId(platformName),
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
154
|
async function runScaffold(opts) {
|
|
177
155
|
if (opts.profile === "application") {
|
|
178
156
|
return scaffoldAppProfile({
|
|
@@ -187,6 +165,7 @@ async function runScaffold(opts) {
|
|
|
187
165
|
platformName,
|
|
188
166
|
platformId,
|
|
189
167
|
targetRepo: opts.targetDir,
|
|
168
|
+
...(opts.agentHarness ? { agentHarness: opts.agentHarness } : {}),
|
|
190
169
|
});
|
|
191
170
|
}
|
|
192
171
|
return scaffoldIntegrationProfile({
|