@symerian/symi 3.0.18 → 3.0.19

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 (116) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/package.json +1 -1
  4. package/extensions/copilot-proxy/README.md +0 -24
  5. package/extensions/copilot-proxy/index.ts +0 -154
  6. package/extensions/copilot-proxy/node_modules/.bin/symi +0 -21
  7. package/extensions/copilot-proxy/package.json +0 -15
  8. package/extensions/copilot-proxy/symi.plugin.json +0 -9
  9. package/extensions/device-pair/index.ts +0 -642
  10. package/extensions/device-pair/symi.plugin.json +0 -20
  11. package/extensions/diagnostics-otel/index.ts +0 -15
  12. package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -21
  13. package/extensions/diagnostics-otel/node_modules/.bin/symi +0 -21
  14. package/extensions/diagnostics-otel/package.json +0 -27
  15. package/extensions/diagnostics-otel/src/service.test.ts +0 -290
  16. package/extensions/diagnostics-otel/src/service.ts +0 -666
  17. package/extensions/diagnostics-otel/symi.plugin.json +0 -8
  18. package/extensions/google-antigravity-auth/README.md +0 -24
  19. package/extensions/google-antigravity-auth/index.ts +0 -424
  20. package/extensions/google-antigravity-auth/node_modules/.bin/symi +0 -21
  21. package/extensions/google-antigravity-auth/package.json +0 -15
  22. package/extensions/google-antigravity-auth/symi.plugin.json +0 -9
  23. package/extensions/google-gemini-cli-auth/README.md +0 -35
  24. package/extensions/google-gemini-cli-auth/index.ts +0 -75
  25. package/extensions/google-gemini-cli-auth/node_modules/.bin/symi +0 -21
  26. package/extensions/google-gemini-cli-auth/oauth.test.ts +0 -162
  27. package/extensions/google-gemini-cli-auth/oauth.ts +0 -636
  28. package/extensions/google-gemini-cli-auth/package.json +0 -15
  29. package/extensions/google-gemini-cli-auth/symi.plugin.json +0 -9
  30. package/extensions/learning-loop/index.ts +0 -159
  31. package/extensions/learning-loop/node_modules/.bin/symi +0 -21
  32. package/extensions/learning-loop/package.json +0 -18
  33. package/extensions/learning-loop/src/analytics/gateway-methods.ts +0 -230
  34. package/extensions/learning-loop/src/analytics/metrics-aggregator.ts +0 -153
  35. package/extensions/learning-loop/src/capture/run-tracker.ts +0 -181
  36. package/extensions/learning-loop/src/capture/serializer.ts +0 -74
  37. package/extensions/learning-loop/src/db.ts +0 -583
  38. package/extensions/learning-loop/src/feedback/explicit-feedback.ts +0 -58
  39. package/extensions/learning-loop/src/feedback/implicit-signals.ts +0 -89
  40. package/extensions/learning-loop/src/graph/edge-inference.ts +0 -189
  41. package/extensions/learning-loop/src/graph/graph-retrieval.ts +0 -144
  42. package/extensions/learning-loop/src/graph/graph-store.ts +0 -183
  43. package/extensions/learning-loop/src/hooks.ts +0 -244
  44. package/extensions/learning-loop/src/injection/cache.ts +0 -73
  45. package/extensions/learning-loop/src/injection/context-injector.ts +0 -104
  46. package/extensions/learning-loop/src/injection/prompt-builder.ts +0 -43
  47. package/extensions/learning-loop/src/learning/embedding-bridge.ts +0 -54
  48. package/extensions/learning-loop/src/learning/learning-extractor.ts +0 -217
  49. package/extensions/learning-loop/src/learning/learning-store.ts +0 -158
  50. package/extensions/learning-loop/src/learning/retrieval.ts +0 -87
  51. package/extensions/learning-loop/src/math/confidence-intervals.ts +0 -62
  52. package/extensions/learning-loop/src/math/ewma.ts +0 -51
  53. package/extensions/learning-loop/src/math/weighted-scorer.ts +0 -42
  54. package/extensions/learning-loop/src/schema.ts +0 -176
  55. package/extensions/learning-loop/src/scoring/normalization.ts +0 -32
  56. package/extensions/learning-loop/src/scoring/quality-engine.ts +0 -78
  57. package/extensions/learning-loop/src/scoring/signal-extractors.ts +0 -155
  58. package/extensions/learning-loop/src/test/context-injector.test.ts +0 -142
  59. package/extensions/learning-loop/src/test/fixes.test.ts +0 -1286
  60. package/extensions/learning-loop/src/test/graph.test.ts +0 -711
  61. package/extensions/learning-loop/src/test/integration.test.ts +0 -312
  62. package/extensions/learning-loop/src/test/learning-store.test.ts +0 -191
  63. package/extensions/learning-loop/src/test/math.test.ts +0 -148
  64. package/extensions/learning-loop/src/test/quality-engine.test.ts +0 -231
  65. package/extensions/learning-loop/src/test/run-tracker.test.ts +0 -143
  66. package/extensions/learning-loop/src/types.ts +0 -281
  67. package/extensions/learning-loop/symi.plugin.json +0 -46
  68. package/extensions/llm-task/README.md +0 -97
  69. package/extensions/llm-task/index.ts +0 -6
  70. package/extensions/llm-task/package.json +0 -12
  71. package/extensions/llm-task/src/llm-task-tool.test.ts +0 -138
  72. package/extensions/llm-task/src/llm-task-tool.ts +0 -249
  73. package/extensions/llm-task/symi.plugin.json +0 -21
  74. package/extensions/memory-lancedb/config.ts +0 -161
  75. package/extensions/memory-lancedb/index.test.ts +0 -330
  76. package/extensions/memory-lancedb/index.ts +0 -670
  77. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -21
  78. package/extensions/memory-lancedb/node_modules/.bin/openai +0 -21
  79. package/extensions/memory-lancedb/node_modules/.bin/symi +0 -21
  80. package/extensions/memory-lancedb/package.json +0 -20
  81. package/extensions/memory-lancedb/symi.plugin.json +0 -71
  82. package/extensions/minimax-portal-auth/README.md +0 -33
  83. package/extensions/minimax-portal-auth/index.ts +0 -161
  84. package/extensions/minimax-portal-auth/node_modules/.bin/symi +0 -21
  85. package/extensions/minimax-portal-auth/oauth.ts +0 -247
  86. package/extensions/minimax-portal-auth/package.json +0 -15
  87. package/extensions/minimax-portal-auth/symi.plugin.json +0 -9
  88. package/extensions/model-equalizer/index.ts +0 -80
  89. package/extensions/model-equalizer/skills/model-equalizer/SKILL.md +0 -58
  90. package/extensions/model-equalizer/src/detection.ts +0 -62
  91. package/extensions/model-equalizer/src/enhancer.ts +0 -63
  92. package/extensions/model-equalizer/src/test/detection.test.ts +0 -218
  93. package/extensions/model-equalizer/src/test/enhancer.test.ts +0 -137
  94. package/extensions/model-equalizer/src/test/integration.test.ts +0 -185
  95. package/extensions/model-equalizer/src/types.ts +0 -24
  96. package/extensions/model-equalizer/symi.plugin.json +0 -12
  97. package/extensions/phone-control/index.ts +0 -421
  98. package/extensions/phone-control/symi.plugin.json +0 -10
  99. package/extensions/pipeline/README.md +0 -75
  100. package/extensions/pipeline/SKILL.md +0 -97
  101. package/extensions/pipeline/index.ts +0 -18
  102. package/extensions/pipeline/package.json +0 -11
  103. package/extensions/pipeline/src/pipeline-tool.test.ts +0 -345
  104. package/extensions/pipeline/src/pipeline-tool.ts +0 -266
  105. package/extensions/pipeline/src/windows-spawn.test.ts +0 -148
  106. package/extensions/pipeline/src/windows-spawn.ts +0 -193
  107. package/extensions/pipeline/symi.plugin.json +0 -10
  108. package/extensions/qwen-portal-auth/README.md +0 -24
  109. package/extensions/qwen-portal-auth/index.ts +0 -134
  110. package/extensions/qwen-portal-auth/oauth.ts +0 -190
  111. package/extensions/qwen-portal-auth/symi.plugin.json +0 -9
  112. package/extensions/talk-voice/index.ts +0 -150
  113. package/extensions/talk-voice/symi.plugin.json +0 -10
  114. package/extensions/thread-ownership/index.test.ts +0 -180
  115. package/extensions/thread-ownership/index.ts +0 -133
  116. package/extensions/thread-ownership/symi.plugin.json +0 -28
