@octanejs/mcp-server 0.2.1 → 0.2.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/README.md +5 -1
- package/package.json +1 -1
- package/skills/bridge-react-package.md +5 -2
- package/src/bridge.js +15 -3
- package/src/bridge.test.js +31 -14
package/README.md
CHANGED
|
@@ -73,7 +73,11 @@ exists, an overall verdict (`bridgeable`, `bridgeable-with-rewrites`,
|
|
|
73
73
|
### `octane_bindings`
|
|
74
74
|
|
|
75
75
|
Returns the map of React packages with maintained `@octanejs/*` ports
|
|
76
|
-
(zustand, query, motion, stylex, router, lexical,
|
|
76
|
+
(zustand, tanstack-query, motion, stylex, tanstack-router, lexical,
|
|
77
|
+
floating-ui, radix, hook-form, base-ui, recharts, redux, testing-library,
|
|
78
|
+
mdx). The map lives in `src/bridge.js` (`KNOWN_BINDINGS`) and its tests derive
|
|
79
|
+
the expected set from the workspace manifests, so it cannot silently drift from
|
|
80
|
+
the published bindings.
|
|
77
81
|
|
|
78
82
|
### `octane_skill`
|
|
79
83
|
|
package/package.json
CHANGED
|
@@ -10,10 +10,13 @@ of bridging by hand:
|
|
|
10
10
|
| React package | Octane binding |
|
|
11
11
|
| --- | --- |
|
|
12
12
|
| `zustand` | `@octanejs/zustand` |
|
|
13
|
-
|
|
|
13
|
+
| `jotai` | `@octanejs/jotai` |
|
|
14
|
+
| `@tanstack/react-query` | `@octanejs/tanstack-query` |
|
|
15
|
+
| `@tanstack/react-table` | `@octanejs/tanstack-table` |
|
|
16
|
+
| `@tanstack/react-virtual` | `@octanejs/tanstack-virtual` |
|
|
14
17
|
| `framer-motion` / `motion` | `@octanejs/motion` |
|
|
15
18
|
| `@stylexjs/stylex` | `@octanejs/stylex` |
|
|
16
|
-
| `react-router` / `react-router-dom` | `@octanejs/router` |
|
|
19
|
+
| `react-router` / `react-router-dom` | `@octanejs/tanstack-router` |
|
|
17
20
|
| `@lexical/react` | `@octanejs/lexical` |
|
|
18
21
|
| `@floating-ui/react` | `@octanejs/floating-ui` |
|
|
19
22
|
| `radix-ui` | `@octanejs/radix` |
|
package/src/bridge.js
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
import { readdir, readFile } from 'node:fs/promises';
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
3
|
|
|
4
|
+
// React package → maintained @octanejs binding. bridge.test.js derives the
|
|
5
|
+
// expected value set from the workspace manifests, so publishing a new binding
|
|
6
|
+
// without registering it here fails the mcp-server tests.
|
|
4
7
|
export const KNOWN_BINDINGS = {
|
|
5
8
|
zustand: '@octanejs/zustand',
|
|
6
|
-
|
|
9
|
+
jotai: '@octanejs/jotai',
|
|
10
|
+
'@tanstack/react-query': '@octanejs/tanstack-query',
|
|
11
|
+
'@tanstack/react-table': '@octanejs/tanstack-table',
|
|
12
|
+
'@tanstack/react-virtual': '@octanejs/tanstack-virtual',
|
|
7
13
|
'framer-motion': '@octanejs/motion',
|
|
8
14
|
motion: '@octanejs/motion',
|
|
9
15
|
'@stylexjs/stylex': '@octanejs/stylex',
|
|
10
|
-
'react-router': '@octanejs/router',
|
|
11
|
-
'react-router-dom': '@octanejs/router',
|
|
16
|
+
'react-router': '@octanejs/tanstack-router',
|
|
17
|
+
'react-router-dom': '@octanejs/tanstack-router',
|
|
12
18
|
'@lexical/react': '@octanejs/lexical',
|
|
13
19
|
'@floating-ui/react': '@octanejs/floating-ui',
|
|
14
20
|
'radix-ui': '@octanejs/radix',
|
|
21
|
+
'react-hook-form': '@octanejs/hook-form',
|
|
22
|
+
'@base-ui-components/react': '@octanejs/base-ui',
|
|
23
|
+
recharts: '@octanejs/recharts',
|
|
24
|
+
'react-redux': '@octanejs/redux',
|
|
25
|
+
'@testing-library/react': '@octanejs/testing-library',
|
|
26
|
+
'@mdx-js/react': '@octanejs/mdx',
|
|
15
27
|
};
|
|
16
28
|
|
|
17
29
|
export const KNOWN_VANILLA_CORES = {
|
package/src/bridge.test.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { mkdir, mkdtemp, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { mkdir, mkdtemp, readdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
3
4
|
import { tmpdir } from 'node:os';
|
|
4
5
|
import { join } from 'node:path';
|
|
5
6
|
import { bridgeReport, detectVanillaCore, scanSource, KNOWN_BINDINGS } from './bridge.js';
|
|
@@ -137,18 +138,34 @@ describe('bridgeReport', () => {
|
|
|
137
138
|
});
|
|
138
139
|
|
|
139
140
|
describe('KNOWN_BINDINGS', () => {
|
|
140
|
-
it('covers every published @octanejs binding', () => {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
);
|
|
141
|
+
it('covers every published @octanejs binding (derived from workspace manifests)', async () => {
|
|
142
|
+
// The expected set is DERIVED from packages/*/package.json rather than
|
|
143
|
+
// hand-maintained, so publishing a new binding without registering it in
|
|
144
|
+
// KNOWN_BINDINGS fails here. Only genuinely-not-a-binding packages (the
|
|
145
|
+
// core runtime, build/deploy infrastructure, this MCP server) are
|
|
146
|
+
// excluded by name.
|
|
147
|
+
const NON_BINDINGS = new Set([
|
|
148
|
+
'octane',
|
|
149
|
+
'@octanejs/vite-plugin',
|
|
150
|
+
'@octanejs/adapter-vercel',
|
|
151
|
+
'@octanejs/mcp-server',
|
|
152
|
+
]);
|
|
153
|
+
const packagesRoot = fileURLToPath(new URL('../..', import.meta.url));
|
|
154
|
+
const bindings = [];
|
|
155
|
+
for (const entry of await readdir(packagesRoot, { withFileTypes: true })) {
|
|
156
|
+
if (!entry.isDirectory()) continue;
|
|
157
|
+
let manifest;
|
|
158
|
+
try {
|
|
159
|
+
manifest = JSON.parse(
|
|
160
|
+
await readFile(join(packagesRoot, entry.name, 'package.json'), 'utf8'),
|
|
161
|
+
);
|
|
162
|
+
} catch {
|
|
163
|
+
continue; // not a package dir
|
|
164
|
+
}
|
|
165
|
+
if (manifest.private || NON_BINDINGS.has(manifest.name)) continue;
|
|
166
|
+
bindings.push(manifest.name);
|
|
167
|
+
}
|
|
168
|
+
expect(bindings.length).toBeGreaterThan(0);
|
|
169
|
+
expect(new Set(Object.values(KNOWN_BINDINGS))).toEqual(new Set(bindings));
|
|
153
170
|
});
|
|
154
171
|
});
|