agentacta 2026.4.8 → 2026.4.10

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.
@@ -0,0 +1,424 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractProjectFromPath = extractProjectFromPath;
4
+ exports.attributeSessionEvents = attributeSessionEvents;
5
+ exports.attributeEventDelta = attributeEventDelta;
6
+ exports.isInternalProjectTag = isInternalProjectTag;
7
+ const PATH_KEYS = new Set([
8
+ 'path', 'file', 'filename', 'file_path', 'filepath',
9
+ 'cwd', 'workdir', 'directory', 'dir', 'root',
10
+ 'repository_path', 'repositorypath', 'repo_path', 'repopath'
11
+ ]);
12
+ const PROJECT_KEYS = new Set([
13
+ 'project', 'project_name', 'projectname',
14
+ 'repo', 'repository', 'repo_name', 'reponame', 'repository_name', 'repositoryname',
15
+ 'workspace'
16
+ ]);
17
+ const BRANCH_KEYS = new Set([
18
+ 'branch', 'branch_name', 'branchname', 'ref', 'git_ref', 'gitref'
19
+ ]);
20
+ const LOOKAROUND_WINDOW = 6;
21
+ const MIN_CONFIDENCE = 2;
22
+ function safeParseJson(value) {
23
+ if (typeof value !== 'string')
24
+ return null;
25
+ try {
26
+ return JSON.parse(value);
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ function normalizeKey(value) {
33
+ return String(value || '').trim().toLowerCase();
34
+ }
35
+ function normalizeProjectKey(value) {
36
+ return String(value || '').trim().toLowerCase().replace(/[^a-z0-9]/g, '');
37
+ }
38
+ function looksLikeFilesystemPath(value, options = {}) {
39
+ const { allowRelative = false } = options;
40
+ if (typeof value !== 'string')
41
+ return false;
42
+ const raw = value.trim();
43
+ if (!raw)
44
+ return false;
45
+ if (/^[a-z][a-z0-9+.-]*:\/\//i.test(raw))
46
+ return false;
47
+ if (/^[\w.-]+@[\w.-]+:.+/.test(raw))
48
+ return false;
49
+ if (/^refs\/(heads|tags|remotes)\//i.test(raw))
50
+ return false;
51
+ const normalized = raw.replace(/\\/g, '/');
52
+ const isWindowsDriveAbs = /^[a-zA-Z]:\//.test(normalized);
53
+ const isUncAbs = normalized.startsWith('//');
54
+ if (normalized.startsWith('/')
55
+ || normalized.startsWith('~/')
56
+ || normalized.startsWith('./')
57
+ || normalized.startsWith('../')
58
+ || isWindowsDriveAbs
59
+ || isUncAbs) {
60
+ return true;
61
+ }
62
+ if (!allowRelative || !normalized.includes('/'))
63
+ return false;
64
+ if (/^(origin|remotes)\//i.test(normalized))
65
+ return false;
66
+ const parts = normalized.split('/').filter(Boolean);
67
+ if (!parts.length)
68
+ return false;
69
+ if (parts.length === 2 && !parts[1].includes('.'))
70
+ return false;
71
+ return parts.length >= 2;
72
+ }
73
+ function isInternalProjectTag(tag) {
74
+ if (!tag)
75
+ return true;
76
+ return tag.startsWith('agent:') || tag.startsWith('claude:');
77
+ }
78
+ function toDisplayProject(tag) {
79
+ if (!tag || typeof tag !== 'string')
80
+ return null;
81
+ const value = tag.trim();
82
+ if (!value || isInternalProjectTag(value))
83
+ return null;
84
+ return value;
85
+ }
86
+ function extractProjectFromPath(filePath) {
87
+ if (!filePath || typeof filePath !== 'string')
88
+ return null;
89
+ const normalized = filePath.trim().replace(/\\/g, '/');
90
+ if (!looksLikeFilesystemPath(normalized, { allowRelative: true }))
91
+ return null;
92
+ const isWindowsDriveAbs = /^[a-zA-Z]:\//.test(normalized);
93
+ const isUncAbs = normalized.startsWith('//');
94
+ if (!normalized.startsWith('/') && !normalized.startsWith('~') && !isWindowsDriveAbs && !isUncAbs)
95
+ return null;
96
+ const rel = normalized
97
+ .replace(/^[a-zA-Z]:\//, '')
98
+ .replace(/^\/\/[^/]+\/[^/]+\//, '')
99
+ .replace(/^\/home\/[^/]+\//, '')
100
+ .replace(/^\/Users\/[^/]+\//, '')
101
+ .replace(/^Users\/[^/]+\//, '')
102
+ .replace(/^~\//, '');
103
+ const parts = rel.split('/').filter(Boolean);
104
+ if (!parts.length)
105
+ return null;
106
+ if (parts[0] === 'Developer' && parts[1])
107
+ return parts[1];
108
+ if (parts[0] === 'dev' && parts[1])
109
+ return parts[1];
110
+ if (parts[0] === 'code' && parts[1])
111
+ return parts[1];
112
+ if (parts[0] === '.openclaw' && parts[1] === 'workspace')
113
+ return 'workspace';
114
+ if (parts[0] === '.openclaw' && parts[1] === 'agents' && parts[2])
115
+ return `agent:${parts[2]}`;
116
+ if (parts[0] === '.claude' && parts[1] === 'projects' && parts[2])
117
+ return `claude:${parts[2]}`;
118
+ if (parts[0] === 'Shared')
119
+ return 'shared';
120
+ return null;
121
+ }
122
+ function extractSessionProjects(session) {
123
+ const raw = session && session.projects;
124
+ if (!raw)
125
+ return [];
126
+ let parsed;
127
+ try {
128
+ parsed = JSON.parse(raw);
129
+ }
130
+ catch {
131
+ return [];
132
+ }
133
+ if (!Array.isArray(parsed))
134
+ return [];
135
+ return [...new Set(parsed.map(toDisplayProject).filter((p) => p !== null))];
136
+ }
137
+ function addCandidate(candidateSet, value) {
138
+ const p = toDisplayProject(value);
139
+ if (p)
140
+ candidateSet.add(p);
141
+ }
142
+ function visitObject(value, visitor, key = '') {
143
+ if (!value || typeof value !== 'object')
144
+ return;
145
+ if (Array.isArray(value)) {
146
+ for (const item of value)
147
+ visitObject(item, visitor, key);
148
+ return;
149
+ }
150
+ for (const [k, v] of Object.entries(value)) {
151
+ visitor(k, v);
152
+ if (v && typeof v === 'object')
153
+ visitObject(v, visitor, k);
154
+ }
155
+ }
156
+ function buildCandidateProjects(session, events) {
157
+ const candidateSet = new Set(extractSessionProjects(session));
158
+ for (const event of events || []) {
159
+ const args = safeParseJson(event.tool_args);
160
+ if (!args)
161
+ continue;
162
+ visitObject(args, (key, value) => {
163
+ if (typeof value !== 'string')
164
+ return;
165
+ const keyNorm = normalizeKey(key);
166
+ if (PATH_KEYS.has(keyNorm)) {
167
+ if (!looksLikeFilesystemPath(value, { allowRelative: true }))
168
+ return;
169
+ addCandidate(candidateSet, extractProjectFromPath(value));
170
+ return;
171
+ }
172
+ if (looksLikeFilesystemPath(value)) {
173
+ addCandidate(candidateSet, extractProjectFromPath(value));
174
+ }
175
+ if (PROJECT_KEYS.has(keyNorm)) {
176
+ addCandidate(candidateSet, value);
177
+ }
178
+ });
179
+ }
180
+ return [...candidateSet];
181
+ }
182
+ function escapeRegExp(value) {
183
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
184
+ }
185
+ function countCandidateMentions(text, candidate) {
186
+ if (!text || !candidate)
187
+ return 0;
188
+ const rx = new RegExp(`(^|[^a-z0-9])${escapeRegExp(candidate.toLowerCase())}([^a-z0-9]|$)`, 'gi');
189
+ let matches = 0;
190
+ const haystack = text.toLowerCase();
191
+ while (rx.exec(haystack) !== null) {
192
+ matches += 1;
193
+ }
194
+ return matches;
195
+ }
196
+ function buildCandidateLookup(candidates) {
197
+ const byNorm = new Map();
198
+ for (const candidate of candidates) {
199
+ byNorm.set(normalizeProjectKey(candidate), candidate);
200
+ }
201
+ return byNorm;
202
+ }
203
+ function resolveCandidate(value, candidates, byNorm, options = {}) {
204
+ const { allowPath = true } = options;
205
+ if (!value || typeof value !== 'string')
206
+ return null;
207
+ const raw = value.trim();
208
+ if (!raw)
209
+ return null;
210
+ if (allowPath) {
211
+ const fromPath = toDisplayProject(extractProjectFromPath(raw));
212
+ if (fromPath) {
213
+ const resolved = byNorm.get(normalizeProjectKey(fromPath));
214
+ return resolved || fromPath;
215
+ }
216
+ }
217
+ const direct = byNorm.get(normalizeProjectKey(raw));
218
+ if (direct)
219
+ return direct;
220
+ const lower = raw.toLowerCase();
221
+ for (const candidate of candidates) {
222
+ const rx = new RegExp(`(^|[^a-z0-9])${escapeRegExp(candidate.toLowerCase())}([^a-z0-9]|$)`, 'i');
223
+ if (rx.test(lower))
224
+ return candidate;
225
+ }
226
+ return null;
227
+ }
228
+ function chooseBestProject(scores) {
229
+ let bestProject = null;
230
+ let bestScore = 0;
231
+ let secondBest = 0;
232
+ for (const [project, score] of scores.entries()) {
233
+ if (score > bestScore) {
234
+ secondBest = bestScore;
235
+ bestScore = score;
236
+ bestProject = project;
237
+ continue;
238
+ }
239
+ if (score > secondBest)
240
+ secondBest = score;
241
+ }
242
+ if (!bestProject || bestScore < MIN_CONFIDENCE) {
243
+ return { project: null, score: 0 };
244
+ }
245
+ if (bestScore === secondBest) {
246
+ return { project: null, score: 0 };
247
+ }
248
+ return { project: bestProject, score: bestScore };
249
+ }
250
+ function addScore(scores, project, value) {
251
+ if (!project || value <= 0)
252
+ return;
253
+ scores.set(project, (scores.get(project) || 0) + value);
254
+ }
255
+ function extractCallBaseId(id) {
256
+ if (!id)
257
+ return '';
258
+ return String(id).replace(/:(call|result)$/, '');
259
+ }
260
+ function scoreEvent(event, candidates, byNorm) {
261
+ const scores = new Map();
262
+ const args = safeParseJson(event.tool_args);
263
+ if (args) {
264
+ visitObject(args, (key, value) => {
265
+ if (typeof value !== 'string')
266
+ return;
267
+ const keyNorm = normalizeKey(key);
268
+ if (PATH_KEYS.has(keyNorm)) {
269
+ const candidate = resolveCandidate(value, candidates, byNorm, { allowPath: true });
270
+ if (!candidate)
271
+ return;
272
+ addScore(scores, candidate, 4);
273
+ return;
274
+ }
275
+ if (PROJECT_KEYS.has(keyNorm)) {
276
+ const candidate = resolveCandidate(value, candidates, byNorm, { allowPath: true });
277
+ if (!candidate)
278
+ return;
279
+ addScore(scores, candidate, 3);
280
+ return;
281
+ }
282
+ if (BRANCH_KEYS.has(keyNorm)) {
283
+ const candidate = resolveCandidate(value, candidates, byNorm, { allowPath: false });
284
+ if (!candidate)
285
+ return;
286
+ addScore(scores, candidate, 2);
287
+ return;
288
+ }
289
+ if (looksLikeFilesystemPath(value)) {
290
+ const candidate = resolveCandidate(value, candidates, byNorm, { allowPath: true });
291
+ if (!candidate)
292
+ return;
293
+ addScore(scores, candidate, 3);
294
+ return;
295
+ }
296
+ const candidate = resolveCandidate(value, candidates, byNorm, { allowPath: false });
297
+ if (!candidate)
298
+ return;
299
+ addScore(scores, candidate, 1);
300
+ });
301
+ }
302
+ if (typeof event.content === 'string' && event.content) {
303
+ for (const candidate of candidates) {
304
+ const count = countCandidateMentions(event.content, candidate);
305
+ if (count > 0)
306
+ addScore(scores, candidate, Math.min(count, 2));
307
+ }
308
+ }
309
+ if (typeof event.tool_name === 'string' && event.tool_name) {
310
+ const candidate = resolveCandidate(event.tool_name, candidates, byNorm);
311
+ if (candidate)
312
+ addScore(scores, candidate, 1);
313
+ }
314
+ return chooseBestProject(scores);
315
+ }
316
+ function findPrevAttributed(events, idx) {
317
+ for (let i = idx - 1; i >= 0 && idx - i <= LOOKAROUND_WINDOW; i--) {
318
+ if (events[i].project)
319
+ return events[i].project;
320
+ }
321
+ return null;
322
+ }
323
+ function findNextAttributed(events, idx) {
324
+ for (let i = idx + 1; i < events.length && i - idx <= LOOKAROUND_WINDOW; i++) {
325
+ if (events[i].project)
326
+ return events[i].project;
327
+ }
328
+ return null;
329
+ }
330
+ function attributeSessionEvents(session, events) {
331
+ const list = Array.isArray(events) ? events : [];
332
+ if (!list.length)
333
+ return { events: [], projectFilters: [] };
334
+ const candidates = buildCandidateProjects(session, list);
335
+ const byNorm = buildCandidateLookup(candidates);
336
+ const withOrder = list.map((event, idx) => ({ idx, event }));
337
+ withOrder.sort((a, b) => {
338
+ const ta = Date.parse(a.event.timestamp || '') || 0;
339
+ const tb = Date.parse(b.event.timestamp || '') || 0;
340
+ if (ta !== tb)
341
+ return ta - tb;
342
+ return String(a.event.id || '').localeCompare(String(b.event.id || ''));
343
+ });
344
+ const callProjectByBase = new Map();
345
+ const attributedOrdered = withOrder.map(({ idx, event }) => {
346
+ const base = {
347
+ ...event,
348
+ project: null,
349
+ project_confidence: 0
350
+ };
351
+ const scored = scoreEvent(base, candidates, byNorm);
352
+ if (scored.project) {
353
+ base.project = scored.project;
354
+ base.project_confidence = scored.score;
355
+ }
356
+ if (base.type === 'tool_call' && base.project) {
357
+ const callBaseId = extractCallBaseId(base.id);
358
+ if (callBaseId)
359
+ callProjectByBase.set(callBaseId, base.project);
360
+ }
361
+ return { idx, event: base };
362
+ });
363
+ const orderedEvents = attributedOrdered.map(entry => entry.event);
364
+ for (let i = 0; i < orderedEvents.length; i++) {
365
+ const current = orderedEvents[i];
366
+ if (current.project)
367
+ continue;
368
+ if (current.type === 'tool_result') {
369
+ const callBaseId = extractCallBaseId(current.id);
370
+ const linkedProject = callProjectByBase.get(callBaseId);
371
+ if (linkedProject) {
372
+ current.project = linkedProject;
373
+ current.project_confidence = 3;
374
+ continue;
375
+ }
376
+ }
377
+ if (current.type !== 'message')
378
+ continue;
379
+ const prevProject = findPrevAttributed(orderedEvents, i);
380
+ const nextProject = findNextAttributed(orderedEvents, i);
381
+ if (prevProject && nextProject && prevProject === nextProject) {
382
+ current.project = prevProject;
383
+ current.project_confidence = 2;
384
+ continue;
385
+ }
386
+ if (prevProject && !nextProject) {
387
+ current.project = prevProject;
388
+ current.project_confidence = 2;
389
+ }
390
+ }
391
+ const eventsOut = new Array(list.length);
392
+ for (const entry of attributedOrdered) {
393
+ eventsOut[entry.idx] = entry.event;
394
+ }
395
+ const counts = new Map();
396
+ for (const event of eventsOut) {
397
+ if (!event.project || event.project_confidence < MIN_CONFIDENCE) {
398
+ event.project = null;
399
+ event.project_confidence = 0;
400
+ continue;
401
+ }
402
+ counts.set(event.project, (counts.get(event.project) || 0) + 1);
403
+ }
404
+ const projectFilters = [...counts.entries()]
405
+ .sort((a, b) => (b[1] - a[1]) || a[0].localeCompare(b[0]))
406
+ .map(([project, eventCount]) => ({ project, eventCount }));
407
+ return { events: eventsOut, projectFilters };
408
+ }
409
+ function attributeEventDelta(session, deltaEvents, contextEvents = []) {
410
+ const delta = Array.isArray(deltaEvents) ? deltaEvents : [];
411
+ if (!delta.length)
412
+ return [];
413
+ const context = Array.isArray(contextEvents) ? contextEvents : [];
414
+ const merged = [...context, ...delta];
415
+ const attributed = attributeSessionEvents(session, merged).events;
416
+ const byId = new Map();
417
+ for (const event of attributed) {
418
+ if (!event || !event.id)
419
+ continue;
420
+ byId.set(event.id, event);
421
+ }
422
+ return delta.map(event => byId.get(event.id) || { ...event, project: null, project_confidence: 0 });
423
+ }
424
+ //# sourceMappingURL=project-attribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-attribution.js","sourceRoot":"","sources":["../src/project-attribution.ts"],"names":[],"mappings":"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"}