@sentry/junior 0.202.0 → 0.204.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-CMyTD4DD.js +17509 -0
- package/dist/agent-hooks-Bbcp9e33.js +4040 -0
- package/dist/agent-runner-DNb1A49M.js +678 -0
- package/dist/api/schema.d.ts +2728 -2639
- package/dist/api/schema.js +4 -169
- package/dist/api.d.ts +23 -17
- package/dist/api.js +3881 -5326
- package/dist/app-B1TOqBI8.d.ts +246 -0
- package/dist/app.d.ts +4 -520
- package/dist/app.js +9522 -11875
- package/dist/auth-pause-state-DosEalIG.js +168 -0
- package/dist/catalog-runtime-BReos-D4.js +7 -0
- package/dist/checkpoint-CNrPyRJN.js +2450 -0
- package/dist/cli/chat.d.ts +20 -0
- package/dist/cli/chat.js +229 -336
- package/dist/cli/check.d.ts +8 -0
- package/dist/cli/check.js +513 -806
- package/dist/cli/env.d.ts +13 -0
- package/dist/cli/env.js +63 -12
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.js +90 -159
- package/dist/cli/main.d.ts +6 -0
- package/dist/cli/main.js +43 -64
- package/dist/cli/plugins.d.ts +13 -0
- package/dist/cli/plugins.js +148 -227
- package/dist/cli/run.d.ts +16 -0
- package/dist/cli/run.js +52 -8
- package/dist/cli/snapshot-create.d.ts +4 -0
- package/dist/cli/snapshot-create.js +71 -125
- package/dist/cli/upgrade.d.ts +15 -0
- package/dist/cli/upgrade.js +232 -335
- package/dist/config-nGCW1OTG.js +941 -0
- package/dist/context-B45_WqVX.js +298 -0
- package/dist/conversation-privacy-B4voFRSm.js +182 -0
- package/dist/conversation-work-C6y3T5Hx.js +51 -0
- package/dist/credential-sync-kXr1hvO1.js +2660 -0
- package/dist/db-BeyXKJOI.d.ts +5 -0
- package/dist/destinations-BeBiJeEM.js +29 -0
- package/dist/execution-stats-DWfSihcH.js +373 -0
- package/dist/executor-DcMSlI5c.js +721 -0
- package/dist/experimental-CIXf7Uye.js +46 -0
- package/dist/history-ClE4toxe.d.ts +32 -0
- package/dist/history-CqTuSAdI.js +441 -0
- package/dist/instrumentation.d.ts +3 -3
- package/dist/instrumentation.js +130 -176
- package/dist/job-queue-Drn_LXlM.js +63 -0
- package/dist/logging-BzAk1S_s.js +1210 -0
- package/dist/model-profile-CZmVoGdX.js +49 -0
- package/dist/nitro.d.ts +31 -36
- package/dist/nitro.js +275 -456
- package/dist/oauth-callback-server-JiftokvA.js +130 -0
- package/dist/oauth-relay-CdCnu80W.js +62 -0
- package/dist/package-discovery-7a9YqLhE.js +455 -0
- package/dist/pending-auth-CWmSdZVg.js +185 -0
- package/dist/plugin-module-BKGOXca2.js +81 -0
- package/dist/plugins-BI9A1vKA.d.ts +95 -0
- package/dist/plugins-egKWjgue.js +99 -0
- package/dist/private-trace-result-BLvBjy_e.js +16 -0
- package/dist/profile-CrT5nXbw.js +861 -0
- package/dist/registry-DH1xUo2N.js +1419 -0
- package/dist/reporting-schema-DosTN__Q.js +105 -0
- package/dist/resolve-CZHnfxaS.js +546 -0
- package/dist/rolldown-runtime-B4FMCO8f.js +28 -0
- package/dist/runner-CZV2sC46.js +392 -0
- package/dist/sandbox-egress-signals-bHZfmhbd.js +46 -0
- package/dist/schema-Rn8-XEaN.js +1140 -0
- package/dist/sentry-CD3SdJl-.js +26 -0
- package/dist/skills-CIcDQSgM.js +316 -0
- package/dist/spawn-DdkUFRmq.js +29 -0
- package/dist/stats-DTUbAb88.js +2634 -0
- package/dist/store-C5qxF2ac.d.ts +208 -0
- package/dist/task-queue-CJIR4RF7.js +136 -0
- package/dist/task-runner-D-O3A-Cp.js +639 -0
- package/dist/thread-state-CRc9jTJS.js +431 -0
- package/dist/turn-execution-BkinIdJF.js +47 -0
- package/dist/turn-lifecycle-DQV19VTW.js +54 -0
- package/dist/usage-D3EbSO7w.js +296 -0
- package/dist/usage-schema-CKaDkH_j.js +20 -0
- package/dist/validation-C2CR-OX3.js +40 -0
- package/dist/vercel-queue-DIkVcfK4.js +167 -0
- package/dist/vercel.d.ts +6 -6
- package/dist/vercel.js +14 -6
- package/dist/version-CnXZ614E.d.ts +5 -0
- package/dist/version-DxcWdoKa.js +8 -0
- package/dist/version.d.ts +2 -4
- package/dist/version.js +2 -6
- package/dist/web-authorization-RMBxAR_t.js +76 -0
- package/dist/web-input-3EPfpf55.js +494 -0
- package/dist/work-fGofI7Op.js +509 -0
- package/dist/worker-CsOLq-mR.js +625 -0
- package/package.json +9 -9
- package/dist/agent-hooks-UXITLYOK.js +0 -51
- package/dist/catalog-runtime-BG3JLLK2.js +0 -14
- package/dist/chunk-2LYHWMR4.js +0 -46
- package/dist/chunk-2MK3QBGA.js +0 -321
- package/dist/chunk-3PGQSKJV.js +0 -692
- package/dist/chunk-3UI3WFTX.js +0 -519
- package/dist/chunk-3Y47VMHV.js +0 -6
- package/dist/chunk-4UO6FK4G.js +0 -64
- package/dist/chunk-5NOPO64K.js +0 -198
- package/dist/chunk-5PKWYPFT.js +0 -2943
- package/dist/chunk-63NKKFJL.js +0 -1228
- package/dist/chunk-6AYH6252.js +0 -787
- package/dist/chunk-6Y5B5PEX.js +0 -80
- package/dist/chunk-7DHZP5KJ.js +0 -333
- package/dist/chunk-7H2VZTWN.js +0 -103
- package/dist/chunk-7NL7T6VU.js +0 -406
- package/dist/chunk-A76OIMYN.js +0 -102
- package/dist/chunk-AWMS3SPP.js +0 -58
- package/dist/chunk-B3LY5RCL.js +0 -229
- package/dist/chunk-BD2KT3OB.js +0 -36
- package/dist/chunk-BXCX5QKA.js +0 -2086
- package/dist/chunk-C6VVF43U.js +0 -81
- package/dist/chunk-CEMMLV5L.js +0 -98
- package/dist/chunk-CM5HNV2W.js +0 -131
- package/dist/chunk-DA2KGZZI.js +0 -13
- package/dist/chunk-DBVY6HLX.js +0 -64
- package/dist/chunk-DIB4GX3G.js +0 -8
- package/dist/chunk-DKIJ2RP5.js +0 -68
- package/dist/chunk-DL2KLKVH.js +0 -931
- package/dist/chunk-DWPN6SCH.js +0 -172
- package/dist/chunk-ELWOYVOY.js +0 -206
- package/dist/chunk-EWT7H65X.js +0 -506
- package/dist/chunk-FA6POGLH.js +0 -70
- package/dist/chunk-HMREVIO2.js +0 -135
- package/dist/chunk-IIWUT4FO.js +0 -820
- package/dist/chunk-JAL3CH4G.js +0 -27
- package/dist/chunk-JSJQEWBJ.js +0 -3295
- package/dist/chunk-KHKKHDLD.js +0 -387
- package/dist/chunk-LA6R4A7Q.js +0 -706
- package/dist/chunk-LOOU2DUR.js +0 -20428
- package/dist/chunk-M6FHWXE3.js +0 -700
- package/dist/chunk-M76HMB7M.js +0 -1856
- package/dist/chunk-MAGNK5J4.js +0 -1520
- package/dist/chunk-MTM5IFCY.js +0 -1190
- package/dist/chunk-N7TMSOZH.js +0 -235
- package/dist/chunk-NHJU2ZAL.js +0 -56
- package/dist/chunk-NSXKRGRT.js +0 -717
- package/dist/chunk-OWMPFXJA.js +0 -1764
- package/dist/chunk-PDO5BLNM.js +0 -22
- package/dist/chunk-PEQXYSSE.js +0 -45
- package/dist/chunk-PW4P4JYF.js +0 -1135
- package/dist/chunk-QB54UQUS.js +0 -320
- package/dist/chunk-QP3OGJXF.js +0 -105
- package/dist/chunk-RC745GGZ.js +0 -122
- package/dist/chunk-REOIRYPR.js +0 -37
- package/dist/chunk-SCOZRLZ4.js +0 -164
- package/dist/chunk-TXJSXBV5.js +0 -1433
- package/dist/chunk-TXKUKMVO.js +0 -417
- package/dist/chunk-U2GPUYAL.js +0 -3656
- package/dist/chunk-UIE3R5XU.js +0 -17
- package/dist/chunk-UXPG6ZIN.js +0 -84
- package/dist/chunk-VFUK3X5B.js +0 -50
- package/dist/chunk-WQSHDTTI.js +0 -1163
- package/dist/chunk-X6GDDWQH.js +0 -60
- package/dist/chunk-Y2CM7HXH.js +0 -111
- package/dist/chunk-Y7X25LFY.js +0 -15
- package/dist/chunk-YDUR3ZYW.js +0 -10
- package/dist/conversation-work-VIOQ5ZF3.js +0 -54
- package/dist/db-3L2MCVRI.js +0 -26
- package/dist/discovery-DWVDM7UK.js +0 -44
- package/dist/experimental-P5FZM4CU.js +0 -12
- package/dist/oauth-callback-server-YVV6C6T2.js +0 -243
- package/dist/oauth-relay-5XPVRPYB.js +0 -8
- package/dist/plugins-YTYJMMJF.js +0 -14
- package/dist/runner-LQ7RETDP.js +0 -522
- package/dist/sandbox-egress-signals-FIL7EGPR.js +0 -73
- package/dist/sentry-MB3NL3IR.js +0 -42
- package/dist/skills-XRWYEDCD.js +0 -27
- package/dist/spawn-RC6SJUAI.js +0 -42
- package/dist/task-runner-7DY7ARYH.js +0 -36
- package/dist/validation-7MNQGCJA.js +0 -17
- package/dist/work-COALHUCG.js +0 -51
- package/dist/worker-6MURZIPD.js +0 -24
package/dist/chunk-DWPN6SCH.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
discoverNodeModulesDirs,
|
|
3
|
-
isDirectory,
|
|
4
|
-
isFile,
|
|
5
|
-
isValidPackageName,
|
|
6
|
-
resolvePackageLocation
|
|
7
|
-
} from "./chunk-TXKUKMVO.js";
|
|
8
|
-
|
|
9
|
-
// src/chat/plugins/package-discovery.ts
|
|
10
|
-
import path from "path";
|
|
11
|
-
function normalizeForGlob(targetPath) {
|
|
12
|
-
return targetPath.split(path.sep).join("/");
|
|
13
|
-
}
|
|
14
|
-
function uniqueStringsInOrder(values) {
|
|
15
|
-
const seen = /* @__PURE__ */ new Set();
|
|
16
|
-
const resolved = [];
|
|
17
|
-
for (const value of values) {
|
|
18
|
-
if (seen.has(value)) {
|
|
19
|
-
continue;
|
|
20
|
-
}
|
|
21
|
-
seen.add(value);
|
|
22
|
-
resolved.push(value);
|
|
23
|
-
}
|
|
24
|
-
return resolved;
|
|
25
|
-
}
|
|
26
|
-
function pathForTracingInclude(cwd, targetPath) {
|
|
27
|
-
const relative = path.relative(cwd, targetPath);
|
|
28
|
-
if (!relative || path.isAbsolute(relative) || relative === ".." || relative.startsWith(`..${path.sep}`)) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
const normalized = normalizeForGlob(relative);
|
|
32
|
-
return normalized.startsWith(".") ? normalized : `./${normalized}`;
|
|
33
|
-
}
|
|
34
|
-
function normalizePluginPackageNames(packageNames) {
|
|
35
|
-
if (packageNames === void 0) {
|
|
36
|
-
return [];
|
|
37
|
-
}
|
|
38
|
-
if (!Array.isArray(packageNames)) {
|
|
39
|
-
throw new Error("Plugin package names must be an array");
|
|
40
|
-
}
|
|
41
|
-
const normalized = [];
|
|
42
|
-
const seen = /* @__PURE__ */ new Set();
|
|
43
|
-
for (const packageName of packageNames) {
|
|
44
|
-
const normalizedPackageName = typeof packageName === "string" ? packageName.trim() : "";
|
|
45
|
-
if (!normalizedPackageName || !isValidPackageName(normalizedPackageName)) {
|
|
46
|
-
throw new Error("Plugin package names must be valid npm package names");
|
|
47
|
-
}
|
|
48
|
-
if (seen.has(normalizedPackageName)) {
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
seen.add(normalizedPackageName);
|
|
52
|
-
normalized.push(normalizedPackageName);
|
|
53
|
-
}
|
|
54
|
-
return normalized;
|
|
55
|
-
}
|
|
56
|
-
function formatNodeModulesDirs(candidateNodeModulesDirs) {
|
|
57
|
-
return candidateNodeModulesDirs.length > 0 ? candidateNodeModulesDirs.join(", ") : "none found";
|
|
58
|
-
}
|
|
59
|
-
function resolvePackageDirFromName(cwd, packageName, candidateNodeModulesDirs) {
|
|
60
|
-
return resolvePackageLocation(cwd, packageName, {
|
|
61
|
-
nodeModulesDirs: candidateNodeModulesDirs
|
|
62
|
-
}) ?? null;
|
|
63
|
-
}
|
|
64
|
-
function readPluginPackageFlags(dir) {
|
|
65
|
-
const hasRootPluginManifest = isFile(path.join(dir, "plugin.yaml"));
|
|
66
|
-
const hasMigrationsDir = isDirectory(path.join(dir, "migrations"));
|
|
67
|
-
const hasPluginsDir = isDirectory(path.join(dir, "plugins"));
|
|
68
|
-
const hasSkillsDir = isDirectory(path.join(dir, "skills"));
|
|
69
|
-
if (!hasRootPluginManifest && !hasMigrationsDir && !hasPluginsDir && !hasSkillsDir) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
hasRootPluginManifest,
|
|
74
|
-
hasMigrationsDir,
|
|
75
|
-
hasPluginsDir,
|
|
76
|
-
hasSkillsDir
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
function discoverDeclaredPackages(packageNames, candidateNodeModulesDirs, cwd) {
|
|
80
|
-
const discovered = [];
|
|
81
|
-
const seenPackageDirs = /* @__PURE__ */ new Set();
|
|
82
|
-
for (const packageName of packageNames) {
|
|
83
|
-
const resolved = resolvePackageDirFromName(
|
|
84
|
-
cwd,
|
|
85
|
-
packageName,
|
|
86
|
-
candidateNodeModulesDirs
|
|
87
|
-
);
|
|
88
|
-
if (!resolved) {
|
|
89
|
-
throw new Error(
|
|
90
|
-
`Plugin package "${packageName}" was configured but could not be resolved from node_modules or package resolution (${formatNodeModulesDirs(candidateNodeModulesDirs)})`
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
if (seenPackageDirs.has(resolved.dir)) {
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
const pluginFlags = readPluginPackageFlags(resolved.dir);
|
|
97
|
-
if (!pluginFlags) {
|
|
98
|
-
throw new Error(
|
|
99
|
-
`Plugin package "${packageName}" was configured but does not contain plugin content; expected plugin.yaml, migrations/, plugins/, or skills/ in ${resolved.dir}`
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
seenPackageDirs.add(resolved.dir);
|
|
103
|
-
discovered.push({
|
|
104
|
-
dir: resolved.dir,
|
|
105
|
-
nodeModulesDir: resolved.nodeModulesDir,
|
|
106
|
-
packageName,
|
|
107
|
-
...pluginFlags
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
return discovered;
|
|
111
|
-
}
|
|
112
|
-
function discoverInstalledPluginPackageContent(cwd = process.cwd(), options) {
|
|
113
|
-
const resolvedCwd = path.resolve(cwd);
|
|
114
|
-
const packageNames = normalizePluginPackageNames(options?.packageNames);
|
|
115
|
-
const nodeModulesDirs = options?.nodeModulesDirs ?? discoverNodeModulesDirs(resolvedCwd);
|
|
116
|
-
const discoveredPackages = discoverDeclaredPackages(
|
|
117
|
-
packageNames,
|
|
118
|
-
nodeModulesDirs,
|
|
119
|
-
resolvedCwd
|
|
120
|
-
);
|
|
121
|
-
const manifestRoots = [];
|
|
122
|
-
const skillRoots = [];
|
|
123
|
-
const tracingIncludes = [];
|
|
124
|
-
for (const pkg of discoveredPackages) {
|
|
125
|
-
const tracingBasePath = pkg.nodeModulesDir ? pathForTracingInclude(
|
|
126
|
-
resolvedCwd,
|
|
127
|
-
path.join(pkg.nodeModulesDir, ...pkg.packageName.split("/"))
|
|
128
|
-
) : pathForTracingInclude(resolvedCwd, pkg.dir);
|
|
129
|
-
if (pkg.hasRootPluginManifest) {
|
|
130
|
-
manifestRoots.push(pkg.dir);
|
|
131
|
-
if (tracingBasePath) {
|
|
132
|
-
tracingIncludes.push(`${tracingBasePath}/plugin.yaml`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
if (pkg.hasMigrationsDir) {
|
|
136
|
-
if (tracingBasePath) {
|
|
137
|
-
tracingIncludes.push(`${tracingBasePath}/migrations/**/*`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
if (pkg.hasPluginsDir) {
|
|
141
|
-
manifestRoots.push(path.join(pkg.dir, "plugins"));
|
|
142
|
-
if (tracingBasePath) {
|
|
143
|
-
tracingIncludes.push(`${tracingBasePath}/plugins/**/*`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
if (pkg.hasSkillsDir) {
|
|
147
|
-
skillRoots.push(path.join(pkg.dir, "skills"));
|
|
148
|
-
if (tracingBasePath) {
|
|
149
|
-
tracingIncludes.push(`${tracingBasePath}/skills/**/*`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return {
|
|
154
|
-
packageNames: uniqueStringsInOrder(
|
|
155
|
-
discoveredPackages.map((pkg) => pkg.packageName)
|
|
156
|
-
),
|
|
157
|
-
packages: discoveredPackages.map((pkg) => ({
|
|
158
|
-
dir: pkg.dir,
|
|
159
|
-
hasMigrationsDir: pkg.hasMigrationsDir,
|
|
160
|
-
hasSkillsDir: pkg.hasSkillsDir,
|
|
161
|
-
packageName: pkg.packageName
|
|
162
|
-
})),
|
|
163
|
-
manifestRoots: uniqueStringsInOrder(manifestRoots),
|
|
164
|
-
skillRoots: uniqueStringsInOrder(skillRoots),
|
|
165
|
-
tracingIncludes: uniqueStringsInOrder(tracingIncludes)
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export {
|
|
170
|
-
normalizePluginPackageNames,
|
|
171
|
-
discoverInstalledPluginPackageContent
|
|
172
|
-
};
|
package/dist/chunk-ELWOYVOY.js
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
abandonTurnRecord,
|
|
3
|
-
extractAssistantText
|
|
4
|
-
} from "./chunk-5PKWYPFT.js";
|
|
5
|
-
import {
|
|
6
|
-
buildDeterministicTurnId
|
|
7
|
-
} from "./chunk-DA2KGZZI.js";
|
|
8
|
-
|
|
9
|
-
// src/chat/runtime/turn.ts
|
|
10
|
-
var ConversationTurnBoundaryError = class extends Error {
|
|
11
|
-
eventId;
|
|
12
|
-
failureCode;
|
|
13
|
-
constructor(args) {
|
|
14
|
-
super(
|
|
15
|
-
args.cause instanceof Error ? args.cause.message : String(args.cause),
|
|
16
|
-
{
|
|
17
|
-
cause: args.cause
|
|
18
|
-
}
|
|
19
|
-
);
|
|
20
|
-
this.name = "ConversationTurnBoundaryError";
|
|
21
|
-
this.eventId = args.eventId;
|
|
22
|
-
this.failureCode = args.failureCode;
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
function getConversationTurnBoundaryError(error) {
|
|
26
|
-
return error instanceof ConversationTurnBoundaryError ? error : void 0;
|
|
27
|
-
}
|
|
28
|
-
var CooperativeTurnYieldError = class extends Error {
|
|
29
|
-
code = "cooperative_turn_yield";
|
|
30
|
-
constructor(message = "Agent turn yielded at a safe boundary") {
|
|
31
|
-
super(message);
|
|
32
|
-
this.name = "CooperativeTurnYieldError";
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
function isCooperativeTurnYieldError(error) {
|
|
36
|
-
return error instanceof CooperativeTurnYieldError;
|
|
37
|
-
}
|
|
38
|
-
var TurnInputCommitLostError = class extends Error {
|
|
39
|
-
code = "turn_input_commit_lost";
|
|
40
|
-
constructor(message = "Turn input commit lost its durable owner") {
|
|
41
|
-
super(message);
|
|
42
|
-
this.name = "TurnInputCommitLostError";
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
function isTurnInputCommitLostError(error) {
|
|
46
|
-
return error instanceof TurnInputCommitLostError;
|
|
47
|
-
}
|
|
48
|
-
var TurnInputDeferredError = class extends Error {
|
|
49
|
-
code = "turn_input_deferred";
|
|
50
|
-
constructor(message = "Turn input is deferred until the active resume ends") {
|
|
51
|
-
super(message);
|
|
52
|
-
this.name = "TurnInputDeferredError";
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
function isTurnInputDeferredError(error) {
|
|
56
|
-
return error instanceof TurnInputDeferredError;
|
|
57
|
-
}
|
|
58
|
-
function startActiveTurn(args) {
|
|
59
|
-
args.conversation.processing.activeTurnId = args.nextTurnId;
|
|
60
|
-
}
|
|
61
|
-
function clearActiveTurn(conversation, sessionId) {
|
|
62
|
-
if (!sessionId || conversation.processing.activeTurnId === sessionId) {
|
|
63
|
-
conversation.processing.activeTurnId = void 0;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
function markTurnClosed(args) {
|
|
67
|
-
clearActiveTurn(args.conversation, args.sessionId);
|
|
68
|
-
args.conversation.processing.lastCompletedAtMs = args.nowMs;
|
|
69
|
-
}
|
|
70
|
-
function markTurnCompleted(args) {
|
|
71
|
-
clearActiveTurn(args.conversation, args.sessionId);
|
|
72
|
-
args.conversation.processing.lastCompletedAtMs = args.nowMs;
|
|
73
|
-
}
|
|
74
|
-
function markTurnFailed(args) {
|
|
75
|
-
clearActiveTurn(args.conversation, args.sessionId);
|
|
76
|
-
args.conversation.processing.lastCompletedAtMs = args.nowMs;
|
|
77
|
-
args.markConversationMessage(args.conversation, args.userMessageId, {
|
|
78
|
-
replied: false,
|
|
79
|
-
skippedReason: "reply failed"
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// src/chat/no-reply.ts
|
|
84
|
-
var NO_REPLY_MARKER = "[[NO_REPLY]]";
|
|
85
|
-
function isNoReplyMarker(text) {
|
|
86
|
-
return text.trimEnd().endsWith(NO_REPLY_MARKER);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// src/chat/services/assistant-reply.ts
|
|
90
|
-
var THINKING_XML_BLOCK_PATTERN = /[ \t]*<thinking\b[^>]*>[\s\S]*?<\/thinking>[ \t]*(?:\r?\n)?/gi;
|
|
91
|
-
var FENCED_CODE_BLOCK_PATTERN = /```[\s\S]*?```/g;
|
|
92
|
-
function sanitizeAssistantText(text) {
|
|
93
|
-
let result = "";
|
|
94
|
-
let cursor = 0;
|
|
95
|
-
for (const match of text.matchAll(FENCED_CODE_BLOCK_PATTERN)) {
|
|
96
|
-
const start = match.index;
|
|
97
|
-
if (start === void 0) continue;
|
|
98
|
-
result += text.slice(cursor, start).replace(THINKING_XML_BLOCK_PATTERN, "");
|
|
99
|
-
result += match[0];
|
|
100
|
-
cursor = start + match[0].length;
|
|
101
|
-
}
|
|
102
|
-
return (result + text.slice(cursor).replace(THINKING_XML_BLOCK_PATTERN, "")).trim();
|
|
103
|
-
}
|
|
104
|
-
function decideReply(message) {
|
|
105
|
-
if (message.content.some((part) => part.type === "toolCall")) {
|
|
106
|
-
return { kind: "suppress" };
|
|
107
|
-
}
|
|
108
|
-
const text = sanitizeAssistantText(extractAssistantText(message));
|
|
109
|
-
if (!text) return { kind: "empty" };
|
|
110
|
-
if (isNoReplyMarker(text)) {
|
|
111
|
-
return { kind: "suppress" };
|
|
112
|
-
}
|
|
113
|
-
return { kind: "deliver", text };
|
|
114
|
-
}
|
|
115
|
-
function getAssistantReplyText(message) {
|
|
116
|
-
const decision = decideReply(message);
|
|
117
|
-
return decision.kind === "deliver" ? decision.text : void 0;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// src/chat/services/pending-auth.ts
|
|
121
|
-
var AUTH_LINK_REUSE_WINDOW_MS = 10 * 60 * 1e3;
|
|
122
|
-
var NON_REQUEST_SKIPPED_REASON_PREFIXES = [
|
|
123
|
-
"directed_to_other_party:",
|
|
124
|
-
"side_conversation:"
|
|
125
|
-
];
|
|
126
|
-
function isSkippedNonRequest(reason) {
|
|
127
|
-
return NON_REQUEST_SKIPPED_REASON_PREFIXES.some(
|
|
128
|
-
(prefix) => reason?.startsWith(prefix)
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
function canReusePendingAuthLink(args) {
|
|
132
|
-
const { pendingAuth } = args;
|
|
133
|
-
if (!pendingAuth) {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
return pendingAuth.kind === args.kind && pendingAuth.provider === args.provider && pendingAuth.actorId === args.actorId && pendingAuth.scope === args.scope && pendingAuth.sessionId === args.sessionId && pendingAuth.linkSentAtMs + AUTH_LINK_REUSE_WINDOW_MS > (args.nowMs ?? Date.now());
|
|
137
|
-
}
|
|
138
|
-
function getConversationPendingAuth(args) {
|
|
139
|
-
const pendingAuth = args.conversation.processing.pendingAuth;
|
|
140
|
-
if (!pendingAuth) {
|
|
141
|
-
return void 0;
|
|
142
|
-
}
|
|
143
|
-
if (pendingAuth.kind !== args.kind || pendingAuth.provider !== args.provider || pendingAuth.actorId !== args.actorId || pendingAuth.scope !== args.scope) {
|
|
144
|
-
return void 0;
|
|
145
|
-
}
|
|
146
|
-
return pendingAuth;
|
|
147
|
-
}
|
|
148
|
-
function clearPendingAuth(conversation, sessionId) {
|
|
149
|
-
if (!conversation.processing.pendingAuth) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
if (sessionId && conversation.processing.pendingAuth.sessionId !== sessionId) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
conversation.processing.pendingAuth = void 0;
|
|
156
|
-
}
|
|
157
|
-
async function abandonReplacedPendingAuth(args) {
|
|
158
|
-
if (args.previousPendingAuth && args.previousPendingAuth.sessionId !== args.nextPendingAuth.sessionId && args.conversationId) {
|
|
159
|
-
await abandonTurnRecord({
|
|
160
|
-
conversationId: args.conversationId,
|
|
161
|
-
turnId: args.previousPendingAuth.sessionId,
|
|
162
|
-
errorMessage: "Abandoned by a newer auth-blocked request in the same conversation."
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
function isPendingAuthLatestRequest(conversation, pendingAuth) {
|
|
167
|
-
for (let index = conversation.messages.length - 1; index >= 0; index -= 1) {
|
|
168
|
-
const message = conversation.messages[index];
|
|
169
|
-
if (message?.role !== "user") {
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
172
|
-
if (message.author?.isBot) {
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
if (isSkippedNonRequest(message.meta?.skippedReason)) {
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
return buildDeterministicTurnId(message.id) === pendingAuth.sessionId;
|
|
179
|
-
}
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export {
|
|
184
|
-
ConversationTurnBoundaryError,
|
|
185
|
-
getConversationTurnBoundaryError,
|
|
186
|
-
CooperativeTurnYieldError,
|
|
187
|
-
isCooperativeTurnYieldError,
|
|
188
|
-
TurnInputCommitLostError,
|
|
189
|
-
isTurnInputCommitLostError,
|
|
190
|
-
TurnInputDeferredError,
|
|
191
|
-
isTurnInputDeferredError,
|
|
192
|
-
startActiveTurn,
|
|
193
|
-
markTurnClosed,
|
|
194
|
-
markTurnCompleted,
|
|
195
|
-
markTurnFailed,
|
|
196
|
-
NO_REPLY_MARKER,
|
|
197
|
-
isNoReplyMarker,
|
|
198
|
-
sanitizeAssistantText,
|
|
199
|
-
decideReply,
|
|
200
|
-
getAssistantReplyText,
|
|
201
|
-
canReusePendingAuthLink,
|
|
202
|
-
getConversationPendingAuth,
|
|
203
|
-
clearPendingAuth,
|
|
204
|
-
abandonReplacedPendingAuth,
|
|
205
|
-
isPendingAuthLatestRequest
|
|
206
|
-
};
|