@bicorne/task-flow 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +337 -145
  2. package/SKILL.md +9 -5
  3. package/assets/.harnessrc +0 -1
  4. package/dist/commands/analyze.js +160 -318
  5. package/dist/commands/archive.js +44 -48
  6. package/dist/commands/design.js +225 -400
  7. package/dist/commands/extract.js +174 -303
  8. package/dist/commands/init.js +103 -148
  9. package/dist/commands/merge/index.js +184 -295
  10. package/dist/commands/merge/merger.js +112 -134
  11. package/dist/commands/merge/types.js +3 -5
  12. package/dist/commands/merge/validators.js +115 -132
  13. package/dist/commands/merge.js +46 -13
  14. package/dist/commands/start.js +155 -248
  15. package/dist/commands/status.js +68 -129
  16. package/dist/commands/sync.js +37 -53
  17. package/dist/commands/tasks-gen/doc-parser.js +148 -228
  18. package/dist/commands/tasks-gen/generators.js +104 -116
  19. package/dist/commands/tasks-gen/index.js +206 -314
  20. package/dist/commands/tasks-gen/parsers.js +131 -232
  21. package/dist/commands/tasks-gen/templates.js +9 -10
  22. package/dist/commands/tasks-gen/types.js +36 -14
  23. package/dist/commands/tasks-gen/validators.js +33 -49
  24. package/dist/commands/tasks.js +58 -20
  25. package/dist/commands/worktree.js +167 -249
  26. package/dist/hooks/check-prd-exists.js +45 -55
  27. package/dist/hooks/check-worktree-conflict.js +68 -101
  28. package/dist/hooks/hook-runner/executor.js +134 -126
  29. package/dist/hooks/hook-runner/index.js +181 -196
  30. package/dist/hooks/hook-runner/loader.js +74 -113
  31. package/dist/hooks/hook-runner/types.js +3 -5
  32. package/dist/hooks/hook-runner.js +94 -28
  33. package/dist/hooks/phase-complete-detector.js +125 -191
  34. package/dist/hooks/phase-gate-validator.js +315 -376
  35. package/dist/hooks/save-checkpoint.js +87 -130
  36. package/dist/hooks/start-mcp-servers.js +50 -65
  37. package/dist/hooks/stop-mcp-servers.js +40 -49
  38. package/dist/index.js +84 -153
  39. package/dist/lib/archive.js +126 -209
  40. package/dist/lib/config.d.ts +0 -2
  41. package/dist/lib/config.js +141 -230
  42. package/dist/lib/constants.js +155 -145
  43. package/dist/lib/interactive.js +98 -148
  44. package/dist/lib/mcp-client.js +197 -320
  45. package/dist/lib/state.js +142 -253
  46. package/dist/slash/executor.js +309 -233
  47. package/dist/slash/index.js +69 -43
  48. package/dist/slash/parser.js +84 -97
  49. package/dist/slash/registry.js +100 -88
  50. package/dist/spec/openspec-to-task/builders.js +96 -109
  51. package/dist/spec/openspec-to-task/index.js +112 -173
  52. package/dist/spec/openspec-to-task/parsers.js +148 -219
  53. package/dist/spec/openspec-to-task/types.js +3 -5
  54. package/dist/spec/sync-openspec-to-task.js +47 -19
  55. package/dist/spec/sync-task-to-openspec.js +241 -272
  56. package/dist/types/ai-context.js +3 -8
  57. package/package.json +9 -7
  58. package/references/CLI-TUTORIAL.md +4 -10
@@ -1,30 +1,96 @@
1
+ function e(o) {
2
+ return "function" != typeof WeakMap ? null : (e = function(e) {
3
+ return new WeakMap();
4
+ })(o);
5
+ }
1
6
  "use strict";
