@zhixuan92/multi-model-agent-core 4.7.13 → 4.7.14
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/README.md +13 -13
- package/dist/events/task-envelope.d.ts +6 -0
- package/dist/events/task-envelope.d.ts.map +1 -1
- package/dist/events/task-envelope.js +4 -0
- package/dist/events/task-envelope.js.map +1 -1
- package/dist/events/wire-schema.d.ts +10 -10
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/annotate-parser.d.ts.map +1 -1
- package/dist/lifecycle/annotate-parser.js +1 -2
- package/dist/lifecycle/annotate-parser.js.map +1 -1
- package/dist/lifecycle/annotate-prompts.d.ts.map +1 -1
- package/dist/lifecycle/annotate-prompts.js +6 -3
- package/dist/lifecycle/annotate-prompts.js.map +1 -1
- package/dist/lifecycle/auto-commit.d.ts +0 -15
- package/dist/lifecycle/auto-commit.d.ts.map +1 -1
- package/dist/lifecycle/auto-commit.js +0 -37
- package/dist/lifecycle/auto-commit.js.map +1 -1
- package/dist/lifecycle/derive-completion.d.ts +0 -1
- package/dist/lifecycle/derive-completion.d.ts.map +1 -1
- package/dist/lifecycle/derive-completion.js +3 -4
- package/dist/lifecycle/derive-completion.js.map +1 -1
- package/dist/lifecycle/executor-output-types.d.ts +2 -0
- package/dist/lifecycle/executor-output-types.d.ts.map +1 -1
- package/dist/lifecycle/handlers/annotate-stage.d.ts.map +1 -1
- package/dist/lifecycle/handlers/annotate-stage.js +15 -6
- package/dist/lifecycle/handlers/annotate-stage.js.map +1 -1
- package/dist/lifecycle/handlers/enrich-runtime-result.d.ts.map +1 -1
- package/dist/lifecycle/handlers/enrich-runtime-result.js +7 -15
- package/dist/lifecycle/handlers/enrich-runtime-result.js.map +1 -1
- package/dist/lifecycle/handlers/git-commit-handler.d.ts.map +1 -1
- package/dist/lifecycle/handlers/git-commit-handler.js +100 -70
- package/dist/lifecycle/handlers/git-commit-handler.js.map +1 -1
- package/dist/lifecycle/handlers/implement-stage.d.ts.map +1 -1
- package/dist/lifecycle/handlers/implement-stage.js +6 -1
- package/dist/lifecycle/handlers/implement-stage.js.map +1 -1
- package/dist/lifecycle/handlers/rework-stage.d.ts.map +1 -1
- package/dist/lifecycle/handlers/rework-stage.js +3 -2
- package/dist/lifecycle/handlers/rework-stage.js.map +1 -1
- package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/terminal-handlers.js +16 -90
- package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
- package/dist/lifecycle/lifecycle-context.d.ts +1 -40
- package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
- package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
- package/dist/lifecycle/lifecycle-driver.js +1 -32
- package/dist/lifecycle/lifecycle-driver.js.map +1 -1
- package/dist/lifecycle/real-diff.d.ts.map +1 -1
- package/dist/lifecycle/real-diff.js +4 -1
- package/dist/lifecycle/real-diff.js.map +1 -1
- package/dist/lifecycle/repo-commit-lock.d.ts +20 -0
- package/dist/lifecycle/repo-commit-lock.d.ts.map +1 -0
- package/dist/lifecycle/repo-commit-lock.js +40 -0
- package/dist/lifecycle/repo-commit-lock.js.map +1 -0
- package/dist/lifecycle/stage-io.d.ts +1 -0
- package/dist/lifecycle/stage-io.d.ts.map +1 -1
- package/dist/lifecycle/stage-io.js.map +1 -1
- package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
- package/dist/lifecycle/stage-plan-builder.js +10 -6
- package/dist/lifecycle/stage-plan-builder.js.map +1 -1
- package/dist/lifecycle/stage-plan-types.d.ts +17 -13
- package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
- package/dist/lifecycle/stage-plan-types.js +27 -1
- package/dist/lifecycle/stage-plan-types.js.map +1 -1
- package/dist/lifecycle/stage-progression.d.ts.map +1 -1
- package/dist/lifecycle/stage-progression.js +0 -1
- package/dist/lifecycle/stage-progression.js.map +1 -1
- package/dist/lifecycle/task-executor.d.ts +0 -23
- package/dist/lifecycle/task-executor.d.ts.map +1 -1
- package/dist/lifecycle/task-executor.js +26 -67
- package/dist/lifecycle/task-executor.js.map +1 -1
- package/dist/lifecycle/task-runner.d.ts +8 -52
- package/dist/lifecycle/task-runner.d.ts.map +1 -1
- package/dist/lifecycle/task-runner.js +7 -68
- package/dist/lifecycle/task-runner.js.map +1 -1
- package/dist/lifecycle/tool-config-types.d.ts +6 -9
- package/dist/lifecycle/tool-config-types.d.ts.map +1 -1
- package/dist/providers/runner-types.d.ts +0 -5
- package/dist/providers/runner-types.d.ts.map +1 -1
- package/dist/stores/batch-registry.d.ts +0 -18
- package/dist/stores/batch-registry.d.ts.map +1 -1
- package/dist/stores/batch-registry.js +0 -12
- package/dist/stores/batch-registry.js.map +1 -1
- package/dist/tools/audit/tool-config.d.ts.map +1 -1
- package/dist/tools/audit/tool-config.js +2 -0
- package/dist/tools/audit/tool-config.js.map +1 -1
- package/dist/tools/debug/tool-config.d.ts.map +1 -1
- package/dist/tools/debug/tool-config.js +2 -1
- package/dist/tools/debug/tool-config.js.map +1 -1
- package/dist/tools/delegate/schema.d.ts +4 -0
- package/dist/tools/delegate/schema.d.ts.map +1 -1
- package/dist/tools/delegate/schema.js +2 -1
- package/dist/tools/delegate/schema.js.map +1 -1
- package/dist/tools/delegate/tool-config.d.ts.map +1 -1
- package/dist/tools/delegate/tool-config.js +2 -1
- package/dist/tools/delegate/tool-config.js.map +1 -1
- package/dist/tools/execute-plan/tool-config.js +2 -2
- package/dist/tools/execute-plan/tool-config.js.map +1 -1
- package/dist/tools/investigate/tool-config.d.ts.map +1 -1
- package/dist/tools/investigate/tool-config.js +2 -0
- package/dist/tools/investigate/tool-config.js.map +1 -1
- package/dist/tools/register-context-block/tool-config.d.ts.map +1 -1
- package/dist/tools/register-context-block/tool-config.js +2 -0
- package/dist/tools/register-context-block/tool-config.js.map +1 -1
- package/dist/tools/research/tool-config.d.ts.map +1 -1
- package/dist/tools/research/tool-config.js +2 -0
- package/dist/tools/research/tool-config.js.map +1 -1
- package/dist/tools/retry/tool-config.d.ts.map +1 -1
- package/dist/tools/retry/tool-config.js +2 -1
- package/dist/tools/retry/tool-config.js.map +1 -1
- package/dist/tools/review/tool-config.d.ts.map +1 -1
- package/dist/tools/review/tool-config.js +2 -1
- package/dist/tools/review/tool-config.js.map +1 -1
- package/dist/types/enums.d.ts +1 -1
- package/dist/types/task-spec.d.ts +0 -1
- package/dist/types/task-spec.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/lifecycle/fallback-report.d.ts +0 -5
- package/dist/lifecycle/fallback-report.d.ts.map +0 -1
- package/dist/lifecycle/fallback-report.js +0 -33
- package/dist/lifecycle/fallback-report.js.map +0 -1
- package/dist/lifecycle/handlers/commit-stage.d.ts +0 -16
- package/dist/lifecycle/handlers/commit-stage.d.ts.map +0 -1
- package/dist/lifecycle/handlers/commit-stage.js +0 -52
- package/dist/lifecycle/handlers/commit-stage.js.map +0 -1
- package/dist/lifecycle/repo-hygiene.d.ts +0 -14
- package/dist/lifecycle/repo-hygiene.d.ts.map +0 -1
- package/dist/lifecycle/repo-hygiene.js +0 -74
- package/dist/lifecycle/repo-hygiene.js.map +0 -1
- package/dist/lifecycle/task-completion-summary.d.ts +0 -23
- package/dist/lifecycle/task-completion-summary.d.ts.map +0 -1
- package/dist/lifecycle/task-completion-summary.js +0 -83
- package/dist/lifecycle/task-completion-summary.js.map +0 -1
- package/dist/lifecycle/task-grouping.d.ts +0 -19
- package/dist/lifecycle/task-grouping.d.ts.map +0 -1
- package/dist/lifecycle/task-grouping.js +0 -48
- package/dist/lifecycle/task-grouping.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-spec.d.ts","sourceRoot":"","sources":["../../src/types/task-spec.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AACxD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,oBAAoB,GAAG,eAAe,GAAG,SAAS,GAAG,oBAAoB,GAAG,QAAQ,CAAC;AAEzH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;IAC3D,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;CAC7D;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,CAAA;IAC7D,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,gBAAgB,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAChG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,
|
|
1
|
+
{"version":3,"file":"task-spec.d.ts","sourceRoot":"","sources":["../../src/types/task-spec.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AACxD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,oBAAoB,GAAG,eAAe,GAAG,SAAS,GAAG,oBAAoB,GAAG,QAAQ,CAAC;AAEzH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;IAC3D,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;CAC7D;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,CAAA;IAC7D,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,gBAAgB,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAChG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE;QACT,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,qBAAqB,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChE,CAAA;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhixuan92/multi-model-agent-core",
|
|
3
|
-
"version": "4.7.
|
|
3
|
+
"version": "4.7.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Core library for multi-model-agent: provider runners (Claude, Codex, OpenAI-compatible), routing logic, config schema, and tool/sandbox primitives.",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { RuntimeRunResult } from '../types.js';
|
|
2
|
-
import type { ParsedStructuredReport } from '../reporting/structured-report.js';
|
|
3
|
-
export declare function readImplementerFileContents(filesWritten: string[], cwd: string | undefined): Promise<Record<string, string>>;
|
|
4
|
-
export declare function buildFallbackImplReport(result: RuntimeRunResult): ParsedStructuredReport;
|
|
5
|
-
//# sourceMappingURL=fallback-report.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fallback-report.d.ts","sourceRoot":"","sources":["../../src/lifecycle/fallback-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAIhF,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAejC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,sBAAsB,CAYxF"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { parseStructuredReport } from '../reporting/structured-report.js';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
export async function readImplementerFileContents(filesWritten, cwd) {
|
|
4
|
-
const contents = {};
|
|
5
|
-
const basePath = cwd ?? process.cwd();
|
|
6
|
-
for (const filePath of filesWritten) {
|
|
7
|
-
try {
|
|
8
|
-
const resolved = filePath.startsWith('/') ? filePath : `${basePath}/${filePath}`;
|
|
9
|
-
const content = await fs.readFile(resolved, 'utf-8');
|
|
10
|
-
contents[filePath] = content.length > 50_000
|
|
11
|
-
? content.slice(0, 50_000) + '\n[truncated at 50KB]'
|
|
12
|
-
: content;
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
contents[filePath] = '[file not readable]';
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return contents;
|
|
19
|
-
}
|
|
20
|
-
export function buildFallbackImplReport(result) {
|
|
21
|
-
const parsed = parseStructuredReport(result.output);
|
|
22
|
-
if (parsed.summary) {
|
|
23
|
-
return parsed;
|
|
24
|
-
}
|
|
25
|
-
return {
|
|
26
|
-
summary: result.output.substring(0, 200),
|
|
27
|
-
filesChanged: result.filesWritten.map(f => ({ path: f, summary: 'updated' })),
|
|
28
|
-
deviationsFromBrief: [],
|
|
29
|
-
unresolved: [],
|
|
30
|
-
extraSections: {},
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=fallback-report.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fallback-report.js","sourceRoot":"","sources":["../../src/lifecycle/fallback-report.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,YAAsB,EACtB,GAAuB;IAEvB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACjF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM;gBAC1C,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,uBAAuB;gBACpD,CAAC,CAAC,OAAO,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAwB;IAC9D,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;QACxC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7E,mBAAmB,EAAE,EAAE;QACvB,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { CommitFields } from '../../reporting/structured-report.js';
|
|
2
|
-
export interface CommitStageInput {
|
|
3
|
-
cwd: string;
|
|
4
|
-
filesWritten: string[];
|
|
5
|
-
commit: CommitFields;
|
|
6
|
-
}
|
|
7
|
-
export interface CommitStageResult {
|
|
8
|
-
sha: string;
|
|
9
|
-
subject: string;
|
|
10
|
-
body: string;
|
|
11
|
-
filesChanged: string[];
|
|
12
|
-
authoredAt: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function readbackCommit(sha: string, cwd: string): Promise<CommitStageResult>;
|
|
15
|
-
export declare function runCommitStage(input: CommitStageInput): Promise<CommitStageResult>;
|
|
16
|
-
//# sourceMappingURL=commit-stage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commit-stage.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/commit-stage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAIzE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQzF;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAcxF"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { execFile } from 'node:child_process';
|
|
2
|
-
import { isAbsolute, normalize, relative, sep } from 'node:path';
|
|
3
|
-
import { promisify } from 'node:util';
|
|
4
|
-
import { composeCommitMessage } from '../../lifecycle/auto-commit.js';
|
|
5
|
-
const exec = promisify(execFile);
|
|
6
|
-
function validatePaths(cwd, paths) {
|
|
7
|
-
const out = [];
|
|
8
|
-
for (const p of paths) {
|
|
9
|
-
if (/[\x00-\x1f]/.test(p))
|
|
10
|
-
throw new Error(`commit-stage: path contains control chars: ${JSON.stringify(p)}`);
|
|
11
|
-
let candidate;
|
|
12
|
-
if (isAbsolute(p)) {
|
|
13
|
-
const rel = relative(cwd, normalize(p));
|
|
14
|
-
if (rel === '' || rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) {
|
|
15
|
-
throw new Error(`commit-stage: absolute path outside cwd rejected: ${p}`);
|
|
16
|
-
}
|
|
17
|
-
candidate = rel;
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
const norm = normalize(p);
|
|
21
|
-
const rel = relative(cwd, normalize(`${cwd}/${norm}`));
|
|
22
|
-
if (rel.startsWith('..'))
|
|
23
|
-
throw new Error(`commit-stage: path escapes cwd: ${p}`);
|
|
24
|
-
candidate = norm;
|
|
25
|
-
}
|
|
26
|
-
out.push(candidate);
|
|
27
|
-
}
|
|
28
|
-
return out;
|
|
29
|
-
}
|
|
30
|
-
export async function readbackCommit(sha, cwd) {
|
|
31
|
-
const { stdout: meta } = await exec('git', ['log', '-1', sha, '--format=%H%n%cI%n%s%n%b'], { cwd, windowsHide: true });
|
|
32
|
-
const lines = meta.split('\n');
|
|
33
|
-
const [shaOut, isoCi, subject, ...bodyLines] = lines;
|
|
34
|
-
const { stdout: names } = await exec('git', ['log', '-1', sha, '--name-only', '--format='], { cwd, windowsHide: true });
|
|
35
|
-
const filesChanged = names.split('\n').map(s => s.trim()).filter(Boolean);
|
|
36
|
-
const authoredAt = new Date(isoCi).toISOString();
|
|
37
|
-
return { sha: shaOut, subject, body: bodyLines.join('\n').trimEnd(), filesChanged, authoredAt };
|
|
38
|
-
}
|
|
39
|
-
export async function runCommitStage(input) {
|
|
40
|
-
if (input.filesWritten.length === 0) {
|
|
41
|
-
throw new Error('commit-stage: filesWritten must not be empty (call only when treeDirty)');
|
|
42
|
-
}
|
|
43
|
-
const safePaths = validatePaths(input.cwd, input.filesWritten);
|
|
44
|
-
await exec('git', ['add', '--', ...safePaths], { cwd: input.cwd, windowsHide: true });
|
|
45
|
-
const message = composeCommitMessage(input.commit);
|
|
46
|
-
const [subjectFull, body] = message.split(/\n\n([\s\S]*)/, 2);
|
|
47
|
-
const commitArgs = ['commit', '-q', '-m', subjectFull, ...(body ? ['-m', body] : [])];
|
|
48
|
-
await exec('git', commitArgs, { cwd: input.cwd, windowsHide: true });
|
|
49
|
-
const { stdout: head } = await exec('git', ['rev-parse', 'HEAD'], { cwd: input.cwd, windowsHide: true });
|
|
50
|
-
return readbackCommit(head.trim(), input.cwd);
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=commit-stage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commit-stage.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/commit-stage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface DirtyFilesOptions {
|
|
2
|
-
timeoutMs?: number;
|
|
3
|
-
}
|
|
4
|
-
/**
|
|
5
|
-
* Returns the list of porcelain-reported dirty file paths in cwd, or []
|
|
6
|
-
* on any failure (timeout, spawn error, non-git repo). Never throws.
|
|
7
|
-
*/
|
|
8
|
-
export declare function getDirtyFiles(cwd: string, opts?: DirtyFilesOptions): Promise<string[]>;
|
|
9
|
-
/**
|
|
10
|
-
* Builds the [REPO HYGIENE] advisory string. Sorts files lexicographically;
|
|
11
|
-
* lists the first 20 and appends ", … (+N more)" when N > 0.
|
|
12
|
-
*/
|
|
13
|
-
export declare function formatHygieneAdvisory(files: string[]): string;
|
|
14
|
-
//# sourceMappingURL=repo-hygiene.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repo-hygiene.d.ts","sourceRoot":"","sources":["../../src/lifecycle/repo-hygiene.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAAG,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;AAEzD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CAyCnB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAW7D"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
/**
|
|
3
|
-
* Returns the list of porcelain-reported dirty file paths in cwd, or []
|
|
4
|
-
* on any failure (timeout, spawn error, non-git repo). Never throws.
|
|
5
|
-
*/
|
|
6
|
-
export async function getDirtyFiles(cwd, opts = {}) {
|
|
7
|
-
const timeoutMs = opts.timeoutMs ?? 5000;
|
|
8
|
-
return new Promise((resolve) => {
|
|
9
|
-
let settled = false;
|
|
10
|
-
const done = (v) => { if (!settled) {
|
|
11
|
-
settled = true;
|
|
12
|
-
resolve(v);
|
|
13
|
-
} };
|
|
14
|
-
let child;
|
|
15
|
-
try {
|
|
16
|
-
child = spawn('git', ['-C', cwd, 'status', '--porcelain'], {
|
|
17
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
18
|
-
// windowsHide: suppress the console window Windows opens per spawned
|
|
19
|
-
// console binary when the daemon has no attached console. No-op on POSIX.
|
|
20
|
-
windowsHide: true,
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
done([]);
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
let out = '';
|
|
28
|
-
child.stdout?.on('data', (b) => { out += b.toString('utf8'); });
|
|
29
|
-
child.stderr?.on('data', () => { });
|
|
30
|
-
child.on('error', () => done([]));
|
|
31
|
-
child.on('exit', (code) => {
|
|
32
|
-
if (code !== 0) {
|
|
33
|
-
done([]);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const files = out.split('\n')
|
|
37
|
-
.filter(Boolean)
|
|
38
|
-
.map((l) => {
|
|
39
|
-
const path = l.substring(3);
|
|
40
|
-
if (path.startsWith('"') && path.endsWith('"')) {
|
|
41
|
-
try {
|
|
42
|
-
return JSON.parse(path);
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
return path;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return path;
|
|
49
|
-
})
|
|
50
|
-
.filter(Boolean);
|
|
51
|
-
done(files);
|
|
52
|
-
});
|
|
53
|
-
const t = setTimeout(() => { try {
|
|
54
|
-
child.kill('SIGKILL');
|
|
55
|
-
}
|
|
56
|
-
catch { } done([]); }, timeoutMs);
|
|
57
|
-
child.on('exit', () => clearTimeout(t));
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Builds the [REPO HYGIENE] advisory string. Sorts files lexicographically;
|
|
62
|
-
* lists the first 20 and appends ", … (+N more)" when N > 0.
|
|
63
|
-
*/
|
|
64
|
-
export function formatHygieneAdvisory(files) {
|
|
65
|
-
const sorted = [...files].sort();
|
|
66
|
-
const shown = sorted.slice(0, 20);
|
|
67
|
-
const remaining = sorted.length - shown.length;
|
|
68
|
-
const list = shown.join(', ') + (remaining > 0 ? `, … (+${remaining} more)` : '');
|
|
69
|
-
return ('[REPO HYGIENE] The previous task in this serial group left uncommitted ' +
|
|
70
|
-
`changes in the following files: ${list}. Review these before editing ` +
|
|
71
|
-
'the same paths; your `getRealFilesChanged` will attribute them to your ' +
|
|
72
|
-
'task if you commit.\n\n');
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=repo-hygiene.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repo-hygiene.js","sourceRoot":"","sources":["../../src/lifecycle/repo-hygiene.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { RuntimeRunResult } from '../types.js';
|
|
2
|
-
export interface TaskCompletionSummary {
|
|
3
|
-
batchId: string;
|
|
4
|
-
taskIndexZero: number;
|
|
5
|
-
totalTasks: number;
|
|
6
|
-
terminalStatus: string;
|
|
7
|
-
totalDurationMs: number;
|
|
8
|
-
totalCostUSD: number | null;
|
|
9
|
-
totalInputTokens: number | null;
|
|
10
|
-
totalOutputTokens: number | null;
|
|
11
|
-
turns: number;
|
|
12
|
-
filesWrittenCount: number;
|
|
13
|
-
specReviewVerdict: string;
|
|
14
|
-
qualityReviewVerdict: string;
|
|
15
|
-
}
|
|
16
|
-
export declare function computeTaskCompletionSummary(args: {
|
|
17
|
-
runResult: RuntimeRunResult;
|
|
18
|
-
taskIndexZero: number;
|
|
19
|
-
totalTasks: number;
|
|
20
|
-
batchId: string;
|
|
21
|
-
}): TaskCompletionSummary;
|
|
22
|
-
export declare function formatTaskDoneLine(s: TaskCompletionSummary): string;
|
|
23
|
-
//# sourceMappingURL=task-completion-summary.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-completion-summary.d.ts","sourceRoot":"","sources":["../../src/lifecycle/task-completion-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AASpD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAwBD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,SAAS,EAAE,gBAAgB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,qBAAqB,CA+CxB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAMnE"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { clampStageCost, clampTaskCost, clampInputTokens, clampOutputTokens, clampDurationMsTotal, } from '../events/to-wire-record.js';
|
|
2
|
-
// Derive each total INDEPENDENTLY from stage stats, mirroring event-builder
|
|
3
|
-
// exactly. Top-level totals must NEVER depend on runResult.usage — that field
|
|
4
|
-
// only carries the last implementer attempt and would lose reviewer + earlier
|
|
5
|
-
// rework cost (the same Gap 2 bug we already fixed in event-builder).
|
|
6
|
-
//
|
|
7
|
-
// Clamping is identical to event-builder via shared helpers from
|
|
8
|
-
// packages/core/src/telemetry/clamp.ts — guarantees the summary line and
|
|
9
|
-
// the V3 event never disagree on cost/token/duration values.
|
|
10
|
-
function deriveTerminalStatus(rr) {
|
|
11
|
-
const tr = rr.terminationReason;
|
|
12
|
-
if (!tr || typeof tr !== 'object')
|
|
13
|
-
return 'incomplete';
|
|
14
|
-
switch (tr.cause) {
|
|
15
|
-
case 'finished': return 'ok';
|
|
16
|
-
case 'incomplete':
|
|
17
|
-
case 'degenerate_exhausted': return 'incomplete';
|
|
18
|
-
case 'timeout': return 'timeout';
|
|
19
|
-
case 'brief_too_vague': return 'brief_too_vague';
|
|
20
|
-
case 'error': return 'error';
|
|
21
|
-
default: return 'incomplete';
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
export function computeTaskCompletionSummary(args) {
|
|
25
|
-
const { runResult, taskIndexZero, totalTasks, batchId } = args;
|
|
26
|
-
const stageEntries = Object.values(runResult.stageStats ?? {}).filter((s) => s.entered);
|
|
27
|
-
// Sum across entered stages with per-stage clamping, then apply
|
|
28
|
-
// top-level clamping — exactly mirroring the two-level clamping in
|
|
29
|
-
// event-builder.ts (extractStageData + buildTaskCompletedEvent).
|
|
30
|
-
const sumFinite = (key, clampStage, clampTotal) => {
|
|
31
|
-
let total = 0;
|
|
32
|
-
let anyFinite = false;
|
|
33
|
-
for (const s of stageEntries) {
|
|
34
|
-
const v = s[key];
|
|
35
|
-
if (typeof v === 'number' && Number.isFinite(v)) {
|
|
36
|
-
total += clampStage(v);
|
|
37
|
-
anyFinite = true;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return anyFinite ? clampTotal(total) : null;
|
|
41
|
-
};
|
|
42
|
-
const totalDurationMs = clampDurationMsTotal(stageEntries.reduce((s, st) => {
|
|
43
|
-
const v = st['durationMs'];
|
|
44
|
-
return s + (typeof v === 'number' && Number.isFinite(v) ? v : 0);
|
|
45
|
-
}, 0));
|
|
46
|
-
return {
|
|
47
|
-
batchId,
|
|
48
|
-
taskIndexZero,
|
|
49
|
-
totalTasks,
|
|
50
|
-
terminalStatus: deriveTerminalStatus(runResult),
|
|
51
|
-
totalDurationMs,
|
|
52
|
-
totalCostUSD: sumFinite('costUSD', clampStageCost, clampTaskCost),
|
|
53
|
-
totalInputTokens: sumFinite('inputTokens', clampInputTokens, clampInputTokens),
|
|
54
|
-
totalOutputTokens: sumFinite('outputTokens', clampOutputTokens, clampOutputTokens),
|
|
55
|
-
turns: runResult.turns ?? 0,
|
|
56
|
-
filesWrittenCount: runResult.filesWritten?.length ?? 0,
|
|
57
|
-
specReviewVerdict: runResult.specReviewStatus ?? 'not_applicable',
|
|
58
|
-
qualityReviewVerdict: runResult.qualityReviewStatus ?? 'not_applicable',
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
export function formatTaskDoneLine(s) {
|
|
62
|
-
const idx = `task=${s.taskIndexZero + 1}/${s.totalTasks} taskIndex=${s.taskIndexZero}`;
|
|
63
|
-
const dur = formatDur(s.totalDurationMs);
|
|
64
|
-
const tokens = formatTokens(s.totalInputTokens, s.totalOutputTokens);
|
|
65
|
-
const cost = s.totalCostUSD === null ? '$unknown' : `$${s.totalCostUSD.toFixed(2)}`;
|
|
66
|
-
return `[mmagent] batch=${s.batchId.slice(0, 8)} ${idx} done: ${s.terminalStatus} in ${dur}, ${tokens}, ${cost}, ${s.turns} turns, ${s.filesWrittenCount} file(s) written, reviews [spec=${s.specReviewVerdict}, quality=${s.qualityReviewVerdict}]`;
|
|
67
|
-
}
|
|
68
|
-
function formatDur(ms) {
|
|
69
|
-
if (ms < 60_000)
|
|
70
|
-
return `${Math.round(ms / 1000)}s`;
|
|
71
|
-
const m = Math.floor(ms / 60_000);
|
|
72
|
-
const sec = Math.round((ms % 60_000) / 1000);
|
|
73
|
-
return `${m}m ${sec}s`;
|
|
74
|
-
}
|
|
75
|
-
function formatTokens(input, output) {
|
|
76
|
-
if (input === null && output === null)
|
|
77
|
-
return 'tokens=unknown';
|
|
78
|
-
const total = (input ?? 0) + (output ?? 0);
|
|
79
|
-
if (total < 1000)
|
|
80
|
-
return `${total} tokens`;
|
|
81
|
-
return `${Math.ceil(total / 1000)}k tokens`;
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=task-completion-summary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-completion-summary.js","sourceRoot":"","sources":["../../src/lifecycle/task-completion-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { TaskSpec } from '../types/task-spec.js';
|
|
2
|
-
export interface TaskGroup {
|
|
3
|
-
key: string;
|
|
4
|
-
tasks: Array<{
|
|
5
|
-
task: TaskSpec;
|
|
6
|
-
originalIndex: number;
|
|
7
|
-
}>;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Buckets tasks by (git toplevel of cwd) ?? realpath(cwd).
|
|
11
|
-
* Tasks in the same bucket share a write surface and must run serially.
|
|
12
|
-
*
|
|
13
|
-
* - Memoizes resolveGitToplevel per unique cwd.
|
|
14
|
-
* - Group order follows the smallest originalIndex in each group, so the
|
|
15
|
-
* group containing tasks[0] is first.
|
|
16
|
-
* - Within each group, tasks appear in caller input order.
|
|
17
|
-
*/
|
|
18
|
-
export declare function groupTasksByRepo(tasks: TaskSpec[]): Promise<TaskGroup[]>;
|
|
19
|
-
//# sourceMappingURL=task-grouping.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-grouping.d.ts","sourceRoot":"","sources":["../../src/lifecycle/task-grouping.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAuC9E"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { realpathSync } from 'node:fs';
|
|
2
|
-
import { resolveGitToplevel } from './git-toplevel.js';
|
|
3
|
-
/**
|
|
4
|
-
* Buckets tasks by (git toplevel of cwd) ?? realpath(cwd).
|
|
5
|
-
* Tasks in the same bucket share a write surface and must run serially.
|
|
6
|
-
*
|
|
7
|
-
* - Memoizes resolveGitToplevel per unique cwd.
|
|
8
|
-
* - Group order follows the smallest originalIndex in each group, so the
|
|
9
|
-
* group containing tasks[0] is first.
|
|
10
|
-
* - Within each group, tasks appear in caller input order.
|
|
11
|
-
*/
|
|
12
|
-
export async function groupTasksByRepo(tasks) {
|
|
13
|
-
const cwds = Array.from(new Set(tasks.map((t) => t.cwd ?? process.cwd())));
|
|
14
|
-
const toplevelByCwd = new Map();
|
|
15
|
-
await Promise.all(cwds.map(async (c) => {
|
|
16
|
-
toplevelByCwd.set(c, await resolveGitToplevel(c));
|
|
17
|
-
}));
|
|
18
|
-
const realpathByCwd = new Map();
|
|
19
|
-
const realpathOf = (cwd) => {
|
|
20
|
-
if (realpathByCwd.has(cwd))
|
|
21
|
-
return realpathByCwd.get(cwd);
|
|
22
|
-
let resolved;
|
|
23
|
-
try {
|
|
24
|
-
resolved = realpathSync(cwd);
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
resolved = cwd; // verbatim fallback
|
|
28
|
-
}
|
|
29
|
-
realpathByCwd.set(cwd, resolved);
|
|
30
|
-
return resolved;
|
|
31
|
-
};
|
|
32
|
-
const byKey = new Map();
|
|
33
|
-
const keyOrder = []; // tracks first appearance for stable group order
|
|
34
|
-
tasks.forEach((task, originalIndex) => {
|
|
35
|
-
const cwd = task.cwd ?? process.cwd();
|
|
36
|
-
const toplevel = toplevelByCwd.get(cwd);
|
|
37
|
-
const key = toplevel ?? realpathOf(cwd);
|
|
38
|
-
let group = byKey.get(key);
|
|
39
|
-
if (!group) {
|
|
40
|
-
group = { key, tasks: [] };
|
|
41
|
-
byKey.set(key, group);
|
|
42
|
-
keyOrder.push(key);
|
|
43
|
-
}
|
|
44
|
-
group.tasks.push({ task, originalIndex });
|
|
45
|
-
});
|
|
46
|
-
return keyOrder.map((k) => byKey.get(k));
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=task-grouping.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-grouping.js","sourceRoot":"","sources":["../../src/lifecycle/task-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAOvD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAiB;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyB,CAAC;IACvD,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACnB,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;QACzC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QAC3D,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,GAAG,CAAC,CAAC,oBAAoB;QACtC,CAAC;QACD,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC,CAAC,iDAAiD;IAEhF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;AAC5C,CAAC"}
|