@zhixuan92/multi-model-agent-core 4.7.4 → 4.7.5
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 +6 -6
- package/dist/config/schema.d.ts +1 -1
- package/dist/events/to-wire-record.d.ts.map +1 -1
- package/dist/events/to-wire-record.js +7 -0
- package/dist/events/to-wire-record.js.map +1 -1
- package/dist/events/wire-schema.d.ts +6 -6
- package/dist/index.d.ts +2 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -13
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/handlers/read-route-implementer.d.ts +5 -0
- package/dist/lifecycle/handlers/read-route-implementer.d.ts.map +1 -1
- package/dist/lifecycle/handlers/read-route-implementer.js +1 -1
- package/dist/lifecycle/handlers/read-route-implementer.js.map +1 -1
- package/dist/lifecycle/handlers/review-stage.js +11 -1
- package/dist/lifecycle/handlers/review-stage.js.map +1 -1
- package/dist/lifecycle/perform-implementation.d.ts.map +1 -1
- package/dist/lifecycle/perform-implementation.js +37 -0
- package/dist/lifecycle/perform-implementation.js.map +1 -1
- package/dist/lifecycle/tool-config-types.d.ts +7 -1
- package/dist/lifecycle/tool-config-types.d.ts.map +1 -1
- package/dist/providers/claude-session.d.ts.map +1 -1
- package/dist/providers/claude-session.js +36 -2
- package/dist/providers/claude-session.js.map +1 -1
- package/dist/tools/audit/brief-slot.d.ts +15 -0
- package/dist/tools/audit/brief-slot.d.ts.map +1 -0
- package/dist/tools/audit/brief-slot.js +69 -0
- package/dist/tools/audit/brief-slot.js.map +1 -0
- package/dist/tools/audit/tool-config.d.ts +2 -14
- package/dist/tools/audit/tool-config.d.ts.map +1 -1
- package/dist/tools/audit/tool-config.js +1 -68
- package/dist/tools/audit/tool-config.js.map +1 -1
- package/dist/{intake/brief-compiler-slots/debug.d.ts → tools/debug/brief-slot.d.ts} +1 -1
- package/dist/tools/debug/brief-slot.d.ts.map +1 -0
- package/dist/{intake/brief-compiler-slots/debug.js → tools/debug/brief-slot.js} +1 -1
- package/dist/tools/debug/brief-slot.js.map +1 -0
- package/dist/tools/debug/tool-config.d.ts +1 -1
- package/dist/tools/debug/tool-config.d.ts.map +1 -1
- package/dist/tools/debug/tool-config.js +1 -1
- package/dist/tools/debug/tool-config.js.map +1 -1
- package/dist/tools/delegate/brief-slot.d.ts +13 -0
- package/dist/tools/delegate/brief-slot.d.ts.map +1 -0
- package/dist/{intake/brief-compiler-slots/delegate.js → tools/delegate/brief-slot.js} +12 -3
- package/dist/tools/delegate/brief-slot.js.map +1 -0
- package/dist/tools/delegate/schema.d.ts +1 -1
- package/dist/tools/delegate/tool-config.d.ts +1 -10
- package/dist/tools/delegate/tool-config.d.ts.map +1 -1
- package/dist/tools/delegate/tool-config.js +2 -10
- package/dist/tools/delegate/tool-config.js.map +1 -1
- package/dist/tools/execute-plan/brief-slot.d.ts +21 -0
- package/dist/tools/execute-plan/brief-slot.d.ts.map +1 -0
- package/dist/{intake/brief-compiler-slots/execute-plan.js → tools/execute-plan/brief-slot.js} +3 -67
- package/dist/tools/execute-plan/brief-slot.js.map +1 -0
- package/dist/tools/execute-plan/draft-id.d.ts.map +1 -0
- package/dist/tools/execute-plan/draft-id.js.map +1 -0
- package/dist/tools/execute-plan/plan-extractor.d.ts.map +1 -0
- package/dist/tools/execute-plan/plan-extractor.js.map +1 -0
- package/dist/tools/execute-plan/schema.d.ts +1 -1
- package/dist/tools/execute-plan/tool-config.d.ts +3 -3
- package/dist/tools/execute-plan/tool-config.d.ts.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/brief-slot.d.ts +31 -0
- package/dist/tools/investigate/brief-slot.d.ts.map +1 -0
- package/dist/tools/investigate/brief-slot.js +69 -0
- package/dist/tools/investigate/brief-slot.js.map +1 -0
- package/dist/tools/investigate/tool-config.d.ts +2 -29
- package/dist/tools/investigate/tool-config.d.ts.map +1 -1
- package/dist/tools/investigate/tool-config.js +2 -62
- package/dist/tools/investigate/tool-config.js.map +1 -1
- package/dist/tools/research/brief-slot.d.ts +19 -0
- package/dist/tools/research/brief-slot.d.ts.map +1 -0
- package/dist/tools/research/brief-slot.js +37 -0
- package/dist/tools/research/brief-slot.js.map +1 -0
- package/dist/tools/research/tool-config.d.ts +2 -14
- package/dist/tools/research/tool-config.d.ts.map +1 -1
- package/dist/tools/research/tool-config.js +2 -14
- package/dist/tools/research/tool-config.js.map +1 -1
- package/dist/tools/retry/brief-slot.d.ts +7 -0
- package/dist/tools/retry/brief-slot.d.ts.map +1 -0
- package/dist/tools/retry/brief-slot.js +2 -0
- package/dist/tools/retry/brief-slot.js.map +1 -0
- package/dist/tools/retry/tool-config.d.ts +1 -5
- 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/{intake/brief-compiler-slots/review.d.ts → tools/review/brief-slot.d.ts} +1 -1
- package/dist/tools/review/brief-slot.d.ts.map +1 -0
- package/dist/{intake/brief-compiler-slots/review.js → tools/review/brief-slot.js} +1 -1
- package/dist/tools/review/brief-slot.js.map +1 -0
- package/dist/tools/review/tool-config.d.ts +1 -1
- package/dist/tools/review/tool-config.d.ts.map +1 -1
- package/dist/tools/review/tool-config.js +1 -1
- package/dist/tools/review/tool-config.js.map +1 -1
- package/dist/types/brief-quality-policy.d.ts +3 -0
- package/dist/types/brief-quality-policy.d.ts.map +1 -0
- package/dist/types/brief-quality-policy.js +2 -0
- package/dist/types/brief-quality-policy.js.map +1 -0
- package/dist/{intake/types.d.ts → types/draft-task.d.ts} +2 -40
- package/dist/types/draft-task.d.ts.map +1 -0
- package/dist/types/draft-task.js +2 -0
- package/dist/types/draft-task.js.map +1 -0
- package/dist/types/review-policy.d.ts +2 -0
- package/dist/types/review-policy.d.ts.map +1 -0
- package/dist/types/review-policy.js +2 -0
- package/dist/types/review-policy.js.map +1 -0
- package/dist/types/task-spec.d.ts +1 -1
- package/dist/types/task-spec.d.ts.map +1 -1
- package/package.json +1 -49
- package/dist/intake/brief-compiler-slots/debug.d.ts.map +0 -1
- package/dist/intake/brief-compiler-slots/debug.js.map +0 -1
- package/dist/intake/brief-compiler-slots/delegate.d.ts +0 -23
- package/dist/intake/brief-compiler-slots/delegate.d.ts.map +0 -1
- package/dist/intake/brief-compiler-slots/delegate.js.map +0 -1
- package/dist/intake/brief-compiler-slots/execute-plan.d.ts +0 -49
- package/dist/intake/brief-compiler-slots/execute-plan.d.ts.map +0 -1
- package/dist/intake/brief-compiler-slots/execute-plan.js.map +0 -1
- package/dist/intake/brief-compiler-slots/register-context-block.d.ts +0 -17
- package/dist/intake/brief-compiler-slots/register-context-block.d.ts.map +0 -1
- package/dist/intake/brief-compiler-slots/register-context-block.js +0 -17
- package/dist/intake/brief-compiler-slots/register-context-block.js.map +0 -1
- package/dist/intake/brief-compiler-slots/research.d.ts +0 -18
- package/dist/intake/brief-compiler-slots/research.d.ts.map +0 -1
- package/dist/intake/brief-compiler-slots/research.js +0 -43
- package/dist/intake/brief-compiler-slots/research.js.map +0 -1
- package/dist/intake/brief-compiler-slots/retry.d.ts +0 -20
- package/dist/intake/brief-compiler-slots/retry.d.ts.map +0 -1
- package/dist/intake/brief-compiler-slots/retry.js +0 -37
- package/dist/intake/brief-compiler-slots/retry.js.map +0 -1
- package/dist/intake/brief-compiler-slots/review.d.ts.map +0 -1
- package/dist/intake/brief-compiler-slots/review.js.map +0 -1
- package/dist/intake/brief-compiler.d.ts +0 -9
- package/dist/intake/brief-compiler.d.ts.map +0 -1
- package/dist/intake/brief-compiler.js +0 -8
- package/dist/intake/brief-compiler.js.map +0 -1
- package/dist/intake/classify.d.ts +0 -3
- package/dist/intake/classify.d.ts.map +0 -1
- package/dist/intake/classify.js +0 -111
- package/dist/intake/classify.js.map +0 -1
- package/dist/intake/context-overflow-estimator.d.ts +0 -33
- package/dist/intake/context-overflow-estimator.d.ts.map +0 -1
- package/dist/intake/context-overflow-estimator.js +0 -36
- package/dist/intake/context-overflow-estimator.js.map +0 -1
- package/dist/intake/draft-id.d.ts.map +0 -1
- package/dist/intake/draft-id.js.map +0 -1
- package/dist/intake/field-inferer.d.ts +0 -10
- package/dist/intake/field-inferer.d.ts.map +0 -1
- package/dist/intake/field-inferer.js +0 -57
- package/dist/intake/field-inferer.js.map +0 -1
- package/dist/intake/host-allowlist-builder.d.ts +0 -25
- package/dist/intake/host-allowlist-builder.d.ts.map +0 -1
- package/dist/intake/host-allowlist-builder.js +0 -102
- package/dist/intake/host-allowlist-builder.js.map +0 -1
- package/dist/intake/index.d.ts +0 -5
- package/dist/intake/index.d.ts.map +0 -1
- package/dist/intake/index.js +0 -6
- package/dist/intake/index.js.map +0 -1
- package/dist/intake/pipeline.d.ts +0 -5
- package/dist/intake/pipeline.d.ts.map +0 -1
- package/dist/intake/pipeline.js +0 -110
- package/dist/intake/pipeline.js.map +0 -1
- package/dist/intake/plan-extractor.d.ts.map +0 -1
- package/dist/intake/plan-extractor.js.map +0 -1
- package/dist/intake/resolve.d.ts +0 -16
- package/dist/intake/resolve.d.ts.map +0 -1
- package/dist/intake/resolve.js +0 -37
- package/dist/intake/resolve.js.map +0 -1
- package/dist/intake/source-schema.d.ts +0 -4
- package/dist/intake/source-schema.d.ts.map +0 -1
- package/dist/intake/source-schema.js +0 -45
- package/dist/intake/source-schema.js.map +0 -1
- package/dist/intake/types.d.ts.map +0 -1
- package/dist/intake/types.js +0 -2
- package/dist/intake/types.js.map +0 -1
- package/dist/intake/verify-command-validator.d.ts +0 -6
- package/dist/intake/verify-command-validator.d.ts.map +0 -1
- package/dist/intake/verify-command-validator.js +0 -47
- package/dist/intake/verify-command-validator.js.map +0 -1
- package/dist/intake/verify-referenced-blocks.d.ts +0 -5
- package/dist/intake/verify-referenced-blocks.d.ts.map +0 -1
- package/dist/intake/verify-referenced-blocks.js +0 -9
- package/dist/intake/verify-referenced-blocks.js.map +0 -1
- /package/dist/{intake → tools/execute-plan}/draft-id.d.ts +0 -0
- /package/dist/{intake → tools/execute-plan}/draft-id.js +0 -0
- /package/dist/{intake → tools/execute-plan}/plan-extractor.d.ts +0 -0
- /package/dist/{intake → tools/execute-plan}/plan-extractor.js +0 -0
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export function makeRetrySlot(registry) {
|
|
2
|
-
return (input) => {
|
|
3
|
-
const original = registry.get(input.batchId);
|
|
4
|
-
if (!original)
|
|
5
|
-
throw new Error(`unknown batchId for retry: ${input.batchId}`);
|
|
6
|
-
const { toolCategory, tasks, terminalBlockIds } = original;
|
|
7
|
-
if (!toolCategory || toolCategory === 'assist') {
|
|
8
|
-
throw new Error(`retry: original batch '${input.batchId}' has missing or invalid toolCategory ` +
|
|
9
|
-
`'${toolCategory}' — refusing to retry with 'assist' (assist is route-level only)`);
|
|
10
|
-
}
|
|
11
|
-
if (!tasks) {
|
|
12
|
-
throw new Error(`retry: original batch '${input.batchId}' has no stored tasks in registry`);
|
|
13
|
-
}
|
|
14
|
-
return input.retryableFor.map((origIdx, i) => {
|
|
15
|
-
const origTask = tasks[origIdx];
|
|
16
|
-
if (!origTask) {
|
|
17
|
-
throw new Error(`retry: task index ${origIdx} out of range for batch '${input.batchId}' ` +
|
|
18
|
-
`(tasks length: ${tasks.length})`);
|
|
19
|
-
}
|
|
20
|
-
const priorBlock = terminalBlockIds?.get(origIdx);
|
|
21
|
-
return {
|
|
22
|
-
taskIndex: i,
|
|
23
|
-
brief: origTask.brief,
|
|
24
|
-
cwd: input.cwd ?? origTask.cwd,
|
|
25
|
-
agentType: origTask.agentType,
|
|
26
|
-
reviewPolicy: origTask.reviewPolicy,
|
|
27
|
-
contextBlockIds: [
|
|
28
|
-
...(origTask.contextBlockIds ?? []),
|
|
29
|
-
...(priorBlock ? [priorBlock] : []),
|
|
30
|
-
],
|
|
31
|
-
originalTaskIndex: origIdx,
|
|
32
|
-
inheritedToolCategory: toolCategory,
|
|
33
|
-
};
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=retry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/intake/brief-compiler-slots/retry.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,aAAa,CAAC,QAAuB;IACnD,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;QAC3D,IAAI,CAAC,YAAY,IAAK,YAAuB,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,0BAA0B,KAAK,CAAC,OAAO,wCAAwC;gBAC/E,IAAI,YAAY,kEAAkE,CACnF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CACb,qBAAqB,OAAO,4BAA4B,KAAK,CAAC,OAAO,IAAI;oBACzE,kBAAkB,KAAK,CAAC,MAAM,GAAG,CAClC,CAAC;YACJ,CAAC;YACD,MAAM,UAAU,GAAG,gBAAgB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO;gBACL,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG;gBAC9B,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,eAAe,EAAE;oBACf,GAAG,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC;oBACnC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpC;gBACD,iBAAiB,EAAE,OAAO;gBAC1B,qBAAqB,EAAE,YAAY;aACpC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/intake/brief-compiler-slots/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,EAAE,CAoB3D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/intake/brief-compiler-slots/review.ts"],"names":[],"mappings":"AAWA,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAClG,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE5E,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC;gBACN,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,gBAAgB;gBAChB,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;aAC7C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3B,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,gBAAgB;QAChB,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;KAC7C,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export interface BriefSlotFiller<TInput, TBrief> {
|
|
2
|
-
(input: TInput): TBrief;
|
|
3
|
-
}
|
|
4
|
-
export declare class BriefCompiler<TInput, TBrief> {
|
|
5
|
-
private slot;
|
|
6
|
-
constructor(slot: BriefSlotFiller<TInput, TBrief>);
|
|
7
|
-
compile(input: TInput): TBrief;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=brief-compiler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"brief-compiler.d.ts","sourceRoot":"","sources":["../../src/intake/brief-compiler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe,CAAC,MAAM,EAAE,MAAM;IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE;AAE5E,qBAAa,aAAa,CAAC,MAAM,EAAE,MAAM;IAC3B,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;IACzD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAC/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"brief-compiler.js","sourceRoot":"","sources":["../../src/intake/brief-compiler.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,IAAqC;QAArC,SAAI,GAAJ,IAAI,CAAiC;IAAG,CAAC;IAC7D,OAAO,CAAC,KAAa,IAAY,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAC5D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/intake/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA2BlE,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,oBAAoB,CAsGpE"}
|
package/dist/intake/classify.js
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
const PRESET_ROUTES = new Set(['review_code', 'debug_task', 'verify_work', 'audit_document']);
|
|
2
|
-
const MIN_PROMPT_WORDS = 4;
|
|
3
|
-
const VAGUE_PATTERNS = [
|
|
4
|
-
/^please$/i,
|
|
5
|
-
/^help$/i,
|
|
6
|
-
/^fix it$/i,
|
|
7
|
-
/^do it$/i,
|
|
8
|
-
/^handle this$/i,
|
|
9
|
-
/^(can|could) you/i,
|
|
10
|
-
/^(can|could) I/i,
|
|
11
|
-
];
|
|
12
|
-
function getUserContentForRoute(draft) {
|
|
13
|
-
switch (draft.source.route) {
|
|
14
|
-
case 'review_code':
|
|
15
|
-
return draft.source.code || draft.source.inlineContent;
|
|
16
|
-
case 'audit_document':
|
|
17
|
-
return draft.source.document;
|
|
18
|
-
case 'verify_work':
|
|
19
|
-
return draft.source.work;
|
|
20
|
-
default:
|
|
21
|
-
return draft.prompt;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
export function classifyDraft(draft) {
|
|
25
|
-
const reasons = [];
|
|
26
|
-
const promptWords = draft.prompt.trim().split(/\s+/).length;
|
|
27
|
-
if (!draft.prompt.trim()) {
|
|
28
|
-
if (draft.source.route === 'delegate_tasks') {
|
|
29
|
-
return {
|
|
30
|
-
draft,
|
|
31
|
-
classification: 'unrecoverable',
|
|
32
|
-
reasons: ['prompt too vague to form any interpretation — requires a fresh request'],
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (promptWords < 2) {
|
|
37
|
-
return {
|
|
38
|
-
draft,
|
|
39
|
-
classification: 'unrecoverable',
|
|
40
|
-
reasons: ['prompt too vague to form any interpretation — requires a fresh request'],
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
if (draft.questions?.length) {
|
|
44
|
-
reasons.push('draft has open questions from compilation');
|
|
45
|
-
return { draft, classification: 'needs_confirmation', reasons };
|
|
46
|
-
}
|
|
47
|
-
const isConfirmed = draft.confirmed === true;
|
|
48
|
-
if (PRESET_ROUTES.has(draft.source.route)) {
|
|
49
|
-
const presetReasons = [];
|
|
50
|
-
const userContent = getUserContentForRoute(draft);
|
|
51
|
-
if (userContent && userContent.trim().split(/\s+/).length < 2) {
|
|
52
|
-
presetReasons.push('user-provided content is too vague to act on');
|
|
53
|
-
}
|
|
54
|
-
if (draft.filePaths?.some(p => p === '/' || p === '.' || p === '*')) {
|
|
55
|
-
presetReasons.push('file scope is too broad to be actionable');
|
|
56
|
-
}
|
|
57
|
-
if (draft.source.route === 'audit_document' && !draft.filePaths?.length) {
|
|
58
|
-
if (!('document' in draft.source.originalInput)) {
|
|
59
|
-
presetReasons.push('audit has no target — provide filePaths or inline document');
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
if (draft.source.route === 'verify_work') {
|
|
63
|
-
const checklist = draft.source.checklist ?? [];
|
|
64
|
-
const VAGUE_CHECKLIST = /^(check|verify|test|ensure)\s+(everything|all|it|this|that)$/i;
|
|
65
|
-
if (checklist.some(item => VAGUE_CHECKLIST.test(item.trim()))) {
|
|
66
|
-
presetReasons.push('checklist contains overly generic items that are not actionable');
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (presetReasons.length > 0) {
|
|
70
|
-
return { draft, classification: 'needs_confirmation', reasons: presetReasons };
|
|
71
|
-
}
|
|
72
|
-
return { draft, classification: 'ready', reasons: [] };
|
|
73
|
-
}
|
|
74
|
-
if (!isConfirmed) {
|
|
75
|
-
for (const pattern of VAGUE_PATTERNS) {
|
|
76
|
-
if (pattern.test(draft.prompt.trim())) {
|
|
77
|
-
reasons.push('prompt is too vague to form one concrete instruction');
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// Behavior-change detection requires a dangerous *combination* (verb +
|
|
82
|
-
// dangerous object/target), not a bare verb. The earlier broad pattern
|
|
83
|
-
// (`delete|remove|drop|migrate|deploy|push|publish|send` alone) flagged
|
|
84
|
-
// ordinary technical English ("send a request", "publish docs") with no
|
|
85
|
-
// real safety win — kept the combination form below to focus on actual
|
|
86
|
-
// destructive intent.
|
|
87
|
-
const dangerousCombos = [
|
|
88
|
-
/\brm\s+-rf?\b/i,
|
|
89
|
-
/\bdrop\s+(?:the\s+)?(?:\w+\s+)?(?:table|database|schema|index)\b/i,
|
|
90
|
-
/\b(?:delete|truncate)\s+(?:the\s+)?(?:table|database|schema|all|every|everything|users|accounts|files?\b|directory|directories|repo)\b/i,
|
|
91
|
-
/\b(?:deploy|publish|release)\s+(?:to\s+)?(?:production|prod|staging|live|main|master)\b/i,
|
|
92
|
-
/\b(?:force[-\s]push|push\s+--force)\b/i,
|
|
93
|
-
/\bpush\s+(?:to\s+)?(?:main|master|origin\/(?:main|master))\b/i,
|
|
94
|
-
/\bmigrate\s+(?:the\s+)?(?:production|prod|live|database|schema)\b/i,
|
|
95
|
-
];
|
|
96
|
-
const matchedDangerous = dangerousCombos.some(pat => pat.test(draft.prompt));
|
|
97
|
-
if (matchedDangerous && !draft.filePaths?.length) {
|
|
98
|
-
reasons.push('behavior-changing task without explicit scope');
|
|
99
|
-
}
|
|
100
|
-
const securitySensitive = /\b(auth|credential|secret|token|permission|password|key)\b/i;
|
|
101
|
-
if (securitySensitive.test(draft.prompt) && !draft.done) {
|
|
102
|
-
reasons.push('security-sensitive task without explicit done condition');
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
const uniqueReasons = [...new Set(reasons)];
|
|
106
|
-
if (uniqueReasons.length > 0) {
|
|
107
|
-
return { draft, classification: 'needs_confirmation', reasons: uniqueReasons };
|
|
108
|
-
}
|
|
109
|
-
return { draft, classification: 'ready', reasons: [] };
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=classify.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/intake/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export interface EstimateInputs {
|
|
2
|
-
filePaths: string[];
|
|
3
|
-
contextBlockLengthsChars: number[];
|
|
4
|
-
baseInstructionsTokens: number;
|
|
5
|
-
reservedCompletionTokens: number;
|
|
6
|
-
}
|
|
7
|
-
export declare function estimateContextSize(inputs: EstimateInputs): number;
|
|
8
|
-
export interface OverflowCheckInputs {
|
|
9
|
-
estimatedTokens: number;
|
|
10
|
-
modelCap: number;
|
|
11
|
-
tier: 'standard' | 'complex';
|
|
12
|
-
model: string;
|
|
13
|
-
contributors: Array<{
|
|
14
|
-
kind: 'filePath' | 'contextBlock';
|
|
15
|
-
path?: string;
|
|
16
|
-
id?: string;
|
|
17
|
-
estimatedTokens: number;
|
|
18
|
-
}>;
|
|
19
|
-
}
|
|
20
|
-
export interface OverflowEnvelope {
|
|
21
|
-
error: 'context_overflow_predicted';
|
|
22
|
-
message: string;
|
|
23
|
-
details: {
|
|
24
|
-
estimatedTokens: number;
|
|
25
|
-
modelCap: number;
|
|
26
|
-
tier: 'standard' | 'complex';
|
|
27
|
-
model: string;
|
|
28
|
-
biggestContributors: OverflowCheckInputs['contributors'];
|
|
29
|
-
recoveryHints: string[];
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
export declare function checkOverflow(inputs: OverflowCheckInputs): OverflowEnvelope | null;
|
|
33
|
-
//# sourceMappingURL=context-overflow-estimator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context-overflow-estimator.d.ts","sourceRoot":"","sources":["../../src/intake/context-overflow-estimator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAWlE;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjH;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,4BAA4B,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,mBAAmB,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAC;QACzD,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;CACH;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,IAAI,CAmBlF"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
export function estimateContextSize(inputs) {
|
|
3
|
-
let total = inputs.baseInstructionsTokens + inputs.reservedCompletionTokens;
|
|
4
|
-
for (const p of inputs.filePaths) {
|
|
5
|
-
try {
|
|
6
|
-
total += Math.ceil(fs.statSync(p).size / 3.5);
|
|
7
|
-
}
|
|
8
|
-
catch { /* missing files contribute 0; A4a's middleware should have already 400'd if cwd was bad */ }
|
|
9
|
-
}
|
|
10
|
-
for (const len of inputs.contextBlockLengthsChars) {
|
|
11
|
-
total += Math.ceil(len / 3.5);
|
|
12
|
-
}
|
|
13
|
-
return total;
|
|
14
|
-
}
|
|
15
|
-
export function checkOverflow(inputs) {
|
|
16
|
-
if (inputs.estimatedTokens <= inputs.modelCap)
|
|
17
|
-
return null;
|
|
18
|
-
const sorted = [...inputs.contributors].sort((a, b) => b.estimatedTokens - a.estimatedTokens);
|
|
19
|
-
return {
|
|
20
|
-
error: 'context_overflow_predicted',
|
|
21
|
-
message: `Estimated ${inputs.estimatedTokens.toLocaleString()} tokens for this dispatch; tier='${inputs.tier}' (${inputs.model}) cap is ${inputs.modelCap.toLocaleString()} tokens.`,
|
|
22
|
-
details: {
|
|
23
|
-
estimatedTokens: inputs.estimatedTokens,
|
|
24
|
-
modelCap: inputs.modelCap,
|
|
25
|
-
tier: inputs.tier,
|
|
26
|
-
model: inputs.model,
|
|
27
|
-
biggestContributors: sorted,
|
|
28
|
-
recoveryHints: [
|
|
29
|
-
'Split filePaths into smaller batches (e.g., dispatch separately for the largest file).',
|
|
30
|
-
'Trim the largest file (or the largest context block) — these are the inputs the estimator weighs by raw size. Reducing a single dominant input is usually the cheapest fix.',
|
|
31
|
-
"Retry with tier='complex' (mma-delegate accepts agentType='complex'; specialized routes are tier-locked) which has a higher context cap.",
|
|
32
|
-
],
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=context-overflow-estimator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context-overflow-estimator.js","sourceRoot":"","sources":["../../src/intake/context-overflow-estimator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAS9B,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,IAAI,KAAK,GAAG,MAAM,CAAC,sBAAsB,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC,CAAC,2FAA2F,CAAC,CAAC;IACzG,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,wBAAwB,EAAE,CAAC;QAClD,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAuBD,MAAM,UAAU,aAAa,CAAC,MAA2B;IACvD,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;IAC9F,OAAO;QACL,KAAK,EAAE,4BAA4B;QACnC,OAAO,EAAE,aAAa,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,oCAAoC,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK,YAAY,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,UAAU;QACpL,OAAO,EAAE;YACP,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,mBAAmB,EAAE,MAAM;YAC3B,aAAa,EAAE;gBACb,wFAAwF;gBACxF,6KAA6K;gBAC7K,0IAA0I;aAC3I;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { AgentType } from '../types.js';
|
|
2
|
-
import type { DraftTask, SourceRoute } from './types.js';
|
|
3
|
-
export interface BriefDefaults {
|
|
4
|
-
agentType?: AgentType;
|
|
5
|
-
reviewPolicy?: 'full' | 'quality_only' | 'diff_only' | 'none';
|
|
6
|
-
}
|
|
7
|
-
export declare const ROUTE_DEFAULTS: Record<SourceRoute, BriefDefaults>;
|
|
8
|
-
export declare function inferDefaults(route: SourceRoute): BriefDefaults;
|
|
9
|
-
export declare function inferMissingFields(draft: DraftTask): DraftTask;
|
|
10
|
-
//# sourceMappingURL=field-inferer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"field-inferer.d.ts","sourceRoot":"","sources":["../../src/intake/field-inferer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;CAC/D;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,aAAa,CAQ7D,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAI/D;AAWD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAwC9D"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
export const ROUTE_DEFAULTS = {
|
|
2
|
-
delegate_tasks: { agentType: 'standard', reviewPolicy: 'full' },
|
|
3
|
-
execute_plan: { agentType: 'standard', reviewPolicy: 'full' },
|
|
4
|
-
audit_document: { agentType: 'complex', reviewPolicy: 'none' },
|
|
5
|
-
review_code: { agentType: 'complex', reviewPolicy: 'none' },
|
|
6
|
-
verify_work: { agentType: 'complex', reviewPolicy: 'none' },
|
|
7
|
-
debug_task: { agentType: 'complex', reviewPolicy: 'none' },
|
|
8
|
-
investigate_codebase: { agentType: 'complex', reviewPolicy: 'none' },
|
|
9
|
-
};
|
|
10
|
-
export function inferDefaults(route) {
|
|
11
|
-
const defaults = ROUTE_DEFAULTS[route];
|
|
12
|
-
if (!defaults)
|
|
13
|
-
throw new Error(`no defaults table entry for route '${route}'`);
|
|
14
|
-
return defaults;
|
|
15
|
-
}
|
|
16
|
-
const FILE_PATH_PATTERN = /\b([\w./\\-]+\.\w{1,5})\b/g;
|
|
17
|
-
const KNOWN_EXTENSIONS = new Set([
|
|
18
|
-
'ts', 'tsx', 'js', 'jsx', 'json', 'md', 'yaml', 'yml',
|
|
19
|
-
'toml', 'py', 'rs', 'go', 'java', 'css', 'html', 'sql',
|
|
20
|
-
]);
|
|
21
|
-
const ANALYSIS_VERBS = /\b(summarize|describe|explain|list|count|read|review|analyze|check|inspect)\b/i;
|
|
22
|
-
const WRITE_VERBS = /\b(fix|change|update|refactor|delete|migrate|implement|add|create|modify)\b/i;
|
|
23
|
-
export function inferMissingFields(draft) {
|
|
24
|
-
const assumptions = [...(draft.assumptions ?? [])];
|
|
25
|
-
let done = draft.done;
|
|
26
|
-
let filePaths = draft.filePaths;
|
|
27
|
-
const promptWords = draft.prompt.trim().split(/\s+/);
|
|
28
|
-
const fileRefs = [...draft.prompt.matchAll(FILE_PATH_PATTERN)]
|
|
29
|
-
.filter(m => { const ext = m[1].split('.').pop()?.toLowerCase(); return ext && KNOWN_EXTENSIONS.has(ext); });
|
|
30
|
-
const hasSingleScope = (draft.filePaths?.length === 1) || (fileRefs.length <= 1);
|
|
31
|
-
const isTrivial = ANALYSIS_VERBS.test(draft.prompt) &&
|
|
32
|
-
!WRITE_VERBS.test(draft.prompt) &&
|
|
33
|
-
promptWords.length < 100 &&
|
|
34
|
-
hasSingleScope;
|
|
35
|
-
if (!done && isTrivial) {
|
|
36
|
-
done = 'Provide a clear, complete response addressing the request.';
|
|
37
|
-
assumptions.push('inferred done condition for analysis-only task');
|
|
38
|
-
}
|
|
39
|
-
if (!filePaths?.length) {
|
|
40
|
-
const matches = [...draft.prompt.matchAll(FILE_PATH_PATTERN)];
|
|
41
|
-
const candidates = matches
|
|
42
|
-
.map(m => m[1])
|
|
43
|
-
.filter(p => {
|
|
44
|
-
const ext = p.split('.').pop()?.toLowerCase();
|
|
45
|
-
return ext && KNOWN_EXTENSIONS.has(ext);
|
|
46
|
-
});
|
|
47
|
-
if (candidates.length > 0 && candidates.length <= 3) {
|
|
48
|
-
filePaths = [...new Set(candidates)];
|
|
49
|
-
assumptions.push('inferred file scope from prompt');
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (assumptions.length === (draft.assumptions?.length ?? 0)) {
|
|
53
|
-
return draft;
|
|
54
|
-
}
|
|
55
|
-
return { ...draft, done, filePaths, assumptions };
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=field-inferer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"field-inferer.js","sourceRoot":"","sources":["../../src/intake/field-inferer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export declare function extractURLHosts(strings: readonly string[]): string[];
|
|
2
|
-
export interface AllowlistInput {
|
|
3
|
-
fetchAllowlistExtra: readonly string[];
|
|
4
|
-
userSources: readonly string[];
|
|
5
|
-
}
|
|
6
|
-
export type AllowlistProvenance = 'extra' | 'user_source';
|
|
7
|
-
export type HostAllowlist = ReadonlyMap<string, AllowlistProvenance>;
|
|
8
|
-
/**
|
|
9
|
-
* Build the per-task fetch allowlist as a provenance-aware map. Per spec
|
|
10
|
-
* §6.2 / §7.1 step 8, the private-network opt-in is gated on
|
|
11
|
-
* `provenance === 'extra'` — only operator-declared hosts in
|
|
12
|
-
* `fetchAllowlistExtra` are eligible, never hosts harvested from
|
|
13
|
-
* `userSources`. Build order: userSources first (lower precedence), then
|
|
14
|
-
* fetchAllowlistExtra overwrites — so collisions resolve to the operator's
|
|
15
|
-
* deliberate intent.
|
|
16
|
-
*
|
|
17
|
-
* Both sources are validated through canonicalizeHostname; invalid entries
|
|
18
|
-
* (IP literals, single-label names, malformed hostnames, overlong hosts)
|
|
19
|
-
* are silently skipped. This mirrors ResearchConfigSchema's HostString
|
|
20
|
-
* canonicalization as defense-in-depth for callers that have not parsed
|
|
21
|
-
* configuration first; silent skipping preserves URL-extraction behavior
|
|
22
|
-
* for untrusted userSources while keeping this builder non-throwing.
|
|
23
|
-
*/
|
|
24
|
-
export declare function buildHostAllowlist(input: AllowlistInput): HostAllowlist;
|
|
25
|
-
//# sourceMappingURL=host-allowlist-builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-allowlist-builder.d.ts","sourceRoot":"","sources":["../../src/intake/host-allowlist-builder.ts"],"names":[],"mappings":"AAyCA,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAsBpE;AAED,MAAM,WAAW,cAAc;IAC7B,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAErE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CAYvE"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { isIP } from 'node:net';
|
|
2
|
-
const URL_REGEX = /\bhttps?:\/\/[^\s'"<>()]+/gi;
|
|
3
|
-
const FORBIDDEN_HOST_CHARS = /[\/:@?#]|:\/\//;
|
|
4
|
-
const MAX_HOSTNAME_LENGTH = 253;
|
|
5
|
-
const TRAILING_URL_PUNCTUATION = /[.,;:!?]+$/;
|
|
6
|
-
/**
|
|
7
|
-
* Validate and canonicalize a hostname string. Returns the canonical
|
|
8
|
-
* (lowercase, IDNA-encoded) form or null if the input is not a valid
|
|
9
|
-
* DNS FQDN. Mirrors the HostString rules in config/schema.ts as a
|
|
10
|
-
* defense-in-depth layer: even though ResearchConfigSchema already
|
|
11
|
-
* validates fetchAllowlistExtra via HostString, this function ensures
|
|
12
|
-
* that any caller of buildHostAllowlist — including callers that bypass
|
|
13
|
-
* schema parsing — cannot inject non-FQDN entries with "extra" provenance.
|
|
14
|
-
*/
|
|
15
|
-
function canonicalizeHostname(raw) {
|
|
16
|
-
const trimmed = raw.trim();
|
|
17
|
-
if (trimmed.length === 0 || trimmed.length > MAX_HOSTNAME_LENGTH)
|
|
18
|
-
return null;
|
|
19
|
-
if (FORBIDDEN_HOST_CHARS.test(trimmed))
|
|
20
|
-
return null;
|
|
21
|
-
// Strip trailing dot (DNS root label) — example.com. ≡ example.com
|
|
22
|
-
const stripped = trimmed.endsWith('.') ? trimmed.slice(0, -1) : trimmed;
|
|
23
|
-
if (stripped.length === 0 || stripped.length > MAX_HOSTNAME_LENGTH)
|
|
24
|
-
return null;
|
|
25
|
-
let canonical;
|
|
26
|
-
try {
|
|
27
|
-
canonical = new URL(`https://${stripped}`).hostname;
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
if (canonical.length === 0 || canonical.length > MAX_HOSTNAME_LENGTH)
|
|
33
|
-
return null;
|
|
34
|
-
if (isIP(canonical) !== 0)
|
|
35
|
-
return null;
|
|
36
|
-
const labels = canonical.split('.');
|
|
37
|
-
if (labels.length < 2)
|
|
38
|
-
return null;
|
|
39
|
-
for (const label of labels) {
|
|
40
|
-
if (label.length === 0 || label.length > 63)
|
|
41
|
-
return null;
|
|
42
|
-
if (label.startsWith('-') || label.endsWith('-'))
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
return canonical;
|
|
46
|
-
}
|
|
47
|
-
export function extractURLHosts(strings) {
|
|
48
|
-
const out = [];
|
|
49
|
-
const seen = new Set();
|
|
50
|
-
for (const s of strings) {
|
|
51
|
-
const matches = s.match(URL_REGEX) ?? [];
|
|
52
|
-
for (const m of matches) {
|
|
53
|
-
try {
|
|
54
|
-
const candidate = m.replace(TRAILING_URL_PUNCTUATION, '');
|
|
55
|
-
const u = new URL(candidate);
|
|
56
|
-
if (!u.hostname)
|
|
57
|
-
continue;
|
|
58
|
-
const canonical = canonicalizeHostname(u.hostname);
|
|
59
|
-
if (canonical === null)
|
|
60
|
-
continue;
|
|
61
|
-
if (!seen.has(canonical)) {
|
|
62
|
-
seen.add(canonical);
|
|
63
|
-
out.push(canonical);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
// malformed URL — silently skip
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return out;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Build the per-task fetch allowlist as a provenance-aware map. Per spec
|
|
75
|
-
* §6.2 / §7.1 step 8, the private-network opt-in is gated on
|
|
76
|
-
* `provenance === 'extra'` — only operator-declared hosts in
|
|
77
|
-
* `fetchAllowlistExtra` are eligible, never hosts harvested from
|
|
78
|
-
* `userSources`. Build order: userSources first (lower precedence), then
|
|
79
|
-
* fetchAllowlistExtra overwrites — so collisions resolve to the operator's
|
|
80
|
-
* deliberate intent.
|
|
81
|
-
*
|
|
82
|
-
* Both sources are validated through canonicalizeHostname; invalid entries
|
|
83
|
-
* (IP literals, single-label names, malformed hostnames, overlong hosts)
|
|
84
|
-
* are silently skipped. This mirrors ResearchConfigSchema's HostString
|
|
85
|
-
* canonicalization as defense-in-depth for callers that have not parsed
|
|
86
|
-
* configuration first; silent skipping preserves URL-extraction behavior
|
|
87
|
-
* for untrusted userSources while keeping this builder non-throwing.
|
|
88
|
-
*/
|
|
89
|
-
export function buildHostAllowlist(input) {
|
|
90
|
-
const map = new Map();
|
|
91
|
-
for (const h of extractURLHosts(input.userSources)) {
|
|
92
|
-
map.set(h, 'user_source');
|
|
93
|
-
}
|
|
94
|
-
for (const h of input.fetchAllowlistExtra) {
|
|
95
|
-
const canonical = canonicalizeHostname(h);
|
|
96
|
-
if (canonical !== null) {
|
|
97
|
-
map.set(canonical, 'extra');
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return map;
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=host-allowlist-builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-allowlist-builder.js","sourceRoot":"","sources":["../../src/intake/host-allowlist-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,SAAS,GAAG,6BAA6B,CAAC;AAEhD,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAC9C,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAE9C;;;;;;;;GAQG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAC9E,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,mEAAmE;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAChF,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAClF,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACzD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAChE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA0B;IACxD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;gBAC1D,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,QAAQ;oBAAE,SAAS;gBAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,SAAS,KAAK,IAAI;oBAAE,SAAS;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBACpB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAUD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAqB;IACtD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA+B,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/intake/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/intake/index.ts"],"names":[],"mappings":"AAEA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC"}
|
package/dist/intake/index.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
// intake/index.ts — public surface barrel; per architecture.md:262-275.
|
|
2
|
-
export * from './brief-compiler.js';
|
|
3
|
-
export * from './plan-extractor.js';
|
|
4
|
-
export * from './host-allowlist-builder.js';
|
|
5
|
-
export * from './field-inferer.js';
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
package/dist/intake/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intake/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { MultiModelConfig } from '../types.js';
|
|
2
|
-
import type { ContextBlockStore } from '../stores/context-block-tool.js';
|
|
3
|
-
import type { DraftTask, IntakeResult } from './types.js';
|
|
4
|
-
export declare function runIntakePipeline(drafts: DraftTask[], config: MultiModelConfig, contextBlockStore?: ContextBlockStore, _batchId?: string): IntakeResult;
|
|
5
|
-
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,iCAAiC,CAAC;AACzE,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EAIb,MAAM,YAAY,CAAC;AAuCpB,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,gBAAgB,EACxB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,QAAQ,CAAC,EAAE,MAAM,GAChB,YAAY,CAoFd"}
|