agent-threader 2.0.5
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/LICENSE +21 -0
- package/README.md +126 -0
- package/compiled/claude/agent-threader/SKILL.md +361 -0
- package/compiled/codex/agent-threader/SKILL.md +361 -0
- package/compiled/cursor/rules/agent-threader.mdc +367 -0
- package/compiled/cursor/skills/agent-threader/SKILL.md +361 -0
- package/compiled/opencode/agent-threader.md +361 -0
- package/compiled/windsurf/rules/agent-threader.md +361 -0
- package/compiled/windsurf/skills/agent-threader/SKILL.md +361 -0
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +7 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/explain-error.d.ts +12 -0
- package/dist/cli/commands/explain-error.d.ts.map +1 -0
- package/dist/cli/commands/explain-error.js +23 -0
- package/dist/cli/commands/explain-error.js.map +1 -0
- package/dist/cli/commands/init-state.d.ts +6 -0
- package/dist/cli/commands/init-state.d.ts.map +1 -0
- package/dist/cli/commands/init-state.js +10 -0
- package/dist/cli/commands/init-state.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +6 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +9 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/parse-heal.d.ts +6 -0
- package/dist/cli/commands/parse-heal.d.ts.map +1 -0
- package/dist/cli/commands/parse-heal.js +5 -0
- package/dist/cli/commands/parse-heal.js.map +1 -0
- package/dist/cli/commands/parse-result.d.ts +6 -0
- package/dist/cli/commands/parse-result.d.ts.map +1 -0
- package/dist/cli/commands/parse-result.js +5 -0
- package/dist/cli/commands/parse-result.js.map +1 -0
- package/dist/cli/commands/status.d.ts +6 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +5 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/validate-manifest.d.ts +6 -0
- package/dist/cli/commands/validate-manifest.d.ts.map +1 -0
- package/dist/cli/commands/validate-manifest.js +5 -0
- package/dist/cli/commands/validate-manifest.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +360 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output-formatter.d.ts +6 -0
- package/dist/cli/output-formatter.d.ts.map +1 -0
- package/dist/cli/output-formatter.js +19 -0
- package/dist/cli/output-formatter.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/adapters/types.d.ts +40 -0
- package/dist/lib/adapters/types.d.ts.map +1 -0
- package/dist/lib/adapters/types.js +3 -0
- package/dist/lib/adapters/types.js.map +1 -0
- package/dist/lib/contracts/schema-validator.d.ts +15 -0
- package/dist/lib/contracts/schema-validator.d.ts.map +1 -0
- package/dist/lib/contracts/schema-validator.js +63 -0
- package/dist/lib/contracts/schema-validator.js.map +1 -0
- package/dist/lib/contracts/types.d.ts +91 -0
- package/dist/lib/contracts/types.d.ts.map +1 -0
- package/dist/lib/contracts/types.js +15 -0
- package/dist/lib/contracts/types.js.map +1 -0
- package/dist/lib/contracts/validate-manifest.d.ts +16 -0
- package/dist/lib/contracts/validate-manifest.d.ts.map +1 -0
- package/dist/lib/contracts/validate-manifest.js +123 -0
- package/dist/lib/contracts/validate-manifest.js.map +1 -0
- package/dist/lib/diagnostics/doctor.d.ts +17 -0
- package/dist/lib/diagnostics/doctor.d.ts.map +1 -0
- package/dist/lib/diagnostics/doctor.js +131 -0
- package/dist/lib/diagnostics/doctor.js.map +1 -0
- package/dist/lib/errors/explain-error.d.ts +10 -0
- package/dist/lib/errors/explain-error.d.ts.map +1 -0
- package/dist/lib/errors/explain-error.js +73 -0
- package/dist/lib/errors/explain-error.js.map +1 -0
- package/dist/lib/errors/types.d.ts +16 -0
- package/dist/lib/errors/types.d.ts.map +1 -0
- package/dist/lib/errors/types.js +50 -0
- package/dist/lib/errors/types.js.map +1 -0
- package/dist/lib/index.d.ts +29 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +25 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/orchestrator/batch-strategy.d.ts +9 -0
- package/dist/lib/orchestrator/batch-strategy.d.ts.map +1 -0
- package/dist/lib/orchestrator/batch-strategy.js +34 -0
- package/dist/lib/orchestrator/batch-strategy.js.map +1 -0
- package/dist/lib/orchestrator/healing-policy.d.ts +47 -0
- package/dist/lib/orchestrator/healing-policy.d.ts.map +1 -0
- package/dist/lib/orchestrator/healing-policy.js +104 -0
- package/dist/lib/orchestrator/healing-policy.js.map +1 -0
- package/dist/lib/orchestrator/index.d.ts +11 -0
- package/dist/lib/orchestrator/index.d.ts.map +1 -0
- package/dist/lib/orchestrator/index.js +11 -0
- package/dist/lib/orchestrator/index.js.map +1 -0
- package/dist/lib/orchestrator/patch-validation.d.ts +9 -0
- package/dist/lib/orchestrator/patch-validation.d.ts.map +1 -0
- package/dist/lib/orchestrator/patch-validation.js +58 -0
- package/dist/lib/orchestrator/patch-validation.js.map +1 -0
- package/dist/lib/orchestrator/scheduling.d.ts +12 -0
- package/dist/lib/orchestrator/scheduling.d.ts.map +1 -0
- package/dist/lib/orchestrator/scheduling.js +74 -0
- package/dist/lib/orchestrator/scheduling.js.map +1 -0
- package/dist/lib/orchestrator/write-safety.d.ts +14 -0
- package/dist/lib/orchestrator/write-safety.d.ts.map +1 -0
- package/dist/lib/orchestrator/write-safety.js +44 -0
- package/dist/lib/orchestrator/write-safety.js.map +1 -0
- package/dist/lib/parser/parse-heal.d.ts +12 -0
- package/dist/lib/parser/parse-heal.d.ts.map +1 -0
- package/dist/lib/parser/parse-heal.js +9 -0
- package/dist/lib/parser/parse-heal.js.map +1 -0
- package/dist/lib/parser/parse-result.d.ts +12 -0
- package/dist/lib/parser/parse-result.d.ts.map +1 -0
- package/dist/lib/parser/parse-result.js +9 -0
- package/dist/lib/parser/parse-result.js.map +1 -0
- package/dist/lib/parser/parser.d.ts +8 -0
- package/dist/lib/parser/parser.d.ts.map +1 -0
- package/dist/lib/parser/parser.js +167 -0
- package/dist/lib/parser/parser.js.map +1 -0
- package/dist/lib/state/init-state.d.ts +15 -0
- package/dist/lib/state/init-state.d.ts.map +1 -0
- package/dist/lib/state/init-state.js +50 -0
- package/dist/lib/state/init-state.js.map +1 -0
- package/dist/lib/state/logs.d.ts +19 -0
- package/dist/lib/state/logs.d.ts.map +1 -0
- package/dist/lib/state/logs.js +25 -0
- package/dist/lib/state/logs.js.map +1 -0
- package/dist/lib/state/state.d.ts +7 -0
- package/dist/lib/state/state.d.ts.map +1 -0
- package/dist/lib/state/state.js +72 -0
- package/dist/lib/state/state.js.map +1 -0
- package/dist/lib/state/status.d.ts +22 -0
- package/dist/lib/state/status.d.ts.map +1 -0
- package/dist/lib/state/status.js +34 -0
- package/dist/lib/state/status.js.map +1 -0
- package/dist/lib/state/types.d.ts +55 -0
- package/dist/lib/state/types.d.ts.map +1 -0
- package/dist/lib/state/types.js +14 -0
- package/dist/lib/state/types.js.map +1 -0
- package/install-local.sh +239 -0
- package/install.sh +36 -0
- package/package.json +55 -0
- package/site/CNAME +1 -0
- package/site/index.html +141 -0
- package/site/install.sh +36 -0
- package/site/style.css +319 -0
- package/skill/SKILL.md +127 -0
- package/skill/SPEC.md +1189 -0
- package/skill/build/compile.mjs +237 -0
- package/skill/build/manifest.json +21 -0
- package/skill/fragments/common/model-selection.md +11 -0
- package/skill/fragments/common/portability-rules.md +16 -0
- package/skill/fragments/common/workflow.md +12 -0
- package/skill/fragments/domain/adapter-model.md +42 -0
- package/skill/fragments/domain/architecture-overview.md +36 -0
- package/skill/fragments/domain/contracts.md +31 -0
- package/skill/fragments/domain/pbh-healing.md +47 -0
- package/skill/fragments/domain/state-resume.md +34 -0
- package/skill/fragments/domain/verification-safety.md +33 -0
- package/skill/fragments/meta/schemas-reference.md +13 -0
- package/skill/fragments/meta/templates-reference.md +11 -0
- package/skill/schemas/heal_decision.v2.json +100 -0
- package/skill/schemas/manifest.v2.json +91 -0
- package/skill/schemas/state.v2.json +183 -0
- package/skill/schemas/task_result.v2.json +104 -0
- package/skill/schemas/verify_profile.v2.json +61 -0
- package/skill/skills/agent-threader/agent-threader.md +85 -0
- package/skill/templates/orchestrator.ts +38 -0
- package/skill/templates/parser.ts +384 -0
- package/skill/templates/types.ts +282 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// ─── Errors ──────────────────────────────────────────────────────────────────
|
|
2
|
+
export { AppError, NotFoundError, CommandError, ConfigError } from './errors/types.js';
|
|
3
|
+
export { explainErrorCode, listKnownErrorCodes } from './errors/explain-error.js';
|
|
4
|
+
export { HEALABLE_FAILURE_CLASSES, NON_HEALABLE_FAILURE_CLASSES } from './contracts/types.js';
|
|
5
|
+
export { DEFAULT_POLICY, FIBONACCI_BATCH_SEQUENCE } from './state/types.js';
|
|
6
|
+
// ─── Parser ──────────────────────────────────────────────────────────────────
|
|
7
|
+
export { parseTaskResult, parseHealDecision, parseTaskResultFromString, parseHealDecisionFromString, generateFailureSignature, isParserFailure, } from './parser/parser.js';
|
|
8
|
+
// ─── State ───────────────────────────────────────────────────────────────────
|
|
9
|
+
export { loadState, writeState, initializeState, computeManifestDigest } from './state/state.js';
|
|
10
|
+
// ─── Schema Validators ───────────────────────────────────────────────────────
|
|
11
|
+
export { validateManifestSchema, validateTaskResultSchema, validateHealDecisionSchema, validateStateSchema, validateVerifyProfileSchema, } from './contracts/schema-validator.js';
|
|
12
|
+
// ─── Contracts ───────────────────────────────────────────────────────────────
|
|
13
|
+
export { validateManifest } from './contracts/validate-manifest.js';
|
|
14
|
+
// ─── State Commands ──────────────────────────────────────────────────────────
|
|
15
|
+
export { initState } from './state/init-state.js';
|
|
16
|
+
export { getStatus } from './state/status.js';
|
|
17
|
+
export { getLogs } from './state/logs.js';
|
|
18
|
+
// ─── Parser Commands ─────────────────────────────────────────────────────────
|
|
19
|
+
export { parseResult } from './parser/parse-result.js';
|
|
20
|
+
export { parseHeal } from './parser/parse-heal.js';
|
|
21
|
+
// ─── Diagnostics ─────────────────────────────────────────────────────────────
|
|
22
|
+
export { runDoctor } from './diagnostics/doctor.js';
|
|
23
|
+
// ─── Orchestrator Primitives ─────────────────────────────────────────────────
|
|
24
|
+
export { buildDependencyOrder, getReadyTasks, isTerminalStatus, isRunComplete, growBatchSize, shrinkBatchSize, computeEffectiveWindowSize, isHealableFailure, computeFailureRate, shouldHeal, checkConvergence, shouldEscalateTask, shouldAbortRun, validatePatch, validatePatchSet, validateWrites, } from './orchestrator/index.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAWlF,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAM9F,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAO5E,gFAAgF;AAChF,OAAO,EACL,eAAe,EAAE,iBAAiB,EAClC,yBAAyB,EAAE,2BAA2B,EACtD,wBAAwB,EAAE,eAAe,GAC1C,MAAM,oBAAoB,CAAC;AAE5B,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEjG,gFAAgF;AAChF,OAAO,EACL,sBAAsB,EAAE,wBAAwB,EAAE,0BAA0B,EAC5E,mBAAmB,EAAE,2BAA2B,GACjD,MAAM,iCAAiC,CAAC;AAGzC,gFAAgF;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGpE,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,gFAAgF;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,gFAAgF;AAChF,OAAO,EACL,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EACpE,aAAa,EAAE,eAAe,EAAE,0BAA0B,EAC1D,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EACjD,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EACpD,aAAa,EAAE,gBAAgB,EAC/B,cAAc,GACf,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RunPolicy } from "../state/types.js";
|
|
2
|
+
export interface BatchDecision {
|
|
3
|
+
nextBatchSize: number;
|
|
4
|
+
reason: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function growBatchSize(policy: RunPolicy): BatchDecision;
|
|
7
|
+
export declare function shrinkBatchSize(policy: RunPolicy): BatchDecision;
|
|
8
|
+
export declare function computeEffectiveWindowSize(batchSize: number, readyTaskCount: number): number;
|
|
9
|
+
//# sourceMappingURL=batch-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-strategy.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestrator/batch-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,CAoB9D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,CAchE;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,MAAM,CAER"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { FIBONACCI_BATCH_SEQUENCE } from "../state/types.js";
|
|
2
|
+
export function growBatchSize(policy) {
|
|
3
|
+
if (policy.batch_strategy === "fixed") {
|
|
4
|
+
return { nextBatchSize: policy.current_batch_size, reason: "fixed strategy; no growth" };
|
|
5
|
+
}
|
|
6
|
+
const seq = FIBONACCI_BATCH_SEQUENCE;
|
|
7
|
+
const currentIdx = seq.indexOf(policy.current_batch_size);
|
|
8
|
+
if (currentIdx === -1) {
|
|
9
|
+
const nextIdx = seq.findIndex(v => v > policy.current_batch_size);
|
|
10
|
+
const next = nextIdx !== -1 ? seq[nextIdx] : seq[seq.length - 1];
|
|
11
|
+
return { nextBatchSize: next, reason: `grew to next fibonacci step: ${next}` };
|
|
12
|
+
}
|
|
13
|
+
if (currentIdx < seq.length - 1) {
|
|
14
|
+
const next = seq[currentIdx + 1];
|
|
15
|
+
return { nextBatchSize: next, reason: `grew from ${policy.current_batch_size} to ${next}` };
|
|
16
|
+
}
|
|
17
|
+
return { nextBatchSize: policy.current_batch_size, reason: "at maximum fibonacci step" };
|
|
18
|
+
}
|
|
19
|
+
export function shrinkBatchSize(policy) {
|
|
20
|
+
if (policy.batch_strategy === "fixed") {
|
|
21
|
+
return { nextBatchSize: policy.current_batch_size, reason: "fixed strategy; no shrink" };
|
|
22
|
+
}
|
|
23
|
+
const seq = FIBONACCI_BATCH_SEQUENCE;
|
|
24
|
+
const currentIdx = seq.indexOf(policy.current_batch_size);
|
|
25
|
+
if (currentIdx <= 0) {
|
|
26
|
+
return { nextBatchSize: 1, reason: "already at minimum batch size" };
|
|
27
|
+
}
|
|
28
|
+
const prev = seq[currentIdx - 1];
|
|
29
|
+
return { nextBatchSize: prev, reason: `shrunk from ${policy.current_batch_size} to ${prev}` };
|
|
30
|
+
}
|
|
31
|
+
export function computeEffectiveWindowSize(batchSize, readyTaskCount) {
|
|
32
|
+
return Math.min(batchSize, readyTaskCount);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=batch-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-strategy.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/batch-strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAO7D,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,IAAI,MAAM,CAAC,cAAc,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IAC3F,CAAC;IAED,MAAM,GAAG,GAAG,wBAAwB,CAAC;IACrC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAwC,CAAC,CAAC;IAEhF,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,gCAAgC,IAAI,EAAE,EAAE,CAAC;IACjF,CAAC;IAED,IAAI,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,MAAM,CAAC,kBAAkB,OAAO,IAAI,EAAE,EAAE,CAAC;IAC9F,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,IAAI,MAAM,CAAC,cAAc,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IAC3F,CAAC;IAED,MAAM,GAAG,GAAG,wBAAwB,CAAC;IACrC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAwC,CAAC,CAAC;IAEhF,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,MAAM,CAAC,kBAAkB,OAAO,IAAI,EAAE,EAAE,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,cAAsB;IAEtB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { TaskState, RunPolicy, HealingRound } from "../state/types.js";
|
|
2
|
+
export interface WindowOutcome {
|
|
3
|
+
windowTaskIds: string[];
|
|
4
|
+
taskStates: Record<string, TaskState>;
|
|
5
|
+
}
|
|
6
|
+
export interface FailureRateResult {
|
|
7
|
+
rate: number;
|
|
8
|
+
healableFailedCount: number;
|
|
9
|
+
attemptedHealableCount: number;
|
|
10
|
+
shouldSkipHealer: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface HealDecisionInput {
|
|
13
|
+
windowOutcome: WindowOutcome;
|
|
14
|
+
policy: RunPolicy;
|
|
15
|
+
healingRounds: HealingRound[];
|
|
16
|
+
}
|
|
17
|
+
export interface ShouldHealResult {
|
|
18
|
+
shouldHeal: boolean;
|
|
19
|
+
shouldShrink: boolean;
|
|
20
|
+
shouldAbort: boolean;
|
|
21
|
+
reason: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function isHealableFailure(failureClass: string | null): boolean;
|
|
24
|
+
export declare function computeFailureRate(outcome: WindowOutcome): FailureRateResult;
|
|
25
|
+
export declare function shouldHeal(input: HealDecisionInput): ShouldHealResult;
|
|
26
|
+
export declare function checkConvergence(currentRound: {
|
|
27
|
+
failedTaskIds: string[];
|
|
28
|
+
signatures: Set<string>;
|
|
29
|
+
}, previousRound: {
|
|
30
|
+
failedTaskIds: string[];
|
|
31
|
+
signatures: Set<string>;
|
|
32
|
+
} | null): ConvergenceResult;
|
|
33
|
+
export interface ConvergenceResult {
|
|
34
|
+
converging: boolean;
|
|
35
|
+
reason: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function shouldEscalateTask(taskState: TaskState, policy: RunPolicy): EscalationResult;
|
|
38
|
+
export interface EscalationResult {
|
|
39
|
+
escalate: boolean;
|
|
40
|
+
reason: string;
|
|
41
|
+
}
|
|
42
|
+
export declare function shouldAbortRun(policy: RunPolicy, healingRounds: HealingRound[], taskStates: Record<string, TaskState>): RunAbortResult;
|
|
43
|
+
export interface RunAbortResult {
|
|
44
|
+
abort: boolean;
|
|
45
|
+
reason: string;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=healing-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healing-policy.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestrator/healing-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG5E,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAMtE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,CA4B5E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB,CA0BrE;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE;IAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,EAClE,aAAa,EAAE;IAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,GACzE,iBAAiB,CAqBnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,SAAS,GAChB,gBAAgB,CAsBlB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,YAAY,EAAE,EAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,cAAc,CAahB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { HEALABLE_FAILURE_CLASSES, NON_HEALABLE_FAILURE_CLASSES } from "../contracts/types.js";
|
|
2
|
+
export function isHealableFailure(failureClass) {
|
|
3
|
+
if (!failureClass)
|
|
4
|
+
return false;
|
|
5
|
+
if (NON_HEALABLE_FAILURE_CLASSES.has(failureClass))
|
|
6
|
+
return false;
|
|
7
|
+
if (HEALABLE_FAILURE_CLASSES.has(failureClass))
|
|
8
|
+
return true;
|
|
9
|
+
// build_error, test_error, smoke_error are conditionally healable
|
|
10
|
+
return !NON_HEALABLE_FAILURE_CLASSES.has(failureClass);
|
|
11
|
+
}
|
|
12
|
+
export function computeFailureRate(outcome) {
|
|
13
|
+
let healableFailedCount = 0;
|
|
14
|
+
let attemptedHealableCount = 0;
|
|
15
|
+
for (const taskId of outcome.windowTaskIds) {
|
|
16
|
+
const ts = outcome.taskStates[taskId];
|
|
17
|
+
if (!ts)
|
|
18
|
+
continue;
|
|
19
|
+
const isHealable = isHealableFailure(ts.last_failure_class);
|
|
20
|
+
if (!isHealable)
|
|
21
|
+
continue;
|
|
22
|
+
attemptedHealableCount++;
|
|
23
|
+
if (ts.status !== "DONE") {
|
|
24
|
+
healableFailedCount++;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (attemptedHealableCount === 0) {
|
|
28
|
+
return { rate: 0, healableFailedCount: 0, attemptedHealableCount: 0, shouldSkipHealer: true };
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
rate: healableFailedCount / attemptedHealableCount,
|
|
32
|
+
healableFailedCount,
|
|
33
|
+
attemptedHealableCount,
|
|
34
|
+
shouldSkipHealer: false,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function shouldHeal(input) {
|
|
38
|
+
const { policy, healingRounds } = input;
|
|
39
|
+
if (policy.heal_schedule === "off") {
|
|
40
|
+
return { shouldHeal: false, shouldShrink: false, shouldAbort: false, reason: "healing disabled" };
|
|
41
|
+
}
|
|
42
|
+
if (healingRounds.length >= policy.max_total_heal_rounds) {
|
|
43
|
+
return { shouldHeal: false, shouldShrink: false, shouldAbort: true, reason: "total healing budget exhausted" };
|
|
44
|
+
}
|
|
45
|
+
const failureRate = computeFailureRate(input.windowOutcome);
|
|
46
|
+
if (failureRate.shouldSkipHealer) {
|
|
47
|
+
return { shouldHeal: false, shouldShrink: false, shouldAbort: false, reason: "no healable failures in window" };
|
|
48
|
+
}
|
|
49
|
+
if (failureRate.rate === 0) {
|
|
50
|
+
return { shouldHeal: false, shouldShrink: false, shouldAbort: false, reason: "zero failure rate; grow batch" };
|
|
51
|
+
}
|
|
52
|
+
if (failureRate.rate <= policy.failure_threshold) {
|
|
53
|
+
return { shouldHeal: true, shouldShrink: false, shouldAbort: false, reason: `failure rate ${failureRate.rate.toFixed(2)} within threshold` };
|
|
54
|
+
}
|
|
55
|
+
return { shouldHeal: true, shouldShrink: true, shouldAbort: false, reason: `failure rate ${failureRate.rate.toFixed(2)} exceeds threshold; shrink` };
|
|
56
|
+
}
|
|
57
|
+
export function checkConvergence(currentRound, previousRound) {
|
|
58
|
+
if (!previousRound) {
|
|
59
|
+
return { converging: true, reason: "first healing round" };
|
|
60
|
+
}
|
|
61
|
+
const failCountDropped = currentRound.failedTaskIds.length < previousRound.failedTaskIds.length;
|
|
62
|
+
const signatureCountDropped = currentRound.signatures.size < previousRound.signatures.size;
|
|
63
|
+
if (failCountDropped || signatureCountDropped) {
|
|
64
|
+
return { converging: true, reason: "failure count or signature diversity decreased" };
|
|
65
|
+
}
|
|
66
|
+
const sameFailSet = currentRound.failedTaskIds.length === previousRound.failedTaskIds.length &&
|
|
67
|
+
currentRound.failedTaskIds.every(id => previousRound.failedTaskIds.includes(id));
|
|
68
|
+
if (sameFailSet) {
|
|
69
|
+
return { converging: false, reason: "same failing set persists across rounds" };
|
|
70
|
+
}
|
|
71
|
+
return { converging: false, reason: "no measurable improvement" };
|
|
72
|
+
}
|
|
73
|
+
export function shouldEscalateTask(taskState, policy) {
|
|
74
|
+
if (!isHealableFailure(taskState.last_failure_class)) {
|
|
75
|
+
return { escalate: true, reason: `non-healable failure class: ${taskState.last_failure_class}` };
|
|
76
|
+
}
|
|
77
|
+
if (taskState.worker_attempts >= policy.max_worker_attempts_per_task) {
|
|
78
|
+
// Check signature repetition
|
|
79
|
+
const signatureCounts = new Map();
|
|
80
|
+
for (const h of taskState.history) {
|
|
81
|
+
if (h.failure_signature) {
|
|
82
|
+
signatureCounts.set(h.failure_signature, (signatureCounts.get(h.failure_signature) ?? 0) + 1);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
for (const [sig, count] of signatureCounts) {
|
|
86
|
+
if (count >= policy.signature_repeat_limit) {
|
|
87
|
+
return { escalate: true, reason: `signature "${sig}" repeated ${count} times (limit: ${policy.signature_repeat_limit})` };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { escalate: false, reason: "within retry and signature limits" };
|
|
92
|
+
}
|
|
93
|
+
export function shouldAbortRun(policy, healingRounds, taskStates) {
|
|
94
|
+
if (healingRounds.length >= policy.max_total_heal_rounds) {
|
|
95
|
+
return { abort: true, reason: "total healing budget exhausted without convergence" };
|
|
96
|
+
}
|
|
97
|
+
const allNonDone = Object.values(taskStates).filter(ts => ts.status !== "DONE" && ts.status !== "PENDING");
|
|
98
|
+
const allEscalated = allNonDone.every(ts => ts.status === "ESCALATED" || ts.status === "BLOCKED");
|
|
99
|
+
if (allNonDone.length > 0 && allEscalated) {
|
|
100
|
+
return { abort: true, reason: "all remaining tasks are escalated or blocked" };
|
|
101
|
+
}
|
|
102
|
+
return { abort: false, reason: "run may continue" };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=healing-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healing-policy.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/healing-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { buildDependencyOrder, getReadyTasks, isTerminalStatus, isRunComplete } from './scheduling.js';
|
|
2
|
+
export type { SchedulingResult } from './scheduling.js';
|
|
3
|
+
export { growBatchSize, shrinkBatchSize, computeEffectiveWindowSize } from './batch-strategy.js';
|
|
4
|
+
export type { BatchDecision } from './batch-strategy.js';
|
|
5
|
+
export { isHealableFailure, computeFailureRate, shouldHeal, checkConvergence, shouldEscalateTask, shouldAbortRun, } from './healing-policy.js';
|
|
6
|
+
export type { WindowOutcome, FailureRateResult, HealDecisionInput, ShouldHealResult, ConvergenceResult, EscalationResult, RunAbortResult, } from './healing-policy.js';
|
|
7
|
+
export { validatePatch, validatePatchSet } from './patch-validation.js';
|
|
8
|
+
export type { PatchValidationResult } from './patch-validation.js';
|
|
9
|
+
export { validateWrites } from './write-safety.js';
|
|
10
|
+
export type { WriteSafetyOptions, WriteSafetyResult } from './write-safety.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestrator/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvG,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjG,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EACL,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EACjD,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,GACrD,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EACnD,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,GACtE,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACxE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Scheduling
|
|
2
|
+
export { buildDependencyOrder, getReadyTasks, isTerminalStatus, isRunComplete } from './scheduling.js';
|
|
3
|
+
// Batch strategy
|
|
4
|
+
export { growBatchSize, shrinkBatchSize, computeEffectiveWindowSize } from './batch-strategy.js';
|
|
5
|
+
// Healing policy
|
|
6
|
+
export { isHealableFailure, computeFailureRate, shouldHeal, checkConvergence, shouldEscalateTask, shouldAbortRun, } from './healing-policy.js';
|
|
7
|
+
// Patch validation
|
|
8
|
+
export { validatePatch, validatePatchSet } from './patch-validation.js';
|
|
9
|
+
// Write safety
|
|
10
|
+
export { validateWrites } from './write-safety.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGvG,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGjG,iBAAiB;AACjB,OAAO,EACL,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EACjD,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,GACrD,MAAM,qBAAqB,CAAC;AAM7B,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGxE,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HealPatch } from "../contracts/types.js";
|
|
2
|
+
export interface PatchValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
errors: string[];
|
|
5
|
+
warnings: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function validatePatch(patch: HealPatch, currentWindowTaskIds: string[], healSchedule: string): PatchValidationResult;
|
|
8
|
+
export declare function validatePatchSet(patches: HealPatch[], currentWindowTaskIds: string[], healSchedule: string): PatchValidationResult;
|
|
9
|
+
//# sourceMappingURL=patch-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-validation.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestrator/patch-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAcvD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,oBAAoB,EAAE,MAAM,EAAE,EAC9B,YAAY,EAAE,MAAM,GACnB,qBAAqB,CA+BvB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,EAAE,EACpB,oBAAoB,EAAE,MAAM,EAAE,EAC9B,YAAY,EAAE,MAAM,GACnB,qBAAqB,CAmBvB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const ALLOWED_RUNTIME_KEYS = new Set(["timeout_sec", "concurrency", "current_batch_size"]);
|
|
2
|
+
const FORBIDDEN_RUNTIME_KEYS = new Set([
|
|
3
|
+
"heal_schedule",
|
|
4
|
+
"batch_strategy",
|
|
5
|
+
"failure_threshold",
|
|
6
|
+
"max_worker_attempts_per_task",
|
|
7
|
+
"max_heal_rounds_per_window",
|
|
8
|
+
"max_total_heal_rounds",
|
|
9
|
+
"signature_repeat_limit",
|
|
10
|
+
]);
|
|
11
|
+
export function validatePatch(patch, currentWindowTaskIds, healSchedule) {
|
|
12
|
+
const errors = [];
|
|
13
|
+
const warnings = [];
|
|
14
|
+
if (patch.target === "runtime_patch") {
|
|
15
|
+
if (patch.content && typeof patch.content === "object") {
|
|
16
|
+
for (const key of Object.keys(patch.content)) {
|
|
17
|
+
if (FORBIDDEN_RUNTIME_KEYS.has(key)) {
|
|
18
|
+
errors.push(`Runtime patch attempts to modify forbidden key: ${key}`);
|
|
19
|
+
}
|
|
20
|
+
else if (!ALLOWED_RUNTIME_KEYS.has(key)) {
|
|
21
|
+
warnings.push(`Runtime patch modifies unknown key: ${key}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (patch.target === "task_prompt" && patch.task_id) {
|
|
27
|
+
if (healSchedule === "task" && !currentWindowTaskIds.includes(patch.task_id)) {
|
|
28
|
+
errors.push(`Task-scope healer cannot patch task outside window: ${patch.task_id}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (patch.target === "shared_context" && healSchedule === "task") {
|
|
32
|
+
errors.push("Task-scope healer cannot modify shared context");
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
valid: errors.length === 0,
|
|
36
|
+
errors,
|
|
37
|
+
warnings,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function validatePatchSet(patches, currentWindowTaskIds, healSchedule) {
|
|
41
|
+
const allErrors = [];
|
|
42
|
+
const allWarnings = [];
|
|
43
|
+
for (let i = 0; i < patches.length; i++) {
|
|
44
|
+
const result = validatePatch(patches[i], currentWindowTaskIds, healSchedule);
|
|
45
|
+
for (const e of result.errors) {
|
|
46
|
+
allErrors.push(`patch[${i}]: ${e}`);
|
|
47
|
+
}
|
|
48
|
+
for (const w of result.warnings) {
|
|
49
|
+
allWarnings.push(`patch[${i}]: ${w}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
valid: allErrors.length === 0,
|
|
54
|
+
errors: allErrors,
|
|
55
|
+
warnings: allWarnings,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=patch-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-validation.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/patch-validation.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAE3F,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,8BAA8B;IAC9B,4BAA4B;IAC5B,uBAAuB;IACvB,wBAAwB;CACzB,CAAC,CAAC;AAQH,MAAM,UAAU,aAAa,CAC3B,KAAgB,EAChB,oBAA8B,EAC9B,YAAoB;IAEpB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7C,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpC,MAAM,CAAC,IAAI,CAAC,mDAAmD,GAAG,EAAE,CAAC,CAAC;gBACxE,CAAC;qBAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1C,QAAQ,CAAC,IAAI,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACpD,IAAI,YAAY,KAAK,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC,uDAAuD,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,gBAAgB,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAoB,EACpB,oBAA8B,EAC9B,YAAoB;IAEpB,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC;QAC7E,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC;QAC7B,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,WAAW;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ManifestTaskV2 } from "../contracts/types.js";
|
|
2
|
+
import type { TaskState, TaskStatus } from "../state/types.js";
|
|
3
|
+
export interface SchedulingResult {
|
|
4
|
+
order: string[];
|
|
5
|
+
hasCycle: boolean;
|
|
6
|
+
cycleMembers: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function buildDependencyOrder(tasks: ManifestTaskV2[]): SchedulingResult;
|
|
9
|
+
export declare function getReadyTasks(tasks: ManifestTaskV2[], taskStates: Record<string, TaskState>, dependencyOrder: string[]): string[];
|
|
10
|
+
export declare function isTerminalStatus(status: TaskStatus): boolean;
|
|
11
|
+
export declare function isRunComplete(taskStates: Record<string, TaskState>): boolean;
|
|
12
|
+
//# sourceMappingURL=scheduling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestrator/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,gBAAgB,CAkD9E;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACrC,eAAe,EAAE,MAAM,EAAE,GACxB,MAAM,EAAE,CAsBV;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAE5D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAI5E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export function buildDependencyOrder(tasks) {
|
|
2
|
+
const graph = new Map();
|
|
3
|
+
const inDegree = new Map();
|
|
4
|
+
const priorityMap = new Map();
|
|
5
|
+
for (const task of tasks) {
|
|
6
|
+
graph.set(task.id, []);
|
|
7
|
+
inDegree.set(task.id, 0);
|
|
8
|
+
priorityMap.set(task.id, task.priority ?? Infinity);
|
|
9
|
+
}
|
|
10
|
+
const taskIdSet = new Set(graph.keys());
|
|
11
|
+
for (const task of tasks) {
|
|
12
|
+
if (!Array.isArray(task.depends_on))
|
|
13
|
+
continue;
|
|
14
|
+
for (const dep of task.depends_on) {
|
|
15
|
+
if (!taskIdSet.has(dep))
|
|
16
|
+
continue;
|
|
17
|
+
graph.get(dep).push(task.id);
|
|
18
|
+
inDegree.set(task.id, (inDegree.get(task.id) ?? 0) + 1);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const queue = [];
|
|
22
|
+
for (const [id, deg] of inDegree) {
|
|
23
|
+
if (deg === 0)
|
|
24
|
+
queue.push(id);
|
|
25
|
+
}
|
|
26
|
+
queue.sort((a, b) => (priorityMap.get(a) ?? Infinity) - (priorityMap.get(b) ?? Infinity));
|
|
27
|
+
const order = [];
|
|
28
|
+
while (queue.length > 0) {
|
|
29
|
+
const current = queue.shift();
|
|
30
|
+
order.push(current);
|
|
31
|
+
const ready = [];
|
|
32
|
+
for (const neighbor of graph.get(current) ?? []) {
|
|
33
|
+
const newDeg = (inDegree.get(neighbor) ?? 1) - 1;
|
|
34
|
+
inDegree.set(neighbor, newDeg);
|
|
35
|
+
if (newDeg === 0)
|
|
36
|
+
ready.push(neighbor);
|
|
37
|
+
}
|
|
38
|
+
ready.sort((a, b) => (priorityMap.get(a) ?? Infinity) - (priorityMap.get(b) ?? Infinity));
|
|
39
|
+
queue.push(...ready);
|
|
40
|
+
}
|
|
41
|
+
const hasCycle = order.length < tasks.length;
|
|
42
|
+
const cycleMembers = hasCycle
|
|
43
|
+
? tasks.filter(t => !order.includes(t.id)).map(t => t.id)
|
|
44
|
+
: [];
|
|
45
|
+
return { order, hasCycle, cycleMembers };
|
|
46
|
+
}
|
|
47
|
+
export function getReadyTasks(tasks, taskStates, dependencyOrder) {
|
|
48
|
+
const ready = [];
|
|
49
|
+
for (const taskId of dependencyOrder) {
|
|
50
|
+
const state = taskStates[taskId];
|
|
51
|
+
if (!state)
|
|
52
|
+
continue;
|
|
53
|
+
if (state.status !== "PENDING")
|
|
54
|
+
continue;
|
|
55
|
+
const task = tasks.find(t => t.id === taskId);
|
|
56
|
+
if (!task)
|
|
57
|
+
continue;
|
|
58
|
+
const depsReady = task.depends_on.every(dep => {
|
|
59
|
+
const depState = taskStates[dep];
|
|
60
|
+
return depState && depState.status === "DONE";
|
|
61
|
+
});
|
|
62
|
+
if (depsReady) {
|
|
63
|
+
ready.push(taskId);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return ready;
|
|
67
|
+
}
|
|
68
|
+
export function isTerminalStatus(status) {
|
|
69
|
+
return status === "DONE" || status === "ESCALATED";
|
|
70
|
+
}
|
|
71
|
+
export function isRunComplete(taskStates) {
|
|
72
|
+
return Object.values(taskStates).every(ts => isTerminalStatus(ts.status) || ts.status === "BLOCKED");
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=scheduling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduling.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/scheduling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { WriteEntry } from "../contracts/types.js";
|
|
2
|
+
export interface WriteSafetyOptions {
|
|
3
|
+
workspaceRoot: string;
|
|
4
|
+
protectedPaths?: string[];
|
|
5
|
+
shrinkageThreshold?: number;
|
|
6
|
+
shrinkageMinBytes?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface WriteSafetyResult {
|
|
9
|
+
safe: boolean;
|
|
10
|
+
errors: string[];
|
|
11
|
+
warnings: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function validateWrites(writes: WriteEntry[], options: WriteSafetyOptions, existingFileSizes?: Map<string, number>): WriteSafetyResult;
|
|
14
|
+
//# sourceMappingURL=write-safety.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-safety.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestrator/write-safety.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,EAAE,kBAAkB,EAC3B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,iBAAiB,CAgDnB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
const DEFAULT_SHRINKAGE_THRESHOLD = 0.5;
|
|
3
|
+
const DEFAULT_SHRINKAGE_MIN_BYTES = 100;
|
|
4
|
+
export function validateWrites(writes, options, existingFileSizes) {
|
|
5
|
+
const errors = [];
|
|
6
|
+
const warnings = [];
|
|
7
|
+
const threshold = options.shrinkageThreshold ?? DEFAULT_SHRINKAGE_THRESHOLD;
|
|
8
|
+
const minBytes = options.shrinkageMinBytes ?? DEFAULT_SHRINKAGE_MIN_BYTES;
|
|
9
|
+
const protectedSet = new Set(options.protectedPaths ?? []);
|
|
10
|
+
for (const write of writes) {
|
|
11
|
+
const normalized = path.normalize(write.path);
|
|
12
|
+
if (path.isAbsolute(normalized)) {
|
|
13
|
+
errors.push(`Write path is absolute: ${write.path}`);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const resolved = path.resolve(options.workspaceRoot, normalized);
|
|
17
|
+
if (!resolved.startsWith(options.workspaceRoot)) {
|
|
18
|
+
errors.push(`Write path escapes workspace root: ${write.path}`);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (protectedSet.has(normalized) || protectedSet.has(write.path)) {
|
|
22
|
+
errors.push(`Write targets protected file: ${write.path}`);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (write.op === "replace" && existingFileSizes) {
|
|
26
|
+
const existingSize = existingFileSizes.get(normalized) ?? existingFileSizes.get(write.path);
|
|
27
|
+
if (existingSize !== undefined && existingSize > minBytes) {
|
|
28
|
+
const newSize = write.content?.length ?? 0;
|
|
29
|
+
if (newSize < existingSize * threshold) {
|
|
30
|
+
errors.push(`Shrinkage detected for ${write.path}: existing ${existingSize}B -> proposed ${newSize}B (${Math.round((newSize / existingSize) * 100)}% of original)`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (!write.content && !write.content_ref) {
|
|
35
|
+
errors.push(`Write entry for ${write.path} has neither content nor content_ref`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
safe: errors.length === 0,
|
|
40
|
+
errors,
|
|
41
|
+
warnings,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=write-safety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-safety.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/write-safety.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAgB7B,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAExC,MAAM,UAAU,cAAc,CAC5B,MAAoB,EACpB,OAA2B,EAC3B,iBAAuC;IAEvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,IAAI,2BAA2B,CAAC;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,IAAI,2BAA2B,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAE3D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,SAAS;QACX,CAAC;QAED,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,iCAAiC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,iBAAiB,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5F,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,GAAG,QAAQ,EAAE,CAAC;gBAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;gBAC3C,IAAI,OAAO,GAAG,YAAY,GAAG,SAAS,EAAE,CAAC;oBACvC,MAAM,CAAC,IAAI,CACT,0BAA0B,KAAK,CAAC,IAAI,cAAc,YAAY,iBAAiB,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,gBAAgB,CACvJ,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,sCAAsC,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACzB,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HealDecisionV2, ParserFailure } from "../contracts/types.js";
|
|
2
|
+
export interface ParseHealOptions {
|
|
3
|
+
logPath: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ParseHealResult {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
healDecision?: HealDecisionV2;
|
|
8
|
+
error?: ParserFailure;
|
|
9
|
+
warnings: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function parseHeal(options: ParseHealOptions): ParseHealResult;
|
|
12
|
+
//# sourceMappingURL=parse-heal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-heal.d.ts","sourceRoot":"","sources":["../../../src/lib/parser/parse-heal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAQpE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { parseHealDecision, isParserFailure } from "./parser.js";
|
|
2
|
+
export function parseHeal(options) {
|
|
3
|
+
const result = parseHealDecision(options.logPath);
|
|
4
|
+
if (isParserFailure(result)) {
|
|
5
|
+
return { ok: false, error: result, warnings: [] };
|
|
6
|
+
}
|
|
7
|
+
return { ok: true, healDecision: result, warnings: [] };
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=parse-heal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-heal.js","sourceRoot":"","sources":["../../../src/lib/parser/parse-heal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAajE,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TaskResultV2, ParserFailure } from "../contracts/types.js";
|
|
2
|
+
export interface ParseResultOptions {
|
|
3
|
+
logPath: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ParseResultResult {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
taskResult?: TaskResultV2;
|
|
8
|
+
error?: ParserFailure;
|
|
9
|
+
warnings: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function parseResult(options: ParseResultOptions): ParseResultResult;
|
|
12
|
+
//# sourceMappingURL=parse-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-result.d.ts","sourceRoot":"","sources":["../../../src/lib/parser/parse-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGzE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CAQ1E"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { parseTaskResult, isParserFailure } from "./parser.js";
|
|
2
|
+
export function parseResult(options) {
|
|
3
|
+
const result = parseTaskResult(options.logPath);
|
|
4
|
+
if (isParserFailure(result)) {
|
|
5
|
+
return { ok: false, error: result, warnings: [] };
|
|
6
|
+
}
|
|
7
|
+
return { ok: true, taskResult: result, warnings: [] };
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=parse-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-result.js","sourceRoot":"","sources":["../../../src/lib/parser/parse-result.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAa/D,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhD,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACxD,CAAC"}
|