wabachi 0.2.0 → 0.3.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 (55) hide show
  1. package/.codex-plugin/plugin.json +6 -0
  2. package/LICENSE +1 -1
  3. package/README.md +17 -21
  4. package/dist/architecture/cli.js +51 -36
  5. package/dist/architecture/cli.js.map +1 -1
  6. package/dist/architecture/documentation/react-flow.d.ts +23 -0
  7. package/dist/architecture/documentation/react-flow.js +436 -0
  8. package/dist/architecture/documentation/react-flow.js.map +1 -0
  9. package/dist/architecture/documentation/site.d.ts +10 -13
  10. package/dist/architecture/documentation/site.js +58 -24
  11. package/dist/architecture/documentation/site.js.map +1 -1
  12. package/dist/architecture/projection/react-flow.d.ts +96 -0
  13. package/dist/architecture/projection/react-flow.js +388 -0
  14. package/dist/architecture/projection/react-flow.js.map +1 -0
  15. package/dist/cli.js +53 -14
  16. package/dist/cli.js.map +1 -1
  17. package/dist/command-contract.d.ts +78 -0
  18. package/dist/command-contract.js +194 -0
  19. package/dist/command-contract.js.map +1 -0
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +1 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/runtime/repository.d.ts +3 -0
  24. package/dist/runtime/repository.js +140 -16
  25. package/dist/runtime/repository.js.map +1 -1
  26. package/dist/runtime/run.js +3 -1
  27. package/dist/runtime/run.js.map +1 -1
  28. package/dist/skill.d.ts +47 -0
  29. package/dist/skill.js +160 -0
  30. package/dist/skill.js.map +1 -0
  31. package/dist/working-set/codec.d.ts +7 -0
  32. package/dist/working-set/codec.js +53 -0
  33. package/dist/working-set/codec.js.map +1 -0
  34. package/dist/working-set/conflicts.d.ts +46 -0
  35. package/dist/working-set/conflicts.js +97 -0
  36. package/dist/working-set/conflicts.js.map +1 -0
  37. package/dist/working-set/derive.d.ts +34 -0
  38. package/dist/working-set/derive.js +634 -0
  39. package/dist/working-set/derive.js.map +1 -0
  40. package/dist/working-set/index.d.ts +3 -0
  41. package/dist/working-set/index.js +3 -0
  42. package/dist/working-set/index.js.map +1 -0
  43. package/dist/working-set/model.d.ts +93 -0
  44. package/dist/working-set/model.js +204 -0
  45. package/dist/working-set/model.js.map +1 -0
  46. package/dist/working-set/quality.d.ts +201 -0
  47. package/dist/working-set/quality.js +447 -0
  48. package/dist/working-set/quality.js.map +1 -0
  49. package/dist/working-set/seeds.d.ts +135 -0
  50. package/dist/working-set/seeds.js +433 -0
  51. package/dist/working-set/seeds.js.map +1 -0
  52. package/docs/USAGE.md +118 -0
  53. package/docs/examples/minimal-canon.json +24 -0
  54. package/package.json +14 -4
  55. package/skills/wabachi/SKILL.md +39 -0
@@ -1,13 +1,78 @@
1
- import { execFile } from "node:child_process";
1
+ import { execFile, spawn } from "node:child_process";
2
2
  import { mkdir } from "node:fs/promises";
3
3
  import { promisify } from "node:util";
4
4
  const execFileAsync = promisify(execFile);