2
- /**
3
- * hooks/hook-runner.ts
4
- * Backward-compatible re-export from hook-runner/ module
5
- * @deprecated Import from './hook-runner/index' directly
6
- */
7
- var __importDefault = (this && this.__importDefault) || function (mod) {
8
- return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: !0
9
+ });
10
+ var o = exports, t = {
11
+ get HOOK_LIFECYCLE () {
12
+ return n.HOOK_LIFECYCLE;
13
+ },
14
+ get HookConfig () {
15
+ return u.HookConfig;
16
+ },
17
+ get HookContext () {
18
+ return u.HookContext;
19
+ },
20
+ get HookExecutionResult () {
21
+ return u.HookExecutionResult;
22
+ },
23
+ get HookLifecycle () {
24
+ return u.HookLifecycle;
25
+ },
26
+ get HookResult () {
27
+ return u.HookResult;
28
+ },
29
+ get LoadedHooksConfig () {
30
+ return u.LoadedHooksConfig;
31
+ },
32
+ get createHookConfig () {
33
+ return n.createHookConfig;
34
+ },
35
+ get default () {
36
+ return n.default;
37
+ },
38
+ get executeHookFunction () {
39
+ return c.executeHookFunction;
40
+ },
41
+ get executeSingleHookAsync () {
42
+ return c.executeSingleHookAsync;
43
+ },
44
+ get executeSingleHookSync () {
45
+ return c.executeSingleHookSync;
46
+ },
47
+ get getDefaultHooksPath () {
48
+ return i.getDefaultHooksPath;
49
+ },
50
+ get getHookLifecycle () {
51
+ return n.getHookLifecycle;
52
+ },
53
+ get getHooksForPhase () {
54
+ return n.getHooksForPhase;
55
+ },
56
+ get loadHookScript () {
57
+ return i.loadHookScript;
58
+ },
59
+ get loadHookScriptAsync () {
60
+ return i.loadHookScriptAsync;
61
+ },
62
+ get loadHooksConfig () {
63
+ return i.loadHooksConfig;
64
+ },
65
+ get runHook () {
66
+ return n.runHook;
67
+ },
68
+ get runHookChain () {
69
+ return n.runHookChain;
70
+ },
71
+ get runHookSync () {
72
+ return n.runHookSync;
73
+ },
74
+ get validateHookConfig () {
75
+ return n.validateHookConfig;
76
+ }
9
77
  };
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.executeSingleHookSync = exports.executeSingleHookAsync = exports.executeHookFunction = exports.loadHookScriptAsync = exports.loadHookScript = exports.loadHooksConfig = exports.getDefaultHooksPath = exports.default = exports.HOOK_LIFECYCLE = exports.createHookConfig = exports.validateHookConfig = exports.getHooksForPhase = exports.getHookLifecycle = exports.runHookChain = exports.runHookSync = exports.runHook = void 0;
12
- var index_1 = require("./hook-runner/index");
13
- Object.defineProperty(exports, "runHook", { enumerable: true, get: function () { return index_1.runHook; } });
14
- Object.defineProperty(exports, "runHookSync", { enumerable: true, get: function () { return index_1.runHookSync; } });
15
- Object.defineProperty(exports, "runHookChain", { enumerable: true, get: function () { return index_1.runHookChain; } });
16
- Object.defineProperty(exports, "getHookLifecycle", { enumerable: true, get: function () { return index_1.getHookLifecycle; } });
17
- Object.defineProperty(exports, "getHooksForPhase", { enumerable: true, get: function () { return index_1.getHooksForPhase; } });
18
- Object.defineProperty(exports, "validateHookConfig", { enumerable: true, get: function () { return index_1.validateHookConfig; } });
19
- Object.defineProperty(exports, "createHookConfig", { enumerable: true, get: function () { return index_1.createHookConfig; } });
20
- Object.defineProperty(exports, "HOOK_LIFECYCLE", { enumerable: true, get: function () { return index_1.HOOK_LIFECYCLE; } });
21
- Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(index_1).default; } });
22
- var loader_1 = require("./hook-runner/loader");
23
- Object.defineProperty(exports, "getDefaultHooksPath", { enumerable: true, get: function () { return loader_1.getDefaultHooksPath; } });
24
- Object.defineProperty(exports, "loadHooksConfig", { enumerable: true, get: function () { return loader_1.loadHooksConfig; } });
25
- Object.defineProperty(exports, "loadHookScript", { enumerable: true, get: function () { return loader_1.loadHookScript; } });
26
- Object.defineProperty(exports, "loadHookScriptAsync", { enumerable: true, get: function () { return loader_1.loadHookScriptAsync; } });
27
- var executor_1 = require("./hook-runner/executor");
28
- Object.defineProperty(exports, "executeHookFunction", { enumerable: true, get: function () { return executor_1.executeHookFunction; } });
29
- Object.defineProperty(exports, "executeSingleHookAsync", { enumerable: true, get: function () { return executor_1.executeSingleHookAsync; } });
30
- Object.defineProperty(exports, "executeSingleHookSync", { enumerable: true, get: function () { return executor_1.executeSingleHookSync; } });
78
+ for(var r in t)Object.defineProperty(o, r, {
79
+ enumerable: !0,
80
+ get: Object.getOwnPropertyDescriptor(t, r).get
81
+ });
82
+ let n = /*#__PURE__*/ function(o) {
83
+ var t, r, n;
84
+ if (o && o.__esModule) return o;
85
+ if (null === o || "object" != typeof o && "function" != typeof o) return {
86
+ default: o
87
+ };
88
+ if ((t = e(void 0)) && t.has(o)) return t.get(o);
89
+ for(var u in r = {
90
+ __proto__: null
91
+ }, n = Object.defineProperty && Object.getOwnPropertyDescriptor, o)if ("default" !== u && Object.prototype.hasOwnProperty.call(o, u)) {
92
+ var i = n ? Object.getOwnPropertyDescriptor(o, u) : null;
93
+ i && (i.get || i.set) ? Object.defineProperty(r, u, i) : r[u] = o[u];
94
+ }
95
+ return r.default = o, t && t.set(o, r), r;
96
+ }(require("./hook-runner/index")), u = require("./hook-runner/types"), i = require("./hook-runner/loader"), c = require("./hook-runner/executor");
@@ -1,203 +1,137 @@
1
- "use strict";
2
- /**
3
- * hooks/phase-complete-detector.ts
4
- * Detect phase completion and update state
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
1
+ let e, t, r, o, s;
2
+ function n(e) {
3
+ return "function" != typeof WeakMap ? null : (n = function(e) {
4
+ return new WeakMap();
5
+ })(e);
6
+ }
7
+ function a(e, t) {
8
+ var r, o, s;
9
+ if (!t && e && e.__esModule) return e;
10
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
11
+ default: e
37
12
  };
38
- })();
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.updateTaskJsonPhaseStatus = updateTaskJsonPhaseStatus;
41
- exports.detectPhaseCompletion = detectPhaseCompletion;
42
- const fs = __importStar(require("fs"));
43
- const path = __importStar(require("path"));
44
- const config_1 = require("../lib/config");
45
- const state_1 = require("../lib/state");
46
- const archive_1 = require("../lib/archive");
47
- const phase_gate_validator_1 = require("./phase-gate-validator");
48
- const sync_task_to_openspec_1 = require("../spec/sync-task-to-openspec");
49
- /**
50
- * Update task JSON phase status with error handling
51
- */
52
- function updateTaskJsonPhaseStatus(taskPath, phaseName, status) {
53
- if (!fs.existsSync(taskPath)) {
54
- console.warn(`[PHASE-DETECTOR] Task file not found: ${taskPath}`);
55
- return false;
56
- }
57
- try {
58
- const content = fs.readFileSync(taskPath, 'utf8');
59
- const taskJson = JSON.parse(content);
60
- taskJson.status = status;
61
- fs.writeFileSync(taskPath, JSON.stringify(taskJson, null, 2), 'utf8');
62
- console.log(`[PHASE-DETECTOR] Updated task JSON: ${phaseName} phase -> ${status}`);
63
- return true;
64
- }
65
- catch (e) {
66
- console.error(`[PHASE-DETECTOR] Error updating task JSON: ${e.message}`);
67
- return false;
68
- }
13
+ if ((r = n(t)) && r.has(e)) return r.get(e);
14
+ for(var a in o = {
15
+ __proto__: null
16
+ }, s = Object.defineProperty && Object.getOwnPropertyDescriptor, e)if ("default" !== a && Object.prototype.hasOwnProperty.call(e, a)) {
17
+ var i = s ? Object.getOwnPropertyDescriptor(e, a) : null;
18
+ i && (i.get || i.set) ? Object.defineProperty(o, a, i) : o[a] = e[a];
19
+ }
20
+ return o.default = e, r && r.set(e, o), o;
69
21
  }
