@ranimontagna/agent-toolkit 0.2.3 → 0.3.1

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 (138) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +45 -7
  3. package/dist/bin/agent-toolkit.js +9 -4
  4. package/dist/bin/agent-toolkit.js.map +1 -1
  5. package/dist/src/ariadne/args.d.ts +2 -0
  6. package/dist/src/ariadne/args.js +146 -0
  7. package/dist/src/ariadne/args.js.map +1 -0
  8. package/dist/src/ariadne/checks.d.ts +24 -0
  9. package/dist/src/ariadne/checks.js +74 -0
  10. package/dist/src/ariadne/checks.js.map +1 -0
  11. package/dist/src/ariadne/cli.d.ts +38 -0
  12. package/dist/src/ariadne/cli.js +206 -0
  13. package/dist/src/ariadne/cli.js.map +1 -0
  14. package/dist/src/ariadne/doctor.d.ts +16 -0
  15. package/dist/src/ariadne/doctor.js +207 -0
  16. package/dist/src/ariadne/doctor.js.map +1 -0
  17. package/dist/src/ariadne/git.d.ts +58 -0
  18. package/dist/src/ariadne/git.js +577 -0
  19. package/dist/src/ariadne/git.js.map +1 -0
  20. package/dist/src/ariadne/import.d.ts +2 -0
  21. package/dist/src/ariadne/import.js +93 -0
  22. package/dist/src/ariadne/import.js.map +1 -0
  23. package/dist/src/ariadne/init.d.ts +47 -0
  24. package/dist/src/ariadne/init.js +345 -0
  25. package/dist/src/ariadne/init.js.map +1 -0
  26. package/dist/src/ariadne/lock.d.ts +22 -0
  27. package/dist/src/ariadne/lock.js +478 -0
  28. package/dist/src/ariadne/lock.js.map +1 -0
  29. package/dist/src/ariadne/loop.d.ts +26 -0
  30. package/dist/src/ariadne/loop.js +1316 -0
  31. package/dist/src/ariadne/loop.js.map +1 -0
  32. package/dist/src/ariadne/ownership.d.ts +32 -0
  33. package/dist/src/ariadne/ownership.js +161 -0
  34. package/dist/src/ariadne/ownership.js.map +1 -0
  35. package/dist/src/ariadne/process.d.ts +27 -0
  36. package/dist/src/ariadne/process.js +302 -0
  37. package/dist/src/ariadne/process.js.map +1 -0
  38. package/dist/src/ariadne/prompt.d.ts +11 -0
  39. package/dist/src/ariadne/prompt.js +29 -0
  40. package/dist/src/ariadne/prompt.js.map +1 -0
  41. package/dist/src/ariadne/render.d.ts +7 -0
  42. package/dist/src/ariadne/render.js +72 -0
  43. package/dist/src/ariadne/render.js.map +1 -0
  44. package/dist/src/ariadne/result.d.ts +54 -0
  45. package/dist/src/ariadne/result.js +129 -0
  46. package/dist/src/ariadne/result.js.map +1 -0
  47. package/dist/src/ariadne/runtimes/antigravity.d.ts +2 -0
  48. package/dist/src/ariadne/runtimes/antigravity.js +17 -0
  49. package/dist/src/ariadne/runtimes/antigravity.js.map +1 -0
  50. package/dist/src/ariadne/runtimes/claude.d.ts +2 -0
  51. package/dist/src/ariadne/runtimes/claude.js +17 -0
  52. package/dist/src/ariadne/runtimes/claude.js.map +1 -0
  53. package/dist/src/ariadne/runtimes/codex.d.ts +2 -0
  54. package/dist/src/ariadne/runtimes/codex.js +24 -0
  55. package/dist/src/ariadne/runtimes/codex.js.map +1 -0
  56. package/dist/src/ariadne/runtimes/gemini.d.ts +2 -0
  57. package/dist/src/ariadne/runtimes/gemini.js +18 -0
  58. package/dist/src/ariadne/runtimes/gemini.js.map +1 -0
  59. package/dist/src/ariadne/runtimes/index.d.ts +4 -0
  60. package/dist/src/ariadne/runtimes/index.js +82 -0
  61. package/dist/src/ariadne/runtimes/index.js.map +1 -0
  62. package/dist/src/ariadne/runtimes/opencode.d.ts +2 -0
  63. package/dist/src/ariadne/runtimes/opencode.js +19 -0
  64. package/dist/src/ariadne/runtimes/opencode.js.map +1 -0
  65. package/dist/src/ariadne/runtimes/shared.d.ts +24 -0
  66. package/dist/src/ariadne/runtimes/shared.js +141 -0
  67. package/dist/src/ariadne/runtimes/shared.js.map +1 -0
  68. package/dist/src/ariadne/runtimes/types.d.ts +56 -0
  69. package/dist/src/ariadne/runtimes/types.js +3 -0
  70. package/dist/src/ariadne/runtimes/types.js.map +1 -0
  71. package/dist/src/ariadne/schema.d.ts +11 -0
  72. package/dist/src/ariadne/schema.js +214 -0
  73. package/dist/src/ariadne/schema.js.map +1 -0
  74. package/dist/src/ariadne/status.d.ts +72 -0
  75. package/dist/src/ariadne/status.js +280 -0
  76. package/dist/src/ariadne/status.js.map +1 -0
  77. package/dist/src/ariadne/store.d.ts +99 -0
  78. package/dist/src/ariadne/store.js +738 -0
  79. package/dist/src/ariadne/store.js.map +1 -0
  80. package/dist/src/ariadne/types.d.ts +128 -0
  81. package/dist/src/ariadne/types.js +5 -0
  82. package/dist/src/ariadne/types.js.map +1 -0
  83. package/dist/src/ariadne/usage.d.ts +1 -0
  84. package/dist/src/ariadne/usage.js +8 -0
  85. package/dist/src/ariadne/usage.js.map +1 -0
  86. package/dist/src/build-skills-index.d.ts +3 -0
  87. package/dist/src/build-skills-index.js +50 -0
  88. package/dist/src/build-skills-index.js.map +1 -0
  89. package/dist/src/cli.d.ts +5 -0
  90. package/dist/src/cli.js +14 -0
  91. package/dist/src/cli.js.map +1 -0
  92. package/dist/src/context.js.map +1 -1
  93. package/dist/src/lock-update.js.map +1 -1
  94. package/dist/src/main.js.map +1 -1
  95. package/dist/src/release.js.map +1 -1
  96. package/dist/src/skill-targets.js.map +1 -1
  97. package/dist/src/skills-audit.d.ts +6 -0
  98. package/dist/src/skills-audit.js +68 -2
  99. package/dist/src/skills-audit.js.map +1 -1
  100. package/dist/src/skills-index.d.ts +12 -0
  101. package/dist/src/skills-index.js +50 -0
  102. package/dist/src/skills-index.js.map +1 -0
  103. package/dist/src/stage-agent-skills.d.ts +1 -0
  104. package/dist/src/stage-agent-skills.js +32 -0
  105. package/dist/src/stage-agent-skills.js.map +1 -0
  106. package/dist/src/system.js.map +1 -1
  107. package/dist/src/tool-lock.d.ts +20 -0
  108. package/dist/src/tool-lock.js +26 -0
  109. package/dist/src/tool-lock.js.map +1 -1
  110. package/dist/src/usage.js +1 -0
  111. package/dist/src/usage.js.map +1 -1
  112. package/package.json +15 -8
  113. package/skills/frontend/accessibility/BRIEF.md +11 -0
  114. package/skills/frontend/accessibility/NOTICE.md +3 -0
  115. package/skills/frontend/accessibility/SKILL.md +10 -0
  116. package/skills/frontend/astro/astro-react-landing/BRIEF.md +10 -0
  117. package/skills/frontend/astro/astro-react-landing/SKILL.md +42 -0
  118. package/skills/frontend/design/frontend-design/BRIEF.md +10 -0
  119. package/skills/frontend/design/frontend-design/SKILL.md +38 -0
  120. package/skills/frontend/design/ui-ux-pro-max/BRIEF.md +11 -0
  121. package/skills/frontend/design/ui-ux-pro-max/NOTICE.md +3 -0
  122. package/skills/frontend/design/ui-ux-pro-max/SKILL.md +15 -0
  123. package/skills/frontend/gsap/gsap-motion/BRIEF.md +10 -0
  124. package/skills/frontend/gsap/gsap-motion/SKILL.md +36 -0
  125. package/skills/frontend/seo/seo-page/BRIEF.md +10 -0
  126. package/skills/frontend/seo/seo-page/SKILL.md +34 -0
  127. package/skills/quality/biome-formatting/BRIEF.md +9 -0
  128. package/skills/quality/biome-formatting/SKILL.md +27 -0
  129. package/skills/research/instagram-public-research/BRIEF.md +10 -0
  130. package/skills/research/instagram-public-research/SKILL.md +41 -0
  131. package/skills/research/research-data-collection/BRIEF.md +11 -0
  132. package/skills/research/research-data-collection/SKILL.md +40 -0
  133. package/skills/workflow/ariadne/NOTICE.md +11 -0
  134. package/skills/workflow/ariadne/SKILL.md +96 -0
  135. package/skills/workflow/ariadne-prd/NOTICE.md +11 -0
  136. package/skills/workflow/ariadne-prd/SKILL.md +69 -0
  137. package/skills.index.json +299 -0
  138. package/tools.lock.json +40 -21