5
+ const MAX_EXTERNAL_PROCESS_STDERR_LENGTH = 1024;
6
+ function processErrorLike(error) {
7
+ if (error === null || typeof error !== "object")
8
+ return undefined;
9
+ return error;
10
+ }
11
+ export function isExternalProcessError(error) {
12
+ const processError = processErrorLike(error);
13
+ return (processError !== undefined &&
14
+ (processError.stderr !== undefined ||
15
+ processError.cmd !== undefined ||
16
+ processError.signal !== undefined ||
17
+ typeof processError.code === "number"));
18
+ }
19
+ function boundedText(value) {
20
+ const normalized = value.replace(/\s+/gu, " ").trim();
21
+ if (normalized.length <= MAX_EXTERNAL_PROCESS_STDERR_LENGTH)
22
+ return normalized;
23
+ return `${normalized.slice(0, MAX_EXTERNAL_PROCESS_STDERR_LENGTH - 1)}…`;
24
+ }
25
+ function processStatus(processError) {
26
+ if (typeof processError?.code === "number")
27
+ return `exit ${processError.code}`;
28
+ if (processError?.signal)
29
+ return `signal ${processError.signal}`;
30
+ if (processError?.code !== undefined && processError.code !== null)
31
+ return `error ${processError.code}`;
32
+ return "failed to start";
33
+ }
34
+ function processCommand(processError, fallbackCommand) {
35
+ return processError?.cmd ?? fallbackCommand ?? "external process";
36
+ }
37
+ /** Formats process failures for both runtime exceptions and provider records. */
38
+ export function formatExternalProcessError(error, stage, fallbackCommand) {
39
+ const processError = processErrorLike(error);
40
+ const stderr = processError?.stderr === undefined ? "" : String(processError.stderr);
41
+ const detail = boundedText(stderr || (error instanceof Error ? error.message : String(error)));
42
+ const suffix = detail.length === 0 ? "" : ` stderr: ${detail}`;
43
+ return `${stage} failed: ${processCommand(processError, fallbackCommand)} (${processStatus(processError)})${suffix}`;
44
+ }
45
+ function captureStderr(stream) {
46
+ let value = "";
47
+ let truncated = false;
48
+ stream.setEncoding("utf8");
49
+ stream.on("data", (chunk) => {
50
+ if (value.length >= MAX_EXTERNAL_PROCESS_STDERR_LENGTH) {
51
+ truncated = true;
52
+ return;
53
+ }
54
+ const next = `${value}${chunk}`;
55
+ if (next.length > MAX_EXTERNAL_PROCESS_STDERR_LENGTH) {
56
+ value = next.slice(0, MAX_EXTERNAL_PROCESS_STDERR_LENGTH);
57
+ truncated = true;
58
+ }
59
+ else {
60
+ value = next;
61
+ }
62
+ });
63
+ return () => (truncated ? boundedText(`${value}…`) : boundedText(value));
64
+ }
5
65
  function isRemoteUrl(source) {
6
66
  return /^[a-z][a-z0-9+.-]*:\/\//iu.test(source) || /^[^/]+@[^:]+:/u.test(source);
7
67
  }
8
68
  async function git(args, cwd) {
9
- const { stdout } = await execFileAsync("git", args, { cwd });
10
- return stdout.trim();
69
+ try {
70
+ const { stdout } = await execFileAsync("git", args, { cwd });
71
+ return stdout.trim();
72
+ }
73
+ catch (error) {
74
+ throw new Error(formatExternalProcessError(error, "git", ["git", ...args].join(" ")), { cause: error });
75
+ }
11
76
  }
