@zhixuan92/multi-model-agent-core 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +2 -4
  2. package/dist/index.d.ts +15 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +15 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/intake/clarification-store.d.ts +21 -0
  7. package/dist/intake/clarification-store.d.ts.map +1 -0
  8. package/dist/intake/clarification-store.js +100 -0
  9. package/dist/intake/clarification-store.js.map +1 -0
  10. package/dist/intake/classify.d.ts +3 -0
  11. package/dist/intake/classify.d.ts.map +1 -0
  12. package/dist/intake/classify.js +108 -0
  13. package/dist/intake/classify.js.map +1 -0
  14. package/dist/intake/compilers/audit.d.ts +8 -0
  15. package/dist/intake/compilers/audit.d.ts.map +1 -0
  16. package/dist/intake/compilers/audit.js +45 -0
  17. package/dist/intake/compilers/audit.js.map +1 -0
  18. package/dist/intake/compilers/debug.d.ts +9 -0
  19. package/dist/intake/compilers/debug.d.ts.map +1 -0
  20. package/dist/intake/compilers/debug.js +27 -0
  21. package/dist/intake/compilers/debug.js.map +1 -0
  22. package/dist/intake/compilers/delegate.d.ts +10 -0
  23. package/dist/intake/compilers/delegate.d.ts.map +1 -0
  24. package/dist/intake/compilers/delegate.js +16 -0
  25. package/dist/intake/compilers/delegate.js.map +1 -0
  26. package/dist/intake/compilers/review.d.ts +9 -0
  27. package/dist/intake/compilers/review.d.ts.map +1 -0
  28. package/dist/intake/compilers/review.js +46 -0
  29. package/dist/intake/compilers/review.js.map +1 -0
  30. package/dist/intake/compilers/verify.d.ts +8 -0
  31. package/dist/intake/compilers/verify.d.ts.map +1 -0
  32. package/dist/intake/compilers/verify.js +45 -0
  33. package/dist/intake/compilers/verify.js.map +1 -0
  34. package/dist/intake/confirm.d.ts +7 -0
  35. package/dist/intake/confirm.d.ts.map +1 -0
  36. package/dist/intake/confirm.js +109 -0
  37. package/dist/intake/confirm.js.map +1 -0
  38. package/dist/intake/draft-id.d.ts +12 -0
  39. package/dist/intake/draft-id.d.ts.map +1 -0
  40. package/dist/intake/draft-id.js +46 -0
  41. package/dist/intake/draft-id.js.map +1 -0
  42. package/dist/intake/feature-flag.d.ts +6 -0
  43. package/dist/intake/feature-flag.d.ts.map +1 -0
  44. package/dist/intake/feature-flag.js +13 -0
  45. package/dist/intake/feature-flag.js.map +1 -0
  46. package/dist/intake/infer.d.ts +3 -0
  47. package/dist/intake/infer.d.ts.map +1 -0
  48. package/dist/intake/infer.js +42 -0
  49. package/dist/intake/infer.js.map +1 -0
  50. package/dist/intake/pipeline.d.ts +5 -0
  51. package/dist/intake/pipeline.d.ts.map +1 -0
  52. package/dist/intake/pipeline.js +99 -0
  53. package/dist/intake/pipeline.js.map +1 -0
  54. package/dist/intake/resolve.d.ts +7 -0
  55. package/dist/intake/resolve.d.ts.map +1 -0
  56. package/dist/intake/resolve.js +36 -0
  57. package/dist/intake/resolve.js.map +1 -0
  58. package/dist/intake/source-schema.d.ts +4 -0
  59. package/dist/intake/source-schema.d.ts.map +1 -0
  60. package/dist/intake/source-schema.js +45 -0
  61. package/dist/intake/source-schema.js.map +1 -0
  62. package/dist/intake/types.d.ts +124 -0
  63. package/dist/intake/types.d.ts.map +1 -0
  64. package/dist/intake/types.js +2 -0
  65. package/dist/intake/types.js.map +1 -0
  66. package/dist/readiness/readiness.d.ts +2 -5
  67. package/dist/readiness/readiness.d.ts.map +1 -1
  68. package/dist/readiness/readiness.js +12 -2
  69. package/dist/readiness/readiness.js.map +1 -1
  70. package/dist/run-tasks.d.ts.map +1 -1
  71. package/dist/run-tasks.js +14 -6
  72. package/dist/run-tasks.js.map +1 -1
  73. package/dist/types.d.ts +3 -0
  74. package/dist/types.d.ts.map +1 -1
  75. package/dist/types.js.map +1 -1
  76. package/package.json +61 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/intake/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,aAAa,EAEd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAgCnE,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC7C,OAAO,CAAC,EAAE,cAAc,GACvB,aAAa,CA4Ff"}
