@zhixuan92/multi-model-agent-core 4.0.1 → 4.0.3
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 +18 -6
- package/dist/bounded-execution/activity-tracker-types.d.ts +2 -2
- package/dist/bounded-execution/activity-tracker-types.d.ts.map +1 -1
- package/dist/bounded-execution/activity-tracker.d.ts +3 -3
- package/dist/bounded-execution/activity-tracker.d.ts.map +1 -1
- package/dist/bounded-execution/activity-tracker.js +15 -15
- package/dist/bounded-execution/activity-tracker.js.map +1 -1
- package/dist/config/model-profile-registry.d.ts +0 -10
- package/dist/config/model-profile-registry.d.ts.map +1 -1
- package/dist/config/model-profile-registry.js +126 -8
- package/dist/config/model-profile-registry.js.map +1 -1
- package/dist/config/schema.d.ts +0 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +3 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/escalation/delegate-with-escalation.d.ts +24 -0
- package/dist/escalation/delegate-with-escalation.d.ts.map +1 -1
- package/dist/escalation/delegate-with-escalation.js +5 -0
- package/dist/escalation/delegate-with-escalation.js.map +1 -1
- package/dist/escalation/fallback-types.d.ts +1 -1
- package/dist/escalation/fallback-types.d.ts.map +1 -1
- package/dist/escalation/fallback.js +2 -2
- package/dist/escalation/fallback.js.map +1 -1
- package/dist/events/cloud-events.d.ts +3 -4
- package/dist/events/cloud-events.d.ts.map +1 -1
- package/dist/events/cloud-events.js +0 -1
- package/dist/events/cloud-events.js.map +1 -1
- package/dist/events/event-builder.d.ts +4 -2
- package/dist/events/event-builder.d.ts.map +1 -1
- package/dist/events/event-builder.js +47 -45
- package/dist/events/event-builder.js.map +1 -1
- package/dist/events/observability-events.d.ts +7 -8
- package/dist/events/observability-events.d.ts.map +1 -1
- package/dist/events/running-headline-sink.d.ts +26 -0
- package/dist/events/running-headline-sink.d.ts.map +1 -0
- package/dist/events/running-headline-sink.js +116 -0
- package/dist/events/running-headline-sink.js.map +1 -0
- package/dist/events/telemetry-types.d.ts +20 -20
- package/dist/events/telemetry-types.js +8 -8
- package/dist/events/telemetry-types.js.map +1 -1
- package/dist/events/verbose-log-channel.d.ts +22 -2
- package/dist/events/verbose-log-channel.d.ts.map +1 -1
- package/dist/events/verbose-log-channel.js +46 -9
- package/dist/events/verbose-log-channel.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/intake/brief-compiler-slots/delegate.d.ts +1 -0
- package/dist/intake/brief-compiler-slots/delegate.d.ts.map +1 -1
- package/dist/intake/brief-compiler-slots/delegate.js +10 -2
- package/dist/intake/brief-compiler-slots/delegate.js.map +1 -1
- package/dist/lifecycle/executor-output-types.d.ts +2 -2
- package/dist/lifecycle/executor-output-types.d.ts.map +1 -1
- package/dist/lifecycle/handlers/baseline-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/baseline-handlers.js +48 -1
- package/dist/lifecycle/handlers/baseline-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/quality-chain-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/quality-chain-handlers.js +126 -6
- package/dist/lifecycle/handlers/quality-chain-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/review-diff-handler.d.ts.map +1 -1
- package/dist/lifecycle/handlers/review-diff-handler.js +36 -1
- package/dist/lifecycle/handlers/review-diff-handler.js.map +1 -1
- package/dist/lifecycle/handlers/run-verify-command-handler.js +11 -2
- package/dist/lifecycle/handlers/run-verify-command-handler.js.map +1 -1
- package/dist/lifecycle/handlers/spec-chain-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/spec-chain-handlers.js +107 -6
- package/dist/lifecycle/handlers/spec-chain-handlers.js.map +1 -1
- package/dist/lifecycle/handlers/terminal-handlers.d.ts +8 -0
- package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
- package/dist/lifecycle/handlers/terminal-handlers.js +168 -11
- package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
- package/dist/lifecycle/lifecycle-context.d.ts +0 -2
- package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
- package/dist/lifecycle/merge-stage-stats.d.ts +31 -0
- package/dist/lifecycle/merge-stage-stats.d.ts.map +1 -0
- package/dist/lifecycle/merge-stage-stats.js +64 -0
- package/dist/lifecycle/merge-stage-stats.js.map +1 -0
- package/dist/lifecycle/shared-compute.js +4 -4
- package/dist/lifecycle/shared-compute.js.map +1 -1
- package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
- package/dist/lifecycle/stage-plan-builder.js +6 -0
- package/dist/lifecycle/stage-plan-builder.js.map +1 -1
- package/dist/lifecycle/stage-plan-types.d.ts +3 -0
- package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
- package/dist/lifecycle/stage-progression.d.ts +20 -0
- package/dist/lifecycle/stage-progression.d.ts.map +1 -0
- package/dist/lifecycle/stage-progression.js +165 -0
- package/dist/lifecycle/stage-progression.js.map +1 -0
- package/dist/lifecycle/task-executor.d.ts.map +1 -1
- package/dist/lifecycle/task-executor.js +55 -10
- package/dist/lifecycle/task-executor.js.map +1 -1
- package/dist/lifecycle/task-runner.d.ts +7 -3
- package/dist/lifecycle/task-runner.d.ts.map +1 -1
- package/dist/lifecycle/task-runner.js +43 -7
- package/dist/lifecycle/task-runner.js.map +1 -1
- package/dist/providers/anthropic-messages-adapter.d.ts.map +1 -1
- package/dist/providers/anthropic-messages-adapter.js +25 -1
- package/dist/providers/anthropic-messages-adapter.js.map +1 -1
- package/dist/providers/base/result-builders.d.ts +1 -1
- package/dist/providers/base/result-builders.d.ts.map +1 -1
- package/dist/providers/base/result-builders.js +4 -4
- package/dist/providers/base/result-builders.js.map +1 -1
- package/dist/providers/make-runner-shell.d.ts.map +1 -1
- package/dist/providers/make-runner-shell.js +6 -5
- package/dist/providers/make-runner-shell.js.map +1 -1
- package/dist/providers/openai-chat-adapter.d.ts +0 -2
- package/dist/providers/openai-chat-adapter.d.ts.map +1 -1
- package/dist/providers/openai-chat-adapter.js +2 -3
- package/dist/providers/openai-chat-adapter.js.map +1 -1
- package/dist/providers/openai-responses-adapter.d.ts +1 -2
- package/dist/providers/openai-responses-adapter.d.ts.map +1 -1
- package/dist/providers/openai-responses-adapter.js +67 -39
- package/dist/providers/openai-responses-adapter.js.map +1 -1
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +45 -9
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/runner-adapter.d.ts +10 -0
- package/dist/providers/runner-adapter.d.ts.map +1 -1
- package/dist/providers/runner-shell-types.d.ts +33 -0
- package/dist/providers/runner-shell-types.d.ts.map +1 -1
- package/dist/providers/runner-shell.d.ts +10 -1
- package/dist/providers/runner-shell.d.ts.map +1 -1
- package/dist/providers/runner-shell.js +251 -18
- package/dist/providers/runner-shell.js.map +1 -1
- package/dist/providers/runner-types.d.ts +21 -2
- package/dist/providers/runner-types.d.ts.map +1 -1
- package/dist/providers/tool-name-sets.d.ts +29 -0
- package/dist/providers/tool-name-sets.d.ts.map +1 -0
- package/dist/providers/tool-name-sets.js +41 -0
- package/dist/providers/tool-name-sets.js.map +1 -0
- package/dist/reporting/headline-composer.d.ts +12 -0
- package/dist/reporting/headline-composer.d.ts.map +1 -1
- package/dist/reporting/headline-composer.js.map +1 -1
- package/dist/reporting/headline-templates/audit.d.ts.map +1 -1
- package/dist/reporting/headline-templates/audit.js +26 -6
- package/dist/reporting/headline-templates/audit.js.map +1 -1
- package/dist/reporting/headline-templates/delegate.d.ts.map +1 -1
- package/dist/reporting/headline-templates/delegate.js +25 -6
- package/dist/reporting/headline-templates/delegate.js.map +1 -1
- package/dist/reporting/headline-templates/execute-plan.d.ts.map +1 -1
- package/dist/reporting/headline-templates/execute-plan.js +4 -1
- package/dist/reporting/headline-templates/execute-plan.js.map +1 -1
- package/dist/reporting/headline-templates/review.d.ts.map +1 -1
- package/dist/reporting/headline-templates/review.js +14 -7
- package/dist/reporting/headline-templates/review.js.map +1 -1
- package/dist/reporting/headline-text.d.ts +31 -0
- package/dist/reporting/headline-text.d.ts.map +1 -0
- package/dist/reporting/headline-text.js +42 -0
- package/dist/reporting/headline-text.js.map +1 -0
- package/dist/reporting/severity.d.ts +40 -0
- package/dist/reporting/severity.d.ts.map +1 -0
- package/dist/reporting/severity.js +57 -0
- package/dist/reporting/severity.js.map +1 -0
- package/dist/reporting/structured-report.d.ts +3 -3
- package/dist/research/explore-orchestrator.d.ts.map +1 -1
- package/dist/research/explore-orchestrator.js +4 -5
- package/dist/research/explore-orchestrator.js.map +1 -1
- package/dist/review/annotator-engine.d.ts +8 -0
- package/dist/review/annotator-engine.d.ts.map +1 -1
- package/dist/review/annotator-engine.js +7 -1
- package/dist/review/annotator-engine.js.map +1 -1
- package/dist/review/review-types.d.ts +6 -2
- package/dist/review/review-types.d.ts.map +1 -1
- package/dist/review/reviewer-engine.d.ts +11 -0
- package/dist/review/reviewer-engine.d.ts.map +1 -1
- package/dist/review/reviewer-engine.js +18 -1
- package/dist/review/reviewer-engine.js.map +1 -1
- package/dist/review/reviewer-output-parser.d.ts.map +1 -1
- package/dist/review/reviewer-output-parser.js +27 -5
- package/dist/review/reviewer-output-parser.js.map +1 -1
- package/dist/stores/batch-registry.d.ts +18 -0
- package/dist/stores/batch-registry.d.ts.map +1 -1
- package/dist/stores/batch-registry.js +10 -0
- package/dist/stores/batch-registry.js.map +1 -1
- package/dist/stores/context-block-tool.d.ts +14 -0
- package/dist/stores/context-block-tool.d.ts.map +1 -1
- package/dist/stores/context-block-tool.js.map +1 -1
- package/dist/stores/file-backed-context-block-store.d.ts +63 -0
- package/dist/stores/file-backed-context-block-store.d.ts.map +1 -0
- package/dist/stores/file-backed-context-block-store.js +293 -0
- package/dist/stores/file-backed-context-block-store.js.map +1 -0
- package/dist/stores/project-context-registry.d.ts +16 -3
- package/dist/stores/project-context-registry.d.ts.map +1 -1
- package/dist/stores/project-context-registry.js +9 -2
- package/dist/stores/project-context-registry.js.map +1 -1
- package/dist/tools/audit/schema.d.ts +2 -2
- package/dist/tools/retry/tool-config.js +1 -1
- package/dist/tools/retry/tool-config.js.map +1 -1
- package/dist/tools/review/schema.d.ts +1 -1
- package/dist/types/enums.d.ts +10 -10
- package/package.json +5 -1
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileBackedContextBlockStore — disk-backed implementation of
|
|
3
|
+
* `ContextBlockStore` so context blocks survive daemon restarts.
|
|
4
|
+
*
|
|
5
|
+
* Per the wire-telemetry-gaps plan, Gap 4: round-over-round audit is the
|
|
6
|
+
* documented use case for context blocks; a memory-only store loses
|
|
7
|
+
* everything on `npm run serve` cycles, breaking the recipe. This store
|
|
8
|
+
* persists to disk and reloads lazily on first access.
|
|
9
|
+
*
|
|
10
|
+
* Layout: `<projectCwd>/.mma/context-blocks/<id>.txt` (content) +
|
|
11
|
+
* `<id>.meta.json` ({ createdAt, ttlMs, lengthChars, sha256 }).
|
|
12
|
+
*
|
|
13
|
+
* Operational properties (per round-2 F5/F6/F7/F8/F9):
|
|
14
|
+
* - **Authoritative cwd**: store root is constructed from `projectCwd`
|
|
15
|
+
* supplied at construction time. NOT daemon cwd, NOT task cwd.
|
|
16
|
+
* - **Permissions**: directory `0700`, files `0600`. Audit findings can
|
|
17
|
+
* carry sensitive code excerpts; user-only access by default.
|
|
18
|
+
* - **TTL**: 7 days default. Enforced on `get()` (lazy delete on
|
|
19
|
+
* stale read), at the start of `register()` (opportunistic GC if
|
|
20
|
+
* last sweep was over `gcCheckIntervalMs` ago), and via
|
|
21
|
+
* `runIdleSweep()` for periodic timer-driven sweeps.
|
|
22
|
+
* - **Size caps**: per-block 1 MiB, per-store 100 MiB total — measured
|
|
23
|
+
* via `Buffer.byteLength(content, 'utf8')` so multi-byte content
|
|
24
|
+
* can't sneak past the cap. Oldest-first eviction when total cap
|
|
25
|
+
* is exceeded.
|
|
26
|
+
* - **Atomic writes**: temp-file → fsync → rename. GC treats orphaned
|
|
27
|
+
* pairs (content without metadata or vice versa) as corrupt and
|
|
28
|
+
* deletes both — recovers cleanly from daemon SIGKILL mid-write.
|
|
29
|
+
* - **Gitignore awareness**: on first directory creation, log a
|
|
30
|
+
* stderr breadcrumb suggesting `.mma/` be added to the project's
|
|
31
|
+
* `.gitignore` (we do NOT auto-edit the ignore file — surprising
|
|
32
|
+
* and may not be a git repo).
|
|
33
|
+
*
|
|
34
|
+
* Pinning is a no-op on this implementation — disk persistence is
|
|
35
|
+
* stronger than the in-memory pin contract. The `pin`/`unpin` methods
|
|
36
|
+
* exist on the interface for API symmetry and to satisfy the LRU-skip
|
|
37
|
+
* contract that batch-registry expects, but disk eviction always
|
|
38
|
+
* respects TTL only.
|
|
39
|
+
*/
|
|
40
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
41
|
+
import * as fs from 'node:fs';
|
|
42
|
+
import * as path from 'node:path';
|
|
43
|
+
const DEFAULT_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
44
|
+
const DEFAULT_GC_INTERVAL_MS = 60 * 60 * 1000;
|
|
45
|
+
const DEFAULT_MAX_BLOCK_BYTES = 1 * 1024 * 1024;
|
|
46
|
+
const DEFAULT_MAX_TOTAL_BYTES = 100 * 1024 * 1024;
|
|
47
|
+
export class FileBackedContextBlockStore {
|
|
48
|
+
rootDir;
|
|
49
|
+
_ttlMs;
|
|
50
|
+
gcCheckIntervalMs;
|
|
51
|
+
maxBlockBytes;
|
|
52
|
+
maxTotalBytes;
|
|
53
|
+
lastSweepMs = 0;
|
|
54
|
+
/** Pin counts are kept in memory only — they're an active-batch
|
|
55
|
+
* protection signal, not a persistence concern. Lost on restart;
|
|
56
|
+
* TTL-based GC handles the recovery side. */
|
|
57
|
+
pinCounts = new Map();
|
|
58
|
+
constructor(projectCwd, opts = {}) {
|
|
59
|
+
this.rootDir = path.resolve(projectCwd, '.mma', 'context-blocks');
|
|
60
|
+
this._ttlMs = opts.ttlMs ?? DEFAULT_TTL_MS;
|
|
61
|
+
this.gcCheckIntervalMs = opts.gcCheckIntervalMs ?? DEFAULT_GC_INTERVAL_MS;
|
|
62
|
+
this.maxBlockBytes = opts.maxBlockBytes ?? DEFAULT_MAX_BLOCK_BYTES;
|
|
63
|
+
this.maxTotalBytes = opts.maxTotalBytes ?? DEFAULT_MAX_TOTAL_BYTES;
|
|
64
|
+
this.ensureRoot();
|
|
65
|
+
}
|
|
66
|
+
register(content, opts = {}) {
|
|
67
|
+
const byteSize = Buffer.byteLength(content, 'utf8');
|
|
68
|
+
if (byteSize > this.maxBlockBytes) {
|
|
69
|
+
throw new Error(`Context block exceeds per-block cap of ${this.maxBlockBytes} bytes (got ${byteSize}).`);
|
|
70
|
+
}
|
|
71
|
+
const id = opts.id ?? randomUUID();
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
const sha256 = createHash('sha256').update(content).digest('hex');
|
|
74
|
+
const meta = {
|
|
75
|
+
createdAt: now,
|
|
76
|
+
ttlMs: this._ttlMs,
|
|
77
|
+
lengthChars: content.length,
|
|
78
|
+
sha256,
|
|
79
|
+
};
|
|
80
|
+
// Opportunistic GC + size-cap enforcement before we write.
|
|
81
|
+
if (now - this.lastSweepMs > this.gcCheckIntervalMs) {
|
|
82
|
+
this.runIdleSweep(now, this._ttlMs);
|
|
83
|
+
this.lastSweepMs = now;
|
|
84
|
+
}
|
|
85
|
+
this.evictUntilFits(byteSize);
|
|
86
|
+
this.atomicWrite(this.contentPath(id), content);
|
|
87
|
+
this.atomicWrite(this.metaPath(id), JSON.stringify(meta) + '\n');
|
|
88
|
+
return { id, lengthChars: content.length, sha256 };
|
|
89
|
+
}
|
|
90
|
+
get(id) {
|
|
91
|
+
const meta = this.readMeta(id);
|
|
92
|
+
if (!meta)
|
|
93
|
+
return undefined;
|
|
94
|
+
const now = Date.now();
|
|
95
|
+
if (now - meta.createdAt > meta.ttlMs) {
|
|
96
|
+
// Expired: lazy-delete (matches in-memory store semantics)
|
|
97
|
+
this.deleteFiles(id);
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
return fs.readFileSync(this.contentPath(id), 'utf8');
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Content missing but meta present — orphan; clean up.
|
|
105
|
+
this.deleteFiles(id);
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
delete(id) {
|
|
110
|
+
const existed = fs.existsSync(this.contentPath(id)) || fs.existsSync(this.metaPath(id));
|
|
111
|
+
this.deleteFiles(id);
|
|
112
|
+
this.pinCounts.delete(id);
|
|
113
|
+
return existed;
|
|
114
|
+
}
|
|
115
|
+
pin(id) {
|
|
116
|
+
this.pinCounts.set(id, (this.pinCounts.get(id) ?? 0) + 1);
|
|
117
|
+
}
|
|
118
|
+
unpin(id) {
|
|
119
|
+
const cur = this.pinCounts.get(id) ?? 0;
|
|
120
|
+
if (cur <= 1)
|
|
121
|
+
this.pinCounts.delete(id);
|
|
122
|
+
else
|
|
123
|
+
this.pinCounts.set(id, cur - 1);
|
|
124
|
+
}
|
|
125
|
+
refcount(id) {
|
|
126
|
+
return this.pinCounts.get(id) ?? 0;
|
|
127
|
+
}
|
|
128
|
+
runIdleSweep(now, idleTtlMs) {
|
|
129
|
+
let evicted = 0;
|
|
130
|
+
for (const id of this.listIds()) {
|
|
131
|
+
if ((this.pinCounts.get(id) ?? 0) > 0)
|
|
132
|
+
continue;
|
|
133
|
+
const meta = this.readMeta(id);
|
|
134
|
+
if (!meta) {
|
|
135
|
+
// Orphan content (no meta) — corrupt half-write recovery
|
|
136
|
+
this.deleteFiles(id);
|
|
137
|
+
evicted++;
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// Use the entry's stored ttlMs (may differ from caller's idleTtlMs)
|
|
141
|
+
// OR caller's idleTtlMs, whichever is shorter — caller wins for
|
|
142
|
+
// explicit forced sweeps.
|
|
143
|
+
const effectiveTtl = Math.min(meta.ttlMs, idleTtlMs);
|
|
144
|
+
if (now - meta.createdAt > effectiveTtl) {
|
|
145
|
+
this.deleteFiles(id);
|
|
146
|
+
evicted++;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return evicted;
|
|
150
|
+
}
|
|
151
|
+
get ttlMs() {
|
|
152
|
+
return this._ttlMs;
|
|
153
|
+
}
|
|
154
|
+
/** Number of entries currently on disk (counted by id, not by file —
|
|
155
|
+
* orphan halves count once). */
|
|
156
|
+
get size() {
|
|
157
|
+
return this.listIds().length;
|
|
158
|
+
}
|
|
159
|
+
/** Delete every block. Used by project-registry on idle eviction. */
|
|
160
|
+
clear() {
|
|
161
|
+
for (const id of this.listIds())
|
|
162
|
+
this.deleteFiles(id);
|
|
163
|
+
this.pinCounts.clear();
|
|
164
|
+
}
|
|
165
|
+
/** Sum of all on-disk content bytes (no caching — fresh read each call).
|
|
166
|
+
* Used by tests + `evictUntilFits`. */
|
|
167
|
+
totalBytesOnDisk() {
|
|
168
|
+
let total = 0;
|
|
169
|
+
for (const id of this.listIds()) {
|
|
170
|
+
try {
|
|
171
|
+
total += fs.statSync(this.contentPath(id)).size;
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// missing file — skip
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return total;
|
|
178
|
+
}
|
|
179
|
+
// ── private helpers ────────────────────────────────────────────────
|
|
180
|
+
ensureRoot() {
|
|
181
|
+
const created = !fs.existsSync(this.rootDir);
|
|
182
|
+
fs.mkdirSync(this.rootDir, { recursive: true, mode: 0o700 });
|
|
183
|
+
if (created) {
|
|
184
|
+
// First-creation breadcrumb: nudge the user about gitignore. We
|
|
185
|
+
// intentionally do NOT modify their .gitignore — that would
|
|
186
|
+
// surprise users + may not be a git repo at all.
|
|
187
|
+
process.stderr.write(`[mmagent] created ${this.rootDir} — add ".mma/" to .gitignore (contains worker-output context blocks)\n`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
contentPath(id) {
|
|
191
|
+
return path.join(this.rootDir, `${id}.txt`);
|
|
192
|
+
}
|
|
193
|
+
metaPath(id) {
|
|
194
|
+
return path.join(this.rootDir, `${id}.meta.json`);
|
|
195
|
+
}
|
|
196
|
+
listIds() {
|
|
197
|
+
let entries;
|
|
198
|
+
try {
|
|
199
|
+
entries = fs.readdirSync(this.rootDir);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
const ids = new Set();
|
|
205
|
+
for (const name of entries) {
|
|
206
|
+
if (name.endsWith('.meta.json'))
|
|
207
|
+
ids.add(name.slice(0, -'.meta.json'.length));
|
|
208
|
+
else if (name.endsWith('.txt'))
|
|
209
|
+
ids.add(name.slice(0, -'.txt'.length));
|
|
210
|
+
}
|
|
211
|
+
return [...ids];
|
|
212
|
+
}
|
|
213
|
+
readMeta(id) {
|
|
214
|
+
try {
|
|
215
|
+
const raw = fs.readFileSync(this.metaPath(id), 'utf8');
|
|
216
|
+
const parsed = JSON.parse(raw);
|
|
217
|
+
if (typeof parsed.createdAt === 'number'
|
|
218
|
+
&& typeof parsed.ttlMs === 'number'
|
|
219
|
+
&& typeof parsed.lengthChars === 'number'
|
|
220
|
+
&& typeof parsed.sha256 === 'string') {
|
|
221
|
+
return parsed;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// unreadable / corrupt
|
|
226
|
+
}
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
deleteFiles(id) {
|
|
230
|
+
try {
|
|
231
|
+
fs.unlinkSync(this.contentPath(id));
|
|
232
|
+
}
|
|
233
|
+
catch { /* ignore */ }
|
|
234
|
+
try {
|
|
235
|
+
fs.unlinkSync(this.metaPath(id));
|
|
236
|
+
}
|
|
237
|
+
catch { /* ignore */ }
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Atomic write: temp-file → fsync → rename. Recovers cleanly from
|
|
241
|
+
* daemon SIGKILL mid-write — readers either see the old content or
|
|
242
|
+
* the new content, never a partial write. The .tmp suffix uses a
|
|
243
|
+
* random nonce so concurrent writers don't collide.
|
|
244
|
+
*/
|
|
245
|
+
atomicWrite(targetPath, content) {
|
|
246
|
+
const tmpPath = `${targetPath}.tmp.${process.pid}.${randomUUID()}`;
|
|
247
|
+
const fd = fs.openSync(tmpPath, 'w', 0o600);
|
|
248
|
+
try {
|
|
249
|
+
fs.writeSync(fd, content);
|
|
250
|
+
fs.fsyncSync(fd);
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
fs.closeSync(fd);
|
|
254
|
+
}
|
|
255
|
+
fs.renameSync(tmpPath, targetPath);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Oldest-first eviction loop until total disk usage + incoming bytes
|
|
259
|
+
* fits under maxTotalBytes. Pinned entries are skipped (matches
|
|
260
|
+
* in-memory store semantics — pinned blocks are held by an active
|
|
261
|
+
* batch and shouldn't be evicted mid-run).
|
|
262
|
+
*/
|
|
263
|
+
evictUntilFits(incomingBytes) {
|
|
264
|
+
let total = this.totalBytesOnDisk();
|
|
265
|
+
if (total + incomingBytes <= this.maxTotalBytes)
|
|
266
|
+
return;
|
|
267
|
+
const candidates = [];
|
|
268
|
+
for (const id of this.listIds()) {
|
|
269
|
+
if ((this.pinCounts.get(id) ?? 0) > 0)
|
|
270
|
+
continue;
|
|
271
|
+
const meta = this.readMeta(id);
|
|
272
|
+
if (!meta)
|
|
273
|
+
continue;
|
|
274
|
+
let bytes = 0;
|
|
275
|
+
try {
|
|
276
|
+
bytes = fs.statSync(this.contentPath(id)).size;
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
candidates.push({ id, createdAt: meta.createdAt, bytes });
|
|
282
|
+
}
|
|
283
|
+
// Oldest-first
|
|
284
|
+
candidates.sort((a, b) => a.createdAt - b.createdAt);
|
|
285
|
+
for (const c of candidates) {
|
|
286
|
+
if (total + incomingBytes <= this.maxTotalBytes)
|
|
287
|
+
break;
|
|
288
|
+
this.deleteFiles(c.id);
|
|
289
|
+
total -= c.bytes;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=file-backed-context-block-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-backed-context-block-store.js","sourceRoot":"","sources":["../../src/stores/file-backed-context-block-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type ContextBlockStore } from './context-block-tool.js';
|
|
2
2
|
import { BatchCache } from './batch-cache.js';
|
|
3
3
|
export interface ProjectContext {
|
|
4
4
|
readonly cwd: string;
|
|
5
|
-
|
|
5
|
+
/** 4.0.3+: store is the interface — concrete class chosen at
|
|
6
|
+
* createProjectContext (file-backed by default, in-memory in tests). */
|
|
7
|
+
readonly contextBlocks: ContextBlockStore;
|
|
6
8
|
/** Per-project terminal-only retention index; authoritative live-batch lookup is via BatchRegistry.countActiveForProject(cwd). */
|
|
7
9
|
readonly batchCache: BatchCache;
|
|
8
10
|
readonly createdAt: number;
|
|
@@ -13,5 +15,16 @@ export interface ProjectContext {
|
|
|
13
15
|
readonly activeSessions: Set<string>;
|
|
14
16
|
pendingReservations: number;
|
|
15
17
|
}
|
|
16
|
-
export
|
|
18
|
+
export interface CreateProjectContextOptions {
|
|
19
|
+
/** Override the context-block store. When omitted, defaults to a
|
|
20
|
+
* FileBackedContextBlockStore rooted at `<cwd>/.mma/context-blocks/`
|
|
21
|
+
* so blocks survive daemon restarts (Gap 4 fix). Tests pass an
|
|
22
|
+
* InMemoryContextBlockStore to avoid filesystem side effects. */
|
|
23
|
+
contextBlockStore?: ContextBlockStore;
|
|
24
|
+
}
|
|
25
|
+
export declare function createProjectContext(cwd: string, opts?: CreateProjectContextOptions): ProjectContext;
|
|
26
|
+
/** Test-only convenience constructor that uses the in-memory store. Call
|
|
27
|
+
* sites that need filesystem isolation (and don't care about persistence)
|
|
28
|
+
* should use this instead of passing the option each time. */
|
|
29
|
+
export declare function createInMemoryProjectContext(cwd: string): ProjectContext;
|
|
17
30
|
//# sourceMappingURL=project-context-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-context-registry.d.ts","sourceRoot":"","sources":["../../src/stores/project-context-registry.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"project-context-registry.d.ts","sourceRoot":"","sources":["../../src/stores/project-context-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;6EACyE;IACzE,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,kIAAkI;IAClI,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,oGAAoG;IACpG,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C;;;sEAGkE;IAClE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,2BAAgC,GACrC,cAAc,CAYhB;AAED;;+DAE+D;AAC/D,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAExE"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { InMemoryContextBlockStore } from './context-block-tool.js';
|
|
2
|
+
import { FileBackedContextBlockStore } from './file-backed-context-block-store.js';
|
|
2
3
|
import { BatchCache } from './batch-cache.js';
|
|
3
|
-
export function createProjectContext(cwd) {
|
|
4
|
+
export function createProjectContext(cwd, opts = {}) {
|
|
4
5
|
const now = Date.now();
|
|
5
6
|
return {
|
|
6
7
|
cwd,
|
|
7
|
-
contextBlocks: new
|
|
8
|
+
contextBlocks: opts.contextBlockStore ?? new FileBackedContextBlockStore(cwd),
|
|
8
9
|
batchCache: new BatchCache(),
|
|
9
10
|
createdAt: now,
|
|
10
11
|
lastActivityAt: now,
|
|
@@ -13,4 +14,10 @@ export function createProjectContext(cwd) {
|
|
|
13
14
|
pendingReservations: 0,
|
|
14
15
|
};
|
|
15
16
|
}
|
|
17
|
+
/** Test-only convenience constructor that uses the in-memory store. Call
|
|
18
|
+
* sites that need filesystem isolation (and don't care about persistence)
|
|
19
|
+
* should use this instead of passing the option each time. */
|
|
20
|
+
export function createInMemoryProjectContext(cwd) {
|
|
21
|
+
return createProjectContext(cwd, { contextBlockStore: new InMemoryContextBlockStore() });
|
|
22
|
+
}
|
|
16
23
|
//# sourceMappingURL=project-context-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-context-registry.js","sourceRoot":"","sources":["../../src/stores/project-context-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,
|
|
1
|
+
{"version":3,"file":"project-context-registry.js","sourceRoot":"","sources":["../../src/stores/project-context-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAA0B,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA2B9C,MAAM,UAAU,oBAAoB,CAClC,GAAW,EACX,OAAoC,EAAE;IAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO;QACL,GAAG;QACH,aAAa,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,2BAA2B,CAAC,GAAG,CAAC;QAC7E,UAAU,EAAE,IAAI,UAAU,EAAE;QAC5B,SAAS,EAAE,GAAG;QACd,cAAc,EAAE,GAAG;QACnB,cAAc,EAAE,IAAI,GAAG,EAAU;QACjC,cAAc,EAAE,CAAC;QACjB,mBAAmB,EAAE,CAAC;KACvB,CAAC;AACJ,CAAC;AAED;;+DAE+D;AAC/D,MAAM,UAAU,4BAA4B,CAAC,GAAW;IACtD,OAAO,oBAAoB,CAAC,GAAG,EAAE,EAAE,iBAAiB,EAAE,IAAI,yBAAyB,EAAE,EAAE,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -2,15 +2,15 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const inputSchema: z.ZodObject<{
|
|
3
3
|
document: z.ZodOptional<z.ZodString>;
|
|
4
4
|
auditType: z.ZodUnion<readonly [z.ZodEnum<{
|
|
5
|
-
style: "style";
|
|
6
5
|
security: "security";
|
|
7
6
|
performance: "performance";
|
|
7
|
+
style: "style";
|
|
8
8
|
correctness: "correctness";
|
|
9
9
|
general: "general";
|
|
10
10
|
}>, z.ZodArray<z.ZodEnum<{
|
|
11
|
-
style: "style";
|
|
12
11
|
security: "security";
|
|
13
12
|
performance: "performance";
|
|
13
|
+
style: "style";
|
|
14
14
|
correctness: "correctness";
|
|
15
15
|
}>>]>;
|
|
16
16
|
filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -36,7 +36,7 @@ export const toolConfig = {
|
|
|
36
36
|
sandboxPolicy: origTask?.sandboxPolicy ?? defaults?.sandboxPolicy ?? 'cwd-only',
|
|
37
37
|
cwd: origTask?.cwd ?? ctx.projectContext?.cwd ?? ctx.cwd,
|
|
38
38
|
contextBlockIds: origTask?.contextBlockIds ?? [],
|
|
39
|
-
mainModel: origTask?.mainModel
|
|
39
|
+
mainModel: origTask?.mainModel,
|
|
40
40
|
done: origTask?.done,
|
|
41
41
|
autoCommit: origTask?.autoCommit ?? false,
|
|
42
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-config.js","sourceRoot":"","sources":["../../../src/tools/retry/tool-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,MAAM,UAAU,aAAa,CAAC,QAA6B;IACzD,QAAQ,CAAC,QAAQ,CAAC;QAChB,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,WAAW;QACnB,YAAY,EAAE,QAAQ;QACtB,gBAAgB,EAAE,UAAU;QAC5B,oBAAoB,EAAE,IAAI;QAC1B,iBAAiB,EAAE,eAAe;KACnC,CAAC,CAAC;AACL,CAAC;AAOD,MAAM,CAAC,MAAM,UAAU,GAA2C;IAChE,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CACnB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9E,aAAa,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC;QAClD,MAAM,KAAK,GAAG,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAyB,CAAC;QACvE,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrC,OAAO;YACL,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,cAAc,KAAK,CAAC,SAAS,eAAe,KAAK,CAAC,OAAO,EAAE;YACvF,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,UAAU;YAC5C,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,MAAM;YAC9C,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,IAAI,KAAK;YACzD,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,MAAM;YACnD,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,QAAQ,EAAE,SAAS,IAAI,SAAS;YAClE,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,QAAQ,EAAE,UAAU,IAAI,EAAE;YAC9D,aAAa,EAAE,QAAQ,EAAE,aAAa,IAAI,QAAQ,EAAE,aAAa,IAAI,UAAU;YAC/E,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG;YACxD,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,EAAE;YAChD,SAAS,EAAE,QAAQ,EAAE,SAAS
|
|
1
|
+
{"version":3,"file":"tool-config.js","sourceRoot":"","sources":["../../../src/tools/retry/tool-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const inputSchema: z.ZodObject<{
|
|
3
3
|
code: z.ZodOptional<z.ZodString>;
|
|
4
4
|
focus: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
5
|
-
style: "style";
|
|
6
5
|
security: "security";
|
|
7
6
|
performance: "performance";
|
|
7
|
+
style: "style";
|
|
8
8
|
correctness: "correctness";
|
|
9
9
|
}>>>;
|
|
10
10
|
filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
package/dist/types/enums.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ export declare const TierEnum: z.ZodEnum<{
|
|
|
4
4
|
complex: "complex";
|
|
5
5
|
}>;
|
|
6
6
|
export declare const RouteEnum: z.ZodEnum<{
|
|
7
|
-
review: "review";
|
|
8
|
-
retry: "retry";
|
|
9
7
|
delegate: "delegate";
|
|
10
8
|
audit: "audit";
|
|
9
|
+
review: "review";
|
|
11
10
|
verify: "verify";
|
|
12
11
|
debug: "debug";
|
|
13
12
|
"execute-plan": "execute-plan";
|
|
13
|
+
retry: "retry";
|
|
14
14
|
investigate: "investigate";
|
|
15
15
|
explore: "explore";
|
|
16
16
|
explore_internal: "explore_internal";
|
|
@@ -90,13 +90,6 @@ export declare const InvestigationConfidenceEnum: z.ZodEnum<{
|
|
|
90
90
|
}>;
|
|
91
91
|
export declare const FindingConfidenceSchema: z.ZodNumber;
|
|
92
92
|
export declare const EventTypeEnum: z.ZodEnum<{
|
|
93
|
-
fallback: "fallback";
|
|
94
|
-
worker_start: "worker_start";
|
|
95
|
-
turn_start: "turn_start";
|
|
96
|
-
tool_call: "tool_call";
|
|
97
|
-
text_emission: "text_emission";
|
|
98
|
-
turn_complete: "turn_complete";
|
|
99
|
-
heartbeat: "heartbeat";
|
|
100
93
|
batch_completed: "batch_completed";
|
|
101
94
|
batch_failed: "batch_failed";
|
|
102
95
|
cost_check: "cost_check";
|
|
@@ -110,7 +103,9 @@ export declare const EventTypeEnum: z.ZodEnum<{
|
|
|
110
103
|
explore_synthesize_start: "explore_synthesize_start";
|
|
111
104
|
explore_thread_completed: "explore_thread_completed";
|
|
112
105
|
explore_thread_started: "explore_thread_started";
|
|
106
|
+
fallback: "fallback";
|
|
113
107
|
fallback_unavailable: "fallback_unavailable";
|
|
108
|
+
heartbeat: "heartbeat";
|
|
114
109
|
"read_only_review.quality": "read_only_review.quality";
|
|
115
110
|
"read_only_review.terminal": "read_only_review.terminal";
|
|
116
111
|
review_decision: "review_decision";
|
|
@@ -118,9 +113,14 @@ export declare const EventTypeEnum: z.ZodEnum<{
|
|
|
118
113
|
stall_abort: "stall_abort";
|
|
119
114
|
task_completed: "task_completed";
|
|
120
115
|
task_started: "task_started";
|
|
116
|
+
text_emission: "text_emission";
|
|
121
117
|
time_check: "time_check";
|
|
118
|
+
tool_call: "tool_call";
|
|
119
|
+
turn_complete: "turn_complete";
|
|
120
|
+
turn_start: "turn_start";
|
|
122
121
|
verify_skipped: "verify_skipped";
|
|
123
122
|
verify_step: "verify_step";
|
|
123
|
+
worker_start: "worker_start";
|
|
124
124
|
}>;
|
|
125
125
|
export declare const ReviewEngineTypeEnum: z.ZodEnum<{
|
|
126
126
|
reviewer: "reviewer";
|
|
@@ -146,9 +146,9 @@ export declare const IncompleteReasonEnum: z.ZodEnum<{
|
|
|
146
146
|
* Defined here so the closed-enum ratchet covers it before adoption.
|
|
147
147
|
*/
|
|
148
148
|
export declare const EvidenceKindEnum: z.ZodEnum<{
|
|
149
|
-
fix: "fix";
|
|
150
149
|
reproducer: "reproducer";
|
|
151
150
|
code_path: "code_path";
|
|
151
|
+
fix: "fix";
|
|
152
152
|
}>;
|
|
153
153
|
export declare const DiagLoopEnum: z.ZodEnum<{
|
|
154
154
|
spec: "spec";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhixuan92/multi-model-agent-core",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.3",
|
|
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.",
|
|
@@ -56,6 +56,10 @@
|
|
|
56
56
|
"types": "./dist/lifecycle/task-runner.d.ts",
|
|
57
57
|
"import": "./dist/lifecycle/task-runner.js"
|
|
58
58
|
},
|
|
59
|
+
"./lifecycle/stage-progression": {
|
|
60
|
+
"types": "./dist/lifecycle/stage-progression.d.ts",
|
|
61
|
+
"import": "./dist/lifecycle/stage-progression.js"
|
|
62
|
+
},
|
|
59
63
|
"./events/verbose-line": {
|
|
60
64
|
"types": "./dist/events/verbose-line.d.ts",
|
|
61
65
|
"import": "./dist/events/verbose-line.js"
|