@@ -1,133 +0,0 @@
1
- import type { SymiConfig, SymiPluginApi } from "symi/plugin-sdk";
2
-
3
- type ThreadOwnershipConfig = {
4
- forwarderUrl?: string;
5
- abTestChannels?: string[];
6
- };
7
-
8
- type AgentEntry = NonNullable<NonNullable<SymiConfig["agents"]>["list"]>[number];
9
-
10
- // In-memory set of {channel}:{thread} keys where this agent was @-mentioned.
11
- // Entries expire after 5 minutes.
12
- const mentionedThreads = new Map<string, number>();
13
- const MENTION_TTL_MS = 5 * 60 * 1000;
14
-
15
- function cleanExpiredMentions(): void {
16
- const now = Date.now();
17
- for (const [key, ts] of mentionedThreads) {
18
- if (now - ts > MENTION_TTL_MS) {
19
- mentionedThreads.delete(key);
20
- }
21
- }
22
- }
23
-
24
- function resolveOwnershipAgent(config: SymiConfig): { id: string; name: string } {
25
- const list = Array.isArray(config.agents?.list)
26
- ? config.agents.list.filter((entry): entry is AgentEntry =>
27
- Boolean(entry && typeof entry === "object"),
28
- )
29
- : [];
30
- const selected = list.find((entry) => entry.default === true) ?? list[0];
31
-
32
- const id =
33
- typeof selected?.id === "string" && selected.id.trim() ? selected.id.trim() : "unknown";
34
- const identityName =
35
- typeof selected?.identity?.name === "string" ? selected.identity.name.trim() : "";
36
- const fallbackName = typeof selected?.name === "string" ? selected.name.trim() : "";
37
- const name = identityName || fallbackName;
38
-
39
- return { id, name };
40
- }
41
-
42
- export default function register(api: SymiPluginApi) {
43
- const pluginCfg = (api.pluginConfig ?? {}) as ThreadOwnershipConfig;
44
- const forwarderUrl = (
45
- pluginCfg.forwarderUrl ??
46
- process.env.SLACK_FORWARDER_URL ??
47
- "http://slack-forwarder:8750"
48
- ).replace(/\/$/, "");
49
-
50
- const abTestChannels = new Set(
51
- pluginCfg.abTestChannels ??
52
- process.env.THREAD_OWNERSHIP_CHANNELS?.split(",").filter(Boolean) ??
53
- [],
54
- );
55
-
56
- const { id: agentId, name: agentName } = resolveOwnershipAgent(api.config);
57
- const botUserId = process.env.SLACK_BOT_USER_ID ?? "";
58
-
59
- // ---------------------------------------------------------------------------
60
- // message_received: track @-mentions so the agent can reply even if it
61
- // doesn't own the thread.
62
- // ---------------------------------------------------------------------------
63
- api.on("message_received", async (event, ctx) => {
64
- if (ctx.channelId !== "slack") return;
65
-
66
- const text = event.content ?? "";
67
- const threadTs = (event.metadata?.threadTs as string) ?? "";
68
- const channelId = (event.metadata?.channelId as string) ?? ctx.conversationId ?? "";
69
-
70
- if (!threadTs || !channelId) return;
71
-
72
- // Check if this agent was @-mentioned.
73
- const mentioned =
74
- (agentName && text.includes(`@${agentName}`)) ||
75
- (botUserId && text.includes(`<@${botUserId}>`));
76
-
77
- if (mentioned) {
78
- cleanExpiredMentions();
79
- mentionedThreads.set(`${channelId}:${threadTs}`, Date.now());
80
- }
81
- });
82
-
83
- // ---------------------------------------------------------------------------
84
- // message_sending: check thread ownership before sending to Slack.
85
- // Returns { cancel: true } if another agent owns the thread.
86
- // ---------------------------------------------------------------------------
87
- api.on("message_sending", async (event, ctx) => {
88
- if (ctx.channelId !== "slack") return;
89
-
90
- const threadTs = (event.metadata?.threadTs as string) ?? "";
91
- const channelId = (event.metadata?.channelId as string) ?? event.to;
92
-
93
- // Top-level messages (no thread) are always allowed.
94
- if (!threadTs) return;
95
-
96
- // Only enforce in A/B test channels (if set is empty, skip entirely).
97
- if (abTestChannels.size > 0 && !abTestChannels.has(channelId)) return;
98
-
99
- // If this agent was @-mentioned in this thread recently, skip ownership check.
100
- cleanExpiredMentions();
101
- if (mentionedThreads.has(`${channelId}:${threadTs}`)) return;
102
-
103
- // Try to claim ownership via the forwarder HTTP API.
104
- try {
105
- const resp = await fetch(`${forwarderUrl}/api/v1/ownership/${channelId}/${threadTs}`, {
106
- method: "POST",
107
- headers: { "Content-Type": "application/json" },
108
- body: JSON.stringify({ agent_id: agentId }),
109
- signal: AbortSignal.timeout(3000),
110
- });
111
-
112
- if (resp.ok) {
113
- // We own it (or just claimed it), proceed.
114
- return;
115
- }
116
-
117
- if (resp.status === 409) {
118
- // Another agent owns this thread — cancel the send.
119
- const body = (await resp.json()) as { owner?: string };
120
- api.logger.info?.(
121
- `thread-ownership: cancelled send to ${channelId}:${threadTs} — owned by ${body.owner}`,
122
- );
123
- return { cancel: true };
124
- }
125
-
126
- // Unexpected status — fail open.
127
- api.logger.warn?.(`thread-ownership: unexpected status ${resp.status}, allowing send`);
128
- } catch (err) {
129
- // Network error — fail open.
130
- api.logger.warn?.(`thread-ownership: ownership check failed (${String(err)}), allowing send`);
131
- }
132
- });
133
- }
@@ -1,28 +0,0 @@
1
- {
2
- "id": "thread-ownership",
3
- "name": "Thread Ownership",
4
- "description": "Prevents multiple agents from responding in the same Slack thread. Uses HTTP calls to the slack-forwarder ownership API.",
5
- "configSchema": {
6
- "type": "object",
7
- "additionalProperties": false,
8
- "properties": {
9
- "forwarderUrl": {
10
- "type": "string"
11
- },
12
- "abTestChannels": {
13
- "type": "array",
14
- "items": { "type": "string" }
15
- }
16
- }
17
- },
18
- "uiHints": {
19
- "forwarderUrl": {
20
- "label": "Forwarder URL",
21
- "help": "Base URL of the slack-forwarder ownership API (default: http://slack-forwarder:8750)"
22
- },
23
- "abTestChannels": {
24
- "label": "A/B Test Channels",
25
- "help": "Slack channel IDs where thread ownership is enforced"
26
- }
27
- }
28
- }