@cursor/july 0.1.112 → 0.1.113
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 +4 -0
- package/dist/bin/agent-serve.js +2 -3
- package/dist/channels/checks.d.ts +10 -0
- package/dist/channels/checks.d.ts.map +1 -1
- package/dist/channels/origin/checks.d.ts +1 -1
- package/dist/channels/origin/checks.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +6 -2
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.DxTdhphC.js → app.CAeK13eM.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.Ck9E52Ls.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CR3KTF0X.js → VPLocalSearchBox.C9LbPHod.js} +1 -1
- package/dist/docs/assets/chunks/{arc.CVVqBOdS.js → arc.CmMq2zmS.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CJHGP4ki.js → architectureDiagram-Q4EWVU46.CCXB8Uj5.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.r7UVVRBP.js → baseUniq.CyQo6eLe.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DKmMaTre.js → blockDiagram-DXYQGD6D.JYq6w91N.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.DDJsntUO.js → c4Diagram-AHTNJAMY.BRV8GPJJ.js} +1 -1
- package/dist/docs/assets/chunks/channel.BHiYmnZ4.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.BK2rKt6W.js → chunk-4BX2VUAB.Bv4ooYQR.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DRLV8RnF.js → chunk-4TB4RGXK.t4JtKPcj.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DaKjxtb7.js → chunk-55IACEB6.34lCHj9Y.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.C5sPCIT1.js → chunk-EDXVE4YY.BSwrPNrt.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CSGWyNTB.js → chunk-FMBD7UC4.Beeun-R-.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.D5tK9XEr.js → chunk-OYMX7WX6.BUUFUcJc.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BeZGd1UZ.js → chunk-QZHKN3VN.B2XjHzN_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.U_tfWwQR.js → chunk-YZCP3GAM.CLYG8znk.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Degh8l90.js +1 -0
- package/dist/docs/assets/chunks/clone.BIywbczV.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.DVeRXIb6.js → cose-bilkent-S5V4N54A.DVEa6fZp.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.BpKJAeRZ.js → dagre-KV5264BT.C9PZQK-S.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQOtrd1Z.js → diagram-5BDNPKRD.DoN0uv3Y.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.CSDAhjPI.js → diagram-G4DWMVQ6.Czv3duqx.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.Dpztst2S.js → diagram-MMDJMWI5.BinJ5kWb.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.qJHRizHR.js → diagram-TYMM5635.DW326M4K.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.vbDotH3l.js → erDiagram-SMLLAGMA.U2pR_OA7.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CqS_ZQr4.js → flowDiagram-DWJPFMVM.ByWJXeYK.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DTLdR4pN.js → ganttDiagram-T4ZO3ILL.OquF0Rtg.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D04lnbnr.js → gitGraphDiagram-UUTBAWPF.Bpn01P7X.js} +1 -1
- package/dist/docs/assets/chunks/{graph.BlfqLJsM.js → graph.CNRB6ETL.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.tAooImWA.js → infoDiagram-42DDH7IO.CqhknMWi.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.ClUsVqnJ.js → ishikawaDiagram-UXIWVN3A.C6xpR2af.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.C3tUgyCg.js → journeyDiagram-VCZTEJTY.Cg5f7oB3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CtD9-QCe.js → kanban-definition-6JOO6SKY.Cx9YTwlU.js} +1 -1
- package/dist/docs/assets/chunks/{layout.D38U-LnT.js → layout.ljS-wFtK.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BJmssyhN.js → linear.jSxNrsFC.js} +1 -1
- package/dist/docs/assets/chunks/{min.DNgXoouU.js → min.Cum8AlQw.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.Dcp6cxeu.js → mindmap-definition-QFDTVHPH.BLiysLpe.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.CLDw6zIs.js → pieDiagram-DEJITSTG.BoIDyuKF.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CYaeeY4c.js → quadrantDiagram-34T5L4WZ.DLkpDytR.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.gMYuRpq2.js → requirementDiagram-MS252O5E.DqTVqSu2.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.CZqyHFbc.js → sankeyDiagram-XADWPNL6.CG_6FF7j.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BTsCjUDN.js → sequenceDiagram-FGHM5R23.BIp9602K.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CftT9mLJ.js → stateDiagram-FHFEXIEX.COSXsD9I.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.qrxrbFsX.js +1 -0
- package/dist/docs/assets/chunks/{theme.B_7J9ZsV.js → theme.CXJ7PNwy.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.DbU3WUNw.js → timeline-definition-GMOUNBTQ.CXdVqkLq.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.ixsq-q2u.js → vennDiagram-DHZGUBPP.CZxGuc4r.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.3oVgfqQk.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.C0ewvgbp.js → wardleyDiagram-NUSXRM2D.6_irCgGJ.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.nAEhF4bO.js → xychartDiagram-5P7HB3ND.TRPe92m3.js} +1 -1
- package/dist/docs/assets/{evals.md.BYvfZ-PO.js → evals.md.D3Y3Aixt.js} +2 -2
- package/dist/docs/assets/{evals.md.BYvfZ-PO.lean.js → evals.md.D3Y3Aixt.lean.js} +1 -1
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.js +41 -0
- package/dist/docs/assets/guides_agent-to-agent.md.CD4T5FIl.lean.js +1 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.js +189 -0
- package/dist/docs/assets/guides_jev.md.F5fAkkfN.lean.js +1 -0
- package/dist/docs/assets/{reference_connections.md.CmyrlXfY.js → reference_connections.md.Je9dMsdd.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.Ceq-qT8d.js → reference_extensions.md.Cv5aLCz_.js} +1 -1
- package/dist/docs/assets/{reference_subagents.md.BHsSMMyO.js → reference_subagents.md.Dl16gcBj.js} +2 -2
- package/dist/docs/assets/{reference_subagents.md.BHsSMMyO.lean.js → reference_subagents.md.Dl16gcBj.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.BYzUTeVA.js → reference_tools.md.B1dH1lpa.js} +2 -2
- package/dist/docs/assets/{reference_tools.md.BYzUTeVA.lean.js → reference_tools.md.B1dH1lpa.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +36 -36
- package/dist/docs/evals.html +36 -36
- package/dist/docs/evals.md +3 -0
- package/dist/docs/guides/agent-to-agent.html +65 -54
- package/dist/docs/guides/agent-to-agent.md +73 -68
- package/dist/docs/guides/bitbucket.html +35 -35
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +35 -35
- package/dist/docs/guides/gitlab.html +35 -35
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/improve.html +36 -36
- package/dist/docs/guides/jev.html +248 -0
- package/dist/docs/guides/jev.md +348 -0
- package/dist/docs/guides/mcp-oauth.html +36 -36
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +434 -68
- package/dist/docs/llms.txt +2 -1
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +35 -35
- package/dist/docs/reference/connections.html +37 -37
- package/dist/docs/reference/connections.md +1 -1
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +37 -37
- package/dist/docs/reference/extensions.md +1 -0
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +35 -35
- package/dist/docs/reference/subagents.html +37 -37
- package/dist/docs/reference/subagents.md +1 -1
- package/dist/docs/reference/tools.html +37 -37
- package/dist/docs/reference/tools.md +4 -0
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/pr-autofixer.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +35 -35
- package/dist/extensions/jev/extension.d.ts +43 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -0
- package/dist/extensions/jev/extension.js +47 -0
- package/dist/extensions/jev/lib/evaluate.d.ts +101 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/lib/evaluate.js +167 -0
- package/dist/extensions/jev/skills/gated-write.md +25 -0
- package/dist/extensions/jev/skills/questions.md +33 -0
- package/dist/extensions/jev/tools/evaluate.d.ts +4 -0
- package/dist/extensions/jev/tools/evaluate.d.ts.map +1 -0
- package/dist/extensions/jev/tools/evaluate.js +88 -0
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +2 -0
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +6 -0
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +18 -0
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +8 -4
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +1 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +3 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +1 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +15 -25
- package/dist/internal/hosted-execution-diag.d.ts +12 -4
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +26 -4
- package/dist/internal/hosted-execution-flush.d.ts +1 -0
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
- package/dist/internal/hosted-execution-flush.js +4 -2
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +17 -9
- package/dist/internal/session-engine.d.ts +4 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +28 -4
- package/dist/playground/assets/index-DSMAewbx.css +1 -0
- package/dist/playground/assets/{index-B1c1LeIf.js → index-De_lpFxE.js} +43 -43
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +23 -3
- package/dist/types.d.ts.map +1 -1
- package/docs/evals.md +3 -0
- package/docs/guides/agent-to-agent.md +74 -69
- package/docs/guides/jev.md +353 -0
- package/docs/reference/connections.md +1 -1
- package/docs/reference/extensions.md +1 -0
- package/docs/reference/subagents.md +1 -1
- package/docs/reference/tools.md +4 -0
- package/package.json +8 -1
- package/src/bin/agent-serve.ts +2 -3
- package/src/channels/checks.ts +8 -0
- package/src/channels/origin/checks.ts +3 -1
- package/src/channels/slack/dispatch.ts +7 -2
- package/src/extensions/jev/extension.ts +95 -0
- package/src/extensions/jev/lib/evaluate.ts +289 -0
- package/src/extensions/jev/skills/gated-write.md +25 -0
- package/src/extensions/jev/skills/questions.md +33 -0
- package/src/extensions/jev/tools/evaluate.ts +90 -0
- package/src/extensions.ts +2 -0
- package/src/internal/advertise-tools.ts +6 -0
- package/src/internal/discovery/connections.ts +21 -0
- package/src/internal/discovery/extensions.ts +12 -4
- package/src/internal/discovery/info.ts +1 -0
- package/src/internal/hosted-delivery-protocol.ts +4 -0
- package/src/internal/hosted-delivery.ts +15 -0
- package/src/internal/hosted-execution-diag.ts +33 -4
- package/src/internal/hosted-execution-flush.ts +4 -0
- package/src/internal/server.ts +26 -12
- package/src/internal/session-engine.ts +30 -4
- package/src/types.ts +24 -3
- package/dist/docs/assets/chunks/@localSearchIndexroot.QmjDU6Jh.js +0 -1
- package/dist/docs/assets/chunks/channel.BjpoSbz_.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BgxOlMHw.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BgxOlMHw.js +0 -1
- package/dist/docs/assets/chunks/clone.DRuGBKZC.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.-43J68xB.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.WRXz-Dux.js +0 -162
- package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.js +0 -30
- package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.lean.js +0 -1
- package/dist/playground/assets/index-CK2LX3iD.css +0 -1
- /package/dist/docs/assets/{reference_connections.md.CmyrlXfY.lean.js → reference_connections.md.Je9dMsdd.lean.js} +0 -0
- /package/dist/docs/assets/{reference_extensions.md.Ceq-qT8d.lean.js → reference_extensions.md.Cv5aLCz_.lean.js} +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System One decisions for Agent SDK host code.
|
|
3
|
+
*
|
|
4
|
+
* Chat models write. {@link evaluate} asks Jev for typed choice / score /
|
|
5
|
+
* boolean answers over shared state. Call it from a project tool, a
|
|
6
|
+
* router, or other host code after mounting `@cursor/july/extensions/jev`.
|
|
7
|
+
* Do not set Jev as the `defineAgent` turn model.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { evaluate, decide, above, needsHuman } from "@cursor/july/extensions/jev";
|
|
11
|
+
*
|
|
12
|
+
* const { answers } = await evaluate({
|
|
13
|
+
* state: draft,
|
|
14
|
+
* questions: {
|
|
15
|
+
* route: {
|
|
16
|
+
* type: "choice",
|
|
17
|
+
* instructions: "Which queue should handle this?",
|
|
18
|
+
* criteria: {
|
|
19
|
+
* billing: "charges, invoices, refunds",
|
|
20
|
+
* shipping: "delivery",
|
|
21
|
+
* technical: "bugs and outages",
|
|
22
|
+
* },
|
|
23
|
+
* },
|
|
24
|
+
* post: {
|
|
25
|
+
* type: "boolean",
|
|
26
|
+
* instructions: "Is this safe to post publicly?",
|
|
27
|
+
* },
|
|
28
|
+
* },
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* if (needsHuman(answers.route) || !above(answers.post, 0.85)) {
|
|
32
|
+
* return { action: "review" };
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* Auth is `TYPESAFE_API_KEY`. `model` is a TypeSafe id (`jev-latest` by
|
|
37
|
+
* default).
|
|
38
|
+
*/
|
|
39
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
40
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
41
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
42
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
43
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
44
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
45
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
/** TypeSafe model used when {@link EvaluateArgs.model} is omitted. */
|
|
49
|
+
export const DEFAULT_EVALUATION_MODEL = "jev-latest";
|
|
50
|
+
/** Default bar for {@link needsHuman} when the caller does not pass one. */
|
|
51
|
+
export const DEFAULT_HUMAN_THRESHOLD = 0.7;
|
|
52
|
+
const DEFAULT_BASE_URL = "https://api.typesafe.ai/v1";
|
|
53
|
+
function resolveApiKey(explicit) {
|
|
54
|
+
var _a;
|
|
55
|
+
const key = (_a = (explicit !== null && explicit !== void 0 ? explicit : process.env.TYPESAFE_API_KEY)) === null || _a === void 0 ? void 0 : _a.trim();
|
|
56
|
+
if (key === undefined || key === "") {
|
|
57
|
+
throw new Error("evaluate requires TYPESAFE_API_KEY");
|
|
58
|
+
}
|
|
59
|
+
return key;
|
|
60
|
+
}
|
|
61
|
+
function toWireQuestion(question) {
|
|
62
|
+
if (question.type === "boolean") {
|
|
63
|
+
return { type: "noul", instructions: question.instructions };
|
|
64
|
+
}
|
|
65
|
+
return question;
|
|
66
|
+
}
|
|
67
|
+
function asRecord(value, label) {
|
|
68
|
+
if (value === null || typeof value !== "object") {
|
|
69
|
+
throw new Error(`evaluate ${label}`);
|
|
70
|
+
}
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
function decodeAnswer(question, raw) {
|
|
74
|
+
const value = asRecord(raw, "answer is missing");
|
|
75
|
+
if (question.type === "boolean") {
|
|
76
|
+
if (typeof value.noul !== "number") {
|
|
77
|
+
throw new Error("evaluate noul is not a number");
|
|
78
|
+
}
|
|
79
|
+
return { type: "boolean", probability: value.noul };
|
|
80
|
+
}
|
|
81
|
+
if (question.type === "choice") {
|
|
82
|
+
if (typeof value.choice !== "string") {
|
|
83
|
+
throw new Error("evaluate choice is not a string");
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
type: "choice",
|
|
87
|
+
choice: value.choice,
|
|
88
|
+
probabilities: asRecord(value.probabilities, "choice probabilities are missing"),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (typeof value.score !== "number") {
|
|
92
|
+
throw new Error("evaluate score is not a number");
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
type: "score",
|
|
96
|
+
score: value.score,
|
|
97
|
+
probabilities: asRecord(value.probabilities, "score probabilities are missing"),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function postSystemOne(args) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
const response = yield args.fetch(args.url, {
|
|
103
|
+
method: "POST",
|
|
104
|
+
headers: {
|
|
105
|
+
Authorization: `Bearer ${args.apiKey}`,
|
|
106
|
+
"Content-Type": "application/json",
|
|
107
|
+
},
|
|
108
|
+
body: JSON.stringify(args.body),
|
|
109
|
+
});
|
|
110
|
+
const text = yield response.text();
|
|
111
|
+
let parsed;
|
|
112
|
+
try {
|
|
113
|
+
parsed = text.length === 0 ? {} : JSON.parse(text);
|
|
114
|
+
}
|
|
115
|
+
catch (_a) {
|
|
116
|
+
throw new Error(`evaluate returned non-JSON (${response.status})`);
|
|
117
|
+
}
|
|
118
|
+
if (!response.ok) {
|
|
119
|
+
throw new Error(`evaluate failed (${response.status}): ${text.slice(0, 240)}`);
|
|
120
|
+
}
|
|
121
|
+
return asRecord(asRecord(parsed, "response is not an object").answers, "response is missing answers");
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/** Ask Jev for typed answers over one state. */
|
|
125
|
+
export function evaluate(args) {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
127
|
+
var _a, _b, _c;
|
|
128
|
+
const questions = {};
|
|
129
|
+
for (const [id, question] of Object.entries(args.questions)) {
|
|
130
|
+
questions[id] = toWireQuestion(question);
|
|
131
|
+
}
|
|
132
|
+
const raw = yield postSystemOne({
|
|
133
|
+
url: `${((_a = args.baseUrl) !== null && _a !== void 0 ? _a : DEFAULT_BASE_URL).replace(/\/$/u, "")}/systemone`,
|
|
134
|
+
apiKey: resolveApiKey(args.apiKey),
|
|
135
|
+
fetch: (_b = args.fetch) !== null && _b !== void 0 ? _b : globalThis.fetch,
|
|
136
|
+
body: {
|
|
137
|
+
model: (_c = args.model) !== null && _c !== void 0 ? _c : DEFAULT_EVALUATION_MODEL,
|
|
138
|
+
state: args.state,
|
|
139
|
+
questions,
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
const answers = {};
|
|
143
|
+
for (const id of Object.keys(args.questions)) {
|
|
144
|
+
answers[id] = decodeAnswer(args.questions[id], raw[id]);
|
|
145
|
+
}
|
|
146
|
+
return { answers };
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/** Same as {@link evaluate}, returning only `answers`. */
|
|
150
|
+
export function decide(args) {
|
|
151
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
152
|
+
const result = yield evaluate(args);
|
|
153
|
+
return result.answers;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
export function above(answer, threshold) {
|
|
157
|
+
if (answer.type === "boolean") {
|
|
158
|
+
return answer.probability >= threshold;
|
|
159
|
+
}
|
|
160
|
+
return answer.score >= threshold;
|
|
161
|
+
}
|
|
162
|
+
export function needsHuman(answer, threshold = DEFAULT_HUMAN_THRESHOLD) {
|
|
163
|
+
if (answer.type === "boolean") {
|
|
164
|
+
return answer.probability < threshold;
|
|
165
|
+
}
|
|
166
|
+
return answer.probabilities[answer.choice] < threshold;
|
|
167
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Gate a channel wake, approval, or review comment on Jev by calling decide, then continuing or holding."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Gating a GitHub write on Jev
|
|
6
|
+
|
|
7
|
+
Channel hooks can call `decide` before they start a model turn. Return
|
|
8
|
+
`null` when the answer misses the bar; return `{ auth }` or `{ task }`
|
|
9
|
+
when the agent should run.
|
|
10
|
+
|
|
11
|
+
This extension's `evaluate` tool does not write to GitHub. When an
|
|
12
|
+
approval or a review comment must follow the judgment, add a server tool
|
|
13
|
+
in this project that calls `decide`, then writes or holds in the same
|
|
14
|
+
`execute`.
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { above, decide, needsHuman } from "@cursor/july/extensions/jev";
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Hold when `needsHuman` is true or `above` misses the bar. Very low and
|
|
21
|
+
low risk can approve; medium and above hold. A finding comment posts
|
|
22
|
+
only when the draft is a real bug. Calibrate those numbers on labeled
|
|
23
|
+
pull requests from this workflow. Pass the pull request title, summary,
|
|
24
|
+
and draft, not the checkout. Return without writing when
|
|
25
|
+
`ctx.session.purpose === "eval"`.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Ask Jev for a risk tier, a finding judgment, or a score when you are not about to approve or comment."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Asking Jev
|
|
6
|
+
|
|
7
|
+
Call this extension's `evaluate` tool when you need a typed judgment over
|
|
8
|
+
a pull request and you are not about to approve or comment. It returns
|
|
9
|
+
answers only. The tool appears as `<namespace>__evaluate`.
|
|
10
|
+
|
|
11
|
+
## Questions
|
|
12
|
+
|
|
13
|
+
Pass `state` (the pull request title, a short summary of the diff, and
|
|
14
|
+
any draft finding) and one or more questions. Each question has an `id`,
|
|
15
|
+
a `type`, and `instructions`.
|
|
16
|
+
|
|
17
|
+
- `boolean`: probability of true between 0 and 1
|
|
18
|
+
- `choice`: `criteria` maps each option name to a short description; the
|
|
19
|
+
answer names one option
|
|
20
|
+
- `score`: `criteria` from lowest to highest; the answer is a number
|
|
21
|
+
along that rubric
|
|
22
|
+
|
|
23
|
+
`instructions` can set the decision, who the review is for, and which
|
|
24
|
+
evidence to weigh. Pass the pull request summary, not the checkout.
|
|
25
|
+
|
|
26
|
+
## Reading answers
|
|
27
|
+
|
|
28
|
+
A boolean answer has `probability`. A choice has `choice` and
|
|
29
|
+
`probabilities`. A score has `score` and `probabilities`.
|
|
30
|
+
|
|
31
|
+
When an approval or a review comment must follow the judgment, use a
|
|
32
|
+
project tool that calls `decide` itself. Do not treat these answers as
|
|
33
|
+
a GitHub write.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../../src/extensions/jev/tools/evaluate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAuDxD,QAAA,MAAM,YAAY,EAAE,cA8BlB,CAAC;eAEY,YAAY"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { defineTool } from "../../../tools.js";
|
|
12
|
+
import extension from "../extension.js";
|
|
13
|
+
import { evaluate } from "../lib/evaluate.js";
|
|
14
|
+
const booleanQuestion = z.object({
|
|
15
|
+
id: z.string().min(1),
|
|
16
|
+
type: z.literal("boolean"),
|
|
17
|
+
instructions: z.string().min(1),
|
|
18
|
+
});
|
|
19
|
+
const choiceQuestion = z.object({
|
|
20
|
+
id: z.string().min(1),
|
|
21
|
+
type: z.literal("choice"),
|
|
22
|
+
instructions: z.string().min(1),
|
|
23
|
+
criteria: z.record(z.string()),
|
|
24
|
+
});
|
|
25
|
+
const scoreQuestion = z.object({
|
|
26
|
+
id: z.string().min(1),
|
|
27
|
+
type: z.literal("score"),
|
|
28
|
+
instructions: z.string().min(1),
|
|
29
|
+
criteria: z.array(z.string()).min(2),
|
|
30
|
+
});
|
|
31
|
+
const question = z.discriminatedUnion("type", [
|
|
32
|
+
booleanQuestion,
|
|
33
|
+
choiceQuestion,
|
|
34
|
+
scoreQuestion,
|
|
35
|
+
]);
|
|
36
|
+
function toQuestionMap(questions) {
|
|
37
|
+
const map = {};
|
|
38
|
+
for (const item of questions) {
|
|
39
|
+
if (item.type === "boolean") {
|
|
40
|
+
map[item.id] = {
|
|
41
|
+
type: "boolean",
|
|
42
|
+
instructions: item.instructions,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
else if (item.type === "choice") {
|
|
46
|
+
map[item.id] = {
|
|
47
|
+
type: "choice",
|
|
48
|
+
instructions: item.instructions,
|
|
49
|
+
criteria: item.criteria,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
map[item.id] = {
|
|
54
|
+
type: "score",
|
|
55
|
+
instructions: item.instructions,
|
|
56
|
+
criteria: item.criteria,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return map;
|
|
61
|
+
}
|
|
62
|
+
const evaluateTool = defineTool({
|
|
63
|
+
description: "Ask Jev for typed boolean, choice, or score answers over one state. Returns answers only; it does not post, assign, or merge.",
|
|
64
|
+
effect: "read",
|
|
65
|
+
inputSchema: z
|
|
66
|
+
.object({
|
|
67
|
+
state: z
|
|
68
|
+
.union([z.string(), z.array(z.unknown()), z.record(z.unknown())])
|
|
69
|
+
.describe("Ticket, pull request, or other state Jev should judge. Not repo source."),
|
|
70
|
+
questions: z
|
|
71
|
+
.array(question)
|
|
72
|
+
.min(1)
|
|
73
|
+
.describe("One or more typed questions over the same state."),
|
|
74
|
+
})
|
|
75
|
+
.refine(input => new Set(input.questions.map(item => item.id)).size ===
|
|
76
|
+
input.questions.length, "questions must not repeat an id"),
|
|
77
|
+
execute(input) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
return evaluate({
|
|
80
|
+
state: input.state,
|
|
81
|
+
questions: toQuestionMap(input.questions),
|
|
82
|
+
apiKey: extension.config.apiKey,
|
|
83
|
+
model: extension.config.model,
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
export default evaluateTool;
|
package/dist/extensions.d.ts
CHANGED
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
* the agent should not carry.
|
|
69
69
|
*/
|
|
70
70
|
import type { CursorPluginOptions, DisabledConnectionDefinition, DisabledDefinition, DisabledToolDefinition, Extension, ExtensionMount, ExtensionOptions } from "./types.js";
|
|
71
|
-
export type { CursorPluginDeclaration, CursorPluginOptions, DisabledConnectionDefinition, DisabledDefinition, DisabledToolDefinition, DiscoveredExtension, Extension, ExtensionDeclaration, ExtensionMount, ExtensionOptions, } from "./types.js";
|
|
71
|
+
export type { CursorPluginDeclaration, CursorPluginOptions, DisabledConnectionDefinition, DisabledDefinition, DisabledToolDefinition, DiscoveredExtension, Extension, ExtensionContributionSelection, ExtensionDeclaration, ExtensionMount, ExtensionOptions, } from "./types.js";
|
|
72
72
|
export declare function defineExtension<TConfig = undefined, TInput = TConfig>(options: ExtensionOptions<TConfig, TInput>): Extension<TConfig, TInput>;
|
|
73
73
|
export declare function disableTool(): DisabledToolDefinition;
|
|
74
74
|
export declare function disableConnection(): DisabledConnectionDefinition;
|
package/dist/extensions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,eAAe,CAAC,OAAO,GAAG,SAAS,EAAE,MAAM,GAAG,OAAO,EACnE,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,GACzC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,8BAA8B,EAC9B,oBAAoB,EACpB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,eAAe,CAAC,OAAO,GAAG,SAAS,EAAE,MAAM,GAAG,OAAO,EACnE,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,GACzC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CA8B5B;AAED,wBAAgB,WAAW,IAAI,sBAAsB,CAEpD;AAED,wBAAgB,iBAAiB,IAAI,4BAA4B,CAEhE;AAED,iEAAiE;AACjE,wBAAgB,OAAO,IAAI,kBAAkB,CAE5C;AAED,wBAAgB,YAAY,IAAI,kBAAkB,CAEjD;AAED,wBAAgB,WAAW,IAAI,kBAAkB,CAEhD;AAED,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD;AAED,wBAAgB,eAAe,IAAI,kBAAkB,CAEpD;AAED,wBAAgB,eAAe,IAAI,kBAAkB,CAEpD;AAED,wBAAgB,mBAAmB,IAAI,kBAAkB,CAExD;AAED,wBAAgB,gBAAgB,IAAI,kBAAkB,CAErD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CAUzE"}
|
package/dist/extensions.js
CHANGED
|
@@ -71,6 +71,7 @@ import { brandDefinition } from "./internal/brand.js";
|
|
|
71
71
|
export function defineExtension(options) {
|
|
72
72
|
let mounted;
|
|
73
73
|
const mount = (config) => {
|
|
74
|
+
var _a;
|
|
74
75
|
const parsed = options.config === undefined
|
|
75
76
|
? config
|
|
76
77
|
: options.config.parse(config);
|
|
@@ -78,6 +79,7 @@ export function defineExtension(options) {
|
|
|
78
79
|
return brandDefinition("extension", {
|
|
79
80
|
extension: handle,
|
|
80
81
|
config: parsed,
|
|
82
|
+
contributions: (_a = options.contributions) === null || _a === void 0 ? void 0 : _a.call(options, parsed),
|
|
81
83
|
});
|
|
82
84
|
};
|
|
83
85
|
const handle = Object.defineProperties(mount, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advertise-tools.d.ts","sourceRoot":"","sources":["../../src/internal/advertise-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAGpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9D,QAAQ,CACN,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,MAAM,CAAC,UAAU,EAAE,oBAAoB,GAAG,aAAa,CAAC;CACzD;AAED;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAiC,CAAC;AAO7E,2DAA2D;AAC3D,MAAM,WAAW,oBAAoB;IACnC,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACxC,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjE,0DAA0D;IAC1D,SAAS,CAAC,EAAE,CACV,UAAU,EAAE,oBAAoB,EAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"advertise-tools.d.ts","sourceRoot":"","sources":["../../src/internal/advertise-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAGpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9D,QAAQ,CACN,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,MAAM,CAAC,UAAU,EAAE,oBAAoB,GAAG,aAAa,CAAC;CACzD;AAED;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAiC,CAAC;AAO7E,2DAA2D;AAC3D,MAAM,WAAW,oBAAoB;IACnC,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACxC,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjE,0DAA0D;IAC1D,SAAS,CAAC,EAAE,CACV,UAAU,EAAE,oBAAoB,EAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAsF5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,oBAAoB,EAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAwB/B;AAsHD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAkBR"}
|
|
@@ -95,6 +95,9 @@ export function resolveAdvertisedTools(args) {
|
|
|
95
95
|
args.onConnectionError(connection.name, listing.error);
|
|
96
96
|
continue;
|
|
97
97
|
}
|
|
98
|
+
if (connection.optional === true) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
98
101
|
throw new Error(`Failed to list tools on advertised connection "${connection.name}": ${describeError(listing.error)}`, { cause: listing.error });
|
|
99
102
|
}
|
|
100
103
|
const { source, listed } = listing;
|
|
@@ -106,6 +109,9 @@ export function resolveAdvertisedTools(args) {
|
|
|
106
109
|
args.onConnectionError(connection.name, error);
|
|
107
110
|
continue;
|
|
108
111
|
}
|
|
112
|
+
if (connection.optional === true) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
109
115
|
throw error;
|
|
110
116
|
}
|
|
111
117
|
const intended = listed.filter(info => !isDoNotCallTool(info.annotations) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/connections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAExB,KAAK,oBAAoB,EAQ1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,cAAc,CAAC;AAItB,4DAA4D;AAC5D,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,mBAAmB,GAC7B,MAAM,CAeR;AAkGD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,GAChD,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA4BjC;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAe3C;AA4BD,wBAAsB,eAAe,CACnC,GAAG,EAAE,gBAAgB,EACrB,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAuBjC;AAED,iEAAiE;AACjE,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,oBAAoB,EAChC,IAAI,EAAE,OAAO,GAAG,MAAM,GACrB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/connections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAExB,KAAK,oBAAoB,EAQ1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,cAAc,CAAC;AAItB,4DAA4D;AAC5D,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,mBAAmB,GAC7B,MAAM,CAeR;AAkGD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,GAChD,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA4BjC;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAe3C;AA4BD,wBAAsB,eAAe,CACnC,GAAG,EAAE,gBAAgB,EACrB,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAuBjC;AAED,iEAAiE;AACjE,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,oBAAoB,EAChC,IAAI,EAAE,OAAO,GAAG,MAAM,GACrB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CA4O3C"}
|
|
@@ -218,6 +218,23 @@ export function compileConnection(ctx, entryPath, name, connection, role) {
|
|
|
218
218
|
});
|
|
219
219
|
return undefined;
|
|
220
220
|
}
|
|
221
|
+
if (connection.optional !== undefined &&
|
|
222
|
+
typeof connection.optional !== "boolean") {
|
|
223
|
+
ctx.diagnostics.push({
|
|
224
|
+
severity: "error",
|
|
225
|
+
path: displayPath(ctx, entryPath),
|
|
226
|
+
message: "MCP connection `optional` must be a boolean.",
|
|
227
|
+
});
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
if (connection.optional === true && connection.advertiseTools !== true) {
|
|
231
|
+
ctx.diagnostics.push({
|
|
232
|
+
severity: "error",
|
|
233
|
+
path: displayPath(ctx, entryPath),
|
|
234
|
+
message: "MCP connection `optional` skips advertised listing failures; set `advertiseTools: true` or drop `optional`.",
|
|
235
|
+
});
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
221
238
|
const parsedEffects = parseConnectionEffects(connection.effects);
|
|
222
239
|
if (!parsedEffects.ok) {
|
|
223
240
|
ctx.diagnostics.push({
|
|
@@ -352,6 +369,7 @@ export function compileConnection(ctx, entryPath, name, connection, role) {
|
|
|
352
369
|
description: connection.description,
|
|
353
370
|
auth: connection.auth,
|
|
354
371
|
advertiseTools: connection.advertiseTools,
|
|
372
|
+
optional: connection.optional,
|
|
355
373
|
effects: parsedEffects.value,
|
|
356
374
|
tools: parsedTools.value,
|
|
357
375
|
disallowedTools: parsedDisallowed.value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/extensions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,mBAAmB,EAEnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/extensions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,mBAAmB,EAEnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EAGd,aAAa,EACb,QAAQ,EAET,MAAM,gBAAgB,CAAC;AASxB,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,cAAc,CAAC;AA+BlE,yEAAyE;AACzE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,gBAAgB,EACrB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA4BhC"}
|
|
@@ -273,16 +273,20 @@ function readExtensionTree(ctx, site, mount, root) {
|
|
|
273
273
|
}
|
|
274
274
|
return Object.assign(Object.assign({}, plugin), { tools: [], hostConnections: [], subagents: [], hooks: [], channels: [], schedules: [], seedFiles: [] });
|
|
275
275
|
}
|
|
276
|
-
return readNativeTree(ctx, root);
|
|
276
|
+
return readNativeTree(ctx, root, mount.contributions);
|
|
277
277
|
});
|
|
278
278
|
}
|
|
279
|
-
function readNativeTree(ctx, root) {
|
|
279
|
+
function readNativeTree(ctx, root, contributions) {
|
|
280
280
|
return __awaiter(this, void 0, void 0, function* () {
|
|
281
281
|
yield warnAgentRootOnlySlots(ctx, root);
|
|
282
282
|
const connections = yield loadConnections(ctx, join(root, "mcp-connections"));
|
|
283
283
|
return {
|
|
284
|
-
tools:
|
|
285
|
-
|
|
284
|
+
tools: (contributions === null || contributions === void 0 ? void 0 : contributions.tools) === false
|
|
285
|
+
? []
|
|
286
|
+
: yield loadTools(ctx, join(root, "tools")),
|
|
287
|
+
skills: (contributions === null || contributions === void 0 ? void 0 : contributions.skills) === false
|
|
288
|
+
? []
|
|
289
|
+
: yield loadSkills(ctx, join(root, "skills")),
|
|
286
290
|
connections,
|
|
287
291
|
hostConnections: yield loadHostConnections(ctx, root, connections),
|
|
288
292
|
overlaidServers: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAKxB,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAKxB,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CA2KnE"}
|
|
@@ -72,6 +72,7 @@ export function projectInfo(project) {
|
|
|
72
72
|
name: connection.name,
|
|
73
73
|
transport: connectionTransportLabel(connection.transport),
|
|
74
74
|
advertiseTools: connection.advertiseTools,
|
|
75
|
+
optional: connection.optional,
|
|
75
76
|
effects: connection.effects,
|
|
76
77
|
tools: connection.tools,
|
|
77
78
|
disallowedTools: connection.disallowedTools,
|
|
@@ -24,6 +24,8 @@ export type HostedGuestError = {
|
|
|
24
24
|
classification: HostedFailureClassification;
|
|
25
25
|
message?: string;
|
|
26
26
|
turnStatus?: string;
|
|
27
|
+
/** Runner/SDK code (`unknown`, `canceled`, …). Not the human message. */
|
|
28
|
+
errorCode?: string;
|
|
27
29
|
};
|
|
28
30
|
/**
|
|
29
31
|
* Hosted delivery is the only HTTP surface whose failures drive Temporal
|
|
@@ -36,6 +38,7 @@ export declare function hostedGuestErrorResponse(input: {
|
|
|
36
38
|
retry: HostedGuestRetryDisposition;
|
|
37
39
|
message?: string;
|
|
38
40
|
turnStatus?: string;
|
|
41
|
+
errorCode?: string;
|
|
39
42
|
}): Response;
|
|
40
43
|
/**
|
|
41
44
|
* Filename under the serve `--state-root` (not the per-slug SessionEngine
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-delivery-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery-protocol.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AACpE,eAAO,MAAM,qBAAqB,kCAAkC,CAAC;AACrE,eAAO,MAAM,qBAAqB,kCAAkC,CAAC;AACrE,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,2BAA2B,aAAa,CAAC;AAEtD,MAAM,MAAM,2BAA2B,GACnC,OAAO,4BAA4B,GACnC,OAAO,2BAA2B,CAAC;AAEvC,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,UAAU,GACV,UAAU,GACV,OAAO,GACP,YAAY,GACZ,cAAc,GACd,SAAS,CAAC;AAEd,MAAM,MAAM,mBAAmB,GAC3B,KAAK,GACL,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,2BAA2B,GAAG;IACxC,CAAC,EAAE,OAAO,qCAAqC,CAAC;IAChD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAmBF,MAAM,MAAM,iBAAiB,GACzB,uBAAuB,GACvB,yBAAyB,GACzB,4BAA4B,GAC5B,4BAA4B,GAC5B,yBAAyB,GACzB,uBAAuB,GACvB,mBAAmB,GACnB,yBAAyB,GACzB,WAAW,GACX,uBAAuB,GACvB,2BAA2B,GAC3B,mCAAmC,GACnC,8BAA8B,GAC9B,kCAAkC,GAClC,4BAA4B,GAC5B,4BAA4B,GAC5B,gBAAgB,GAChB,0BAA0B,GAC1B,0BAA0B,GAC1B,iBAAiB,GACjB,oBAAoB,GACpB,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,sBAAsB,CAAC;AAE3B,eAAO,MAAM,8BAA8B,EAAE,MAAM,CACjD,iBAAiB,EACjB,IAAI,CAAC,2BAA2B,EAAE,GAAG,CAAC,CA6BvC,CAAC;AAEF,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,GACX,2BAA2B,CAO7B;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,GACb,2BAA2B,GAAG,SAAS,CAezC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,2BAA2B,CAAC;IACnC,cAAc,EAAE,2BAA2B,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"hosted-delivery-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,6 +86,7 @@ export function hostedGuestErrorResponse(input) {
|
|
|
86
86
|
classification: hostedFailureClassification(input.error),
|
|
87
87
|
message: input.message,
|
|
88
88
|
turnStatus: input.turnStatus,
|
|
89
|
+
errorCode: input.errorCode,
|
|
89
90
|
};
|
|
90
91
|
return Response.json(body, { status: input.status });
|
|
91
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { randomBytes } from "node:crypto";
|
|
|
11
11
|
import { dispatchOutcome } from "./channel-dispatch.js";
|
|
12
12
|
import { consumeHostedBoundSecrets, } from "./cursor/hosted-bound-secrets.js";
|
|
13
13
|
import { createDeferredChannelSession, DeferredChannelSessionError, } from "./deferred-channel-session.js";
|
|
14
|
+
import { describeErrorCode } from "./describe-error.js";
|
|
14
15
|
import { formatGuestNetworkServerTiming, GUEST_CONNECT_STALLED, GUEST_NETWORK_UNAVAILABLE, GuestNetworkUnavailableError, waitForGuestNetworkReady, } from "./guest-network.js";
|
|
15
16
|
import { getHostedAdmissionAdapter, } from "./hosted-admission-adapter.js";
|
|
16
17
|
import { HostedAdmissionLocalSendError, runDuringHostedAdmission, } from "./hosted-admission-context.js";
|
|
@@ -516,11 +517,13 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
516
517
|
const classification = fields.failureCode === undefined
|
|
517
518
|
? undefined
|
|
518
519
|
: hostedFailureClassification(fields.failureCode);
|
|
519
|
-
yield flushHostedExecutionRecord(sinks, Object.assign(Object.assign(Object.assign(Object.assign({ executionId, sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: Math.max(0, Math.round(performance.now() - startedAt)) }, (fields.message === undefined
|
|
520
|
+
yield flushHostedExecutionRecord(sinks, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ executionId, sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: Math.max(0, Math.round(performance.now() - startedAt)) }, (fields.message === undefined
|
|
520
521
|
? {}
|
|
521
522
|
: { message: fields.message })), (fields.abortReason === undefined
|
|
522
523
|
? {}
|
|
523
|
-
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode
|
|
524
|
+
: { abortReason: fields.abortReason })), { failureCode: fields.failureCode }), (fields.errorCode === undefined
|
|
525
|
+
? {}
|
|
526
|
+
: { errorCode: fields.errorCode })), { classification }), (fields.error === undefined ? {} : { error: fields.error })));
|
|
524
527
|
});
|
|
525
528
|
// Claim the file before the turn runs. The host reads it after its
|
|
526
529
|
// own POST returns, which for a 9-minute timeout is while this turn
|
|
@@ -586,24 +589,15 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
586
589
|
const hostedFailure = outcome.status === "finished"
|
|
587
590
|
? undefined
|
|
588
591
|
: hostedFailureForUnfinishedTurn(outcome);
|
|
589
|
-
yield writeDiag({
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
message: outcome.errorMessage,
|
|
593
|
-
abortReason: abortReasonFromTurnStatus(outcome.status, outcome.cancellationReason),
|
|
594
|
-
failureCode: hostedFailure === null || hostedFailure === void 0 ? void 0 : hostedFailure.error,
|
|
595
|
-
});
|
|
592
|
+
yield writeDiag(Object.assign({ sessionId: session.id, turnStatus: outcome.status, message: outcome.errorMessage, abortReason: abortReasonFromTurnStatus(outcome.status, outcome.cancellationReason), failureCode: hostedFailure === null || hostedFailure === void 0 ? void 0 : hostedFailure.error }, (outcome.errorCode === undefined
|
|
593
|
+
? {}
|
|
594
|
+
: { errorCode: outcome.errorCode })));
|
|
596
595
|
const reply = hostedFailure !== undefined
|
|
597
596
|
? {
|
|
598
597
|
status: 503,
|
|
599
|
-
body: {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
retry: hostedFailure.retry,
|
|
603
|
-
classification: hostedFailureClassification(hostedFailure.error),
|
|
604
|
-
turnStatus: outcome.status,
|
|
605
|
-
message: outcome.errorMessage,
|
|
606
|
-
},
|
|
598
|
+
body: Object.assign({ ok: false, error: hostedFailure.error, retry: hostedFailure.retry, classification: hostedFailureClassification(hostedFailure.error), turnStatus: outcome.status, message: outcome.errorMessage }, (outcome.errorCode === undefined
|
|
599
|
+
? {}
|
|
600
|
+
: { errorCode: outcome.errorCode })),
|
|
607
601
|
}
|
|
608
602
|
: {
|
|
609
603
|
status: 200,
|
|
@@ -629,14 +623,10 @@ export function registerHostedDeliveryRoute(input) {
|
|
|
629
623
|
yield Promise.allSettled([...owner.inflightInjects]);
|
|
630
624
|
}
|
|
631
625
|
evictHostedSdkSessions(input.evictSdkSession, sessionId, execution.sessionPublicId);
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
abortReason: "execute_throw",
|
|
637
|
-
failureCode: "internal_error",
|
|
638
|
-
error,
|
|
639
|
-
});
|
|
626
|
+
const thrownErrorCode = describeErrorCode(error);
|
|
627
|
+
yield writeDiag(Object.assign({ sessionId: "", turnStatus: "error", message: error instanceof Error ? error.message : String(error), abortReason: "execute_throw", failureCode: "internal_error", error }, (thrownErrorCode === undefined
|
|
628
|
+
? {}
|
|
629
|
+
: { errorCode: thrownErrorCode })));
|
|
640
630
|
const endedAt = hostedExecutionNow();
|
|
641
631
|
// Preserve completion/drain marks when the failure happened
|
|
642
632
|
// during post-drain work; otherwise collapse to endedAt.
|