pm-orchestrator-runner 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +108 -0
- package/dist/cli/cli-interface.d.ts +150 -0
- package/dist/cli/cli-interface.d.ts.map +1 -0
- package/dist/cli/cli-interface.js +606 -0
- package/dist/cli/cli-interface.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +243 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/llm-sentinel.d.ts +15 -0
- package/dist/cli/llm-sentinel.d.ts.map +1 -0
- package/dist/cli/llm-sentinel.js +184 -0
- package/dist/cli/llm-sentinel.js.map +1 -0
- package/dist/config/configuration-manager.d.ts +149 -0
- package/dist/config/configuration-manager.d.ts.map +1 -0
- package/dist/config/configuration-manager.js +241 -0
- package/dist/config/configuration-manager.js.map +1 -0
- package/dist/continuation/continuation-control-manager.d.ts +154 -0
- package/dist/continuation/continuation-control-manager.d.ts.map +1 -0
- package/dist/continuation/continuation-control-manager.js +303 -0
- package/dist/continuation/continuation-control-manager.js.map +1 -0
- package/dist/core/runner-core.d.ts +474 -0
- package/dist/core/runner-core.d.ts.map +1 -0
- package/dist/core/runner-core.js +1311 -0
- package/dist/core/runner-core.js.map +1 -0
- package/dist/errors/error-codes.d.ts +105 -0
- package/dist/errors/error-codes.d.ts.map +1 -0
- package/dist/errors/error-codes.js +198 -0
- package/dist/errors/error-codes.js.map +1 -0
- package/dist/errors/runner-error.d.ts +14 -0
- package/dist/errors/runner-error.d.ts.map +1 -0
- package/dist/errors/runner-error.js +33 -0
- package/dist/errors/runner-error.js.map +1 -0
- package/dist/evidence/evidence-manager.d.ts +112 -0
- package/dist/evidence/evidence-manager.d.ts.map +1 -0
- package/dist/evidence/evidence-manager.js +337 -0
- package/dist/evidence/evidence-manager.js.map +1 -0
- package/dist/executor/claude-code-executor.d.ts +136 -0
- package/dist/executor/claude-code-executor.d.ts.map +1 -0
- package/dist/executor/claude-code-executor.js +643 -0
- package/dist/executor/claude-code-executor.js.map +1 -0
- package/dist/executor/deterministic-executor.d.ts +40 -0
- package/dist/executor/deterministic-executor.d.ts.map +1 -0
- package/dist/executor/deterministic-executor.js +269 -0
- package/dist/executor/deterministic-executor.js.map +1 -0
- package/dist/lifecycle/lifecycle-controller.d.ts +270 -0
- package/dist/lifecycle/lifecycle-controller.d.ts.map +1 -0
- package/dist/lifecycle/lifecycle-controller.js +596 -0
- package/dist/lifecycle/lifecycle-controller.js.map +1 -0
- package/dist/limits/resource-limit-manager.d.ts +200 -0
- package/dist/limits/resource-limit-manager.d.ts.map +1 -0
- package/dist/limits/resource-limit-manager.js +376 -0
- package/dist/limits/resource-limit-manager.js.map +1 -0
- package/dist/locks/lock-manager.d.ts +116 -0
- package/dist/locks/lock-manager.d.ts.map +1 -0
- package/dist/locks/lock-manager.js +306 -0
- package/dist/locks/lock-manager.js.map +1 -0
- package/dist/logging/index.d.ts +8 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +22 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/sensitive-data-masker.d.ts +90 -0
- package/dist/logging/sensitive-data-masker.d.ts.map +1 -0
- package/dist/logging/sensitive-data-masker.js +228 -0
- package/dist/logging/sensitive-data-masker.js.map +1 -0
- package/dist/logging/task-log-manager.d.ts +215 -0
- package/dist/logging/task-log-manager.d.ts.map +1 -0
- package/dist/logging/task-log-manager.js +743 -0
- package/dist/logging/task-log-manager.js.map +1 -0
- package/dist/mediation/fail-closed-runner.d.ts +131 -0
- package/dist/mediation/fail-closed-runner.d.ts.map +1 -0
- package/dist/mediation/fail-closed-runner.js +245 -0
- package/dist/mediation/fail-closed-runner.js.map +1 -0
- package/dist/mediation/llm-client-with-evidence.d.ts +123 -0
- package/dist/mediation/llm-client-with-evidence.d.ts.map +1 -0
- package/dist/mediation/llm-client-with-evidence.js +245 -0
- package/dist/mediation/llm-client-with-evidence.js.map +1 -0
- package/dist/mediation/llm-client.d.ts +102 -0
- package/dist/mediation/llm-client.d.ts.map +1 -0
- package/dist/mediation/llm-client.js +206 -0
- package/dist/mediation/llm-client.js.map +1 -0
- package/dist/mediation/llm-evidence-manager.d.ts +108 -0
- package/dist/mediation/llm-evidence-manager.d.ts.map +1 -0
- package/dist/mediation/llm-evidence-manager.js +230 -0
- package/dist/mediation/llm-evidence-manager.js.map +1 -0
- package/dist/mediation/llm-mediation-layer.d.ts +175 -0
- package/dist/mediation/llm-mediation-layer.d.ts.map +1 -0
- package/dist/mediation/llm-mediation-layer.js +315 -0
- package/dist/mediation/llm-mediation-layer.js.map +1 -0
- package/dist/mediation/llm-sentinel.d.ts +107 -0
- package/dist/mediation/llm-sentinel.d.ts.map +1 -0
- package/dist/mediation/llm-sentinel.js +187 -0
- package/dist/mediation/llm-sentinel.js.map +1 -0
- package/dist/mediation/real-llm-mediation-layer.d.ts +104 -0
- package/dist/mediation/real-llm-mediation-layer.d.ts.map +1 -0
- package/dist/mediation/real-llm-mediation-layer.js +322 -0
- package/dist/mediation/real-llm-mediation-layer.js.map +1 -0
- package/dist/mediation/verdict-reporter.d.ts +61 -0
- package/dist/mediation/verdict-reporter.d.ts.map +1 -0
- package/dist/mediation/verdict-reporter.js +178 -0
- package/dist/mediation/verdict-reporter.js.map +1 -0
- package/dist/models/enums.d.ts +133 -0
- package/dist/models/enums.d.ts.map +1 -0
- package/dist/models/enums.js +201 -0
- package/dist/models/enums.js.map +1 -0
- package/dist/models/evidence.d.ts +60 -0
- package/dist/models/evidence.d.ts.map +1 -0
- package/dist/models/evidence.js +135 -0
- package/dist/models/evidence.js.map +1 -0
- package/dist/models/execution-result.d.ts +89 -0
- package/dist/models/execution-result.d.ts.map +1 -0
- package/dist/models/execution-result.js +197 -0
- package/dist/models/execution-result.js.map +1 -0
- package/dist/models/file-lock.d.ts +62 -0
- package/dist/models/file-lock.d.ts.map +1 -0
- package/dist/models/file-lock.js +133 -0
- package/dist/models/file-lock.js.map +1 -0
- package/dist/models/index.d.ts +12 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +91 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/repl/index.d.ts +7 -0
- package/dist/models/repl/index.d.ts.map +1 -0
- package/dist/models/repl/index.js +32 -0
- package/dist/models/repl/index.js.map +1 -0
- package/dist/models/repl/model-registry.d.ts +73 -0
- package/dist/models/repl/model-registry.d.ts.map +1 -0
- package/dist/models/repl/model-registry.js +116 -0
- package/dist/models/repl/model-registry.js.map +1 -0
- package/dist/models/repl/repl-state.d.ts +86 -0
- package/dist/models/repl/repl-state.d.ts.map +1 -0
- package/dist/models/repl/repl-state.js +152 -0
- package/dist/models/repl/repl-state.js.map +1 -0
- package/dist/models/repl/task-log.d.ts +247 -0
- package/dist/models/repl/task-log.d.ts.map +1 -0
- package/dist/models/repl/task-log.js +178 -0
- package/dist/models/repl/task-log.js.map +1 -0
- package/dist/models/session.d.ts +71 -0
- package/dist/models/session.d.ts.map +1 -0
- package/dist/models/session.js +140 -0
- package/dist/models/session.js.map +1 -0
- package/dist/models/supporting.d.ts +97 -0
- package/dist/models/supporting.d.ts.map +1 -0
- package/dist/models/supporting.js +208 -0
- package/dist/models/supporting.js.map +1 -0
- package/dist/models/task.d.ts +77 -0
- package/dist/models/task.d.ts.map +1 -0
- package/dist/models/task.js +170 -0
- package/dist/models/task.js.map +1 -0
- package/dist/output/output-control-manager.d.ts +217 -0
- package/dist/output/output-control-manager.d.ts.map +1 -0
- package/dist/output/output-control-manager.js +378 -0
- package/dist/output/output-control-manager.js.map +1 -0
- package/dist/pool/agent-pool.d.ts +284 -0
- package/dist/pool/agent-pool.d.ts.map +1 -0
- package/dist/pool/agent-pool.js +451 -0
- package/dist/pool/agent-pool.js.map +1 -0
- package/dist/repl/commands/index.d.ts +12 -0
- package/dist/repl/commands/index.d.ts.map +1 -0
- package/dist/repl/commands/index.js +26 -0
- package/dist/repl/commands/index.js.map +1 -0
- package/dist/repl/commands/init.d.ts +31 -0
- package/dist/repl/commands/init.d.ts.map +1 -0
- package/dist/repl/commands/init.js +234 -0
- package/dist/repl/commands/init.js.map +1 -0
- package/dist/repl/commands/keys.d.ts +63 -0
- package/dist/repl/commands/keys.d.ts.map +1 -0
- package/dist/repl/commands/keys.js +114 -0
- package/dist/repl/commands/keys.js.map +1 -0
- package/dist/repl/commands/logs.d.ts +91 -0
- package/dist/repl/commands/logs.d.ts.map +1 -0
- package/dist/repl/commands/logs.js +200 -0
- package/dist/repl/commands/logs.js.map +1 -0
- package/dist/repl/commands/model.d.ts +85 -0
- package/dist/repl/commands/model.d.ts.map +1 -0
- package/dist/repl/commands/model.js +225 -0
- package/dist/repl/commands/model.js.map +1 -0
- package/dist/repl/commands/models.d.ts +50 -0
- package/dist/repl/commands/models.d.ts.map +1 -0
- package/dist/repl/commands/models.js +180 -0
- package/dist/repl/commands/models.js.map +1 -0
- package/dist/repl/commands/provider.d.ts +79 -0
- package/dist/repl/commands/provider.d.ts.map +1 -0
- package/dist/repl/commands/provider.js +291 -0
- package/dist/repl/commands/provider.js.map +1 -0
- package/dist/repl/commands/session.d.ts +50 -0
- package/dist/repl/commands/session.d.ts.map +1 -0
- package/dist/repl/commands/session.js +152 -0
- package/dist/repl/commands/session.js.map +1 -0
- package/dist/repl/commands/status.d.ts +55 -0
- package/dist/repl/commands/status.d.ts.map +1 -0
- package/dist/repl/commands/status.js +182 -0
- package/dist/repl/commands/status.js.map +1 -0
- package/dist/repl/index.d.ts +6 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/repl/index.js +25 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl/repl-interface.d.ts +371 -0
- package/dist/repl/repl-interface.d.ts.map +1 -0
- package/dist/repl/repl-interface.js +1214 -0
- package/dist/repl/repl-interface.js.map +1 -0
- package/dist/session/session-manager.d.ts +85 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +217 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/supervisor/executor-supervisor.d.ts +90 -0
- package/dist/supervisor/executor-supervisor.d.ts.map +1 -0
- package/dist/supervisor/executor-supervisor.js +223 -0
- package/dist/supervisor/executor-supervisor.js.map +1 -0
- package/dist/supervisor/index.d.ts +5 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +9 -0
- package/dist/supervisor/index.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supporting Structures
|
|
3
|
+
* Based on 05_DATA_MODELS.md L79-101
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* TaskLimits validation error
|
|
7
|
+
*/
|
|
8
|
+
export declare class TaskLimitsValidationError extends Error {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* LimitViolation validation error
|
|
13
|
+
*/
|
|
14
|
+
export declare class LimitViolationValidationError extends Error {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* EvidenceInventory validation error
|
|
19
|
+
*/
|
|
20
|
+
export declare class EvidenceInventoryValidationError extends Error {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* TaskLimits structure (L81-86)
|
|
25
|
+
*/
|
|
26
|
+
export interface TaskLimits {
|
|
27
|
+
max_files: number;
|
|
28
|
+
max_tests: number;
|
|
29
|
+
max_seconds: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* LimitViolation structure (L88-94)
|
|
33
|
+
*/
|
|
34
|
+
export interface LimitViolation {
|
|
35
|
+
limit_type: string;
|
|
36
|
+
limit_value: number;
|
|
37
|
+
actual_value: number;
|
|
38
|
+
timestamp: string;
|
|
39
|
+
resolution_required: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* EvidenceInventory structure (L96-101)
|
|
43
|
+
*/
|
|
44
|
+
export interface EvidenceInventory {
|
|
45
|
+
total_evidence_items: number;
|
|
46
|
+
missing_evidence_operations: string[];
|
|
47
|
+
integrity_failures: string[];
|
|
48
|
+
raw_evidence_files: string[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create task limits with defaults
|
|
52
|
+
*/
|
|
53
|
+
export declare function createTaskLimits(maxFiles?: number, maxTests?: number, maxSeconds?: number): TaskLimits;
|
|
54
|
+
/**
|
|
55
|
+
* Validate task limits
|
|
56
|
+
* @throws TaskLimitsValidationError if validation fails
|
|
57
|
+
*/
|
|
58
|
+
export declare function validateTaskLimits(limits: TaskLimits): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Create limit violation
|
|
61
|
+
*/
|
|
62
|
+
export declare function createLimitViolation(limitType: string, limitValue: number, actualValue: number): LimitViolation;
|
|
63
|
+
/**
|
|
64
|
+
* Validate limit violation
|
|
65
|
+
* @throws LimitViolationValidationError if validation fails
|
|
66
|
+
*/
|
|
67
|
+
export declare function validateLimitViolation(violation: LimitViolation): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Create empty evidence inventory
|
|
70
|
+
*/
|
|
71
|
+
export declare function createEvidenceInventory(): EvidenceInventory;
|
|
72
|
+
/**
|
|
73
|
+
* Validate evidence inventory
|
|
74
|
+
* @throws EvidenceInventoryValidationError if validation fails
|
|
75
|
+
*/
|
|
76
|
+
export declare function validateEvidenceInventory(inventory: EvidenceInventory): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Add missing evidence operation
|
|
79
|
+
*/
|
|
80
|
+
export declare function addMissingEvidenceOperation(inventory: EvidenceInventory, operationId: string): EvidenceInventory;
|
|
81
|
+
/**
|
|
82
|
+
* Add integrity failure
|
|
83
|
+
*/
|
|
84
|
+
export declare function addIntegrityFailure(inventory: EvidenceInventory, evidenceId: string): EvidenceInventory;
|
|
85
|
+
/**
|
|
86
|
+
* Add raw evidence file
|
|
87
|
+
*/
|
|
88
|
+
export declare function addRawEvidenceFile(inventory: EvidenceInventory, filePath: string): EvidenceInventory;
|
|
89
|
+
/**
|
|
90
|
+
* Increment evidence item count
|
|
91
|
+
*/
|
|
92
|
+
export declare function incrementEvidenceCount(inventory: EvidenceInventory, count?: number): EvidenceInventory;
|
|
93
|
+
/**
|
|
94
|
+
* Check if inventory has issues (missing evidence or integrity failures)
|
|
95
|
+
*/
|
|
96
|
+
export declare function hasInventoryIssues(inventory: EvidenceInventory): boolean;
|
|
97
|
+
//# sourceMappingURL=supporting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supporting.d.ts","sourceRoot":"","sources":["../../src/models/supporting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,2BAA2B,EAAE,MAAM,EAAE,CAAC;IACtC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,GAAE,MAAiC,EAC3C,QAAQ,GAAE,MAAiC,EAC3C,UAAU,GAAE,MAAmC,GAC9C,UAAU,CAMZ;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CA6B9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,cAAc,CAQhB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CA2BzE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAO3D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAsB/E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,MAAM,GAClB,iBAAiB,CAKnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,iBAAiB,EAC5B,UAAU,EAAE,MAAM,GACjB,iBAAiB,CAKnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,MAAM,GACf,iBAAiB,CAKnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,iBAAiB,EAC5B,KAAK,GAAE,MAAU,GAChB,iBAAiB,CAKnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAKxE"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Supporting Structures
|
|
4
|
+
* Based on 05_DATA_MODELS.md L79-101
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.EvidenceInventoryValidationError = exports.LimitViolationValidationError = exports.TaskLimitsValidationError = void 0;
|
|
8
|
+
exports.createTaskLimits = createTaskLimits;
|
|
9
|
+
exports.validateTaskLimits = validateTaskLimits;
|
|
10
|
+
exports.createLimitViolation = createLimitViolation;
|
|
11
|
+
exports.validateLimitViolation = validateLimitViolation;
|
|
12
|
+
exports.createEvidenceInventory = createEvidenceInventory;
|
|
13
|
+
exports.validateEvidenceInventory = validateEvidenceInventory;
|
|
14
|
+
exports.addMissingEvidenceOperation = addMissingEvidenceOperation;
|
|
15
|
+
exports.addIntegrityFailure = addIntegrityFailure;
|
|
16
|
+
exports.addRawEvidenceFile = addRawEvidenceFile;
|
|
17
|
+
exports.incrementEvidenceCount = incrementEvidenceCount;
|
|
18
|
+
exports.hasInventoryIssues = hasInventoryIssues;
|
|
19
|
+
/**
|
|
20
|
+
* Task limits range constraints (from 04_COMPONENTS.md L70-72)
|
|
21
|
+
*/
|
|
22
|
+
const LIMITS_RANGE = {
|
|
23
|
+
max_files: { min: 1, max: 20 },
|
|
24
|
+
max_tests: { min: 1, max: 50 },
|
|
25
|
+
max_seconds: { min: 30, max: 900 },
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Default task limits
|
|
29
|
+
*/
|
|
30
|
+
const DEFAULT_LIMITS = {
|
|
31
|
+
max_files: 5,
|
|
32
|
+
max_tests: 10,
|
|
33
|
+
max_seconds: 300,
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* TaskLimits validation error
|
|
37
|
+
*/
|
|
38
|
+
class TaskLimitsValidationError extends Error {
|
|
39
|
+
constructor(message) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.name = 'TaskLimitsValidationError';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.TaskLimitsValidationError = TaskLimitsValidationError;
|
|
45
|
+
/**
|
|
46
|
+
* LimitViolation validation error
|
|
47
|
+
*/
|
|
48
|
+
class LimitViolationValidationError extends Error {
|
|
49
|
+
constructor(message) {
|
|
50
|
+
super(message);
|
|
51
|
+
this.name = 'LimitViolationValidationError';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.LimitViolationValidationError = LimitViolationValidationError;
|
|
55
|
+
/**
|
|
56
|
+
* EvidenceInventory validation error
|
|
57
|
+
*/
|
|
58
|
+
class EvidenceInventoryValidationError extends Error {
|
|
59
|
+
constructor(message) {
|
|
60
|
+
super(message);
|
|
61
|
+
this.name = 'EvidenceInventoryValidationError';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.EvidenceInventoryValidationError = EvidenceInventoryValidationError;
|
|
65
|
+
/**
|
|
66
|
+
* Create task limits with defaults
|
|
67
|
+
*/
|
|
68
|
+
function createTaskLimits(maxFiles = DEFAULT_LIMITS.max_files, maxTests = DEFAULT_LIMITS.max_tests, maxSeconds = DEFAULT_LIMITS.max_seconds) {
|
|
69
|
+
return {
|
|
70
|
+
max_files: maxFiles,
|
|
71
|
+
max_tests: maxTests,
|
|
72
|
+
max_seconds: maxSeconds,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Validate task limits
|
|
77
|
+
* @throws TaskLimitsValidationError if validation fails
|
|
78
|
+
*/
|
|
79
|
+
function validateTaskLimits(limits) {
|
|
80
|
+
if (limits.max_files < LIMITS_RANGE.max_files.min ||
|
|
81
|
+
limits.max_files > LIMITS_RANGE.max_files.max) {
|
|
82
|
+
throw new TaskLimitsValidationError(`max_files must be between ${LIMITS_RANGE.max_files.min} and ${LIMITS_RANGE.max_files.max}`);
|
|
83
|
+
}
|
|
84
|
+
if (limits.max_tests < LIMITS_RANGE.max_tests.min ||
|
|
85
|
+
limits.max_tests > LIMITS_RANGE.max_tests.max) {
|
|
86
|
+
throw new TaskLimitsValidationError(`max_tests must be between ${LIMITS_RANGE.max_tests.min} and ${LIMITS_RANGE.max_tests.max}`);
|
|
87
|
+
}
|
|
88
|
+
if (limits.max_seconds < LIMITS_RANGE.max_seconds.min ||
|
|
89
|
+
limits.max_seconds > LIMITS_RANGE.max_seconds.max) {
|
|
90
|
+
throw new TaskLimitsValidationError(`max_seconds must be between ${LIMITS_RANGE.max_seconds.min} and ${LIMITS_RANGE.max_seconds.max}`);
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create limit violation
|
|
96
|
+
*/
|
|
97
|
+
function createLimitViolation(limitType, limitValue, actualValue) {
|
|
98
|
+
return {
|
|
99
|
+
limit_type: limitType,
|
|
100
|
+
limit_value: limitValue,
|
|
101
|
+
actual_value: actualValue,
|
|
102
|
+
timestamp: new Date().toISOString(),
|
|
103
|
+
resolution_required: true,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate limit violation
|
|
108
|
+
* @throws LimitViolationValidationError if validation fails
|
|
109
|
+
*/
|
|
110
|
+
function validateLimitViolation(violation) {
|
|
111
|
+
if (!violation.limit_type || violation.limit_type.length === 0) {
|
|
112
|
+
throw new LimitViolationValidationError('limit_type is required');
|
|
113
|
+
}
|
|
114
|
+
if (violation.limit_value === undefined) {
|
|
115
|
+
throw new LimitViolationValidationError('limit_value is required');
|
|
116
|
+
}
|
|
117
|
+
if (violation.actual_value === undefined) {
|
|
118
|
+
throw new LimitViolationValidationError('actual_value is required');
|
|
119
|
+
}
|
|
120
|
+
if (!violation.timestamp || violation.timestamp.length === 0) {
|
|
121
|
+
throw new LimitViolationValidationError('timestamp is required');
|
|
122
|
+
}
|
|
123
|
+
const timestamp = new Date(violation.timestamp);
|
|
124
|
+
if (isNaN(timestamp.getTime())) {
|
|
125
|
+
throw new LimitViolationValidationError('timestamp must be a valid ISO 8601 timestamp');
|
|
126
|
+
}
|
|
127
|
+
if (violation.resolution_required === undefined) {
|
|
128
|
+
throw new LimitViolationValidationError('resolution_required is required');
|
|
129
|
+
}
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create empty evidence inventory
|
|
134
|
+
*/
|
|
135
|
+
function createEvidenceInventory() {
|
|
136
|
+
return {
|
|
137
|
+
total_evidence_items: 0,
|
|
138
|
+
missing_evidence_operations: [],
|
|
139
|
+
integrity_failures: [],
|
|
140
|
+
raw_evidence_files: [],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validate evidence inventory
|
|
145
|
+
* @throws EvidenceInventoryValidationError if validation fails
|
|
146
|
+
*/
|
|
147
|
+
function validateEvidenceInventory(inventory) {
|
|
148
|
+
if (inventory.total_evidence_items === undefined) {
|
|
149
|
+
throw new EvidenceInventoryValidationError('total_evidence_items is required');
|
|
150
|
+
}
|
|
151
|
+
if (inventory.total_evidence_items < 0) {
|
|
152
|
+
throw new EvidenceInventoryValidationError('total_evidence_items must be non-negative');
|
|
153
|
+
}
|
|
154
|
+
if (!Array.isArray(inventory.missing_evidence_operations)) {
|
|
155
|
+
throw new EvidenceInventoryValidationError('missing_evidence_operations must be an array');
|
|
156
|
+
}
|
|
157
|
+
if (!Array.isArray(inventory.integrity_failures)) {
|
|
158
|
+
throw new EvidenceInventoryValidationError('integrity_failures must be an array');
|
|
159
|
+
}
|
|
160
|
+
if (!Array.isArray(inventory.raw_evidence_files)) {
|
|
161
|
+
throw new EvidenceInventoryValidationError('raw_evidence_files must be an array');
|
|
162
|
+
}
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Add missing evidence operation
|
|
167
|
+
*/
|
|
168
|
+
function addMissingEvidenceOperation(inventory, operationId) {
|
|
169
|
+
return {
|
|
170
|
+
...inventory,
|
|
171
|
+
missing_evidence_operations: [...inventory.missing_evidence_operations, operationId],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Add integrity failure
|
|
176
|
+
*/
|
|
177
|
+
function addIntegrityFailure(inventory, evidenceId) {
|
|
178
|
+
return {
|
|
179
|
+
...inventory,
|
|
180
|
+
integrity_failures: [...inventory.integrity_failures, evidenceId],
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Add raw evidence file
|
|
185
|
+
*/
|
|
186
|
+
function addRawEvidenceFile(inventory, filePath) {
|
|
187
|
+
return {
|
|
188
|
+
...inventory,
|
|
189
|
+
raw_evidence_files: [...inventory.raw_evidence_files, filePath],
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Increment evidence item count
|
|
194
|
+
*/
|
|
195
|
+
function incrementEvidenceCount(inventory, count = 1) {
|
|
196
|
+
return {
|
|
197
|
+
...inventory,
|
|
198
|
+
total_evidence_items: inventory.total_evidence_items + count,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check if inventory has issues (missing evidence or integrity failures)
|
|
203
|
+
*/
|
|
204
|
+
function hasInventoryIssues(inventory) {
|
|
205
|
+
return (inventory.missing_evidence_operations.length > 0 ||
|
|
206
|
+
inventory.integrity_failures.length > 0);
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=supporting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supporting.js","sourceRoot":"","sources":["../../src/models/supporting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Model
|
|
3
|
+
* Based on 05_DATA_MODELS.md L23-37
|
|
4
|
+
*/
|
|
5
|
+
import { TaskStatus } from './enums';
|
|
6
|
+
/**
|
|
7
|
+
* Granularity limits for task execution
|
|
8
|
+
*/
|
|
9
|
+
export interface GranularityLimits {
|
|
10
|
+
max_files: number;
|
|
11
|
+
max_tests: number;
|
|
12
|
+
max_seconds: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Task data structure
|
|
16
|
+
*/
|
|
17
|
+
export interface Task {
|
|
18
|
+
task_id: string;
|
|
19
|
+
description: string;
|
|
20
|
+
requirements: string[];
|
|
21
|
+
status: TaskStatus;
|
|
22
|
+
assigned_executor?: string;
|
|
23
|
+
evidence_refs: string[];
|
|
24
|
+
files_modified: string[];
|
|
25
|
+
tests_run: string[];
|
|
26
|
+
tests_required_before_implementation: boolean;
|
|
27
|
+
granularity_limits: GranularityLimits;
|
|
28
|
+
decomposition_approved_by_runner: boolean;
|
|
29
|
+
parent_task_id?: string;
|
|
30
|
+
subtask_ids?: string[];
|
|
31
|
+
started_at?: string;
|
|
32
|
+
completed_at?: string;
|
|
33
|
+
error?: {
|
|
34
|
+
code: string;
|
|
35
|
+
message: string;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Task validation error
|
|
40
|
+
*/
|
|
41
|
+
export declare class TaskValidationError extends Error {
|
|
42
|
+
constructor(message: string);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a new task
|
|
46
|
+
*/
|
|
47
|
+
export declare function createTask(description: string, requirements: string[], granularityLimits?: Partial<GranularityLimits>): Task;
|
|
48
|
+
/**
|
|
49
|
+
* Validate a task object
|
|
50
|
+
* @throws TaskValidationError if validation fails
|
|
51
|
+
*/
|
|
52
|
+
export declare function validateTask(task: Task): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Update task status
|
|
55
|
+
*/
|
|
56
|
+
export declare function updateTaskStatus(task: Task, newStatus: TaskStatus): Task;
|
|
57
|
+
/**
|
|
58
|
+
* Assign executor to task
|
|
59
|
+
*/
|
|
60
|
+
export declare function assignExecutor(task: Task, executorId: string): Task;
|
|
61
|
+
/**
|
|
62
|
+
* Add evidence reference to task
|
|
63
|
+
*/
|
|
64
|
+
export declare function addEvidenceRef(task: Task, evidenceRef: string): Task;
|
|
65
|
+
/**
|
|
66
|
+
* Add modified file to task
|
|
67
|
+
*/
|
|
68
|
+
export declare function addModifiedFile(task: Task, filePath: string): Task;
|
|
69
|
+
/**
|
|
70
|
+
* Add test run to task
|
|
71
|
+
*/
|
|
72
|
+
export declare function addTestRun(task: Task, testId: string): Task;
|
|
73
|
+
/**
|
|
74
|
+
* Mark task decomposition as approved
|
|
75
|
+
*/
|
|
76
|
+
export declare function approveDecomposition(task: Task): Task;
|
|
77
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oCAAoC,EAAE,OAAO,CAAC;IAC9C,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,gCAAgC,EAAE,OAAO,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAoBD;;GAEG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC7C,IAAI,CAgBN;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CA2DhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,CAMxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAMnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAKpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAK3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAKrD"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Task Model
|
|
4
|
+
* Based on 05_DATA_MODELS.md L23-37
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TaskValidationError = void 0;
|
|
8
|
+
exports.createTask = createTask;
|
|
9
|
+
exports.validateTask = validateTask;
|
|
10
|
+
exports.updateTaskStatus = updateTaskStatus;
|
|
11
|
+
exports.assignExecutor = assignExecutor;
|
|
12
|
+
exports.addEvidenceRef = addEvidenceRef;
|
|
13
|
+
exports.addModifiedFile = addModifiedFile;
|
|
14
|
+
exports.addTestRun = addTestRun;
|
|
15
|
+
exports.approveDecomposition = approveDecomposition;
|
|
16
|
+
const uuid_1 = require("uuid");
|
|
17
|
+
const enums_1 = require("./enums");
|
|
18
|
+
/**
|
|
19
|
+
* Task validation error
|
|
20
|
+
*/
|
|
21
|
+
class TaskValidationError extends Error {
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.name = 'TaskValidationError';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.TaskValidationError = TaskValidationError;
|
|
28
|
+
/**
|
|
29
|
+
* Default granularity limits
|
|
30
|
+
*/
|
|
31
|
+
const DEFAULT_GRANULARITY_LIMITS = {
|
|
32
|
+
max_files: 5,
|
|
33
|
+
max_tests: 10,
|
|
34
|
+
max_seconds: 300,
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Maximum allowed limits
|
|
38
|
+
*/
|
|
39
|
+
const MAX_LIMITS = {
|
|
40
|
+
max_files: 20,
|
|
41
|
+
max_tests: 50,
|
|
42
|
+
max_seconds: 3600,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Create a new task
|
|
46
|
+
*/
|
|
47
|
+
function createTask(description, requirements, granularityLimits) {
|
|
48
|
+
return {
|
|
49
|
+
task_id: `task-${(0, uuid_1.v4)()}`,
|
|
50
|
+
description,
|
|
51
|
+
requirements,
|
|
52
|
+
status: enums_1.TaskStatus.INCOMPLETE,
|
|
53
|
+
evidence_refs: [],
|
|
54
|
+
files_modified: [],
|
|
55
|
+
tests_run: [],
|
|
56
|
+
tests_required_before_implementation: true,
|
|
57
|
+
granularity_limits: {
|
|
58
|
+
...DEFAULT_GRANULARITY_LIMITS,
|
|
59
|
+
...granularityLimits,
|
|
60
|
+
},
|
|
61
|
+
decomposition_approved_by_runner: false,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate a task object
|
|
66
|
+
* @throws TaskValidationError if validation fails
|
|
67
|
+
*/
|
|
68
|
+
function validateTask(task) {
|
|
69
|
+
if (!task.task_id || task.task_id.length === 0) {
|
|
70
|
+
throw new TaskValidationError('task_id is required');
|
|
71
|
+
}
|
|
72
|
+
if (!task.description || task.description.length === 0) {
|
|
73
|
+
throw new TaskValidationError('description is required');
|
|
74
|
+
}
|
|
75
|
+
if (!Array.isArray(task.requirements)) {
|
|
76
|
+
throw new TaskValidationError('requirements must be an array');
|
|
77
|
+
}
|
|
78
|
+
if (task.status === undefined) {
|
|
79
|
+
throw new TaskValidationError('status is required');
|
|
80
|
+
}
|
|
81
|
+
if (!Array.isArray(task.evidence_refs)) {
|
|
82
|
+
throw new TaskValidationError('evidence_refs must be an array');
|
|
83
|
+
}
|
|
84
|
+
if (!Array.isArray(task.files_modified)) {
|
|
85
|
+
throw new TaskValidationError('files_modified must be an array');
|
|
86
|
+
}
|
|
87
|
+
if (!Array.isArray(task.tests_run)) {
|
|
88
|
+
throw new TaskValidationError('tests_run must be an array');
|
|
89
|
+
}
|
|
90
|
+
// Validate granularity limits
|
|
91
|
+
if (!task.granularity_limits) {
|
|
92
|
+
throw new TaskValidationError('granularity_limits is required');
|
|
93
|
+
}
|
|
94
|
+
if (task.granularity_limits.max_files <= 0) {
|
|
95
|
+
throw new TaskValidationError('max_files must be greater than 0');
|
|
96
|
+
}
|
|
97
|
+
if (task.granularity_limits.max_files > MAX_LIMITS.max_files) {
|
|
98
|
+
throw new TaskValidationError(`max_files cannot exceed ${MAX_LIMITS.max_files}`);
|
|
99
|
+
}
|
|
100
|
+
if (task.granularity_limits.max_tests <= 0) {
|
|
101
|
+
throw new TaskValidationError('max_tests must be greater than 0');
|
|
102
|
+
}
|
|
103
|
+
if (task.granularity_limits.max_tests > MAX_LIMITS.max_tests) {
|
|
104
|
+
throw new TaskValidationError(`max_tests cannot exceed ${MAX_LIMITS.max_tests}`);
|
|
105
|
+
}
|
|
106
|
+
if (task.granularity_limits.max_seconds <= 0) {
|
|
107
|
+
throw new TaskValidationError('max_seconds must be greater than 0');
|
|
108
|
+
}
|
|
109
|
+
if (task.granularity_limits.max_seconds > MAX_LIMITS.max_seconds) {
|
|
110
|
+
throw new TaskValidationError(`max_seconds cannot exceed ${MAX_LIMITS.max_seconds}`);
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Update task status
|
|
116
|
+
*/
|
|
117
|
+
function updateTaskStatus(task, newStatus) {
|
|
118
|
+
return {
|
|
119
|
+
...task,
|
|
120
|
+
status: newStatus,
|
|
121
|
+
completed_at: newStatus === enums_1.TaskStatus.COMPLETE ? new Date().toISOString() : task.completed_at,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Assign executor to task
|
|
126
|
+
*/
|
|
127
|
+
function assignExecutor(task, executorId) {
|
|
128
|
+
return {
|
|
129
|
+
...task,
|
|
130
|
+
assigned_executor: executorId,
|
|
131
|
+
started_at: new Date().toISOString(),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Add evidence reference to task
|
|
136
|
+
*/
|
|
137
|
+
function addEvidenceRef(task, evidenceRef) {
|
|
138
|
+
return {
|
|
139
|
+
...task,
|
|
140
|
+
evidence_refs: [...task.evidence_refs, evidenceRef],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Add modified file to task
|
|
145
|
+
*/
|
|
146
|
+
function addModifiedFile(task, filePath) {
|
|
147
|
+
return {
|
|
148
|
+
...task,
|
|
149
|
+
files_modified: [...task.files_modified, filePath],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Add test run to task
|
|
154
|
+
*/
|
|
155
|
+
function addTestRun(task, testId) {
|
|
156
|
+
return {
|
|
157
|
+
...task,
|
|
158
|
+
tests_run: [...task.tests_run, testId],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Mark task decomposition as approved
|
|
163
|
+
*/
|
|
164
|
+
function approveDecomposition(task) {
|
|
165
|
+
return {
|
|
166
|
+
...task,
|
|
167
|
+
decomposition_approved_by_runner: true,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"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"}
|