@sentry/junior 0.105.0 → 0.107.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-hooks-EOFSY2PD.js → agent-hooks-ICPIJAFY.js} +9 -7
- package/dist/api/conversations/detail.d.ts +1 -1
- package/dist/api/conversations/events.d.ts +14 -0
- package/dist/api/conversations/schema.d.ts +196 -463
- package/dist/api/schema.d.ts +2 -7
- package/dist/api/schema.js +10 -8
- package/dist/api.js +377 -810
- package/dist/app.js +2284 -2288
- package/dist/{catalog-runtime-5CVM2DOF.js → catalog-runtime-FOFNPR3P.js} +3 -2
- package/dist/chat/agent/prompt.d.ts +1 -1
- package/dist/chat/agent/request.d.ts +28 -29
- package/dist/chat/agent/resume.d.ts +7 -7
- package/dist/chat/agent/session.d.ts +5 -6
- package/dist/chat/agent/tools.d.ts +3 -3
- package/dist/chat/agent-dispatch/runner.d.ts +2 -0
- package/dist/chat/config.d.ts +3 -2
- package/dist/chat/conversations/history.d.ts +582 -167
- package/dist/chat/conversations/message-projection.d.ts +6 -0
- package/dist/chat/conversations/message-summaries.d.ts +9 -0
- package/dist/chat/conversations/messages.d.ts +13 -27
- package/dist/chat/conversations/projection.d.ts +30 -53
- package/dist/chat/conversations/provenance.d.ts +42 -0
- package/dist/chat/conversations/search.d.ts +2 -2
- package/dist/chat/conversations/sql/conversation-row.d.ts +1 -1
- package/dist/chat/conversations/sql/event-lock.d.ts +3 -0
- package/dist/chat/conversations/sql/history.d.ts +3 -3
- package/dist/chat/conversations/sql/privacy.d.ts +27 -0
- package/dist/chat/conversations/sql/purge.d.ts +2 -10
- package/dist/chat/conversations/sql/store.d.ts +0 -5
- package/dist/chat/conversations/store.d.ts +8 -13
- package/dist/chat/conversations/turn-lifecycle.d.ts +41 -0
- package/dist/chat/db.d.ts +4 -10
- package/dist/chat/model-profile.d.ts +10 -0
- package/dist/chat/oauth-flow.d.ts +0 -5
- package/dist/chat/pi/conversation-events.d.ts +33 -0
- package/dist/chat/pi/sql-model-usage.d.ts +10 -0
- package/dist/chat/plugins/agent-hooks.d.ts +4 -2
- package/dist/chat/resource-events/ingest.d.ts +0 -13
- package/dist/chat/runtime/delivered-turn-state.d.ts +1 -1
- package/dist/chat/runtime/generated-artifacts.d.ts +1 -1
- package/dist/chat/runtime/reply-executor.d.ts +2 -0
- package/dist/chat/runtime/slack-resume.d.ts +23 -28
- package/dist/chat/runtime/slack-runtime.d.ts +2 -0
- package/dist/chat/runtime/turn.d.ts +14 -1
- package/dist/chat/services/context-compaction-marker.d.ts +0 -1
- package/dist/chat/services/context-compaction.d.ts +1 -0
- package/dist/chat/services/conversation-memory.d.ts +9 -0
- package/dist/chat/services/plugin-auth-orchestration.d.ts +1 -4
- package/dist/chat/services/subscribed-decision.d.ts +1 -1
- package/dist/chat/services/turn-failure-response.d.ts +10 -3
- package/dist/chat/services/turn-limit.d.ts +6 -0
- package/dist/chat/services/turn-result.d.ts +7 -12
- package/dist/chat/services/{turn-reasoning-level.d.ts → turn-router.d.ts} +12 -8
- package/dist/chat/services/turn-session-record.d.ts +15 -17
- package/dist/chat/slack/adapter.d.ts +2 -2
- package/dist/chat/slack/errors.d.ts +2 -0
- package/dist/chat/slack/outbound.d.ts +0 -1
- package/dist/chat/slack/reply.d.ts +2 -8
- package/dist/chat/slack/tools/channel-capabilities.d.ts +2 -2
- package/dist/chat/slack/tools/{send-message.d.ts → send-files.d.ts} +27 -19
- package/dist/chat/state/conversation.d.ts +4 -4
- package/dist/chat/state/turn-id.d.ts +2 -0
- package/dist/chat/state/turn-session-keys.d.ts +6 -0
- package/dist/chat/state/turn-session.d.ts +11 -9
- package/dist/chat/task-execution/state.d.ts +6 -1
- package/dist/chat/task-execution/store.d.ts +1 -1
- package/dist/chat/tool-support/pi-tool-adapter.d.ts +1 -1
- package/dist/chat/tool-support/tool-execution-report.d.ts +1 -0
- package/dist/chat/tools/handoff/tool.d.ts +2 -2
- package/dist/chat/tools/sandbox/file-uploads.d.ts +28 -6
- package/dist/chat/tools/types.d.ts +6 -9
- package/dist/chat/tools/web/image-generate.d.ts +4 -6
- package/dist/{chunk-QDKRE3LS.js → chunk-4YF7Z6IA.js} +390 -270
- package/dist/{chunk-4PDVOHXP.js → chunk-AUUOHQAT.js} +2 -2
- package/dist/chunk-B2Z2H66D.js +250 -0
- package/dist/{chunk-QVTVCJR4.js → chunk-CQ7KSO2B.js} +75 -45
- package/dist/{chunk-MJSJAHBW.js → chunk-DY7TRYB5.js} +1 -1
- package/dist/{chunk-NJJFU6CP.js → chunk-EDLNHZH3.js} +883 -898
- package/dist/{chunk-O7ILGCMJ.js → chunk-IGHMVDWI.js} +134 -18
- package/dist/chunk-MU6HHZEN.js +99 -0
- package/dist/{chunk-BCULHGZK.js → chunk-NVOTGWYX.js} +458 -684
- package/dist/{chunk-AEWZ7F65.js → chunk-O24R4DCK.js} +2 -179
- package/dist/{chunk-CCFROYAV.js → chunk-PUAMO4PI.js} +115 -125
- package/dist/{chunk-VDHMFCDY.js → chunk-RMVOAJRL.js} +30 -13
- package/dist/{chunk-7G4J3CR7.js → chunk-SPUAJVVH.js} +6 -4
- package/dist/{chunk-M3UAVLEN.js → chunk-SS67LUOK.js} +43 -290
- package/dist/{chunk-FXFQNHRU.js → chunk-VFUK3X5B.js} +4 -2
- package/dist/{chunk-CCTCIISK.js → chunk-VH6KWKG2.js} +2 -2
- package/dist/chunk-VIXFG2VC.js +182 -0
- package/dist/{chunk-RMZ65YAA.js → chunk-YFQ7CQDE.js} +687 -21
- package/dist/{chunk-77LHNQK4.js → chunk-YIPD3L6L.js} +4 -2
- package/dist/{chunk-U26ZWZCN.js → chunk-YNP2ATQX.js} +6 -4
- package/dist/{chunk-WR7H7VLJ.js → chunk-YT72TOEK.js} +2 -2
- package/dist/cli/chat.js +21 -20
- package/dist/cli/check.js +4 -3
- package/dist/cli/plugins.js +11 -9
- package/dist/cli/snapshot-warmup.js +7 -5
- package/dist/cli/upgrade.js +2046 -105
- package/dist/db/schema/{agent-steps.d.ts → conversation-events.d.ts} +37 -21
- package/dist/db/schema.d.ts +28 -159
- package/dist/{db-PDMC67T3.js → db-DIGO4TGW.js} +6 -8
- package/dist/{runner-6A7MQRUE.js → runner-ACR2HAIC.js} +209 -101
- package/dist/{skills-722AXRV5.js → skills-ITNHBARB.js} +4 -3
- package/dist/{validation-EUI2UFRM.js → validation-AGQ46ZGV.js} +4 -3
- package/migrations/0005_conversation_events.sql +122 -0
- package/migrations/README.md +23 -10
- package/migrations/meta/0005_snapshot.json +948 -0
- package/migrations/meta/_journal.json +7 -0
- package/package.json +6 -6
- package/dist/api/conversations/activity.d.ts +0 -40
- package/dist/api/conversations/detail-projection.d.ts +0 -11
- package/dist/api/conversations/detail.query.d.ts +0 -3
- package/dist/api/conversations/subagent.d.ts +0 -10
- package/dist/api/conversations/transcript.d.ts +0 -28
- package/dist/chat/conversations/legacy-advisor-session.d.ts +0 -7
- package/dist/chat/conversations/legacy-import.d.ts +0 -38
- package/dist/chat/conversations/sql/legacy-history-import.d.ts +0 -55
- package/dist/chat/conversations/sql/messages.d.ts +0 -4
- package/dist/chat/conversations/visible-compactions.d.ts +0 -11
- package/dist/chat/conversations/visible-messages.d.ts +0 -47
- package/dist/chat/services/reply-delivery-plan.d.ts +0 -5
- package/dist/chat/state/session-log.d.ts +0 -384
- package/dist/chunk-RYDF4GOX.js +0 -1072
- package/dist/chunk-XIMUQ4IU.js +0 -147
- package/dist/db/schema/conversation-messages.d.ts +0 -153
- package/dist/handlers/github-webhook/check-suite.d.ts +0 -3
- package/dist/handlers/github-webhook/issue-comment.d.ts +0 -3
- package/dist/handlers/github-webhook/pull-request-review-comment.d.ts +0 -3
- package/dist/handlers/github-webhook/pull-request-review.d.ts +0 -3
- package/dist/handlers/github-webhook/pull-request.d.ts +0 -3
- package/dist/handlers/github-webhook/resource.d.ts +0 -10
- package/dist/handlers/github-webhook.d.ts +0 -15
- package/dist/legacy-import-G333RHJZ.js +0 -18
|
@@ -3,7 +3,14 @@ import {
|
|
|
3
3
|
} from "./chunk-CEA3A3UA.js";
|
|
4
4
|
import {
|
|
5
5
|
normalizeSlackConversationId
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VH6KWKG2.js";
|
|
7
|
+
import {
|
|
8
|
+
juniorConversationEvents,
|
|
9
|
+
juniorConversations
|
|
10
|
+
} from "./chunk-NVOTGWYX.js";
|
|
11
|
+
import {
|
|
12
|
+
juniorDestinations
|
|
13
|
+
} from "./chunk-VFUK3X5B.js";
|
|
7
14
|
import {
|
|
8
15
|
parseSlackThreadId
|
|
9
16
|
} from "./chunk-RT5BUHR5.js";
|
|
@@ -58,24 +65,132 @@ function buildSentryConversationUrl(conversationId) {
|
|
|
58
65
|
}
|
|
59
66
|
return `${buildSentryWebBaseUrl(dsn)}/organizations/${orgSlug}/${path}`;
|
|
60
67
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
|
|
69
|
+
// src/chat/conversations/sql/privacy.ts
|
|
70
|
+
import { and, asc, eq, getTableColumns, inArray, sql } from "drizzle-orm";
|
|
71
|
+
var MAX_LINEAGE_DEPTH = 32;
|
|
72
|
+
var conversationEventColumns = getTableColumns(juniorConversationEvents);
|
|
73
|
+
function rootVisibilitySnapshotSql(conversationId) {
|
|
74
|
+
return sql`(
|
|
75
|
+
with recursive lineage(
|
|
76
|
+
conversation_id,
|
|
77
|
+
parent_conversation_id,
|
|
78
|
+
destination_id,
|
|
79
|
+
path,
|
|
80
|
+
depth
|
|
81
|
+
) as (
|
|
82
|
+
select
|
|
83
|
+
requested.conversation_id,
|
|
84
|
+
requested.parent_conversation_id,
|
|
85
|
+
requested.destination_id,
|
|
86
|
+
array[requested.conversation_id]::text[],
|
|
87
|
+
1
|
|
88
|
+
from junior_conversations requested
|
|
89
|
+
where requested.conversation_id = ${conversationId}
|
|
90
|
+
|
|
91
|
+
union all
|
|
92
|
+
|
|
93
|
+
select
|
|
94
|
+
parent.conversation_id,
|
|
95
|
+
parent.parent_conversation_id,
|
|
96
|
+
parent.destination_id,
|
|
97
|
+
lineage.path || parent.conversation_id,
|
|
98
|
+
lineage.depth + 1
|
|
99
|
+
from lineage
|
|
100
|
+
join junior_conversations parent
|
|
101
|
+
on parent.conversation_id = lineage.parent_conversation_id
|
|
102
|
+
where lineage.depth < ${MAX_LINEAGE_DEPTH}
|
|
103
|
+
and not (parent.conversation_id = any(lineage.path))
|
|
104
|
+
),
|
|
105
|
+
root_candidate as (
|
|
106
|
+
select lineage.conversation_id, lineage.destination_id
|
|
107
|
+
from lineage
|
|
108
|
+
where lineage.parent_conversation_id is null
|
|
109
|
+
and lineage.destination_id is not null
|
|
110
|
+
limit 1
|
|
111
|
+
)
|
|
112
|
+
select jsonb_build_object(
|
|
113
|
+
'rootConversationId', coalesce(root.conversation_id, ${conversationId}),
|
|
114
|
+
'visibility', destination.visibility
|
|
115
|
+
)
|
|
116
|
+
from (select 1) seed
|
|
117
|
+
left join root_candidate root on true
|
|
118
|
+
left join junior_destinations destination
|
|
119
|
+
on destination.id = root.destination_id
|
|
120
|
+
)`;
|
|
121
|
+
}
|
|
122
|
+
async function readConversationEventPrivacySnapshot(executor, args) {
|
|
123
|
+
const rows = await executor.db().select({
|
|
124
|
+
privacy: rootVisibilitySnapshotSql(args.conversationId),
|
|
125
|
+
event: {
|
|
126
|
+
...conversationEventColumns,
|
|
127
|
+
// Replacement history is model context, never dashboard report data.
|
|
128
|
+
// Keep the required replacement field while redacting its contents.
|
|
129
|
+
payload: sql`case
|
|
130
|
+
when ${juniorConversationEvents.type} in ('compaction', 'handoff')
|
|
131
|
+
then jsonb_set(
|
|
132
|
+
${juniorConversationEvents.payload},
|
|
133
|
+
'{replacementHistory}',
|
|
134
|
+
'[]'::jsonb
|
|
135
|
+
)
|
|
136
|
+
else ${juniorConversationEvents.payload}
|
|
137
|
+
end`
|
|
138
|
+
}
|
|
139
|
+
}).from(juniorConversations).leftJoin(
|
|
140
|
+
juniorConversationEvents,
|
|
141
|
+
and(
|
|
142
|
+
eq(juniorConversationEvents.conversationId, args.conversationId),
|
|
143
|
+
inArray(juniorConversationEvents.type, [...args.eventTypes])
|
|
144
|
+
)
|
|
145
|
+
).where(eq(juniorConversations.conversationId, args.conversationId)).orderBy(asc(juniorConversationEvents.seq));
|
|
146
|
+
const first = rows[0];
|
|
147
|
+
if (!first) return void 0;
|
|
148
|
+
return {
|
|
149
|
+
...first.privacy,
|
|
150
|
+
events: rows.flatMap(({ event }) => event ? [event] : [])
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async function readLineageRow(executor, conversationId) {
|
|
154
|
+
const rows = await executor.db().select({
|
|
155
|
+
parentId: juniorConversations.parentConversationId,
|
|
156
|
+
destinationId: juniorConversations.destinationId
|
|
157
|
+
}).from(juniorConversations).where(eq(juniorConversations.conversationId, conversationId));
|
|
158
|
+
return rows[0];
|
|
159
|
+
}
|
|
160
|
+
async function traceLineage(executor, conversationId) {
|
|
161
|
+
let currentId = conversationId;
|
|
162
|
+
const seen = /* @__PURE__ */ new Set();
|
|
163
|
+
while (!seen.has(currentId) && seen.size < MAX_LINEAGE_DEPTH) {
|
|
164
|
+
seen.add(currentId);
|
|
165
|
+
const row = await readLineageRow(executor, currentId);
|
|
166
|
+
if (!row) return void 0;
|
|
167
|
+
if (row.parentId) {
|
|
168
|
+
currentId = row.parentId;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (!row.destinationId) {
|
|
172
|
+
return void 0;
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
destinationId: row.destinationId,
|
|
176
|
+
rootConversationId: currentId
|
|
177
|
+
};
|
|
70
178
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
179
|
+
return void 0;
|
|
180
|
+
}
|
|
181
|
+
async function readCandidateVisibility(executor, candidate) {
|
|
182
|
+
const destinations = await executor.db().select({ visibility: juniorDestinations.visibility }).from(juniorDestinations).where(eq(juniorDestinations.id, candidate.destinationId)).for("share");
|
|
183
|
+
return {
|
|
184
|
+
rootConversationId: candidate.rootConversationId,
|
|
185
|
+
visibility: destinations[0]?.visibility ?? null
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
async function resolveRootVisibility(executor, conversationId) {
|
|
189
|
+
const candidate = await traceLineage(executor, conversationId);
|
|
190
|
+
if (!candidate) {
|
|
191
|
+
return { rootConversationId: conversationId, visibility: null };
|
|
77
192
|
}
|
|
78
|
-
return
|
|
193
|
+
return readCandidateVisibility(executor, candidate);
|
|
79
194
|
}
|
|
80
195
|
|
|
81
196
|
// src/chat/slack/conversation-context.ts
|
|
@@ -164,7 +279,8 @@ export {
|
|
|
164
279
|
readHealthReport,
|
|
165
280
|
GET,
|
|
166
281
|
buildSentryConversationUrl,
|
|
167
|
-
|
|
282
|
+
readConversationEventPrivacySnapshot,
|
|
283
|
+
resolveRootVisibility,
|
|
168
284
|
conversationVisibilityFromSlackChannelType,
|
|
169
285
|
resolveSlackChannelTypeFromMessage,
|
|
170
286
|
resolveSlackConversationContext,
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import {
|
|
2
|
+
usageSchema
|
|
3
|
+
} from "./chunk-PDO5BLNM.js";
|
|
4
|
+
|
|
5
|
+
// src/chat/usage.ts
|
|
6
|
+
var agentTurnUsageSchema = usageSchema;
|
|
7
|
+
var COMPONENT_USAGE_FIELDS = [
|
|
8
|
+
"inputTokens",
|
|
9
|
+
"outputTokens",
|
|
10
|
+
"cachedInputTokens",
|
|
11
|
+
"cacheCreationTokens"
|
|
12
|
+
];
|
|
13
|
+
var COST_COMPONENT_FIELDS = [
|
|
14
|
+
"input",
|
|
15
|
+
"output",
|
|
16
|
+
"cacheRead",
|
|
17
|
+
"cacheWrite"
|
|
18
|
+
];
|
|
19
|
+
function hasAgentTurnUsage(usage) {
|
|
20
|
+
return Boolean(
|
|
21
|
+
usage && (Object.entries(usage).some(
|
|
22
|
+
([field, value]) => field !== "cost" && typeof value === "number" && Number.isFinite(value)
|
|
23
|
+
) || Object.values(usage.cost ?? {}).some(
|
|
24
|
+
(value) => typeof value === "number" && Number.isFinite(value)
|
|
25
|
+
))
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
function getFiniteCount(value) {
|
|
29
|
+
return typeof value === "number" && Number.isFinite(value) ? Math.max(0, Math.floor(value)) : void 0;
|
|
30
|
+
}
|
|
31
|
+
function getFiniteCost(value) {
|
|
32
|
+
return typeof value === "number" && Number.isFinite(value) ? Math.max(0, value) : void 0;
|
|
33
|
+
}
|
|
34
|
+
function addCost(left, right) {
|
|
35
|
+
return Math.round(((left ?? 0) + right) * 1e12) / 1e12;
|
|
36
|
+
}
|
|
37
|
+
function getComponentTotal(usage) {
|
|
38
|
+
let total;
|
|
39
|
+
for (const field of COMPONENT_USAGE_FIELDS) {
|
|
40
|
+
const value = getFiniteCount(usage[field]);
|
|
41
|
+
if (value === void 0) continue;
|
|
42
|
+
total = (total ?? 0) + value;
|
|
43
|
+
}
|
|
44
|
+
return total;
|
|
45
|
+
}
|
|
46
|
+
function addAgentTurnUsage(...usages) {
|
|
47
|
+
const components = {};
|
|
48
|
+
let componentTotal;
|
|
49
|
+
let totalOnlyTokens;
|
|
50
|
+
let reasoningTokens;
|
|
51
|
+
const cost = {};
|
|
52
|
+
for (const usage of usages) {
|
|
53
|
+
if (!usage) continue;
|
|
54
|
+
const reasoning = getFiniteCount(usage.reasoningTokens);
|
|
55
|
+
if (reasoning !== void 0) {
|
|
56
|
+
reasoningTokens = (reasoningTokens ?? 0) + reasoning;
|
|
57
|
+
}
|
|
58
|
+
if (usage.cost) {
|
|
59
|
+
for (const field of [...COST_COMPONENT_FIELDS, "total"]) {
|
|
60
|
+
const value = getFiniteCost(usage.cost[field]);
|
|
61
|
+
if (value === void 0) continue;
|
|
62
|
+
cost[field] = addCost(cost[field], value);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const usageComponentTotal = getComponentTotal(usage);
|
|
66
|
+
if (usageComponentTotal !== void 0) {
|
|
67
|
+
componentTotal = (componentTotal ?? 0) + usageComponentTotal;
|
|
68
|
+
for (const field of COMPONENT_USAGE_FIELDS) {
|
|
69
|
+
const value = getFiniteCount(usage[field]);
|
|
70
|
+
if (value === void 0) continue;
|
|
71
|
+
components[field] = (components[field] ?? 0) + value;
|
|
72
|
+
}
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const totalTokens = getFiniteCount(usage.totalTokens);
|
|
76
|
+
if (totalTokens !== void 0) {
|
|
77
|
+
totalOnlyTokens = (totalOnlyTokens ?? 0) + totalTokens;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (totalOnlyTokens !== void 0) {
|
|
81
|
+
return {
|
|
82
|
+
totalTokens: totalOnlyTokens + (componentTotal ?? 0),
|
|
83
|
+
...reasoningTokens !== void 0 ? { reasoningTokens } : {},
|
|
84
|
+
...Object.keys(cost).length > 0 ? { cost } : {}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const result = {
|
|
88
|
+
...components,
|
|
89
|
+
...reasoningTokens !== void 0 ? { reasoningTokens } : {},
|
|
90
|
+
...Object.keys(cost).length > 0 ? { cost } : {}
|
|
91
|
+
};
|
|
92
|
+
return hasAgentTurnUsage(result) ? result : void 0;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export {
|
|
96
|
+
agentTurnUsageSchema,
|
|
97
|
+
hasAgentTurnUsage,
|
|
98
|
+
addAgentTurnUsage
|
|
99
|
+
};
|