@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,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/symi/projects/symi/node_modules:/home/symi/projects/node_modules:/home/symi/node_modules:/home/node_modules:/node_modules:/home/symi/projects/symi/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/symi/projects/symi/node_modules:/home/symi/projects/node_modules:/home/symi/node_modules:/home/node_modules:/node_modules:/home/symi/projects/symi/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../@symerian/symi/symi.mjs" "$@"
19
- else
20
- exec node "$basedir/../@symerian/symi/symi.mjs" "$@"
21
- fi
@@ -1,27 +0,0 @@
1
- {
2
- "name": "@symi/diagnostics-otel",
3
- "version": "3.0.9",
4
- "description": "Symi diagnostics OpenTelemetry exporter",
5
- "type": "module",
6
- "dependencies": {
7
- "@opentelemetry/api": "^1.9.0",
8
- "@opentelemetry/api-logs": "^0.212.0",
9
- "@opentelemetry/exporter-logs-otlp-http": "^0.212.0",
10
- "@opentelemetry/exporter-metrics-otlp-http": "^0.212.0",
11
- "@opentelemetry/exporter-trace-otlp-http": "^0.212.0",
12
- "@opentelemetry/resources": "^2.5.1",
13
- "@opentelemetry/sdk-logs": "^0.212.0",
14
- "@opentelemetry/sdk-metrics": "^2.5.1",
15
- "@opentelemetry/sdk-node": "^0.212.0",
16
- "@opentelemetry/sdk-trace-base": "^2.5.1",
17
- "@opentelemetry/semantic-conventions": "^1.39.0"
18
- },
19
- "devDependencies": {
20
- "@symerian/symi": "workspace:*"
21
- },
22
- "symi": {
23
- "extensions": [
24
- "./index.ts"
25
- ]
26
- }
27
- }
@@ -1,290 +0,0 @@
1
- import { beforeEach, describe, expect, test, vi } from "vitest";
2
-
3
- const registerLogTransportMock = vi.hoisted(() => vi.fn());
4
-
5
- const telemetryState = vi.hoisted(() => {
6
- const counters = new Map<string, { add: ReturnType<typeof vi.fn> }>();
7
- const histograms = new Map<string, { record: ReturnType<typeof vi.fn> }>();
8
- const tracer = {
9
- startSpan: vi.fn((_name: string, _opts?: unknown) => ({
10
- end: vi.fn(),
11
- setStatus: vi.fn(),
12
- })),
13
- };
14
- const meter = {
15
- createCounter: vi.fn((name: string) => {
16
- const counter = { add: vi.fn() };
17
- counters.set(name, counter);
18
- return counter;
19
- }),
20
- createHistogram: vi.fn((name: string) => {
21
- const histogram = { record: vi.fn() };
22
- histograms.set(name, histogram);
23
- return histogram;
24
- }),
25
- };
26
- return { counters, histograms, tracer, meter };
27
- });
28
-
29
- const sdkStart = vi.hoisted(() => vi.fn().mockResolvedValue(undefined));
30
- const sdkShutdown = vi.hoisted(() => vi.fn().mockResolvedValue(undefined));
31
- const logEmit = vi.hoisted(() => vi.fn());
32
- const logShutdown = vi.hoisted(() => vi.fn().mockResolvedValue(undefined));
33
- const traceExporterCtor = vi.hoisted(() => vi.fn());
34
-
35
- vi.mock("@opentelemetry/api", () => ({
36
- metrics: {
37
- getMeter: () => telemetryState.meter,
38
- },
39
- trace: {
40
- getTracer: () => telemetryState.tracer,
41
- },
42
- SpanStatusCode: {
43
- ERROR: 2,
44
- },
45
- }));
46
-
47
- vi.mock("@opentelemetry/sdk-node", () => ({
48
- NodeSDK: class {
49
- start = sdkStart;
50
- shutdown = sdkShutdown;
51
- },
52
- }));
53
-
54
- vi.mock("@opentelemetry/exporter-metrics-otlp-http", () => ({
55
- OTLPMetricExporter: class {},
56
- }));
57
-
58
- vi.mock("@opentelemetry/exporter-trace-otlp-http", () => ({
59
- OTLPTraceExporter: class {
60
- constructor(options?: unknown) {
61
- traceExporterCtor(options);
62
- }
63
- },
64
- }));
65
-
66
- vi.mock("@opentelemetry/exporter-logs-otlp-http", () => ({
67
- OTLPLogExporter: class {},
68
- }));
69
-
70
- vi.mock("@opentelemetry/sdk-logs", () => ({
71
- BatchLogRecordProcessor: class {},
72
- LoggerProvider: class {
73
- getLogger = vi.fn(() => ({
74
- emit: logEmit,
75
- }));
76
- shutdown = logShutdown;
77
- },
78
- }));
79
-
80
- vi.mock("@opentelemetry/sdk-metrics", () => ({
81
- PeriodicExportingMetricReader: class {},
82
- }));
83
-
84
- vi.mock("@opentelemetry/sdk-trace-base", () => ({
85
- ParentBasedSampler: class {},
86
- TraceIdRatioBasedSampler: class {},
87
- }));
88
-
89
- vi.mock("@opentelemetry/resources", () => ({
90
- resourceFromAttributes: vi.fn((attrs: Record<string, unknown>) => attrs),
91
- Resource: class {
92
- // eslint-disable-next-line @typescript-eslint/no-useless-constructor
93
- constructor(_value?: unknown) {}
94
- },
95
- }));
96
-
97
- vi.mock("@opentelemetry/semantic-conventions", () => ({
98
- ATTR_SERVICE_NAME: "service.name",
99
- }));
100
-
101
- vi.mock("symi/plugin-sdk", async () => {
102
- const actual = await vi.importActual<typeof import("symi/plugin-sdk")>("symi/plugin-sdk");
103
- return {
104
- ...actual,
105
- registerLogTransport: registerLogTransportMock,
106
- };
107
- });
108
-
109
- import type { SymiPluginServiceContext } from "symi/plugin-sdk";
110
- import { emitDiagnosticEvent } from "symi/plugin-sdk";
111
- import { createDiagnosticsOtelService } from "./service.js";
112
-
113
- function createLogger() {
114
- return {
115
- info: vi.fn(),
116
- warn: vi.fn(),
117
- error: vi.fn(),
118
- debug: vi.fn(),
119
- };
120
- }
121
-
122
- function createTraceOnlyContext(endpoint: string): SymiPluginServiceContext {
123
- return {
124
- config: {
125
- diagnostics: {
126
- enabled: true,
127
- otel: {
128
- enabled: true,
129
- endpoint,
130
- protocol: "http/protobuf",
131
- traces: true,
132
- metrics: false,
133
- logs: false,
134
- },
135
- },
136
- },
137
- logger: createLogger(),
138
- stateDir: "/tmp/symi-diagnostics-otel-test",
139
- };
140
- }
141
- describe("diagnostics-otel service", () => {
142
- beforeEach(() => {
143
- telemetryState.counters.clear();
144
- telemetryState.histograms.clear();
145
- telemetryState.tracer.startSpan.mockClear();
146
- telemetryState.meter.createCounter.mockClear();
147
- telemetryState.meter.createHistogram.mockClear();
148
- sdkStart.mockClear();
149
- sdkShutdown.mockClear();
150
- logEmit.mockClear();
151
- logShutdown.mockClear();
152
- traceExporterCtor.mockClear();
153
- registerLogTransportMock.mockReset();
154
- });
155
-
156
- test("records message-flow metrics and spans", async () => {
157
- const registeredTransports: Array<(logObj: Record<string, unknown>) => void> = [];
158
- const stopTransport = vi.fn();
159
- registerLogTransportMock.mockImplementation((transport) => {
160
- registeredTransports.push(transport);
161
- return stopTransport;
162
- });
163
-
164
- const service = createDiagnosticsOtelService();
165
- const ctx: SymiPluginServiceContext = {
166
- config: {
167
- diagnostics: {
168
- enabled: true,
169
- otel: {
170
- enabled: true,
171
- endpoint: "http://otel-collector:4318",
172
- protocol: "http/protobuf",
173
- traces: true,
174
- metrics: true,
175
- logs: true,
176
- },
177
- },
178
- },
179
- logger: createLogger(),
180
- stateDir: "/tmp/symi-diagnostics-otel-test",
181
- };
182
- await service.start(ctx);
183
-
184
- emitDiagnosticEvent({
185
- type: "webhook.received",
186
- channel: "telegram",
187
- updateType: "telegram-post",
188
- });
189
- emitDiagnosticEvent({
190
- type: "webhook.processed",
191
- channel: "telegram",
192
- updateType: "telegram-post",
193
- durationMs: 120,
194
- });
195
- emitDiagnosticEvent({
196
- type: "message.queued",
197
- channel: "telegram",
198
- source: "telegram",
199
- queueDepth: 2,
200
- });
201
- emitDiagnosticEvent({
202
- type: "message.processed",
203
- channel: "telegram",
204
- outcome: "completed",
205
- durationMs: 55,
206
- });
207
- emitDiagnosticEvent({
208
- type: "queue.lane.dequeue",
209
- lane: "main",
210
- queueSize: 3,
211
- waitMs: 10,
212
- });
213
- emitDiagnosticEvent({
214
- type: "session.stuck",
215
- state: "processing",
216
- ageMs: 125_000,
217
- });
218
- emitDiagnosticEvent({
219
- type: "run.attempt",
220
- runId: "run-1",
221
- attempt: 2,
222
- });
223
-
224
- expect(telemetryState.counters.get("symi.webhook.received")?.add).toHaveBeenCalled();
225
- expect(telemetryState.histograms.get("symi.webhook.duration_ms")?.record).toHaveBeenCalled();
226
- expect(telemetryState.counters.get("symi.message.queued")?.add).toHaveBeenCalled();
227
- expect(telemetryState.counters.get("symi.message.processed")?.add).toHaveBeenCalled();
228
- expect(telemetryState.histograms.get("symi.message.duration_ms")?.record).toHaveBeenCalled();
229
- expect(telemetryState.histograms.get("symi.queue.wait_ms")?.record).toHaveBeenCalled();
230
- expect(telemetryState.counters.get("symi.session.stuck")?.add).toHaveBeenCalled();
231
- expect(telemetryState.histograms.get("symi.session.stuck_age_ms")?.record).toHaveBeenCalled();
232
- expect(telemetryState.counters.get("symi.run.attempt")?.add).toHaveBeenCalled();
233
-
234
- const spanNames = telemetryState.tracer.startSpan.mock.calls.map((call) => call[0]);
235
- expect(spanNames).toContain("symi.webhook.processed");
236
- expect(spanNames).toContain("symi.message.processed");
237
- expect(spanNames).toContain("symi.session.stuck");
238
-
239
- expect(registerLogTransportMock).toHaveBeenCalledTimes(1);
240
- expect(registeredTransports).toHaveLength(1);
241
- registeredTransports[0]?.({
242
- 0: '{"subsystem":"diagnostic"}',
243
- 1: "hello",
244
- _meta: { logLevelName: "INFO", date: new Date() },
245
- });
246
- expect(logEmit).toHaveBeenCalled();
247
-
248
- await service.stop?.(ctx);
249
- });
250
-
251
- test("appends signal path when endpoint contains non-signal /v1 segment", async () => {
252
- const service = createDiagnosticsOtelService();
253
- const ctx = createTraceOnlyContext("https://www.comet.com/opik/api/v1/private/otel");
254
- await service.start(ctx);
255
-
256
- const options = traceExporterCtor.mock.calls[0]?.[0] as { url?: string } | undefined;
257
- expect(options?.url).toBe("https://www.comet.com/opik/api/v1/private/otel/v1/traces");
258
- await service.stop?.(ctx);
259
- });
260
-
261
- test("keeps already signal-qualified endpoint unchanged", async () => {
262
- const service = createDiagnosticsOtelService();
263
- const ctx = createTraceOnlyContext("https://collector.example.com/v1/traces");
264
- await service.start(ctx);
265
-
266
- const options = traceExporterCtor.mock.calls[0]?.[0] as { url?: string } | undefined;
267
- expect(options?.url).toBe("https://collector.example.com/v1/traces");
268
- await service.stop?.(ctx);
269
- });
270
-
271
- test("keeps signal-qualified endpoint unchanged when it has query params", async () => {
272
- const service = createDiagnosticsOtelService();
273
- const ctx = createTraceOnlyContext("https://collector.example.com/v1/traces?timeout=30s");
274
- await service.start(ctx);
275
-
276
- const options = traceExporterCtor.mock.calls[0]?.[0] as { url?: string } | undefined;
277
- expect(options?.url).toBe("https://collector.example.com/v1/traces?timeout=30s");
278
- await service.stop?.(ctx);
279
- });
280
-
281
- test("keeps signal-qualified endpoint unchanged when signal path casing differs", async () => {
282
- const service = createDiagnosticsOtelService();
283
- const ctx = createTraceOnlyContext("https://collector.example.com/v1/Traces");
284
- await service.start(ctx);
285
-
286
- const options = traceExporterCtor.mock.calls[0]?.[0] as { url?: string } | undefined;
287
- expect(options?.url).toBe("https://collector.example.com/v1/Traces");
288
- await service.stop?.(ctx);
289
- });
290
- });