@wowyuarm/dsh-agent-team 0.1.12 → 0.1.13

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.
Files changed (85) hide show
  1. package/README.md +2 -0
  2. package/README.zh.md +2 -0
  3. package/cordis.patch.yml +7 -3
  4. package/package.json +14 -2
  5. package/packages/agent-team/README.md +2 -2
  6. package/packages/agent-team/README.zh.md +2 -2
  7. package/packages/agent-team/lib/index.js +151 -69
  8. package/packages/agent-team/lib/ledger.js +249 -31
  9. package/packages/agent-team/lib/member-context.js +18 -1
  10. package/packages/agent-team/lib/member-runtime.js +5 -4
  11. package/packages/agent-team/lib/mentions.js +48 -24
  12. package/packages/agent-team/lib/spec.js +19 -0
  13. package/packages/agent-team/lib/typert.host.js +187 -41
  14. package/packages/agent-team/lib/typert.remote-client.d.ts +7 -3
  15. package/packages/agent-team/lib/typert.remote-client.d.ts.map +1 -1
  16. package/packages/agent-team/lib/typert.remote-client.js +132 -27
  17. package/packages/agent-team/lib/types/index.d.ts +32 -7
  18. package/packages/agent-team/lib/types/index.d.ts.map +1 -1
  19. package/packages/agent-team/lib/types/ledger.d.ts +46 -2
  20. package/packages/agent-team/lib/types/ledger.d.ts.map +1 -1
  21. package/packages/agent-team/lib/types/member-context.d.ts +6 -0
  22. package/packages/agent-team/lib/types/member-context.d.ts.map +1 -1
  23. package/packages/agent-team/lib/types/mentions.d.ts +20 -7
  24. package/packages/agent-team/lib/types/mentions.d.ts.map +1 -1
  25. package/packages/agent-team/lib/types/spec.d.ts.map +1 -1
  26. package/packages/agent-team/lib/types/types/entities.d.ts +3 -2
  27. package/packages/agent-team/lib/types/types/entities.d.ts.map +1 -1
  28. package/packages/agent-team/lib/types/types/operations.d.ts +37 -1
  29. package/packages/agent-team/lib/types/types/operations.d.ts.map +1 -1
  30. package/packages/agent-team/lib/types/types/requests-results.d.ts +50 -10
  31. package/packages/agent-team/lib/types/types/requests-results.d.ts.map +1 -1
  32. package/packages/agent-team/lib/types/vendor/storage-sqlite/index.d.ts +87 -0
  33. package/packages/agent-team/lib/types/vendor/storage-sqlite/index.d.ts.map +1 -0
  34. package/packages/agent-team/lib/types/vendor/storage-sqlite/schema.d.ts +59 -0
  35. package/packages/agent-team/lib/types/vendor/storage-sqlite/schema.d.ts.map +1 -0
  36. package/packages/agent-team/lib/types/vendor/storage-sqlite/unit.d.ts +57 -0
  37. package/packages/agent-team/lib/types/vendor/storage-sqlite/unit.d.ts.map +1 -0
  38. package/packages/agent-team/lib/vendor/storage-sqlite/index.js +139 -0
  39. package/packages/agent-team/lib/vendor/storage-sqlite/schema.js +120 -0
  40. package/packages/agent-team/lib/vendor/storage-sqlite/unit.js +132 -0
  41. package/packages/client-agent-team/README.md +1 -1
  42. package/packages/client-agent-team/README.zh.md +1 -1
  43. package/packages/client-agent-team/lib/client.js +603 -343
  44. package/packages/client-agent-team/lib/client.js.map +1 -1
  45. package/packages/client-agent-team/lib/types/client/TeamAgentImport.d.ts +12 -0
  46. package/packages/client-agent-team/lib/types/client/TeamAgentImport.d.ts.map +1 -0
  47. package/packages/client-agent-team/lib/types/client/TeamAgentImport.js +69 -0
  48. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.d.ts +3 -1
  49. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.d.ts.map +1 -1
  50. package/packages/client-agent-team/lib/types/client/TeamAgentsPanel.js +29 -17
  51. package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts.map +1 -1
  52. package/packages/client-agent-team/lib/types/client/TeamChannelPage.js +19 -44
  53. package/packages/client-agent-team/lib/types/client/TeamInboxPage.d.ts +2 -2
  54. package/packages/client-agent-team/lib/types/client/TeamInboxPage.d.ts.map +1 -1
  55. package/packages/client-agent-team/lib/types/client/TeamInboxPage.js +15 -14
  56. package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts +1 -1
  57. package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts.map +1 -1
  58. package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts.map +1 -1
  59. package/packages/client-agent-team/lib/types/client/TeamThreadPage.js +15 -29
  60. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts +1 -1
  61. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.d.ts.map +1 -1
  62. package/packages/client-agent-team/lib/types/client/TeamWorkspaceBrowser.js +2 -2
  63. package/packages/client-agent-team/lib/types/client/index.d.ts.map +1 -1
  64. package/packages/client-agent-team/lib/types/client/index.js +8 -1
  65. package/packages/client-agent-team/lib/types/client/locales.d.ts +18 -0
  66. package/packages/client-agent-team/lib/types/client/locales.d.ts.map +1 -1
  67. package/packages/client-agent-team/lib/types/client/locales.js +18 -0
  68. package/packages/client-agent-team/lib/types/client/slots.d.ts +3 -1
  69. package/packages/client-agent-team/lib/types/client/slots.d.ts.map +1 -1
  70. package/packages/client-agent-team/lib/types/client/team-changes.d.ts +15 -31
  71. package/packages/client-agent-team/lib/types/client/team-changes.d.ts.map +1 -1
  72. package/packages/client-agent-team/lib/types/client/team-changes.js +82 -111
  73. package/packages/client-agent-team/lib/types/client/team-formatters.d.ts +13 -11
  74. package/packages/client-agent-team/lib/types/client/team-formatters.d.ts.map +1 -1
  75. package/packages/client-agent-team/lib/types/client/team-formatters.js +29 -35
  76. package/packages/tool-agent-team/README.md +1 -1
  77. package/packages/tool-agent-team/README.zh.md +1 -1
  78. package/packages/tool-agent-team/lib/host-access.js +19 -0
  79. package/packages/tool-agent-team/lib/index.js +42 -33
  80. package/packages/tool-agent-team/lib/types/host-access.d.ts +10 -0
  81. package/packages/tool-agent-team/lib/types/host-access.d.ts.map +1 -1
  82. package/packages/tool-agent-team/lib/types/index.d.ts.map +1 -1
  83. package/packages/client-agent-team/lib/types/client/scope-coverage.d.ts +0 -41
  84. package/packages/client-agent-team/lib/types/client/scope-coverage.d.ts.map +0 -1
  85. package/packages/client-agent-team/lib/types/client/scope-coverage.js +0 -64