70
- /**
71
- * Log gate blocked warnings with type-safe access
72
- */
73
- function logGateBlockedWarnings(gateResult) {
74
- if (!gateResult) {
75
- return;
76
- }
77
- console.warn(`[PHASE-DETECTOR] Phase blocked: ${gateResult.reason}`);
78
- const missingValidations = Array.isArray(gateResult.missingValidations)
79
- ? gateResult.missingValidations
80
- : [];
81
- if (missingValidations.length > 0) {
82
- console.warn(`[PHASE-DETECTOR] Missing: ${missingValidations.join(', ')}`);
22
+ function i(e, t, r) {
23
+ if (!d.existsSync(e)) return console.warn(`[PHASE-DETECTOR] Task file not found: ${e}`), !1;
24
+ try {
25
+ let o = d.readFileSync(e, 'utf8'), s = JSON.parse(o);
26
+ return s.status = r, d.writeFileSync(e, JSON.stringify(s, null, 2), 'utf8'), console.log(`[PHASE-DETECTOR] Updated task JSON: ${t} phase -> ${r}`), !0;
27
+ } catch (e) {
28
+ return console.error(`[PHASE-DETECTOR] Error updating task JSON: ${e.message}`), !1;
83
29
  }
84
30
  }
85
- /**
86
- * Detect phase completion
87
- * @param options - Options
88
- * @returns Detection result
89
- */
90
- function detectPhaseCompletion(options) {
91
- const { filePath, config, state } = options;
92
- if (!filePath.includes('.harness/')) {
93
- return { detected: false, reason: 'not-harness-file' };
94
- }
95
- const taskId = state.currentTask;
96
- if (!taskId) {
97
- return { detected: false, reason: 'no-current-task' };
98
- }
99
- const gateResult = (0, phase_gate_validator_1.assessTransitionGate)({ taskId, filePath, state, config });
100
- if (gateResult.skipped) {
101
- return { detected: false, reason: 'gate-skipped' };
102
- }
103
- if (!gateResult.allowed) {
104
- // Update state with blocked gate info
105
- (0, state_1.updateState)({
106
- lastGateBlockedAt: new Date().toISOString(),
107
- lastGateBlockedReason: gateResult.reason,
108
- lastGateBlockedPhase: gateResult.phaseCompleted || null,
109
- lastMissingValidations: gateResult.missingValidations || [],
110
- }, config);
111
- // Archive task state
112
- (0, archive_1.archiveTaskState)({
113
- cwd: config.projectRoot,
114
- taskId,
115
- eventType: 'gate_blocked',
116
- status: state.status || 'running',
117
- phase: state.currentPhase || undefined,
118
- phaseCompleted: gateResult.phaseCompleted || state.phaseCompleted || undefined,
119
- reviewConclusion: state.reviewConclusion || undefined,
120
- reason: gateResult.reason,
121
- });
122
- // Sync to Spec
123
- (0, sync_task_to_openspec_1.syncTaskToSpec)({ cwd: config.projectRoot, taskId });
124
- return {
125
- detected: true,
126
- blocked: true,
127
- gateResult,
128
- };
129
- }
130
- // Phase transition allowed
131
- const newPhase = gateResult.nextPhase;
132
- const phaseCompleted = gateResult.phaseCompleted;
133
- // Update state
134
- (0, state_1.updateState)({
135
- currentPhase: newPhase,
136
- phaseCompleted,
137
- reviewConclusion: gateResult.reviewConclusion || state.reviewConclusion || null,
31
+ function l(e) {
32
+ let { filePath: t, config: r, state: o } = e;
33
+ if (!t.includes('.harness/')) return {
34
+ detected: !1,
35
+ reason: 'not-harness-file'
36
+ };
37
+ let s = o.currentTask;
38
+ if (!s) return {
39
+ detected: !1,
40
+ reason: 'no-current-task'
41
+ };
42
+ let n = (0, k.assessTransitionGate)({
43
+ taskId: s,
44
+ filePath: t,
45
+ state: o,
46
+ config: r
47
+ });
48
+ if (n.skipped) return {
49
+ detected: !1,
50
+ reason: 'gate-skipped'
51
+ };
52
+ if (!n.allowed) return (0, h.updateState)({
53
+ lastGateBlockedAt: new Date().toISOString(),
54
+ lastGateBlockedReason: n.reason,
55
+ lastGateBlockedPhase: n.phaseCompleted || null,
56
+ lastMissingValidations: n.missingValidations || []
57
+ }, r), (0, v.archiveTaskState)({
58
+ cwd: r.projectRoot,
59
+ taskId: s,
60
+ eventType: 'gate_blocked',
61
+ status: o.status || 'running',
62
+ phase: o.currentPhase || void 0,
63
+ phaseCompleted: n.phaseCompleted || o.phaseCompleted || void 0,
64
+ reviewConclusion: o.reviewConclusion || void 0,
65
+ reason: n.reason
66
+ }), (0, P.syncTaskToSpec)({
67
+ cwd: r.projectRoot,
68
+ taskId: s
69
+ }), {
70
+ detected: !0,
71
+ blocked: !0,
72
+ gateResult: n
73
+ };
74
+ let a = n.nextPhase, l = n.phaseCompleted;
75
+ (0, h.updateState)({
76
+ currentPhase: a,
77
+ phaseCompleted: l,
78
+ reviewConclusion: n.reviewConclusion || o.reviewConclusion || null,
138
79
  lastGateBlockedAt: null,
139
80
  lastGateBlockedReason: null,
140
81
  lastGateBlockedPhase: null,
141
- lastMissingValidations: [],
142
- }, config);
143
- // Update task JSON phase statuses
144
- const taskPath = path.resolve(config.tasksDirAbs, `${taskId}.json`);
145
- if (phaseCompleted) {
146
- updateTaskJsonPhaseStatus(taskPath, phaseCompleted, 'completed');
147
- }
148
- if (newPhase && newPhase !== 'merge') {
149
- updateTaskJsonPhaseStatus(taskPath, newPhase, 'in_progress');
150
- }
151
- // Archive task state
152
- (0, archive_1.archiveTaskState)({
153
- cwd: config.projectRoot,
154
- taskId,
82
+ lastMissingValidations: []
83
+ }, r);
84
+ let c = f.resolve(r.tasksDirAbs, `${s}.json`);
85
+ return l && i(c, l, 'completed'), a && 'merge' !== a && i(c, a, 'in_progress'), (0, v.archiveTaskState)({
86
+ cwd: r.projectRoot,
87
+ taskId: s,
155
88
  eventType: 'phase_transition',
156
- status: state.status || 'running',
157
- phase: newPhase || undefined,
158
- phaseCompleted: phaseCompleted || undefined,
159
- reviewConclusion: gateResult.reviewConclusion || undefined,
160
- });
161
- // Sync to Spec
162
- (0, sync_task_to_openspec_1.syncTaskToSpec)({ cwd: config.projectRoot, taskId });
163
- return {
164
- detected: true,
165
- blocked: false,
166
- phaseCompleted,
167
- newPhase,
168
- gateResult,
89
+ status: o.status || 'running',
90
+ phase: a || void 0,
91
+ phaseCompleted: l || void 0,
92
+ reviewConclusion: n.reviewConclusion || void 0
93
+ }), (0, P.syncTaskToSpec)({
94
+ cwd: r.projectRoot,
95
+ taskId: s
96
+ }), {
97
+ detected: !0,
98
+ blocked: !1,
99
+ phaseCompleted: l,
100
+ newPhase: a,
101
+ gateResult: n
169
102
  };
170
103
  }
171
- /**
172
- * Main entry point for hook usage
173
- */
174
- function main() {
175
- const input = JSON.parse(process.argv[2] || '{}');
176
- const filePath = input.tool_input?.file_path || input.tool_input?.path || '';
177
- const config = (0, config_1.loadConfig)();
178
- const state = (0, state_1.loadState)(config);
179
- if (!state?.currentTask) {
180
- process.exit(0);
181
- }
182
- const result = detectPhaseCompletion({ filePath, config, state });
183
- if (!result.detected || result.reason) {
184
- process.exit(0);
185
- }
186
- if (result.blocked) {
187
- logGateBlockedWarnings(result.gateResult);
188
- }
189
- else {
190
- console.log(`[PHASE-DETECTOR] Phase transition: ${result.phaseCompleted} -> ${result.newPhase}`);
191
- if (result.gateResult?.reviewConclusion) {
192
- console.log(`[PHASE-DETECTOR] Review conclusion: ${result.gateResult.reviewConclusion}`);
193
- }
104
+ "use strict";
105
+ Object.defineProperty(exports, "__esModule", {
106
+ value: !0
107
+ });
108
+ var c = exports, u = {
109
+ get default () {
110
+ return T;
111
+ },
112
+ get detectPhaseCompletion () {
113
+ return l;
114
+ },
115
+ get updateTaskJsonPhaseStatus () {
116
+ return i;
194
117
  }
195
- process.exit(0);
196
- }
197
- if (require.main === module) {
198
- main();
199
- }
200
- exports.default = {
201
- detectPhaseCompletion,
202
- updateTaskJsonPhaseStatus,
118
+ };
119
+ for(var p in u)Object.defineProperty(c, p, {
120
+ enumerable: !0,
121
+ get: Object.getOwnPropertyDescriptor(u, p).get
122
+ });
123
+ let d = /*#__PURE__*/ a(require("fs")), f = /*#__PURE__*/ a(require("path")), g = require("../lib/config"), h = require("../lib/state"), v = require("../lib/archive"), k = require("./phase-gate-validator"), P = require("../spec/sync-task-to-openspec");
124
+ require.main === module && (e = JSON.parse(process.argv[2] || '{}'), t = e.tool_input?.file_path || e.tool_input?.path || '', r = (0, g.loadConfig)(), o = (0, h.loadState)(r), o?.currentTask || process.exit(0), (!(s = l({
125
+ filePath: t,
126
+ config: r,
127
+ state: o
128
+ })).detected || s.reason) && process.exit(0), s.blocked ? function(e) {
129
+ if (!e) return;
130
+ console.warn(`[PHASE-DETECTOR] Phase blocked: ${e.reason}`);
131
+ let t = Array.isArray(e.missingValidations) ? e.missingValidations : [];
132
+ t.length > 0 && console.warn(`[PHASE-DETECTOR] Missing: ${t.join(', ')}`);
133
+ }(s.gateResult) : (console.log(`[PHASE-DETECTOR] Phase transition: ${s.phaseCompleted} -> ${s.newPhase}`), s.gateResult?.reviewConclusion && console.log(`[PHASE-DETECTOR] Review conclusion: ${s.gateResult.reviewConclusion}`)), process.exit(0));
134
+ let T = {
135
+ detectPhaseCompletion: l,
136
+ updateTaskJsonPhaseStatus: i
203
137
  };