12
77
  /**
13
78
  * Resolves a local repository path or a Git URL, plus an optional revision,
@@ -19,7 +84,7 @@ async function git(args, cwd) {
19
84
  export async function resolveRepository(source, revision, bareRepoDir) {
20
85
  if (isRemoteUrl(source)) {
21
86
  await mkdir(bareRepoDir, { recursive: true });
22
- await execFileAsync("git", ["init", "--bare", "-q", bareRepoDir]);
87
+ await git(["init", "--bare", "-q", bareRepoDir], bareRepoDir);
23
88
  await git(["fetch", "-q", "--depth", "1", source, revision ?? "HEAD"], bareRepoDir);
24
89
  const commitSha = await git(["rev-parse", "FETCH_HEAD"], bareRepoDir);
25
90
  return { resolved: { source, commitSha }, archiveDir: bareRepoDir };
@@ -35,20 +100,79 @@ export async function resolveRepository(source, revision, bareRepoDir) {
35
100
  export async function createIsolatedWorkspace(resolution, workspaceRoot) {
36
101
  await mkdir(workspaceRoot, { recursive: true });
37
102
  await new Promise((resolve, reject) => {
38
- const gitArchive = execFile("git", ["archive", resolution.resolved.commitSha], { cwd: resolution.archiveDir, maxBuffer: 1024 * 1024 * 1024 }, (error) => {
39
- if (error)
40
- reject(error);
103
+ const gitCommand = ["git", "archive", resolution.resolved.commitSha];
104
+ const tarCommand = ["tar", "-x", "-C", workspaceRoot];
105
+ const gitArchive = spawn(gitCommand[0], gitCommand.slice(1), {
106
+ cwd: resolution.archiveDir,
41
107
  });
42
- const tar = execFile("tar", ["-x", "-C", workspaceRoot], (error) => {
43
- if (error)
44
- reject(error);
45
- else
46
- resolve();
108
+ const tar = spawn(tarCommand[0], tarCommand.slice(1));
109
+ const gitArchiveStderr = captureStderr(gitArchive.stderr);
110
+ const tarStderr = captureStderr(tar.stderr);
111
+ let gitArchiveExit;
112
+ let tarExit;
113
+ let pipeError;
114
+ let settled = false;
115
+ const stopOtherProcess = (process) => {
116
+ if (!process.killed)
117
+ process.kill();
118
+ };
119
+ const rejectWithProcessError = (error, stage, command, sibling) => {
120
+ if (settled)
121
+ return;
122
+ settled = true;
123
+ stopOtherProcess(sibling);
124
+ reject(new Error(formatExternalProcessError(error, stage, command.join(" ")), { cause: error }));
125
+ };
126
+ const finish = () => {
127
+ if (settled || gitArchiveExit === undefined || tarExit === undefined)
128
+ return;
129
+ // A malformed/empty stream caused by git archive failing should retain
130
+ // git's actionable stderr instead of replacing it with tar's secondary
131
+ // "not an archive" diagnostic. A tar failure takes precedence when the
132
+ // archive side was terminated by the pipe closing (SIGPIPE).
133
+ if (gitArchiveExit.code !== null && gitArchiveExit.code !== 0) {
134
+ settled = true;
135
+ reject(new Error(formatExternalProcessError({ code: gitArchiveExit.code, signal: gitArchiveExit.signal, stderr: gitArchiveStderr() }, "git archive", gitCommand.join(" "))));
136
+ return;
137
+ }
138
+ if (tarExit.code !== 0 || tarExit.signal !== null) {
139
+ settled = true;
140
+ reject(new Error(formatExternalProcessError({ code: tarExit.code, signal: tarExit.signal, stderr: tarStderr() }, "tar extraction", tarCommand.join(" "))));
141
+ return;
142
+ }
143
+ if (gitArchiveExit.signal !== null) {
144
+ settled = true;
145
+ reject(new Error(formatExternalProcessError({ code: gitArchiveExit.code, signal: gitArchiveExit.signal, stderr: gitArchiveStderr() }, "git archive", gitCommand.join(" "))));
146
+ return;
147
+ }
148
+ if (pipeError !== undefined) {
149
+ settled = true;
150
+ reject(new Error(`archive pipe failed: ${boundedText(String(pipeError))}`, { cause: pipeError }));
151
+ return;
152
+ }
153
+ settled = true;
154
+ resolve();
155
+ };
156
+ gitArchive.once("error", (error) => {
157
+ rejectWithProcessError(error, "git archive", gitCommand, tar);
158
+ });
159
+ tar.once("error", (error) => {
160
+ rejectWithProcessError(error, "tar extraction", tarCommand, gitArchive);
161
+ });
162
+ gitArchive.once("close", (code, signal) => {
163
+ gitArchiveExit = { code, signal };
164
+ finish();
165
+ });
166
+ tar.once("close", (code, signal) => {
167
+ tarExit = { code, signal };
168
+ finish();
169
+ });
170
+ gitArchive.stdout.once("error", (error) => {
171
+ pipeError ??= error;
172
+ });
173
+ tar.stdin.once("error", (error) => {
174
+ pipeError ??= error;
47
175
  });
48
- if (!gitArchive.stdout || !tar.stdin) {
49
- reject(new Error("failed to pipe git archive into tar"));
50
- return;
51
- }
52
176
  gitArchive.stdout.pipe(tar.stdin);
53
177
  });
54
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/runtime/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/runtime/repository.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import { mkdir } from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { collectToolchainVersions, writeManifest } from "./manifest.js";
5
- import { createIsolatedWorkspace, resolveRepository } from "./repository.js";
5
+ import { createIsolatedWorkspace, formatExternalProcessError, isExternalProcessError, resolveRepository, } from "./repository.js";
6
6
  /**
7
7
  * Resolves the input repository to an immutable commit, materializes it
8
8
  * into an isolated workspace, executes each provider through the common
@@ -75,6 +75,8 @@ async function executeProvider(provider, context) {
75
75
  }
76
76
  }
77
77
  function toErrorMessage(error) {
78
+ if (isExternalProcessError(error))
79
+ return formatExternalProcessError(error, "provider process");
78
80
  return error instanceof Error ? error.message : String(error);
79
81
  }
80
82
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { type CommandId } from "./command-contract.js";
2
+ /** Deterministic intent-oriented playbooks for the supported Wabachi surface. */
3
+ export declare const SKILL_MODEL_VERSION: "1.0.0";
4
+ export declare const MAX_SKILL_OUTPUT_BYTES = 4096;
5
+ export interface SkillWorkflowStep {
6
+ readonly summary: string;
7
+ /** Stable reference into the versioned command contract. */
8
+ readonly commandId: CommandId;
9
+ /** Bare executable command derived from commandId. */
10
+ readonly command: string;
11
+ /** Practical example derived from commandId. */
12
+ readonly example: string;
13
+ /** Progressive-help pointer derived from commandId. */
14
+ readonly helpPointer: string;
15
+ }
16
+ export interface SkillScenario {
17
+ readonly id: string;
18
+ readonly title: string;
19
+ readonly whenToUse: string;
20
+ readonly workflow: readonly SkillWorkflowStep[];
21
+ readonly invariants: readonly string[];
22
+ readonly canonicalCommandId: CommandId;
23
+ readonly canonicalEntrypoint: string;
24
+ readonly helpPointer: string;
25
+ }
26
+ export declare const SKILL_SCENARIOS: readonly SkillScenario[];
27
+ export interface SkillIndexEntry {
28
+ readonly id: string;
29
+ readonly title: string;
30
+ readonly whenToUse: string;
31
+ }
32
+ export interface SkillIndexProjection {
33
+ readonly version: typeof SKILL_MODEL_VERSION;
34
+ readonly scenarios: readonly SkillIndexEntry[];
35
+ }
36
+ export interface SkillScenarioProjection extends SkillScenario {
37
+ readonly version: typeof SKILL_MODEL_VERSION;
38
+ }
39
+ export declare function findSkillScenario(id: string): SkillScenario | undefined;
40
+ export declare function projectSkillIndexToJson(): SkillIndexProjection;
41
+ export declare function projectSkillIndexToText(): string;
42
+ export declare function projectSkillScenarioToJson(scenario: SkillScenario): SkillScenarioProjection;
43
+ export declare function projectSkillScenarioToText(scenario: SkillScenario): string;
44
+ /** Keep text diagnostics and projections within the explicit UTF-8 budget. */
45
+ export declare function boundText(value: string): string;
46
+ /** Serialize a JSON projection without allowing the machine-readable path to exceed the same cap. */
47
+ export declare function serializeSkillJson(value: unknown): string;
package/dist/skill.js ADDED
@@ -0,0 +1,160 @@
1
+ import { commandExample, commandHelpPointer, commandInvocation, getCommand, } from "./command-contract.js";
2
+ /** Deterministic intent-oriented playbooks for the supported Wabachi surface. */
3
+ export const SKILL_MODEL_VERSION = "1.0.0";
4
+ export const MAX_SKILL_OUTPUT_BYTES = 4096;
5
+ function workflowStep(summary, commandId) {
6
+ getCommand(commandId);
7
+ return {
8
+ summary,
9
+ commandId,
10
+ command: commandInvocation(commandId),
11
+ example: commandExample(commandId),
12
+ helpPointer: commandHelpPointer(commandId),
13
+ };
14
+ }
15
+ function skillScenario(input) {
16
+ return {
17
+ id: input.id,
18
+ title: input.title,
19
+ whenToUse: input.whenToUse,
20
+ workflow: input.workflow.map(([summary, commandId]) => workflowStep(summary, commandId)),
21
+ invariants: input.invariants,
22
+ canonicalCommandId: input.canonicalCommandId,
23
+ canonicalEntrypoint: commandInvocation(input.canonicalCommandId),
24
+ helpPointer: commandHelpPointer(input.canonicalCommandId),
25
+ };
26
+ }
27
+ export const SKILL_SCENARIOS = [
28
+ skillScenario({
29
+ id: "analyze-repository",
30
+ title: "Analyze a repository",
31
+ whenToUse: "Use when you need deterministic provider output for a repository at a selected revision.",
32
+ workflow: [["Resolve the repository and execute the registered analysis providers.", "run.execute"]],
33
+ invariants: [
34
+ "Choose an explicit revision when reproducibility matters; the default resolution remains supported.",
35
+ "Retain the output directory when another workflow or reviewer needs the manifest and provider artifacts.",
36
+ "The provider set and analysis execution semantics are owned by the runtime, not this playbook.",
37
+ ],
38
+ canonicalCommandId: "run.execute",
39
+ }),
40
+ skillScenario({
41
+ id: "provider-matrix",
42
+ title: "Build a provider matrix",
43
+ whenToUse: "Use when you need auditable facts, correlations, matrix output, and a report for one revision.",
44
+ workflow: [["Run the provider matrix and retain its generated artifacts.", "matrix.execute"]],
45
+ invariants: [
46
+ "Use a 40-character commit SHA when matrix evidence must be tied to an immutable revision.",
47
+ "Provide an output directory so the report and its supporting artifacts remain inspectable.",
48
+ "Provider registration and matrix execution order remain runtime authority.",
49
+ ],
50
+ canonicalCommandId: "matrix.execute",
51
+ }),
52
+ skillScenario({
53
+ id: "validate-architecture-canon",
54
+ title: "Validate an Architecture Canon",
55
+ whenToUse: "Use before rendering an explicit Architecture Canon document or handing it to another workflow.",
56
+ workflow: [["Validate the explicit Canon file and inspect any bounded diagnostics.", "architecture.validate"]],
57
+ invariants: [
58
+ "The Canon file is explicit input; this workflow does not create or mutate one.",
59
+ "Validation must succeed before rendering or publishing derived documentation.",
60
+ "Machine-readable diagnostics are available through the command's JSON projection.",
61
+ ],
62
+ canonicalCommandId: "architecture.validate",
63
+ }),
64
+ skillScenario({
65
+ id: "render-architecture-canon",
66
+ title: "Render Architecture Canon documentation",
67
+ whenToUse: "Use when a valid Architecture Canon should become a retained static documentation site.",
68
+ workflow: [["Render the explicit Canon file into a retained output directory.", "architecture.render"]],
69
+ invariants: [
70
+ "Validate the same Canon file first when its validity has not already been established.",
71
+ "The Structurizr CLI is required for static export; use the command's executable override only when needed.",
72
+ "Rendering is a projection and does not add an Architecture Canon authoring command.",
73
+ ],
74
+ canonicalCommandId: "architecture.render",
75
+ }),
76
+ skillScenario({
77
+ id: "architecture-documentation",
78
+ title: "Follow the Architecture Documentation workflow",
79
+ whenToUse: "Use for the normal manual-authoring, validation, and rendering path for Architecture Canon documentation.",
80
+ workflow: [
81
+ [
82
+ "Author or revise the explicit Canon document using repository documentation guidance; no init command is implied.",
83
+ "architecture.help",
84
+ ],
85
+ ["Validate the authored Canon before producing derived documentation.", "architecture.validate"],
86
+ ["Render the validated Canon into a retained static site.", "architecture.render"],
87
+ ],
88
+ invariants: [
89
+ "Authoring remains a deliberate file-editing step; Wabachi does not invent an init or edit command.",
90
+ "Validation and rendering operate on an explicit Canon file and preserve existing execution semantics.",
91
+ "Keep the generated site and source Canon together when the result is intended for review or publication.",
92
+ ],
93
+ canonicalCommandId: "architecture.help",
94
+ }),
95
+ ];
96
+ export function findSkillScenario(id) {
97
+ return SKILL_SCENARIOS.find((scenario) => scenario.id === id);
98
+ }
99
+ export function projectSkillIndexToJson() {
100
+ return {
101
+ version: SKILL_MODEL_VERSION,
102
+ scenarios: SKILL_SCENARIOS.map(({ id, title, whenToUse }) => ({ id, title, whenToUse })),
103
+ };
104
+ }
105
+ export function projectSkillIndexToText() {
106
+ const lines = [`Wabachi skill scenarios (v${SKILL_MODEL_VERSION}):`, ""];
107
+ for (const scenario of SKILL_SCENARIOS) {
108
+ lines.push(` ${scenario.id} - ${scenario.title}`);
109
+ lines.push(` ${scenario.whenToUse}`);
110
+ }
111
+ lines.push("", "Run `wabachi skill <scenario>` for one bounded playbook.");
112
+ return boundText(lines.join("\n"));
113
+ }
114
+ export function projectSkillScenarioToJson(scenario) {
115
+ return {
116
+ version: SKILL_MODEL_VERSION,
117
+ ...scenario,
118
+ workflow: scenario.workflow.map((step) => workflowStep(step.summary, step.commandId)),
119
+ };
120
+ }
121
+ export function projectSkillScenarioToText(scenario) {
122
+ const projected = projectSkillScenarioToJson(scenario);
123
+ const lines = [`${projected.title} (${projected.id})`, "", `When to use: ${projected.whenToUse}`, "", "Workflow:"];
124
+ projected.workflow.forEach((step, index) => {
125
+ lines.push(` ${index + 1}. ${step.summary}`);
126
+ lines.push(` Command: ${step.command}`);
127
+ lines.push(` Example: ${step.example}`);
128
+ lines.push(` Help: ${step.helpPointer}`);
129
+ });
130
+ lines.push("", "Invariants:");
131
+ for (const invariant of projected.invariants)
132
+ lines.push(` - ${invariant}`);
133
+ lines.push("", `Canonical entrypoint: ${projected.canonicalEntrypoint}`, `Exact syntax: ${projected.helpPointer}`);
134
+ return boundText(lines.join("\n"));
135
+ }
136
+ /** Keep text diagnostics and projections within the explicit UTF-8 budget. */
137
+ export function boundText(value) {
138
+ if (Buffer.byteLength(value, "utf8") <= MAX_SKILL_OUTPUT_BYTES)
139
+ return value;
140
+ const suffix = "…";
141
+ const characters = Array.from(value);
142
+ while (characters.length > 0 &&
143
+ Buffer.byteLength(`${characters.join("")}${suffix}`, "utf8") > MAX_SKILL_OUTPUT_BYTES) {
144
+ characters.pop();
145
+ }
146
+ return `${characters.join("")}${suffix}`;
147
+ }
148
+ /** Serialize a JSON projection without allowing the machine-readable path to exceed the same cap. */
149
+ export function serializeSkillJson(value) {
150
+ const serialized = JSON.stringify(value);
151
+ if (Buffer.byteLength(serialized, "utf8") <= MAX_SKILL_OUTPUT_BYTES)
152
+ return serialized;
153
+ return JSON.stringify({
154
+ ok: false,
155
+ diagnostics: [
156
+ { code: "skill-output-too-large", message: `skill output exceeds ${MAX_SKILL_OUTPUT_BYTES} UTF-8 bytes` },
157
+ ],
158
+ });
159
+ }
160
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type CandidateWorkingSet, type CandidateWorkingSetInput } from "./model.js";
2
+ /** Deterministic JSON serialization of the canonical artifact shape. */
3
+ export declare function serializeCandidateWorkingSet(input: CandidateWorkingSetInput | CandidateWorkingSet): string;
4
+ /** Parses JSON and rejects malformed or unsupported artifacts before semantic use. */
5
+ export declare function parseCandidateWorkingSet(serialized: string): CandidateWorkingSet;
6
+ /** Alias for callers that need validation without parsing a JSON string. */
7
+ export declare const decodeCandidateWorkingSet: typeof parseCandidateWorkingSet;
@@ -0,0 +1,53 @@
1
+ import { CANDIDATE_WORKING_SET_KIND, createCandidateWorkingSet, validateCandidateWorkingSet, } from "./model.js";
2
+ function canonicalDocument(workingSet) {
3
+ return {
4
+ kind: CANDIDATE_WORKING_SET_KIND,
5
+ schemaVersion: workingSet.schemaVersion,
6
+ workingSetId: workingSet.workingSetId,
7
+ repository: {
8
+ repositoryHost: workingSet.repository.repositoryHost,
9
+ repositoryId: workingSet.repository.repositoryId,
10
+ repository: workingSet.repository.repository,
11
+ },
12
+ revision: workingSet.revision,
13
+ entries: workingSet.entries.map((entry) => ({
14
+ state: entry.state,
15
+ target: {
16
+ kind: entry.target.kind,
17
+ locator: entry.target.locator,
18
+ },
19
+ reason: {
20
+ id: entry.reason.id,
21
+ summary: entry.reason.summary,
22
+ },
23
+ evidence: entry.evidence.map((reference) => ({
24
+ artifact: reference.artifact,
25
+ reference: reference.reference,
26
+ })),
27
+ })),
28
+ };
29
+ }
30
+ /** Deterministic JSON serialization of the canonical artifact shape. */
31
+ export function serializeCandidateWorkingSet(input) {
32
+ const workingSet = validateCandidateWorkingSet({
33
+ ...createCandidateWorkingSet(input),
34
+ schemaVersion: 1,
35
+ });
36
+ return JSON.stringify(canonicalDocument(workingSet));
37
+ }
38
+ /** Parses JSON and rejects malformed or unsupported artifacts before semantic use. */
39
+ export function parseCandidateWorkingSet(serialized) {
40
+ if (typeof serialized !== "string")
41
+ throw new TypeError("candidate working set serialization must be a string");
42
+ let parsed;
43
+ try {
44
+ parsed = JSON.parse(serialized);
45
+ }
46
+ catch {
47
+ throw new TypeError("candidate working set serialization is malformed");
48
+ }
49
+ return validateCandidateWorkingSet(parsed);
50
+ }
51
+ /** Alias for callers that need validation without parsing a JSON string. */
52
+ export const decodeCandidateWorkingSet = parseCandidateWorkingSet;
53
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/working-set/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,GAG5B,MAAM,YAAY,CAAC;AAEpB,SAAS,iBAAiB,CAAC,UAA+B;IACxD,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,UAAU,EAAE;YACV,cAAc,EAAE,UAAU,CAAC,UAAU,CAAC,cAAc;YACpD,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,YAAY;YAChD,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,UAAU;SAC7C;QACD,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE;gBACN,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;gBACvB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;aAC9B;YACD,MAAM,EAAE;gBACN,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;gBACnB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;aAC9B;YACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC3C,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;aAC/B,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,4BAA4B,CAAC,KAAqD;IAChG,MAAM,UAAU,GAAG,2BAA2B,CAAC;QAC7C,GAAG,yBAAyB,CAAC,KAAK,CAAC;QACnC,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,wBAAwB,CAAC,UAAkB;IACzD,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAChH,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,wBAAwB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { type CandidateWorkingSetEntry, type RepositoryIdentity, type WorkingSetEvidenceReference, type WorkingSetTarget } from "./model.js";
2
+ /** V1 diagnostics that must remain visible instead of being resolved implicitly. */
3
+ export declare const WORKING_SET_CONFLICT_KINDS: readonly ["ambiguity", "disagreement", "stale-evidence", "mapping-gap", "required-but-unauthorized", "insufficient-evidence"];
4
+ export type WorkingSetConflictKind = (typeof WORKING_SET_CONFLICT_KINDS)[number];
5
+ export interface WorkingSetConflict {
6
+ readonly kind: WorkingSetConflictKind;
7
+ /** Unresolved target used to preserve the conflict in the Candidate Working Set artifact. */
8
+ readonly target: WorkingSetTarget;
9
+ readonly reason: {
10
+ readonly id: string;
11
+ readonly summary: string;
12
+ };
13
+ readonly evidence: readonly WorkingSetEvidenceReference[];
14
+ }
15
+ export interface WorkingSetAuthorizationEntry {
16
+ readonly target: WorkingSetTarget;
17
+ readonly evidence?: readonly WorkingSetEvidenceReference[];
18
+ }
19
+ /**
20
+ * External authorization is intentionally only an input to comparison. It is
21
+ * never copied into the Candidate Working Set as authority and never widened
22
+ * by Wabachi.
23
+ */
24
+ export interface WorkingSetAuthorizationInput {
25
+ readonly repository?: RepositoryIdentity;
26
+ readonly revision?: string;
27
+ readonly targets?: readonly (WorkingSetTarget | WorkingSetAuthorizationEntry)[];
28
+ readonly entries?: readonly WorkingSetAuthorizationEntry[];
29
+ readonly authorizedTargets?: readonly (WorkingSetTarget | WorkingSetAuthorizationEntry)[];
30
+ }
31
+ export interface WorkingSetConflictInput {
32
+ readonly kind: WorkingSetConflictKind;
33
+ /** Stable conflict-local locator, not provider payload. */
34
+ readonly locator: string;
35
+ readonly evidence?: readonly WorkingSetEvidenceReference[];
36
+ }
37
+ /** Creates one deterministic, unresolved conflict record from bounded evidence. */
38
+ export declare function createWorkingSetConflict(input: WorkingSetConflictInput): WorkingSetConflict;
39
+ /** Converts the semantic conflict record into the existing artifact entry shape. */
40
+ export declare function conflictToWorkingSetEntry(conflict: WorkingSetConflict): CandidateWorkingSetEntry;
41
+ /** Returns the machine-readable conflict class carried by an unresolved entry. */
42
+ export declare function getWorkingSetConflictKind(entry: CandidateWorkingSetEntry): WorkingSetConflictKind | undefined;
43
+ /** Canonicalizes the supported authorization comparison shapes without issuing authority. */
44
+ export declare function authorizationEntries(input: WorkingSetAuthorizationInput): readonly WorkingSetAuthorizationEntry[];
45
+ export declare function workingSetTargetKey(target: WorkingSetTarget): string;
46
+ export declare function conflictSummary(kind: WorkingSetConflictKind): string;