@@ -17,40 +17,64 @@ function codeRanges(body) {
17
17
  return ranges;
18
18
  }
19
19
  const ALL_MARKER = /(?<![\p{L}\p{N}_@])@all(?=$|[^\p{L}\p{N}_])/iu;
20
+ /** Whether one body carries the `@all` marker outside code. */
21
+ export function hasAllMarker(body) {
22
+ const excluded = codeRanges(body);
23
+ const marker = ALL_MARKER.exec(body);
24
+ return marker !== null && !excluded.some(([start, end]) => marker.index >= start && marker.index < end);
25
+ }
26
+ /**
27
+ * Every `@Handle` occurrence in one body that names one of `handles`:
28
+ * case-insensitive, on Unicode word boundaries, longest handle first, outside
29
+ * code. Writing `@` is required: bare handles are ordinary words. This is the
30
+ * single definition of an authored mention — the Host delivery resolution and
31
+ * the Client's chip rendering and draft preview all read through it, so a name
32
+ * that renders as a chip is the same name that delivers a notification.
33
+ */
34
+ export function scanBodyHandles(body, handles) {
35
+ const seen = new Set();
36
+ const usable = [];
37
+ for (const handle of handles) {
38
+ const key = handle.toLowerCase();
39
+ if (handle.trim() === '' || seen.has(key))
40
+ continue;
41
+ seen.add(key);
42
+ usable.push(handle);
43
+ }
44
+ if (usable.length === 0)
45
+ return Object.freeze([]);
46
+ const excluded = codeRanges(body);
47
+ // Longest first so `@Reeves` never resolves as `@Reeve` plus a stray letter.
48
+ const ordered = [...usable].sort((left, right) => right.length - left.length);
49
+ const pattern = new RegExp(`(?<![\\p{L}\\p{N}_@])@(?:${ordered.map(handle => escapeRegExp(handle)).join('|')})(?=$|[^\\p{L}\\p{N}_])`, 'giu');
50
+ const matches = [];
51
+ for (const match of body.matchAll(pattern)) {
52
+ const start = match.index ?? 0;
53
+ if (excluded.some(([rangeStart, rangeEnd]) => start >= rangeStart && start < rangeEnd))
54
+ continue;
55
+ const written = match[0].slice(1).toLowerCase();
56
+ const hit = ordered.find(handle => handle.toLowerCase() === written);
57
+ if (hit === undefined)
58
+ continue;
59
+ matches.push(Object.freeze({ handle: hit, start, end: start + match[0].length }));
60
+ }
61
+ return Object.freeze(matches);
62
+ }
20
63
  /**
21
- * Resolve the `@Handle` mentions authored in one Message body. Matching is
22
- * deliberately the same shape the Client renders with — case-insensitive, on
23
- * Unicode word boundaries, longest handle first — so a name that renders as a
24
- * chip is the same name that delivers a notification.
64
+ * Resolve the `@Handle` mentions authored in one Message body.
25
65
  *
26
66
  * Callers pass the candidates reachable in the Message's Channel, so a name
27
67
  * that resolves here is already an addressable target; handles the Channel
28
- * cannot reach simply stay prose. Writing `@` is required: bare handles are
29
- * ordinary words, and treating them as mentions would notify on every
30
- * incidental name-drop.
68
+ * cannot reach simply stay prose.
31
69
  *
32
70
  * `sender` is excluded because a Message never mentions its own author, which
33
71
  * also keeps the result usable as a recipient set without further filtering.
34
72
  */
