pi-soly 1.9.3 → 1.11.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/ask/index.ts +12 -11
- package/ask/picker.ts +356 -76
- package/ask/prompt.ts +6 -2
- package/ask/tests/picker.test.ts +273 -82
- package/codemap.ts +276 -0
- package/hotreload.ts +239 -0
- package/init.ts +302 -0
- package/mcp/CHANGELOG.md +384 -0
- package/mcp/LICENSE +21 -0
- package/mcp/OAUTH.md +355 -0
- package/mcp/README.md +410 -0
- package/mcp/__tests__/agent-dir-paths.upstream-test.ts +80 -0
- package/mcp/__tests__/cli.upstream-test.ts +97 -0
- package/mcp/__tests__/commands-onboarding.upstream-test.ts +157 -0
- package/mcp/__tests__/config.upstream-test.ts +303 -0
- package/mcp/__tests__/consent-manager.upstream-test.ts +151 -0
- package/mcp/__tests__/direct-tools-auto-auth.upstream-test.ts +218 -0
- package/mcp/__tests__/direct-tools.upstream-test.ts +299 -0
- package/mcp/__tests__/elicitation-handler.upstream-test.ts +346 -0
- package/mcp/__tests__/elicitation-sdk-integration.upstream-test.ts +140 -0
- package/mcp/__tests__/errors.upstream-test.ts +218 -0
- package/mcp/__tests__/fixtures/elicitation-server.mjs +98 -0
- package/mcp/__tests__/host-html-template.upstream-test.ts +278 -0
- package/mcp/__tests__/index-lifecycle.upstream-test.ts +484 -0
- package/mcp/__tests__/init-elicitation.upstream-test.ts +86 -0
- package/mcp/__tests__/interactive-visualizer-server.upstream-test.ts +28 -0
- package/mcp/__tests__/logger.upstream-test.ts +175 -0
- package/mcp/__tests__/mcp-auth-flow-client-credentials.upstream-test.ts +612 -0
- package/mcp/__tests__/mcp-auth-storage.upstream-test.ts +47 -0
- package/mcp/__tests__/mcp-callback-server-unref.upstream-test.ts +264 -0
- package/mcp/__tests__/mcp-oauth-provider.upstream-test.ts +216 -0
- package/mcp/__tests__/mcp-panel-auth.upstream-test.ts +206 -0
- package/mcp/__tests__/mcp-panel-exclude-tools.upstream-test.ts +69 -0
- package/mcp/__tests__/mcp-panel-keybindings.upstream-test.ts +186 -0
- package/mcp/__tests__/npx-resolver.upstream-test.ts +54 -0
- package/mcp/__tests__/oauth-handler.upstream-test.ts +77 -0
- package/mcp/__tests__/onboarding-state.upstream-test.ts +52 -0
- package/mcp/__tests__/package-manifest.upstream-test.ts +22 -0
- package/mcp/__tests__/proxy-modes-auto-auth.upstream-test.ts +253 -0
- package/mcp/__tests__/proxy-modes-discovery.upstream-test.ts +84 -0
- package/mcp/__tests__/proxy-modes-manual-auth.upstream-test.ts +91 -0
- package/mcp/__tests__/proxy-modes-ui-messages.upstream-test.ts +72 -0
- package/mcp/__tests__/sampling-handler.upstream-test.ts +285 -0
- package/mcp/__tests__/server-manager-http-auth.upstream-test.ts +144 -0
- package/mcp/__tests__/server-manager-sampling.upstream-test.ts +236 -0
- package/mcp/__tests__/tool-metadata.upstream-test.ts +111 -0
- package/mcp/__tests__/tool-result-renderer.upstream-test.ts +147 -0
- package/mcp/__tests__/ui-integration.upstream-test.ts +551 -0
- package/mcp/__tests__/ui-resource-handler.upstream-test.ts +303 -0
- package/mcp/__tests__/ui-server.upstream-test.ts +967 -0
- package/mcp/__tests__/ui-session-messages.upstream-test.ts +72 -0
- package/mcp/__tests__/ui-streaming.upstream-test.ts +543 -0
- package/mcp/agent-dir.ts +20 -0
- package/mcp/app-bridge.bundle.js +67 -0
- package/mcp/cli.js +184 -0
- package/mcp/commands.ts +422 -0
- package/mcp/config.ts +666 -0
- package/mcp/consent-manager.ts +64 -0
- package/mcp/direct-tools.ts +439 -0
- package/mcp/elicitation-handler.ts +347 -0
- package/mcp/errors.ts +219 -0
- package/mcp/glimpse-ui.ts +80 -0
- package/mcp/host-html-template.ts +427 -0
- package/mcp/index.ts +362 -0
- package/mcp/init.ts +362 -0
- package/mcp/lifecycle.ts +93 -0
- package/mcp/logger.ts +169 -0
- package/mcp/mcp-auth-flow.ts +559 -0
- package/mcp/mcp-auth-flow.upstream-test.ts +259 -0
- package/mcp/mcp-auth.ts +302 -0
- package/mcp/mcp-auth.upstream-test.ts +373 -0
- package/mcp/mcp-callback-server.ts +372 -0
- package/mcp/mcp-callback-server.upstream-test.ts +416 -0
- package/mcp/mcp-oauth-provider.ts +369 -0
- package/mcp/mcp-oauth-provider.upstream-test.ts +518 -0
- package/mcp/mcp-panel.ts +829 -0
- package/mcp/mcp-setup-panel.ts +580 -0
- package/mcp/metadata-cache.ts +201 -0
- package/mcp/notify.ts +111 -0
- package/mcp/npx-resolver.ts +424 -0
- package/mcp/oauth-handler.ts +57 -0
- package/mcp/onboarding-state.ts +68 -0
- package/mcp/package.json +106 -0
- package/mcp/panel-keys.ts +37 -0
- package/mcp/proxy-modes.ts +949 -0
- package/mcp/resource-tools.ts +17 -0
- package/mcp/sampling-handler.ts +268 -0
- package/mcp/server-manager.ts +545 -0
- package/mcp/state.ts +41 -0
- package/mcp/tool-metadata.ts +216 -0
- package/mcp/tool-registrar.ts +46 -0
- package/mcp/tool-result-renderer.ts +161 -0
- package/mcp/types.ts +448 -0
- package/mcp/ui-resource-handler.ts +146 -0
- package/mcp/ui-server.ts +623 -0
- package/mcp/ui-session.ts +386 -0
- package/mcp/ui-stream-types.ts +89 -0
- package/mcp/utils.ts +129 -0
- package/mcp/vitest.config.ts +14 -0
- package/migrate.ts +258 -0
- package/notification.ts +218 -0
- package/notifications-log.ts +83 -0
- package/package.json +20 -3
- package/status.ts +140 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import { logger, type LogEntry, type LogLevel } from "../logger.ts";
|
|
3
|
+
|
|
4
|
+
describe("Logger", () => {
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
vi.spyOn(console, "debug").mockImplementation(() => undefined);
|
|
7
|
+
vi.spyOn(console, "log").mockImplementation(() => undefined);
|
|
8
|
+
vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
9
|
+
vi.spyOn(console, "error").mockImplementation(() => undefined);
|
|
10
|
+
|
|
11
|
+
logger.clearHandlers();
|
|
12
|
+
logger.setLevel("debug"); // Enable all levels for testing
|
|
13
|
+
logger.setDefaultContext({});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
vi.restoreAllMocks();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
describe("log levels", () => {
|
|
21
|
+
it("respects minimum log level", () => {
|
|
22
|
+
const entries: LogEntry[] = [];
|
|
23
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
24
|
+
|
|
25
|
+
logger.setLevel("warn");
|
|
26
|
+
logger.debug("debug message");
|
|
27
|
+
logger.info("info message");
|
|
28
|
+
logger.warn("warn message");
|
|
29
|
+
logger.error("error message");
|
|
30
|
+
|
|
31
|
+
expect(entries).toHaveLength(2);
|
|
32
|
+
expect(entries[0].level).toBe("warn");
|
|
33
|
+
expect(entries[1].level).toBe("error");
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("logs all levels when set to debug", () => {
|
|
37
|
+
const entries: LogEntry[] = [];
|
|
38
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
39
|
+
|
|
40
|
+
logger.setLevel("debug");
|
|
41
|
+
logger.debug("d");
|
|
42
|
+
logger.info("i");
|
|
43
|
+
logger.warn("w");
|
|
44
|
+
logger.error("e");
|
|
45
|
+
|
|
46
|
+
expect(entries).toHaveLength(4);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe("context", () => {
|
|
51
|
+
it("includes context in log entries", () => {
|
|
52
|
+
const entries: LogEntry[] = [];
|
|
53
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
54
|
+
|
|
55
|
+
logger.info("test", { server: "test-server", tool: "test-tool" });
|
|
56
|
+
|
|
57
|
+
expect(entries[0].context).toEqual({
|
|
58
|
+
server: "test-server",
|
|
59
|
+
tool: "test-tool",
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("merges default context with call context", () => {
|
|
64
|
+
const entries: LogEntry[] = [];
|
|
65
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
66
|
+
logger.setDefaultContext({ server: "default-server" });
|
|
67
|
+
|
|
68
|
+
logger.info("test", { tool: "my-tool" });
|
|
69
|
+
|
|
70
|
+
expect(entries[0].context).toEqual({
|
|
71
|
+
server: "default-server",
|
|
72
|
+
tool: "my-tool",
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("call context overrides default context", () => {
|
|
77
|
+
const entries: LogEntry[] = [];
|
|
78
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
79
|
+
logger.setDefaultContext({ server: "default-server" });
|
|
80
|
+
|
|
81
|
+
logger.info("test", { server: "override-server" });
|
|
82
|
+
|
|
83
|
+
expect(entries[0].context?.server).toBe("override-server");
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
describe("child logger", () => {
|
|
88
|
+
it("inherits parent context", () => {
|
|
89
|
+
const entries: LogEntry[] = [];
|
|
90
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
91
|
+
|
|
92
|
+
const child = logger.child({ server: "child-server" });
|
|
93
|
+
child.info("child message");
|
|
94
|
+
|
|
95
|
+
expect(entries[0].context?.server).toBe("child-server");
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it("can add additional context", () => {
|
|
99
|
+
const entries: LogEntry[] = [];
|
|
100
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
101
|
+
|
|
102
|
+
const child = logger.child({ server: "child-server" });
|
|
103
|
+
child.info("message", { tool: "child-tool" });
|
|
104
|
+
|
|
105
|
+
expect(entries[0].context).toEqual({
|
|
106
|
+
server: "child-server",
|
|
107
|
+
tool: "child-tool",
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("can create nested children", () => {
|
|
112
|
+
const entries: LogEntry[] = [];
|
|
113
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
114
|
+
|
|
115
|
+
const child1 = logger.child({ server: "server" });
|
|
116
|
+
const child2 = child1.child({ session: "session123" });
|
|
117
|
+
child2.info("nested message");
|
|
118
|
+
|
|
119
|
+
expect(entries[0].context).toEqual({
|
|
120
|
+
server: "server",
|
|
121
|
+
session: "session123",
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe("error logging", () => {
|
|
127
|
+
it("includes error object", () => {
|
|
128
|
+
const entries: LogEntry[] = [];
|
|
129
|
+
logger.addHandler((entry) => entries.push(entry));
|
|
130
|
+
|
|
131
|
+
const error = new Error("test error");
|
|
132
|
+
logger.error("something failed", error, { server: "test" });
|
|
133
|
+
|
|
134
|
+
expect(entries[0].error).toBe(error);
|
|
135
|
+
expect(entries[0].message).toBe("something failed");
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
describe("handlers", () => {
|
|
140
|
+
it("calls all registered handlers", () => {
|
|
141
|
+
const handler1 = vi.fn();
|
|
142
|
+
const handler2 = vi.fn();
|
|
143
|
+
logger.addHandler(handler1);
|
|
144
|
+
logger.addHandler(handler2);
|
|
145
|
+
|
|
146
|
+
logger.info("test");
|
|
147
|
+
|
|
148
|
+
expect(handler1).toHaveBeenCalledTimes(1);
|
|
149
|
+
expect(handler2).toHaveBeenCalledTimes(1);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it("ignores handler errors", () => {
|
|
153
|
+
const badHandler = vi.fn().mockImplementation(() => {
|
|
154
|
+
throw new Error("handler error");
|
|
155
|
+
});
|
|
156
|
+
const goodHandler = vi.fn();
|
|
157
|
+
logger.addHandler(badHandler);
|
|
158
|
+
logger.addHandler(goodHandler);
|
|
159
|
+
|
|
160
|
+
// Should not throw
|
|
161
|
+
expect(() => logger.info("test")).not.toThrow();
|
|
162
|
+
expect(goodHandler).toHaveBeenCalled();
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("clearHandlers removes all handlers", () => {
|
|
166
|
+
const handler = vi.fn();
|
|
167
|
+
logger.addHandler(handler);
|
|
168
|
+
logger.clearHandlers();
|
|
169
|
+
|
|
170
|
+
logger.info("test");
|
|
171
|
+
|
|
172
|
+
expect(handler).not.toHaveBeenCalled();
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|