@agentteams/runner 0.0.59-dev.106 → 0.0.59-dev.107

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.
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Harness configuration types.
3
+ *
4
+ * These types define the declarative harness system that replaces
5
+ * hard-coded proto-harness elements in the trigger handler.
6
+ */
7
+ /** Action to take when a hook fails */
8
+ export type HookFailureAction = "fail" | "needs_review" | "warn";
9
+ /** Single hook (pre or post) definition */
10
+ export type HookDefinition = {
11
+ name: string;
12
+ command: string;
13
+ onFailure: HookFailureAction;
14
+ };
15
+ /** Post-hook quality gate configuration */
16
+ export type QualityGateConfig = {
17
+ minScore: number;
18
+ onBelowThreshold: HookFailureAction;
19
+ };
20
+ /** Full harness configuration (merged result of local + server) */
21
+ export type HarnessConfig = {
22
+ preHooks: HookDefinition[];
23
+ postHooks: HookDefinition[];
24
+ qualityGate: QualityGateConfig | null;
25
+ };
26
+ /** Result of parsing the local harness.yml file */
27
+ export type HarnessYml = {
28
+ preHooks?: HookDefinition[];
29
+ postHooks?: HookDefinition[];
30
+ qualityGate?: QualityGateConfig | null;
31
+ };
32
+ /** Shape returned by GET /api/harness-configs/:projectId */
33
+ export type ServerHarnessConfig = {
34
+ config: HarnessYml;
35
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Harness configuration types.
3
+ *
4
+ * These types define the declarative harness system that replaces
5
+ * hard-coded proto-harness elements in the trigger handler.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Minimal YAML parser for harness.yml.
3
+ *
4
+ * Supports: key-value pairs, nested objects, arrays with `-` prefix,
5
+ * basic scalar types (string, number, boolean, null).
6
+ * Does NOT support: anchors, aliases, multi-line strings, flow style.
7
+ */
8
+ type YamlValue = string | number | boolean | null | YamlValue[] | {
9
+ [key: string]: YamlValue;
10
+ };
11
+ export declare const parseYaml: (text: string) => YamlValue;
12
+ export {};
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Minimal YAML parser for harness.yml.
3
+ *
4
+ * Supports: key-value pairs, nested objects, arrays with `-` prefix,
5
+ * basic scalar types (string, number, boolean, null).
6
+ * Does NOT support: anchors, aliases, multi-line strings, flow style.
7
+ */
8
+ const parseScalar = (raw) => {
9
+ const trimmed = raw.trim();
10
+ if (trimmed === "" || trimmed === "null" || trimmed === "~") {
11
+ return null;
12
+ }
13
+ if (trimmed === "true") {
14
+ return true;
15
+ }
16
+ if (trimmed === "false") {
17
+ return false;
18
+ }
19
+ // Quoted string
20
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
21
+ (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
22
+ return trimmed.slice(1, -1);
23
+ }
24
+ // Number
25
+ const num = Number(trimmed);
26
+ if (trimmed.length > 0 && !Number.isNaN(num)) {
27
+ return num;
28
+ }
29
+ return trimmed;
30
+ };
31
+ const getIndent = (line) => {
32
+ let count = 0;
33
+ for (const ch of line) {
34
+ if (ch === " ") {
35
+ count += 1;
36
+ }
37
+ else {
38
+ break;
39
+ }
40
+ }
41
+ return count;
42
+ };
43
+ export const parseYaml = (text) => {
44
+ const lines = text.split("\n").filter((l) => {
45
+ const trimmed = l.trim();
46
+ return trimmed.length > 0 && !trimmed.startsWith("#");
47
+ });
48
+ if (lines.length === 0) {
49
+ return {};
50
+ }
51
+ return parseBlock(lines, 0, lines.length, 0);
52
+ };
53
+ const parseBlock = (lines, start, end, baseIndent) => {
54
+ if (start >= end) {
55
+ return {};
56
+ }
57
+ const firstLine = lines[start].trim();
58
+ // Check if this block is an array (first line starts with "- ")
59
+ if (firstLine.startsWith("- ")) {
60
+ return parseArray(lines, start, end, baseIndent);
61
+ }
62
+ return parseObject(lines, start, end, baseIndent);
63
+ };
64
+ const parseObject = (lines, start, end, baseIndent) => {
65
+ const result = {};
66
+ let i = start;
67
+ while (i < end) {
68
+ const line = lines[i];
69
+ const indent = getIndent(line);
70
+ if (indent < baseIndent) {
71
+ break;
72
+ }
73
+ if (indent > baseIndent) {
74
+ i += 1;
75
+ continue;
76
+ }
77
+ const trimmed = line.trim();
78
+ const colonIndex = trimmed.indexOf(":");
79
+ if (colonIndex === -1) {
80
+ i += 1;
81
+ continue;
82
+ }
83
+ const key = trimmed.slice(0, colonIndex).trim();
84
+ const afterColon = trimmed.slice(colonIndex + 1).trim();
85
+ if (afterColon.length > 0) {
86
+ // Inline value
87
+ result[key] = parseScalar(afterColon);
88
+ i += 1;
89
+ }
90
+ else {
91
+ // Block value — find children
92
+ const childStart = i + 1;
93
+ let childEnd = childStart;
94
+ while (childEnd < end) {
95
+ const childIndent = getIndent(lines[childEnd]);
96
+ if (childIndent <= baseIndent) {
97
+ break;
98
+ }
99
+ childEnd += 1;
100
+ }
101
+ if (childStart < childEnd) {
102
+ const childIndent = getIndent(lines[childStart]);
103
+ result[key] = parseBlock(lines, childStart, childEnd, childIndent);
104
+ }
105
+ else {
106
+ result[key] = null;
107
+ }
108
+ i = childEnd;
109
+ }
110
+ }
111
+ return result;
112
+ };
113
+ const parseArray = (lines, start, end, baseIndent) => {
114
+ const result = [];
115
+ let i = start;
116
+ while (i < end) {
117
+ const line = lines[i];
118
+ const indent = getIndent(line);
119
+ if (indent < baseIndent) {
120
+ break;
121
+ }
122
+ if (indent > baseIndent) {
123
+ i += 1;
124
+ continue;
125
+ }
126
+ const trimmed = line.trim();
127
+ if (!trimmed.startsWith("- ")) {
128
+ i += 1;
129
+ continue;
130
+ }
131
+ const afterDash = trimmed.slice(2);
132
+ // Check if this is "- key: value" (object item)
133
+ const colonIndex = afterDash.indexOf(":");
134
+ if (colonIndex > 0) {
135
+ // Gather all lines for this array item
136
+ const itemLines = [];
137
+ // Re-indent the first line (remove the "- " prefix)
138
+ const itemIndent = indent + 2;
139
+ itemLines.push(" ".repeat(itemIndent) + afterDash);
140
+ let j = i + 1;
141
+ while (j < end) {
142
+ const nextIndent = getIndent(lines[j]);
143
+ if (nextIndent <= baseIndent) {
144
+ break;
145
+ }
146
+ itemLines.push(lines[j]);
147
+ j += 1;
148
+ }
149
+ result.push(parseObject(itemLines, 0, itemLines.length, itemIndent));
150
+ i = j;
151
+ }
152
+ else {
153
+ // Simple scalar item
154
+ result.push(parseScalar(afterDash));
155
+ i += 1;
156
+ }
157
+ }
158
+ return result;
159
+ };
160
+ //# sourceMappingURL=yaml-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-parser.js","sourceRoot":"","sources":["../../src/harness/yaml-parser.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -55,7 +55,7 @@ export type PendingResponse = {
55
55
  data: DaemonTrigger | null;
56
56
  meta?: PendingMeta;
57
57
  };
58
- export type TriggerFinalStatus = "DONE" | "CANCELLED" | "FAILED" | "REJECTED";
58
+ export type TriggerFinalStatus = "DONE" | "CANCELLED" | "FAILED" | "REJECTED" | "NEEDS_REVIEW";
59
59
  export type ClaimResult = {
60
60
  ok: boolean;
61
61
  conflict: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentteams/runner",
3
- "version": "0.0.59-dev.106",
3
+ "version": "0.0.59-dev.107",
4
4
  "description": "AgentRunner - Background runner that polls and executes AI agent tasks",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",