35
73
  export function resolveBodyMentions(body, candidates, sender) {
36
74
  const usable = candidates.filter(candidate => candidate.memberId !== sender && candidate.handle.trim() !== '');
37
- const excluded = codeRanges(body);
38
- const inCode = (index) => excluded.some(([start, end]) => index >= start && index < end);
39
- const allMarker = ALL_MARKER.exec(body);
40
- const all = allMarker !== null && !inCode(allMarker.index);
75
+ const all = hasAllMarker(body);
41
76
  if (usable.length === 0)
42
77
  return { memberIds: Object.freeze([]), all };
43
- // Longest first so `@Reeves` never resolves as `@Reeve` plus a stray letter.
44
- const ordered = [...usable].sort((left, right) => right.handle.length - left.handle.length);
45
- const pattern = new RegExp(`(?<![\\p{L}\\p{N}_@])@(?:${ordered.map(candidate => escapeRegExp(candidate.handle)).join('|')})(?=$|[^\\p{L}\\p{N}_])`, 'giu');
46
- const matched = new Set();
47
- for (const match of body.matchAll(pattern)) {
48
- if (inCode(match.index ?? 0))
49
- continue;
50
- const written = match[0].slice(1).toLowerCase();
51
- const hit = ordered.find(candidate => candidate.handle.toLowerCase() === written);
52
- if (hit !== undefined)
53
- matched.add(hit.memberId);
54
- }
55
- return { memberIds: Object.freeze(usable.filter(candidate => matched.has(candidate.memberId)).map(candidate => candidate.memberId)), all };
78
+ const matched = new Set(scanBodyHandles(body, usable.map(candidate => candidate.handle)).map(match => match.handle.toLowerCase()));
79
+ return { memberIds: Object.freeze(usable.filter(candidate => matched.has(candidate.handle.toLowerCase())).map(candidate => candidate.memberId)), all };
56
80
  }
@@ -365,6 +365,25 @@ const storedAgentTeamOperationSchema = z.discriminatedUnion('kind', [
365
365
  ...releaseSnapshotFields,
366
366
  }).strict(),
367
367
  }).strict(),
368
+ z.object({
369
+ ...operationBase,
370
+ previousOperationId: operationIdSchema.nullable(),
371
+ kind: z.literal('team/member-workspace-joined'),
372
+ data: z.object({
373
+ workspaceId: workspaceIdSchema,
374
+ memberId: memberIdSchema,
375
+ }).strict(),
376
+ }).strict(),
377
+ z.object({
378
+ ...operationBase,
379
+ previousOperationId: operationIdSchema.nullable(),
380
+ kind: z.literal('team/member-workspace-left'),
381
+ data: z.object({
382
+ workspaceId: workspaceIdSchema,
383
+ memberId: memberIdSchema,
384
+ ...releaseSnapshotFields,
385
+ }).strict(),
386
+ }).strict(),
368
387
  z.object({
369
388
  ...operationBase,
370
389
  previousOperationId: operationIdSchema.nullable(),