@@ -0,0 +1,141 @@
1
+ const versionTokenPattern = /(?:^|[^0-9A-Za-z])v?(\d+(?:\.\d+){1,3}(?:[-+][0-9A-Za-z.-]+)?)(?=$|[^0-9A-Za-z])/;
2
+ export function parseVersionToken(output) {
3
+ return versionTokenPattern.exec(output)?.[1];
4
+ }
5
+ export function compareNumericVersions(left, right) {
6
+ const numeric = (value) => value
7
+ .split(/[+-]/, 1)[0]
8
+ ?.split(".")
9
+ .map((part) => Number.parseInt(part, 10)) ?? [];
10
+ const leftParts = numeric(left);
11
+ const rightParts = numeric(right);
12
+ const length = Math.max(leftParts.length, rightParts.length);
13
+ for (let index = 0; index < length; index += 1) {
14
+ const difference = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);
15
+ if (difference !== 0)
16
+ return Math.sign(difference);
17
+ }
18
+ return 0;
19
+ }
20
+ export function promptInstruction(relativePromptPath) {
21
+ return `Read ${relativePromptPath} and follow it exactly.`;
22
+ }
23
+ function probeFailureReason(fallback, stdout, stderr) {
24
+ return stderr.trim() || stdout.trim() || fallback;
25
+ }
26
+ function detectRuntime(definition, deps) {
27
+ const commandPath = deps.findCommand(definition.command);
28
+ if (!commandPath) {
29
+ return {
30
+ name: definition.name,
31
+ state: "unavailable",
32
+ reason: `${definition.command} was not found on PATH.`,
33
+ };
34
+ }
35
+ const versionResult = deps.capture(commandPath, ["--version"]);
36
+ const version = parseVersionToken(`${versionResult.stdout}\n${versionResult.stderr}`);
37
+ if (!versionResult.ok || !version) {
38
+ return {
39
+ name: definition.name,
40
+ state: "incompatible",
41
+ commandPath,
42
+ version,
43
+ reason: probeFailureReason(`Could not verify the ${definition.name} version.`, versionResult.stdout, versionResult.stderr),
44
+ };
45
+ }
46
+ const versionCompatible = definition.version.kind === "exact"
47
+ ? version === definition.version.version
48
+ : compareNumericVersions(version, definition.version.version) >= 0;
49
+ if (!versionCompatible) {
50
+ const requirement = definition.version.kind === "exact"
51
+ ? `exactly ${definition.version.version}`
52
+ : `at least ${definition.version.version}`;
53
+ return {
54
+ name: definition.name,
55
+ state: "incompatible",
56
+ commandPath,
57
+ version,
58
+ reason: `${definition.name} must be ${requirement}; found ${version}.`,
59
+ };
60
+ }
61
+ const helpResult = deps.capture(commandPath, definition.helpArgs);
62
+ const help = `${helpResult.stdout}\n${helpResult.stderr}`;
63
+ const missingFlags = definition.requiredHelp.filter((required) => !help.includes(required));
64
+ if (!helpResult.ok || missingFlags.length > 0) {
65
+ const reason = missingFlags.length > 0
66
+ ? `Missing required headless flags: ${missingFlags.join(", ")}.`
67
+ : probeFailureReason(`Could not inspect ${definition.name} headless capabilities.`, helpResult.stdout, helpResult.stderr);
68
+ return {
69
+ name: definition.name,
70
+ state: "incompatible",
71
+ commandPath,
72
+ version,
73
+ reason,
74
+ };
75
+ }
76
+ if (!definition.authArgs) {
77
+ return {
78
+ name: definition.name,
79
+ state: "unverified",
80
+ commandPath,
81
+ version,
82
+ reason: "No zero-credit local authentication probe is available.",
83
+ };
84
+ }
85
+ const authResult = deps.capture(commandPath, definition.authArgs);
86
+ if (!authResult.ok) {
87
+ return {
88
+ name: definition.name,
89
+ state: "unverified",
90
+ commandPath,
91
+ version,
92
+ reason: probeFailureReason("Local authentication readiness could not be confirmed.", authResult.stdout, authResult.stderr),
93
+ };
94
+ }
95
+ return {
96
+ name: definition.name,
97
+ state: "healthy",
98
+ commandPath,
99
+ version,
100
+ reason: "Executable, version, headless flags, and local auth are ready.",
101
+ };
102
+ }
103
+ export function interpretProcessResult(result) {
104
+ if (result.timedOut) {
105
+ return {
106
+ ok: false,
107
+ status: result.status,
108
+ reason: "Runtime process timed out.",
109
+ };
110
+ }
111
+ if (result.aborted) {
112
+ return {
113
+ ok: false,
114
+ status: result.status,
115
+ reason: "Runtime process was aborted.",
116
+ };
117
+ }
118
+ if (result.status !== 0) {
119
+ return {
120
+ ok: false,
121
+ status: result.status,
122
+ reason: `Runtime exited with status ${result.status ?? "unknown"}; inspect machine-local logs.`,
123
+ };
124
+ }
125
+ return { ok: true, status: result.status };
126
+ }
127
+ export function createRuntimeAdapter(definition, deps) {
128
+ return Object.freeze({
129
+ name: definition.name,
130
+ command: definition.command,
131
+ detect: () => detectRuntime(definition, deps),
132
+ buildInvocation: (context) => ({
133
+ command: deps.findCommand(definition.command) ?? definition.command,
134
+ args: definition.invocationArgs(context),
135
+ cwd: context.projectRoot,
136
+ env: { ...deps.baseEnv, ARIADNE_RUN_ID: context.runId },
137
+ }),
138
+ interpretResult: interpretProcessResult,
139
+ });
140
+ }
141
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/ariadne/runtimes/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { RunResult } from "../../system.js";
2
+ import type { AriadneRuntimeName, ProcessResult } from "../types.js";
3
+ export type RuntimeDetectionState = "unavailable" | "incompatible" | "unverified" | "healthy";
4
+ export type AgentInvocation = {
5
+ command: string;
6
+ args: string[];
7
+ cwd: string;
8
+ env: NodeJS.ProcessEnv;
9
+ };
10
+ export type RuntimeDetection = {
11
+ name: AriadneRuntimeName;
12
+ state: RuntimeDetectionState;
13
+ commandPath?: string;
14
+ version?: string;
15
+ reason: string;
16
+ };
17
+ export type IterationContext = {
18
+ runId: string;
19
+ projectRoot: string;
20
+ promptPath: string;
21
+ relativePromptPath: string;
22
+ };
23
+ export type AgentOutcome = {
24
+ ok: boolean;
25
+ status: number | null;
26
+ reason?: string;
27
+ };
28
+ export type RuntimeProbeDeps = {
29
+ findCommand: (command: string) => string | null;
30
+ capture: (command: string, args: string[]) => RunResult;
31
+ baseEnv: NodeJS.ProcessEnv;
32
+ };
33
+ export type RuntimeRegistry = Record<AriadneRuntimeName, AriadneRuntimeAdapter>;
34
+ export type RuntimeSelectionInput = {
35
+ explicit?: AriadneRuntimeName;
36
+ configured?: AriadneRuntimeName;
37
+ globalPreferred?: AriadneRuntimeName;
38
+ interactive: boolean;
39
+ choose?: (choices: RuntimeDetection[]) => Promise<AriadneRuntimeName>;
40
+ registry: RuntimeRegistry;
41
+ };
42
+ export type RuntimeSelection = {
43
+ name: AriadneRuntimeName;
44
+ adapter: AriadneRuntimeAdapter;
45
+ detection: RuntimeDetection;
46
+ source: "explicit" | "configured" | "automatic" | "global" | "interactive";
47
+ };
48
+ export declare class AriadneRuntimeError extends Error {
49
+ }
50
+ export interface AriadneRuntimeAdapter {
51
+ readonly name: AriadneRuntimeName;
52
+ readonly command: string;
53
+ detect(): RuntimeDetection;
54
+ buildInvocation(context: IterationContext): AgentInvocation;
55
+ interpretResult(result: ProcessResult): AgentOutcome;
56
+ }
@@ -0,0 +1,3 @@
1
+ export class AriadneRuntimeError extends Error {
2
+ }
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/ariadne/runtimes/types.ts"],"names":[],"mappings":"AA6DA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG"}
@@ -0,0 +1,11 @@
1
+ import type { AgentResult, ExpectedAgentResult } from "./result.js";
2
+ import type { AriadneConfig, AriadnePrd, StoryStatus } from "./types.js";
3
+ export declare class AriadneStateError extends Error {
4
+ readonly jsonPath: string;
5
+ constructor(jsonPath: string, message: string);
6
+ }
7
+ export declare function validatePrd(input: unknown): AriadnePrd;
8
+ export declare function validateConfig(input: unknown): AriadneConfig;
9
+ export declare function assertRunnableConfig(config: AriadneConfig): void;
10
+ export declare function assertStoryTransition(from: StoryStatus, to: StoryStatus): void;
11
+ export declare function validateAgentResult(input: unknown, expected: ExpectedAgentResult): AgentResult;
@@ -0,0 +1,214 @@
1
+ import { isRuntimeName } from "../state.js";
2
+ export class AriadneStateError extends Error {
3
+ jsonPath;
4
+ constructor(jsonPath, message) {
5
+ super(`${jsonPath}: ${message}`);
6
+ this.jsonPath = jsonPath;
7
+ this.name = "AriadneStateError";
8
+ }
9
+ }
10
+ function stateError(path, message) {
11
+ throw new AriadneStateError(path, message);
12
+ }
13
+ function recordAt(input, jsonPath) {
14
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
15
+ stateError(jsonPath, "expected an object");
16
+ }
17
+ return input;
18
+ }
19
+ function assertOnlyKeys(input, allowedKeys, jsonPath) {
20
+ for (const key of Object.keys(input)) {
21
+ if (!allowedKeys.includes(key)) {
22
+ stateError(`${jsonPath}.${key}`, "is not allowed");
23
+ }
24
+ }
25
+ }
26
+ function stringAt(input, jsonPath) {
27
+ if (typeof input !== "string" || input.trim() === "") {
28
+ stateError(jsonPath, "expected a non-empty string");
29
+ }
30
+ return input;
31
+ }
32
+ function integerAt(input, jsonPath, minimum = 0) {
33
+ if (!Number.isSafeInteger(input) || input < minimum) {
34
+ stateError(jsonPath, `expected an integer greater than or equal to ${minimum}`);
35
+ }
36
+ return input;
37
+ }
38
+ function arrayAt(input, jsonPath) {
39
+ if (!Array.isArray(input))
40
+ stateError(jsonPath, "expected an array");
41
+ return input;
42
+ }
43
+ function schemaVersionAt(input, jsonPath) {
44
+ if (input !== 1)
45
+ stateError(jsonPath, "expected schema version 1");
46
+ return 1;
47
+ }
48
+ function statusAt(input, jsonPath) {
49
+ if (input === "pending" ||
50
+ input === "in_progress" ||
51
+ input === "completed" ||
52
+ input === "blocked") {
53
+ return input;
54
+ }
55
+ return stateError(jsonPath, "expected pending, in_progress, completed, or blocked");
56
+ }
57
+ function validateStory(input, jsonPath) {
58
+ const story = recordAt(input, jsonPath);
59
+ const acceptanceCriteria = arrayAt(story.acceptanceCriteria, `${jsonPath}.acceptanceCriteria`).map((criterion, index) => stringAt(criterion, `${jsonPath}.acceptanceCriteria[${index}]`));
60
+ return {
61
+ id: stringAt(story.id, `${jsonPath}.id`),
62
+ title: stringAt(story.title, `${jsonPath}.title`),
63
+ description: stringAt(story.description, `${jsonPath}.description`),
64
+ acceptanceCriteria,
65
+ priority: integerAt(story.priority, `${jsonPath}.priority`, 1),
66
+ status: statusAt(story.status, `${jsonPath}.status`),
67
+ attempts: integerAt(story.attempts, `${jsonPath}.attempts`),
68
+ };
69
+ }
70
+ export function validatePrd(input) {
71
+ const prd = recordAt(input, "$");
72
+ const userStories = arrayAt(prd.userStories, "$.userStories").map((story, index) => validateStory(story, `$.userStories[${index}]`));
73
+ const ids = new Set();
74
+ for (let index = 0; index < userStories.length; index += 1) {
75
+ const id = userStories[index]?.id;
76
+ if (!id)
77
+ continue;
78
+ if (ids.has(id))
79
+ stateError(`$.userStories[${index}].id`, `duplicate story id: ${id}`);
80
+ ids.add(id);
81
+ }
82
+ return {
83
+ schemaVersion: schemaVersionAt(prd.schemaVersion, "$.schemaVersion"),
84
+ project: stringAt(prd.project, "$.project"),
85
+ branchName: stringAt(prd.branchName, "$.branchName"),
86
+ description: stringAt(prd.description, "$.description"),
87
+ userStories,
88
+ };
89
+ }
90
+ export function validateConfig(input) {
91
+ const config = recordAt(input, "$");
92
+ const qualityChecks = arrayAt(config.qualityChecks, "$.qualityChecks").map((check, index) => stringAt(check, `$.qualityChecks[${index}]`));
93
+ const runtime = config.runtime;
94
+ if (runtime !== undefined &&
95
+ (typeof runtime !== "string" || !isRuntimeName(runtime))) {
96
+ stateError("$.runtime", "expected a supported runtime");
97
+ }
98
+ const maxAttemptsPerStory = config.maxAttemptsPerStory === undefined
99
+ ? 3
100
+ : integerAt(config.maxAttemptsPerStory, "$.maxAttemptsPerStory", 1);
101
+ return {
102
+ schemaVersion: schemaVersionAt(config.schemaVersion, "$.schemaVersion"),
103
+ ...(runtime === undefined ? {} : { runtime }),
104
+ qualityChecks,
105
+ maxAttemptsPerStory,
106
+ };
107
+ }
108
+ export function assertRunnableConfig(config) {
109
+ if (config.qualityChecks.length === 0) {
110
+ stateError("$.qualityChecks", "at least one quality check is required for a run");
111
+ }
112
+ }
113
+ const transitions = {
114
+ pending: ["in_progress"],
115
+ in_progress: ["completed", "blocked", "in_progress"],
116
+ completed: [],
117
+ blocked: [],
118
+ };
119
+ export function assertStoryTransition(from, to) {
120
+ if (!transitions[from].includes(to)) {
121
+ stateError("$.userStories[].status", `invalid story transition from ${from} to ${to}`);
122
+ }
123
+ }
124
+ function booleanAt(input, jsonPath) {
125
+ if (typeof input !== "boolean")
126
+ stateError(jsonPath, "expected a boolean");
127
+ return input;
128
+ }
129
+ function safeRelativePathAt(input, jsonPath) {
130
+ const value = stringAt(input, jsonPath);
131
+ if (value.includes("\0") ||
132
+ value.startsWith("/") ||
133
+ value.startsWith("\\") ||
134
+ /^[A-Za-z]:[\\/]/.test(value) ||
135
+ value
136
+ .split(/[\\/]+/)
137
+ .some((part) => part === "" || part === "." || part === "..")) {
138
+ stateError(jsonPath, "expected a safe relative path");
139
+ }
140
+ return value;
141
+ }
142
+ function validateAgentCriterion(input, jsonPath) {
143
+ const criterion = recordAt(input, jsonPath);
144
+ assertOnlyKeys(criterion, ["criterion", "passed", "evidence"], jsonPath);
145
+ return {
146
+ criterion: stringAt(criterion.criterion, `${jsonPath}.criterion`),
147
+ passed: booleanAt(criterion.passed, `${jsonPath}.passed`),
148
+ evidence: stringAt(criterion.evidence, `${jsonPath}.evidence`),
149
+ };
150
+ }
151
+ export function validateAgentResult(input, expected) {
152
+ const result = recordAt(input, "$");
153
+ assertOnlyKeys(result, [
154
+ "schemaVersion",
155
+ "runId",
156
+ "storyId",
157
+ "outcome",
158
+ "criteria",
159
+ "summary",
160
+ "filesChanged",
161
+ "checksAttempted",
162
+ "learnings",
163
+ "failureReason",
164
+ ], "$");
165
+ const criteria = arrayAt(result.criteria, "$.criteria").map((criterion, index) => validateAgentCriterion(criterion, `$.criteria[${index}]`)), filesChanged = arrayAt(result.filesChanged, "$.filesChanged").map((file, index) => safeRelativePathAt(file, `$.filesChanged[${index}]`)), checksAttempted = arrayAt(result.checksAttempted, "$.checksAttempted").map((check, index) => stringAt(check, `$.checksAttempted[${index}]`)), learnings = arrayAt(result.learnings, "$.learnings").map((learning, index) => stringAt(learning, `$.learnings[${index}]`));
166
+ const outcome = result.outcome;
167
+ if (outcome !== "completed" && outcome !== "failed") {
168
+ stateError("$.outcome", "expected completed or failed");
169
+ }
170
+ const runId = stringAt(result.runId, "$.runId");
171
+ if (runId !== expected.runId)
172
+ stateError("$.runId", "does not match run");
173
+ const storyId = stringAt(result.storyId, "$.storyId");
174
+ if (storyId !== expected.storyId)
175
+ stateError("$.storyId", "does not match story");
176
+ const criteriaByName = new Map();
177
+ for (const [index, criterion] of criteria.entries()) {
178
+ if (criteriaByName.has(criterion.criterion)) {
179
+ stateError(`$.criteria[${index}].criterion`, "duplicate criterion");
180
+ }
181
+ criteriaByName.set(criterion.criterion, criterion);
182
+ }
183
+ for (const criterion of expected.acceptanceCriteria) {
184
+ if (!criteriaByName.has(criterion)) {
185
+ stateError("$.criteria", `missing criterion: ${criterion}`);
186
+ }
187
+ }
188
+ if (criteriaByName.size !== expected.acceptanceCriteria.length) {
189
+ stateError("$.criteria", "contains an unexpected criterion");
190
+ }
191
+ if (outcome === "completed" &&
192
+ criteria.some((criterion) => !criterion.passed)) {
193
+ stateError("$.criteria", "completed results require passing criteria");
194
+ }
195
+ const failureReason = result.failureReason === undefined
196
+ ? undefined
197
+ : stringAt(result.failureReason, "$.failureReason");
198
+ if (outcome === "failed" && failureReason === undefined) {
199
+ stateError("$.failureReason", "is required for failed results");
200
+ }
201
+ return {
202
+ schemaVersion: schemaVersionAt(result.schemaVersion, "$.schemaVersion"),
203
+ runId,
204
+ storyId,
205
+ outcome,
206
+ criteria,
207
+ summary: stringAt(result.summary, "$.summary"),
208
+ filesChanged,
209
+ checksAttempted,
210
+ learnings,
211
+ ...(failureReason === undefined ? {} : { failureReason }),
212
+ };
213
+ }
214
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/ariadne/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { AriadneGit } from "./git.js";
2
+ import type { RuntimeDetectionState, RuntimeRegistry } from "./runtimes/types.js";
3
+ import { AriadneStore } from "./store.js";
4
+ import type { AriadneConfig, AriadneOwnershipViolation, AriadnePrd, AriadneRuntimeName } from "./types.js";
5
+ export { formatAriadneStatus } from "./render.js";
6
+ export type AriadneStoryCounts = {
7
+ pending: number;
8
+ inProgress: number;
9
+ completed: number;
10
+ blocked: number;
11
+ };
12
+ export type AriadneStatusReport = {
13
+ schemaVersion: 1;
14
+ command: "status";
15
+ project: string;
16
+ branch: {
17
+ configured: string;
18
+ current: string;
19
+ };
20
+ runtime?: {
21
+ name: AriadneRuntimeName;
22
+ state: RuntimeDetectionState;
23
+ version?: string;
24
+ };
25
+ stories: AriadneStoryCounts;
26
+ activeStory?: {
27
+ id: string;
28
+ title: string;
29
+ attempts: number;
30
+ };
31
+ blockedStory?: {
32
+ id: string;
33
+ title: string;
34
+ attempts: number;
35
+ };
36
+ ownershipViolation?: AriadneOwnershipViolation;
37
+ lastRun?: {
38
+ id: string;
39
+ outcome: string;
40
+ durationMs: number;
41
+ initialHead?: string;
42
+ finalHead?: string;
43
+ };
44
+ consecutiveFailures: number;
45
+ dirty: boolean;
46
+ lock: {
47
+ state: "absent" | "live" | "stale";
48
+ pid?: number;
49
+ runId?: string;
50
+ };
51
+ paths: {
52
+ progress: string;
53
+ runs: string;
54
+ };
55
+ };
56
+ export type AriadneStatusInput = {
57
+ projectRoot: string;
58
+ registry?: RuntimeRegistry;
59
+ isProcessAlive?: (pid: number) => boolean;
60
+ store?: AriadneStore;
61
+ git?: AriadneGit;
62
+ state?: {
63
+ prd: AriadnePrd;
64
+ config: AriadneConfig;
65
+ };
66
+ lock?: AriadneStatusReport["lock"];
67
+ ownershipViolation?: AriadneOwnershipViolation | null;
68
+ };
69
+ export declare function createAriadneGit(projectRoot: string): AriadneGit;
70
+ export declare function inspectAriadneLock(lockPath: string, isProcessAlive?: (pid: number) => boolean): AriadneStatusReport["lock"];
71
+ export declare function inspectLastAriadneRun(runsPath: string): AriadneStatusReport["lastRun"];
72
+ export declare function buildAriadneStatus(input: AriadneStatusInput): AriadneStatusReport;