@@ -0,0 +1,109 @@
1
+ import { validateSource } from './source-schema.js';
2
+ const DEFAULT_MAX_ROUNDS = 3;
3
+ function checkScopeCompatibility(source, entry) {
4
+ const noFiles = !entry.filePaths || entry.filePaths.length === 0;
5
+ if (source.route === 'verify_work') {
6
+ const checklist = source.checklist;
7
+ if (noFiles && checklist.length > 0) {
8
+ return `Scope edit removes all files but checklist has ${checklist.length} items.`;
9
+ }
10
+ }
11
+ if (source.route === 'audit_document') {
12
+ const hasInlineDoc = 'document' in source.originalInput && source.originalInput.document;
13
+ if (noFiles && !hasInlineDoc) {
14
+ return `Scope edit removes all files and no inline document exists — audit has no target.`;
15
+ }
16
+ }
17
+ if (source.route === 'review_code') {
18
+ const hasInlineCode = source.inlineContent;
19
+ if (noFiles && !hasInlineCode) {
20
+ return `Scope edit removes all files and no inline code exists — review has no scope.`;
21
+ }
22
+ }
23
+ return null;
24
+ }
25
+ export function processConfirmations(store, clarificationId, confirmations, options) {
26
+ const maxRounds = options?.maxRounds ?? DEFAULT_MAX_ROUNDS;
27
+ const confirmedDrafts = [];
28
+ const errors = [];
29
+ const executedResultRefs = [];
30
+ const set = store.get(clarificationId);
31
+ if (!set) {
32
+ errors.push({
33
+ draftId: '',
34
+ errorCode: 'clarification_not_found',
35
+ message: `Clarification set '${clarificationId}' not found or expired. Re-dispatch from scratch.`,
36
+ });
37
+ return { confirmedDrafts, errors, executedResultRefs };
38
+ }
39
+ for (const [draftId, entry] of confirmations) {
40
+ if (set.executedDraftIds.has(draftId)) {
41
+ errors.push({
42
+ draftId,
43
+ errorCode: 'draft_already_executed',
44
+ message: `Draft '${draftId}' was already confirmed and executed.`,
45
+ });
46
+ executedResultRefs.push(draftId);
47
+ continue;
48
+ }
49
+ const stored = set.drafts.get(draftId);
50
+ if (!stored) {
51
+ errors.push({
52
+ draftId,
53
+ errorCode: 'draft_not_found',
54
+ message: `Draft '${draftId}' not found in clarification set.`,
55
+ });
56
+ continue;
57
+ }
58
+ if (stored.roundCount >= maxRounds) {
59
+ errors.push({
60
+ draftId,
61
+ errorCode: 'draft_refused',
62
+ message: `Draft '${draftId}' exceeded maximum ${maxRounds} clarification rounds.`,
63
+ });
64
+ continue;
65
+ }
66
+ if (!entry.prompt?.trim()) {
67
+ errors.push({
68
+ draftId,
69
+ errorCode: 'invalid_confirmation',
70
+ message: `Confirmation for '${draftId}' requires a non-empty prompt.`,
71
+ });
72
+ continue;
73
+ }
74
+ try {
75
+ validateSource(stored.draft.source);
76
+ }
77
+ catch {
78
+ errors.push({
79
+ draftId,
80
+ errorCode: 'source_validation_failed',
81
+ message: `Source validation failed for '${draftId}'. Schema may have changed since clarification was created.`,
82
+ });
83
+ store.incrementRound(clarificationId, draftId);
84
+ continue;
85
+ }
86
+ const scopeIncompat = checkScopeCompatibility(stored.draft.source, entry);
87
+ if (scopeIncompat) {
88
+ errors.push({
89
+ draftId,
90
+ errorCode: 'source_validation_failed',
91
+ message: scopeIncompat,
92
+ });
93
+ store.incrementRound(clarificationId, draftId);
94
+ continue;
95
+ }
96
+ const confirmedDraft = {
97
+ ...stored.draft,
98
+ prompt: entry.prompt,
99
+ filePaths: entry.filePaths,
100
+ done: entry.done,
101
+ confirmed: true,
102
+ questions: undefined,
103
+ assumptions: undefined,
104
+ };
105
+ confirmedDrafts.push(confirmedDraft);
106
+ }
107
+ return { confirmedDrafts, errors, executedResultRefs };
108
+ }
109
+ //# sourceMappingURL=confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/intake/confirm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface DraftIdComponents {
2
+ requestId: string;
3
+ taskIndex: number;
4
+ nodeId: string;
5
+ }
6
+ export declare function escapeFanoutKey(key: string): string;
7
+ export declare function canonicalizePath(p: string): string;
8
+ export declare function parseDraftId(draftId: string): DraftIdComponents | null;
9
+ export declare function createDraftId(requestId: string, taskIndex: number, nodeId?: string): string;
10
+ export declare function generateRequestId(): string;
11
+ export declare function disambiguateFanoutKeys(draftIds: string[]): Map<string, string[]>;
12
+ //# sourceMappingURL=draft-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-id.d.ts","sourceRoot":"","sources":["../../src/intake/draft-id.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAOtE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,GAAG,MAAM,CAE3F;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAmBhF"}
@@ -0,0 +1,46 @@
1
+ export function escapeFanoutKey(key) {
2
+ return encodeURIComponent(key);
3
+ }
4
+ export function canonicalizePath(p) {
5
+ return p.replace(/\\/g, '/').replace(/^\.\//, '');
6
+ }
7
+ export function parseDraftId(draftId) {
8
+ const parts = draftId.split(':');
9
+ if (parts.length !== 3)
10
+ return null;
11
+ const [requestId, taskIndexStr, nodeId] = parts;
12
+ const taskIndex = parseInt(taskIndexStr, 10);
13
+ if (isNaN(taskIndex))
14
+ return null;
15
+ return { requestId, taskIndex, nodeId };
16
+ }
17
+ export function createDraftId(requestId, taskIndex, nodeId = 'root') {
18
+ return `${requestId}:${taskIndex}:${nodeId}`;
19
+ }
20
+ export function generateRequestId() {
21
+ const { randomUUID } = require('node:crypto');
22
+ return randomUUID();
23
+ }
24
+ export function disambiguateFanoutKeys(draftIds) {
25
+ const seen = new Map();
26
+ for (const id of draftIds) {
27
+ const parsed = parseDraftId(id);
28
+ if (!parsed)
29
+ continue;
30
+ const existing = seen.get(parsed.nodeId);
31
+ if (existing) {
32
+ existing.push(id);
33
+ }
34
+ else {
35
+ seen.set(parsed.nodeId, [id]);
36
+ }
37
+ }
38
+ const duplicates = new Map();
39
+ for (const [nodeId, ids] of seen) {
40
+ if (ids.length > 1) {
41
+ duplicates.set(nodeId, ids);
42
+ }
43
+ }
44
+ return duplicates;
45
+ }
46
+ //# sourceMappingURL=draft-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-id.js","sourceRoot":"","sources":["../../src/intake/draft-id.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,SAAiB,EAAE,MAAM,GAAG,MAAM;IACjF,OAAO,GAAG,SAAS,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9C,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { MultiModelConfig } from '../types.js';
2
+ export declare function getMaxRoundsPerDraft(config?: MultiModelConfig): number;
3
+ export interface ClarificationsConfig {
4
+ maxRoundsPerDraft?: number;
5
+ }
6
+ //# sourceMappingURL=feature-flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flag.d.ts","sourceRoot":"","sources":["../../src/intake/feature-flag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAUtE;AAED,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,13 @@
1
+ export function getMaxRoundsPerDraft(config) {
2
+ if (config?.clarifications?.maxRoundsPerDraft !== undefined) {
3
+ return config.clarifications.maxRoundsPerDraft;
4
+ }
5
+ const env = process.env['MULTI_MODEL_CLARIFICATIONS_MAX_ROUNDS'];
6
+ if (env) {
7
+ const parsed = parseInt(env, 10);
8
+ if (Number.isFinite(parsed) && parsed > 0)
9
+ return parsed;
10
+ }
11
+ return 3;
12
+ }
13
+ //# sourceMappingURL=feature-flag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-flag.js","sourceRoot":"","sources":["../../src/intake/feature-flag.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,IAAI,MAAM,EAAE,cAAc,EAAE,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC;IACjD,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACjE,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DraftTask } from './types.js';
2
+ export declare function inferMissingFields(draft: DraftTask): DraftTask;
3
+ //# sourceMappingURL=infer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer.d.ts","sourceRoot":"","sources":["../../src/intake/infer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAwC9D"}
@@ -0,0 +1,42 @@
1
+ const FILE_PATH_PATTERN = /\b([\w./\\-]+\.\w{1,5})\b/g;
2
+ const KNOWN_EXTENSIONS = new Set([
3
+ 'ts', 'tsx', 'js', 'jsx', 'json', 'md', 'yaml', 'yml',
4
+ 'toml', 'py', 'rs', 'go', 'java', 'css', 'html', 'sql',
5
+ ]);
6
+ const ANALYSIS_VERBS = /\b(summarize|describe|explain|list|count|read|review|analyze|check|inspect)\b/i;
7
+ const WRITE_VERBS = /\b(fix|change|update|refactor|delete|migrate|implement|add|create|modify)\b/i;
8
+ export function inferMissingFields(draft) {
9
+ const assumptions = [...(draft.assumptions ?? [])];
10
+ let done = draft.done;
11
+ let filePaths = draft.filePaths;
12
+ const promptWords = draft.prompt.trim().split(/\s+/);
13
+ const fileRefs = [...draft.prompt.matchAll(FILE_PATH_PATTERN)]
14
+ .filter(m => { const ext = m[1].split('.').pop()?.toLowerCase(); return ext && KNOWN_EXTENSIONS.has(ext); });
15
+ const hasSingleScope = (draft.filePaths?.length === 1) || (fileRefs.length <= 1);
16
+ const isTrivial = ANALYSIS_VERBS.test(draft.prompt) &&
17
+ !WRITE_VERBS.test(draft.prompt) &&
18
+ promptWords.length < 100 &&
19
+ hasSingleScope;
20
+ if (!done && isTrivial) {
21
+ done = 'Provide a clear, complete response addressing the request.';
22
+ assumptions.push('inferred done condition for analysis-only task');
23
+ }
24
+ if (!filePaths?.length) {
25
+ const matches = [...draft.prompt.matchAll(FILE_PATH_PATTERN)];
26
+ const candidates = matches
27
+ .map(m => m[1])
28
+ .filter(p => {
29
+ const ext = p.split('.').pop()?.toLowerCase();
30
+ return ext && KNOWN_EXTENSIONS.has(ext);
31
+ });
32
+ if (candidates.length > 0 && candidates.length <= 3) {
33
+ filePaths = [...new Set(candidates)];
34
+ assumptions.push('inferred file scope from prompt');
35
+ }
36
+ }
37
+ if (assumptions.length === (draft.assumptions?.length ?? 0)) {
38
+ return draft;
39
+ }
40
+ return { ...draft, done, filePaths, assumptions };
41
+ }
42
+ //# sourceMappingURL=infer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/intake/infer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { MultiModelConfig } from '../types.js';
2
+ import type { ContextBlockStore } from '../context/context-block-store.js';
3
+ import type { DraftTask, IntakeResult } from './types.js';
4
+ export declare function runIntakePipeline(drafts: DraftTask[], config: MultiModelConfig, contextBlockStore?: ContextBlockStore): IntakeResult;
5
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/intake/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EAKb,MAAM,YAAY,CAAC;AAuDpB,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,gBAAgB,EACxB,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,YAAY,CA+Dd"}
@@ -0,0 +1,99 @@
1
+ import { inferMissingFields } from './infer.js';
2
+ import { classifyDraft } from './classify.js';
3
+ import { resolveDraft } from './resolve.js';
4
+ function expandDraftContextBlocks(draft, store) {
5
+ if (!draft.contextBlockIds?.length || !store)
6
+ return draft;
7
+ const contents = [];
8
+ for (const id of draft.contextBlockIds) {
9
+ const content = store.get(id);
10
+ if (content === undefined) {
11
+ return {
12
+ draftId: draft.draftId,
13
+ taskIndex: 0,
14
+ error: `Context block '${id}' not found or expired`,
15
+ errorCode: 'context_block_not_found',
16
+ };
17
+ }
18
+ contents.push(content);
19
+ }
20
+ const separator = '\n\n---\n\n';
21
+ return {
22
+ ...draft,
23
+ prompt: contents.join(separator) + separator + draft.prompt,
24
+ contextBlockIds: undefined,
25
+ };
26
+ }
27
+ function isHardError(result) {
28
+ return 'errorCode' in result;
29
+ }
30
+ function orderByRisk(questions) {
31
+ const riskWords = /security|permission|delete|remove|deploy|credential|secret/i;
32
+ const scopeWords = /scope|file|target|which/i;
33
+ return [...questions].sort((a, b) => {
34
+ const aRisk = riskWords.test(a) ? 0 : scopeWords.test(a) ? 1 : 2;
35
+ const bRisk = riskWords.test(b) ? 0 : scopeWords.test(b) ? 1 : 2;
36
+ return aRisk - bRisk;
37
+ });
38
+ }
39
+ const SENSITIVE_PATTERNS = /\b(provider|sandbox|auth\s*state|testCommand|credential|api[_-]?key)\b/i;
40
+ function sanitizeAssumption(assumption) {
41
+ if (SENSITIVE_PATTERNS.test(assumption)) {
42
+ return assumption.replace(SENSITIVE_PATTERNS, '[redacted]');
43
+ }
44
+ return assumption;
45
+ }
46
+ export function runIntakePipeline(drafts, config, contextBlockStore) {
47
+ const ready = [];
48
+ const clarifications = [];
49
+ const hardErrors = [];
50
+ for (let i = 0; i < drafts.length; i++) {
51
+ const draft = drafts[i];
52
+ const expanded = expandDraftContextBlocks(draft, contextBlockStore);
53
+ if (isHardError(expanded)) {
54
+ hardErrors.push({ ...expanded, taskIndex: i });
55
+ continue;
56
+ }
57
+ const inferred = inferMissingFields(expanded);
58
+ const classified = classifyDraft(inferred);
59
+ if (classified.classification === 'unrecoverable') {
60
+ hardErrors.push({
61
+ draftId: inferred.draftId,
62
+ taskIndex: i,
63
+ error: classified.reasons.join('; '),
64
+ errorCode: 'unrecoverable_ambiguity',
65
+ });
66
+ continue;
67
+ }
68
+ if (classified.classification === 'ready') {
69
+ const task = resolveDraft(inferred, config);
70
+ ready.push({ task, draftId: inferred.draftId, taskIndex: i });
71
+ }
72
+ else {
73
+ const rawQuestions = inferred.questions ?? classified.reasons.map(r => `I'm not confident about this interpretation — ${r}. Is my proposed draft correct?`);
74
+ const orderedQuestions = orderByRisk(rawQuestions).slice(0, 5);
75
+ const sanitizedAssumptions = (inferred.assumptions ?? []).map(sanitizeAssumption);
76
+ clarifications.push({
77
+ draftId: inferred.draftId,
78
+ taskIndex: i,
79
+ proposedDraft: {
80
+ prompt: inferred.prompt,
81
+ filePaths: inferred.filePaths,
82
+ done: inferred.done,
83
+ },
84
+ assumptions: sanitizedAssumptions,
85
+ questions: orderedQuestions,
86
+ reason: classified.reasons.join('; ') || 'MCP cannot form one unambiguous execution plan',
87
+ });
88
+ }
89
+ }
90
+ const intakeProgress = {
91
+ totalDrafts: drafts.length,
92
+ readyDrafts: ready.length,
93
+ clarificationDrafts: clarifications.length,
94
+ hardErrorDrafts: hardErrors.length,
95
+ executedDrafts: 0,
96
+ };
97
+ return { ready, clarifications, hardErrors, intakeProgress };
98
+ }
99
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/intake/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { TaskSpec } from '../types.js';
2
+ import type { MultiModelConfig } from '../types.js';
3
+ import type { DraftTask, SourceRoute } from './types.js';
4
+ export declare const OUTPUT_CONTRACT_CLAUSES: Partial<Record<SourceRoute, string>>;
5
+ export declare const ROUTE_DEFAULTS: Record<SourceRoute, Partial<TaskSpec>>;
6
+ export declare function resolveDraft(draft: DraftTask, config: MultiModelConfig): TaskSpec;
7
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/intake/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAKxE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAMjE,CAAC;AAEF,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,gBAAgB,GACvB,QAAQ,CAwBV"}
@@ -0,0 +1,36 @@
1
+ export const OUTPUT_CONTRACT_CLAUSES = {
2
+ review_code: 'Provide a structured review with findings and recommendations.',
3
+ debug_task: 'Use hypothesis-driven debugging: identify root cause, propose fix, verify.',
4
+ verify_work: 'For each checklist item, indicate pass/fail and provide evidence.',
5
+ audit_document: 'Provide a structured audit report with findings and severity.',
6
+ };
7
+ export const ROUTE_DEFAULTS = {
8
+ delegate_tasks: {},
9
+ review_code: { agentType: 'complex', reviewPolicy: 'full' },
10
+ debug_task: { agentType: 'complex', reviewPolicy: 'full', maxReviewRounds: 1 },
11
+ verify_work: { agentType: 'standard', reviewPolicy: 'spec_only' },
12
+ audit_document: { agentType: 'complex', reviewPolicy: 'off' },
13
+ };
14
+ export function resolveDraft(draft, config) {
15
+ const routeDefaults = ROUTE_DEFAULTS[draft.source.route];
16
+ const agentType = draft.agentType ?? routeDefaults.agentType ?? 'standard';
17
+ const outputContract = OUTPUT_CONTRACT_CLAUSES[draft.source.route];
18
+ const prompt = outputContract && !draft.prompt.includes(outputContract)
19
+ ? `${draft.prompt}\n\n${outputContract}`
20
+ : draft.prompt;
21
+ return {
22
+ prompt,
23
+ done: draft.done,
24
+ filePaths: draft.filePaths,
25
+ agentType: agentType,
26
+ reviewPolicy: routeDefaults.reviewPolicy,
27
+ maxReviewRounds: routeDefaults.maxReviewRounds,
28
+ tools: config.defaults?.tools ?? 'full',
29
+ timeoutMs: config.defaults?.timeoutMs ?? 1_800_000,
30
+ maxCostUSD: config.defaults?.maxCostUSD ?? 10,
31
+ sandboxPolicy: config.defaults?.sandboxPolicy ?? 'cwd-only',
32
+ briefQualityPolicy: 'off',
33
+ cwd: process.cwd(),
34
+ };
35
+ }
36
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/intake/resolve.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,uBAAuB,GAAyC;IAC3E,WAAW,EAAE,gEAAgE;IAC7E,UAAU,EAAE,4EAA4E;IACxF,WAAW,EAAE,mEAAmE;IAChF,cAAc,EAAE,+DAA+D;CAChF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA2C;IACpE,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE;IAC3D,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE;IAC9E,WAAW,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE;IACjE,cAAc,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE;CAC9D,CAAC;AAEF,MAAM,UAAU,YAAY,CAC1B,KAAgB,EAChB,MAAwB;IAExB,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,IAAI,UAAU,CAAC;IAE3E,MAAM,cAAc,GAAG,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,cAAc,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,OAAO,cAAc,EAAE;QACxC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAEjB,OAAO;QACL,MAAM;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,SAAmC;QAC9C,YAAY,EAAE,aAAa,CAAC,YAAY;QACxC,eAAe,EAAE,aAAa,CAAC,eAAe;QAC9C,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,MAAM;QACvC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,SAAS;QAClD,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE;QAC7C,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,IAAI,UAAU;QAC3D,kBAAkB,EAAE,KAAK;QACzB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;KACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AnySource } from './types.js';
2
+ export declare function validateSource(source: unknown): AnySource;
3
+ export declare function isValidSource(source: unknown): boolean;
4
+ //# sourceMappingURL=source-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-schema.d.ts","sourceRoot":"","sources":["../../src/intake/source-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA6C5C,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAEzD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAEtD"}
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ const delegateSourceSchema = z.object({
3
+ route: z.literal('delegate_tasks'),
4
+ originalInput: z.record(z.string(), z.unknown()),
5
+ });
6
+ const reviewSourceSchema = z.object({
7
+ route: z.literal('review_code'),
8
+ originalInput: z.record(z.string(), z.unknown()),
9
+ code: z.string().optional(),
10
+ inlineContent: z.string().optional(),
11
+ focus: z.array(z.string()).optional(),
12
+ });
13
+ const debugSourceSchema = z.object({
14
+ route: z.literal('debug_task'),
15
+ originalInput: z.record(z.string(), z.unknown()),
16
+ problem: z.string(),
17
+ context: z.string().optional(),
18
+ hypothesis: z.string().optional(),
19
+ });
20
+ const verifySourceSchema = z.object({
21
+ route: z.literal('verify_work'),
22
+ originalInput: z.record(z.string(), z.unknown()),
23
+ checklist: z.array(z.string()),
24
+ work: z.string().optional(),
25
+ });
26
+ const auditSourceSchema = z.object({
27
+ route: z.literal('audit_document'),
28
+ originalInput: z.record(z.string(), z.unknown()),
29
+ document: z.string().optional(),
30
+ auditType: z.string().optional(),
31
+ });
32
+ const sourceSchema = z.discriminatedUnion('route', [
33
+ delegateSourceSchema,
34
+ reviewSourceSchema,
35
+ debugSourceSchema,
36
+ verifySourceSchema,
37
+ auditSourceSchema,
38
+ ]);
39
+ export function validateSource(source) {
40
+ return sourceSchema.parse(source);
41
+ }
42
+ export function isValidSource(source) {
43
+ return sourceSchema.safeParse(source).success;
44
+ }
45
+ //# sourceMappingURL=source-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-schema.js","sourceRoot":"","sources":["../../src/intake/source-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;CACjD,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC/B,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC/B,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;IACjD,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;CAClB,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAc,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,OAAO,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC"}
@@ -0,0 +1,124 @@
1
+ import type { TaskSpec } from '../types.js';
2
+ export type SourceRoute = 'delegate_tasks' | 'review_code' | 'debug_task' | 'verify_work' | 'audit_document';
3
+ export type DelegateSource = {
4
+ route: 'delegate_tasks';
5
+ originalInput: Record<string, unknown>;
6
+ };
7
+ export type ReviewSource = {
8
+ route: 'review_code';
9
+ originalInput: Record<string, unknown>;
10
+ code?: string;
11
+ inlineContent?: string;
12
+ focus?: string[];
13
+ };
14
+ export type DebugSource = {
15
+ route: 'debug_task';
16
+ originalInput: Record<string, unknown>;
17
+ problem: string;
18
+ context?: string;
19
+ hypothesis?: string;
20
+ };
21
+ export type VerifySource = {
22
+ route: 'verify_work';
23
+ originalInput: Record<string, unknown>;
24
+ checklist: string[];
25
+ work?: string;
26
+ };
27
+ export type AuditSource = {
28
+ route: 'audit_document';
29
+ originalInput: Record<string, unknown>;
30
+ document?: string;
31
+ auditType?: string;
32
+ };
33
+ export type AnySource = DelegateSource | ReviewSource | DebugSource | VerifySource | AuditSource;
34
+ export interface DraftTask {
35
+ draftId: string;
36
+ source: AnySource;
37
+ prompt: string;
38
+ done?: string;
39
+ filePaths?: string[];
40
+ agentType?: string;
41
+ assumptions?: string[];
42
+ questions?: string[];
43
+ confirmed?: boolean;
44
+ contextBlockIds?: string[];
45
+ }
46
+ export interface StoredDraft {
47
+ draft: DraftTask;
48
+ taskIndex: number;
49
+ roundCount: number;
50
+ previousReasons?: string[];
51
+ }
52
+ export interface ClarificationSet {
53
+ id: string;
54
+ drafts: Map<string, StoredDraft>;
55
+ originalBatchId: string;
56
+ executedDraftIds: Set<string>;
57
+ createdAt: number;
58
+ lastAccessedAt: number;
59
+ }
60
+ export interface ConfirmationEntry {
61
+ prompt: string;
62
+ filePaths?: string[];
63
+ done?: string;
64
+ }
65
+ export interface ConfirmDraftError {
66
+ draftId: string;
67
+ errorCode: string;
68
+ message: string;
69
+ }
70
+ export interface ConfirmResult {
71
+ confirmedDrafts: DraftTask[];
72
+ errors: ConfirmDraftError[];
73
+ executedResultRefs: string[];
74
+ }
75
+ export type ClassificationResult = {
76
+ draft: DraftTask;
77
+ classification: 'ready';
78
+ reasons: [];
79
+ } | {
80
+ draft: DraftTask;
81
+ classification: 'needs_confirmation';
82
+ reasons: string[];
83
+ } | {
84
+ draft: DraftTask;
85
+ classification: 'unrecoverable';
86
+ reasons: string[];
87
+ };
88
+ export interface ClarificationEntry {
89
+ draftId: string;
90
+ taskIndex: number;
91
+ proposedDraft: {
92
+ prompt: string;
93
+ filePaths?: string[];
94
+ done?: string;
95
+ };
96
+ assumptions: string[];
97
+ questions: string[];
98
+ reason: string;
99
+ }
100
+ export interface HardError {
101
+ draftId: string;
102
+ taskIndex: number;
103
+ error: string;
104
+ errorCode: string;
105
+ }
106
+ export interface IntakeProgress {
107
+ totalDrafts: number;
108
+ readyDrafts: number;
109
+ clarificationDrafts: number;
110
+ hardErrorDrafts: number;
111
+ executedDrafts: number;
112
+ }
113
+ export interface ReadyDraft {
114
+ task: TaskSpec;
115
+ draftId: string;
116
+ taskIndex: number;
117
+ }
118
+ export interface IntakeResult {
119
+ ready: ReadyDraft[];
120
+ clarifications: ClarificationEntry[];
121
+ hardErrors: HardError[];
122
+ intakeProgress: IntakeProgress;
123
+ }
124
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/intake/types.ts"],"names":[],"mappings":"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"}