@humain/terminal 0.0.3-beta.0 → 0.0.3-beta.2
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/CHANGELOG.md +13 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -3
- package/dist/config.js.map +1 -1
- package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +13 -0
- package/dist/humain/mcp-adapter/vendor/README.md +4 -1
- package/dist/humain/mcp-adapter/vendor/agent-dir.ts +12 -4
- package/dist/humain/mcp-adapter/vendor/cli.js +25 -4
- package/dist/humain/mcp-adapter/vendor/config.ts +4 -4
- package/dist/humain/mcp-adapter/vendor/direct-tools.ts +18 -15
- package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +416 -60
- package/dist/humain/mcp-adapter/vendor/mcp-setup-panel.ts +2 -1
- package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +18 -8
- package/dist/humain/mcp-adapter/vendor/package.json +177 -176
- package/dist/humain/mcp-adapter/vendor/request-headers-command.ts +336 -0
- package/dist/humain/mcp-adapter/vendor/server-manager.ts +5 -0
- package/dist/humain/mcp-adapter/vendor/tool-metadata.ts +38 -18
- package/dist/humain/mcp-adapter/vendor/types.ts +93 -10
- package/dist/humain/web-access/vendor/auth-fetch.d.ts +13 -0
- package/dist/humain/web-access/vendor/auth-fetch.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/auth-fetch.js +134 -0
- package/dist/humain/web-access/vendor/auth-fetch.js.map +1 -0
- package/dist/humain/web-access/vendor/chrome-cookies.d.ts +13 -0
- package/dist/humain/web-access/vendor/chrome-cookies.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/chrome-cookies.js +106 -22
- package/dist/humain/web-access/vendor/chrome-cookies.js.map +1 -1
- package/dist/humain/web-access/vendor/curator-page.d.ts +1 -0
- package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/curator-page.js +3 -1
- package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
- package/dist/humain/web-access/vendor/curator-server.d.ts +1 -0
- package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/curator-server.js +2 -0
- package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
- package/dist/humain/web-access/vendor/extract.d.ts +2 -0
- package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/extract.js +79 -17
- package/dist/humain/web-access/vendor/extract.js.map +1 -1
- package/dist/humain/web-access/vendor/fetch-params.d.ts +2 -0
- package/dist/humain/web-access/vendor/fetch-params.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/fetch-params.js +17 -3
- package/dist/humain/web-access/vendor/fetch-params.js.map +1 -1
- package/dist/humain/web-access/vendor/firecrawl.d.ts +7 -0
- package/dist/humain/web-access/vendor/firecrawl.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/firecrawl.js +141 -10
- package/dist/humain/web-access/vendor/firecrawl.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-search.d.ts +2 -2
- package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-search.js +22 -4
- package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
- package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/index.js +122 -48
- package/dist/humain/web-access/vendor/index.js.map +1 -1
- package/dist/humain/web-access/vendor/summary-review.d.ts +3 -1
- package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/summary-review.js +6 -3
- package/dist/humain/web-access/vendor/summary-review.js.map +1 -1
- package/dist/humain/web-access/vendor/youtube-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/youtube-extract.js +2 -2
- package/dist/humain/web-access/vendor/youtube-extract.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +2 -0
- package/dist/utils/clipboard-image.js.map +1 -1
- package/npm-shrinkwrap.json +7 -7
- package/package.json +6 -6
- package/src/humain/mcp-adapter/UPSTREAM.md +1 -1
- package/src/humain/mcp-adapter/upstream.json +3 -3
- package/src/humain/mcp-adapter/vendor/CHANGELOG.md +13 -0
- package/src/humain/web-access/UPSTREAM.md +1 -1
- package/src/humain/web-access/upstream.json +4 -4
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { matchesKey, truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
2
2
|
import { createPanelKeys, type PanelKeybindings, type PanelKeys } from "./panel-keys.ts";
|
|
3
3
|
import type { ImportKind } from "./types.ts";
|
|
4
|
+
import { getConfigDirName } from "./agent-dir.ts";
|
|
4
5
|
import { KNOWN_SERVER_PRESETS, type ConfigWritePreview, type KnownServerPreset, type McpDiscoverySummary } from "./config.ts";
|
|
5
6
|
import type { McpOnboardingState } from "./onboarding-state.ts";
|
|
6
7
|
|
|
@@ -556,7 +557,7 @@ export class McpSetupPanel {
|
|
|
556
557
|
"3. ~/.agents/mcp/mcp.json",
|
|
557
558
|
"4. <Pi agent dir>/mcp.json",
|
|
558
559
|
"5. .mcp.json",
|
|
559
|
-
|
|
560
|
+
`6. ${getConfigDirName()}/mcp.json`,
|
|
560
561
|
`Host discovery: ${this.discovery.hostConfigDiscovery}. Conflicts reported: ${this.discovery.conflicts.length}.`,
|
|
561
562
|
...this.discovery.conflicts.slice(0, 8).map((conflict) =>
|
|
562
563
|
`${conflict.serverName}: ${conflict.sources.map((source) => source.path).join(" -> ")} (winner: ${conflict.winner.path})`,
|
|
@@ -19,11 +19,12 @@ import type {
|
|
|
19
19
|
ToolMetadata,
|
|
20
20
|
PromptMetadata,
|
|
21
21
|
} from "./types.ts";
|
|
22
|
-
import { formatPromptCommandName, formatToolName, getToolNameCandidates, isServerDisabled, isToolAllowed, resolveToolPrefix, type ToolPrefix } from "./types.ts";
|
|
22
|
+
import { createToolSelectorCandidateIndex, formatPromptCommandName, formatToolName, getToolNameCandidates, isServerDisabled, isToolAllowed, resolveToolPrefix, type ToolPrefix } from "./types.ts";
|
|
23
23
|
import { resourceNameToToolName } from "./resource-tools.ts";
|
|
24
24
|
import {
|
|
25
25
|
extractToolUiStreamMode,
|
|
26
26
|
interpolateEnvRecord,
|
|
27
|
+
interpolateEnvVars,
|
|
27
28
|
resolveBearerToken,
|
|
28
29
|
resolveConfigPath,
|
|
29
30
|
resolveServerUrl,
|
|
@@ -90,6 +91,14 @@ export function computeServerHash(definition: ServerEntry): string {
|
|
|
90
91
|
cwd: resolveConfigPath(definition.cwd),
|
|
91
92
|
url: resolveServerUrl(definition),
|
|
92
93
|
headers: interpolateEnvRecord(definition.headers),
|
|
94
|
+
requestHeadersCommand: definition.requestHeadersCommand
|
|
95
|
+
? {
|
|
96
|
+
command: interpolateEnvVars(definition.requestHeadersCommand.command),
|
|
97
|
+
args: definition.requestHeadersCommand.args?.map(interpolateEnvVars),
|
|
98
|
+
env: interpolateEnvRecord(definition.requestHeadersCommand.env),
|
|
99
|
+
timeoutMs: definition.requestHeadersCommand.timeoutMs,
|
|
100
|
+
}
|
|
101
|
+
: undefined,
|
|
93
102
|
auth: definition.auth,
|
|
94
103
|
protocolVersion: definition.protocolVersion,
|
|
95
104
|
bearerToken: resolveBearerToken(definition),
|
|
@@ -184,8 +193,10 @@ export function reconstructToolMetadata(
|
|
|
184
193
|
const metadata: ToolMetadata[] = [];
|
|
185
194
|
const seenNames = new Set<string>();
|
|
186
195
|
const effectivePrefix = resolveToolPrefix(definition, prefix);
|
|
187
|
-
const
|
|
188
|
-
|
|
196
|
+
const hasToolFilters =
|
|
197
|
+
(Array.isArray(definition.includeTools) && definition.includeTools.length > 0) ||
|
|
198
|
+
(Array.isArray(definition.excludeTools) && definition.excludeTools.length > 0);
|
|
199
|
+
const selectorCandidateIndex = hasToolFilters && configuredServers && cache ? (() => {
|
|
189
200
|
const candidates = new Set<string>();
|
|
190
201
|
for (const [otherServerName, otherDefinition] of Object.entries(configuredServers)) {
|
|
191
202
|
const otherEntry = cache.servers[otherServerName];
|
|
@@ -202,16 +213,15 @@ export function reconstructToolMetadata(
|
|
|
202
213
|
}
|
|
203
214
|
}
|
|
204
215
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
};
|
|
216
|
+
return createToolSelectorCandidateIndex(candidates);
|
|
217
|
+
})() : undefined;
|
|
208
218
|
|
|
209
219
|
for (const tool of entry.tools ?? []) {
|
|
210
220
|
if (!tool?.name) continue;
|
|
211
221
|
if (!isUiToolVisibleToModel(tool.uiVisibility)) {
|
|
212
222
|
continue;
|
|
213
223
|
}
|
|
214
|
-
if (!isToolAllowed(tool.name, serverName, effectivePrefix, definition.includeTools, definition.excludeTools,
|
|
224
|
+
if (!isToolAllowed(tool.name, serverName, effectivePrefix, definition.includeTools, definition.excludeTools, selectorCandidateIndex)) {
|
|
215
225
|
continue;
|
|
216
226
|
}
|
|
217
227
|
|
|
@@ -236,7 +246,7 @@ export function reconstructToolMetadata(
|
|
|
236
246
|
for (const resource of entry.resources ?? []) {
|
|
237
247
|
if (!resource?.name || !resource?.uri) continue;
|
|
238
248
|
const baseName = `read_${resourceNameToToolName(resource.name)}`;
|
|
239
|
-
if (!isToolAllowed(baseName, serverName, effectivePrefix, definition.includeTools, definition.excludeTools,
|
|
249
|
+
if (!isToolAllowed(baseName, serverName, effectivePrefix, definition.includeTools, definition.excludeTools, selectorCandidateIndex)) {
|
|
240
250
|
continue;
|
|
241
251
|
}
|
|
242
252
|
|
|
@@ -1,178 +1,179 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
2
|
+
"name": "pi-mcp-adapter",
|
|
3
|
+
"version": "2.26.0",
|
|
4
|
+
"description": "MCP (Model Context Protocol) adapter extension for Pi coding agent",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"types": "./index.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./index.ts",
|
|
10
|
+
"import": "./index.ts",
|
|
11
|
+
"default": "./index.ts"
|
|
12
|
+
},
|
|
13
|
+
"./types": {
|
|
14
|
+
"types": "./types.ts",
|
|
15
|
+
"import": "./types.ts",
|
|
16
|
+
"default": "./types.ts"
|
|
17
|
+
},
|
|
18
|
+
"./oauth": {
|
|
19
|
+
"types": "./oauth.ts",
|
|
20
|
+
"import": "./oauth.ts",
|
|
21
|
+
"default": "./oauth.ts"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"author": "Nico Bailon",
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=20"
|
|
28
|
+
},
|
|
29
|
+
"bin": {
|
|
30
|
+
"pi-mcp-adapter": "cli.js"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"typecheck": "tsc --noEmit",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"test:watch": "vitest",
|
|
36
|
+
"test:coverage": "vitest run --coverage",
|
|
37
|
+
"test:oauth": "PI_MCP_ADAPTER_TEST_AUTH_STORE=memory PI_MCP_ADAPTER_DISABLE_AUTH_CACHE=1 node --import tsx --test --test-concurrency=1 oauth-public-api.test.ts mcp-auth.test.ts mcp-auth-flow.test.ts mcp-callback-server.test.ts mcp-oauth-provider.test.ts",
|
|
38
|
+
"test:oauth-provider": "PI_MCP_ADAPTER_TEST_AUTH_STORE=memory PI_MCP_ADAPTER_DISABLE_AUTH_CACHE=1 node --import tsx --test mcp-oauth-provider.test.ts",
|
|
39
|
+
"test:conformance": "bash conformance/run.sh"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/nicobailon/pi-mcp-adapter.git"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"pi-package",
|
|
47
|
+
"pi",
|
|
48
|
+
"mcp",
|
|
49
|
+
"model-context-protocol",
|
|
50
|
+
"ai",
|
|
51
|
+
"coding-agent",
|
|
52
|
+
"extension",
|
|
53
|
+
"claude",
|
|
54
|
+
"llm"
|
|
55
|
+
],
|
|
56
|
+
"pi": {
|
|
57
|
+
"extensions": [
|
|
58
|
+
"./index.ts"
|
|
59
|
+
],
|
|
60
|
+
"skills": [
|
|
61
|
+
"./skills"
|
|
62
|
+
],
|
|
63
|
+
"video": "https://github.com/nicobailon/pi-mcp-adapter/raw/refs/heads/main/pi-mcp.mp4"
|
|
64
|
+
},
|
|
65
|
+
"files": [
|
|
66
|
+
"cli.js",
|
|
67
|
+
"agent-dir.ts",
|
|
68
|
+
"index.ts",
|
|
69
|
+
"error-signal.ts",
|
|
70
|
+
"state.ts",
|
|
71
|
+
"utils.ts",
|
|
72
|
+
"abort.ts",
|
|
73
|
+
"runtime-owner.ts",
|
|
74
|
+
"tool-metadata.ts",
|
|
75
|
+
"ts-shape.ts",
|
|
76
|
+
"search-ranking.ts",
|
|
77
|
+
"tool-approval.ts",
|
|
78
|
+
"init.ts",
|
|
79
|
+
"ui-session.ts",
|
|
80
|
+
"proxy-modes.ts",
|
|
81
|
+
"direct-tools.ts",
|
|
82
|
+
"commands.ts",
|
|
83
|
+
"prompts.ts",
|
|
84
|
+
"onboarding-state.ts",
|
|
85
|
+
"mcp-setup-panel.ts",
|
|
86
|
+
"types.ts",
|
|
87
|
+
"ui-stream-types.ts",
|
|
88
|
+
"ui-tool-visibility.ts",
|
|
89
|
+
"ui-app-bridge-helpers.ts",
|
|
90
|
+
"config.ts",
|
|
91
|
+
"server-manager.ts",
|
|
92
|
+
"request-headers-command.ts",
|
|
93
|
+
"unix-socket-transport.ts",
|
|
94
|
+
"json-schema-validator.ts",
|
|
95
|
+
"session-recovery.ts",
|
|
96
|
+
"sampling-handler.ts",
|
|
97
|
+
"elicitation-handler.ts",
|
|
98
|
+
"tool-registrar.ts",
|
|
99
|
+
"tool-result-renderer.ts",
|
|
100
|
+
"mcp-output-guard.ts",
|
|
101
|
+
"mcp-code.ts",
|
|
102
|
+
"mcp-script-worker.mjs",
|
|
103
|
+
"mcp-probe.ts",
|
|
104
|
+
"agent-plugin-loader.ts",
|
|
105
|
+
"resource-tools.ts",
|
|
106
|
+
"lifecycle.ts",
|
|
107
|
+
"mcp-status.ts",
|
|
108
|
+
"metadata-cache.ts",
|
|
109
|
+
"host-html-template.ts",
|
|
110
|
+
"ui-resource-handler.ts",
|
|
111
|
+
"consent-manager.ts",
|
|
112
|
+
"ui-server.ts",
|
|
113
|
+
"glimpse-ui.ts",
|
|
114
|
+
"npx-resolver.ts",
|
|
115
|
+
"oauth-handler.ts",
|
|
116
|
+
"oauth.ts",
|
|
117
|
+
"mcp-auth.ts",
|
|
118
|
+
"mcp-keyring-helper.cjs",
|
|
119
|
+
"mcp-oauth-provider.ts",
|
|
120
|
+
"mcp-callback-server.ts",
|
|
121
|
+
"mcp-auth-flow.ts",
|
|
122
|
+
"mcp-panel.ts",
|
|
123
|
+
"panel-keys.ts",
|
|
124
|
+
"mcp-trace.ts",
|
|
125
|
+
"logger.ts",
|
|
126
|
+
"errors.ts",
|
|
127
|
+
"app-bridge.bundle.js",
|
|
128
|
+
"banner.png",
|
|
129
|
+
"skills",
|
|
130
|
+
"README.md",
|
|
131
|
+
"CHANGELOG.md",
|
|
132
|
+
"LICENSE"
|
|
133
|
+
],
|
|
134
|
+
"dependencies": {
|
|
135
|
+
"@modelcontextprotocol/client": "2.0.0",
|
|
136
|
+
"@modelcontextprotocol/core": "2.0.0",
|
|
137
|
+
"@modelcontextprotocol/ext-apps": "^1.2.2",
|
|
138
|
+
"@napi-rs/keyring": "^1.3.0",
|
|
139
|
+
"ajv": "^8.17.1",
|
|
140
|
+
"ajv-formats": "^3.0.1",
|
|
141
|
+
"cross-spawn": "^7.0.6",
|
|
142
|
+
"open": "^10.2.0",
|
|
143
|
+
"recheck": "^4.5.0",
|
|
144
|
+
"smol-toml": "^1.6.1",
|
|
145
|
+
"strip-json-comments": "^5.0.3",
|
|
146
|
+
"zod": "^3.25.0 || ^4.0.0"
|
|
147
|
+
},
|
|
148
|
+
"peerDependencies": {
|
|
149
|
+
"@earendil-works/pi-ai": "^0.84.1",
|
|
150
|
+
"@earendil-works/pi-tui": "*",
|
|
151
|
+
"typebox": "*",
|
|
152
|
+
"zod": "^3.25.0 || ^4.0.0"
|
|
153
|
+
},
|
|
154
|
+
"peerDependenciesMeta": {
|
|
155
|
+
"@earendil-works/pi-ai": {
|
|
156
|
+
"optional": true
|
|
157
|
+
},
|
|
158
|
+
"@earendil-works/pi-tui": {
|
|
159
|
+
"optional": true
|
|
160
|
+
},
|
|
161
|
+
"typebox": {
|
|
162
|
+
"optional": true
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"devDependencies": {
|
|
166
|
+
"@earendil-works/pi-ai": "^0.84.1",
|
|
167
|
+
"@earendil-works/pi-coding-agent": "0.84.1",
|
|
168
|
+
"@earendil-works/pi-tui": "^0.84.1",
|
|
169
|
+
"@modelcontextprotocol/conformance": "0.1.16",
|
|
170
|
+
"@types/bun": "^1.0.0",
|
|
171
|
+
"@types/cross-spawn": "6.0.6",
|
|
172
|
+
"@types/node": "20.19.43",
|
|
173
|
+
"@types/open": "^6.2.1",
|
|
174
|
+
"tsx": "^4.21.0",
|
|
175
|
+
"typebox": "1.3.3",
|
|
176
|
+
"typescript": "5.9.3",
|
|
177
|
+
"vitest": "^3.0.0"
|
|
178
|
+
}
|
|
178
179
|
}
|