claude-multi 0.5.5 → 0.5.6
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 +18 -0
- package/bin/claude-multi.cmd +26 -0
- package/bin/claude-multi.js +22 -0
- package/dist/cli.js +5 -19
- package/package.json +13 -6
- package/.agents/skills/three/SKILL.md +0 -106
- package/.agents/skills/threejs-animation/SKILL.md +0 -552
- package/.agents/skills/threejs-fundamentals/SKILL.md +0 -488
- package/.agents/skills/threejs-geometry/SKILL.md +0 -548
- package/.agents/skills/threejs-interaction/SKILL.md +0 -660
- package/.agents/skills/threejs-lighting/SKILL.md +0 -481
- package/.agents/skills/threejs-loaders/SKILL.md +0 -623
- package/.agents/skills/threejs-materials/SKILL.md +0 -520
- package/.agents/skills/threejs-postprocessing/SKILL.md +0 -602
- package/.agents/skills/threejs-shaders/SKILL.md +0 -642
- package/.agents/skills/threejs-textures/SKILL.md +0 -628
- package/.commandcode/taste/taste.md +0 -9
- package/astro.config.mjs +0 -69
- package/bun.lock +0 -1349
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon-animated.svg +0 -140
- package/public/favicon.json +0 -1
- package/public/favicon.svg +0 -14
- package/public/logo.svg +0 -14
- package/public/site.webmanifest +0 -11
- package/screenshots-review/01-main-menu.png +0 -0
- package/screenshots-review/02-list-instances.png +0 -0
- package/screenshots-review/07-mcp-details.png +0 -0
- package/screenshots-review/v2-01-main-menu.png +0 -0
- package/scripts/capture-screens.tsx +0 -440
- package/scripts/gen-lottie.cjs +0 -160
- package/scripts/shoot-changelog.mjs +0 -18
- package/skills-lock.json +0 -71
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.6] - 2026-05-23
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **`robots.txt` route** (`src/web/pages/robots.txt.ts`): serves sitemap reference and user-agent directives for the docs site
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- **Runtime-agnostic launcher** (`bin/claude-multi.js`): polyglot bin entry is simultaneously valid POSIX sh and ESM JavaScript
|
|
15
|
+
- On Linux/macOS: shell shebang detects bun/node/deno and execs the correct runtime
|
|
16
|
+
- On Windows + bun global install: bun's `.exe` shim reads the `.js` extension and runs directly as ESM — no `/bin/sh` lookup required
|
|
17
|
+
- On Windows + npm install: npm's `.cmd` shim calls `node` on the `.js` file
|
|
18
|
+
- Shebang changed to `#!/usr/bin/env bun` so bun's Windows shim can resolve itself in `PATH`
|
|
19
|
+
|
|
20
|
+
### CI
|
|
21
|
+
- Add cross-platform install verification workflow covering bun, node, and deno on Linux, Windows, and macOS
|
|
22
|
+
- Separate build into its own job; test jobs download the artifact instead of rebuilding
|
|
23
|
+
- Publish workflow now includes version bump step and enhanced post-publish verification
|
|
24
|
+
- Add `ci:test-install` script to trigger the install-verification workflow from local
|
|
25
|
+
|
|
8
26
|
## [0.5.5] - 2026-05-22
|
|
9
27
|
|
|
10
28
|
### Added
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal
|
|
3
|
+
:: Resolve package root (bin\ -> ..\)
|
|
4
|
+
set "_cli=%~dp0..\dist\cli.js"
|
|
5
|
+
|
|
6
|
+
where bun >nul 2>&1
|
|
7
|
+
if not errorlevel 1 (
|
|
8
|
+
bun "%_cli%" %*
|
|
9
|
+
exit /b %errorlevel%
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
where node >nul 2>&1
|
|
13
|
+
if not errorlevel 1 (
|
|
14
|
+
node "%_cli%" %*
|
|
15
|
+
exit /b %errorlevel%
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
where deno >nul 2>&1
|
|
19
|
+
if not errorlevel 1 (
|
|
20
|
+
deno run -A "%_cli%" %*
|
|
21
|
+
exit /b %errorlevel%
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
echo claude-multi: no JavaScript runtime found (install bun, node, or deno) 1>&2
|
|
25
|
+
exit /b 1
|
|
26
|
+
endlocal
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
SCRIPT="$0"
|
|
3
|
+
while [ -L "$SCRIPT" ]; do
|
|
4
|
+
LINK=$(readlink "$SCRIPT")
|
|
5
|
+
case "$LINK" in
|
|
6
|
+
/*) SCRIPT="$LINK" ;;
|
|
7
|
+
*) SCRIPT="$(dirname "$SCRIPT")/$LINK" ;;
|
|
8
|
+
esac
|
|
9
|
+
done
|
|
10
|
+
DIR=$(cd "$(dirname "$SCRIPT")" && pwd)
|
|
11
|
+
CLI="$DIR/../dist/cli.js"
|
|
12
|
+
|
|
13
|
+
if command -v bun >/dev/null 2>&1; then
|
|
14
|
+
exec bun "$CLI" "$@"
|
|
15
|
+
elif command -v node >/dev/null 2>&1; then
|
|
16
|
+
exec node "$CLI" "$@"
|
|
17
|
+
elif command -v deno >/dev/null 2>&1; then
|
|
18
|
+
exec deno run -A "$CLI" "$@"
|
|
19
|
+
else
|
|
20
|
+
echo "claude-multi: no JavaScript runtime found (install bun, node, or deno)" >&2
|
|
21
|
+
exit 1
|
|
22
|
+
fi
|
package/dist/cli.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
import { createRequire } from "node:module";
|
|
3
2
|
var __create = Object.create;
|
|
4
3
|
var __getProtoOf = Object.getPrototypeOf;
|
|
@@ -8619,24 +8618,11 @@ function getClaudePath() {
|
|
|
8619
8618
|
}
|
|
8620
8619
|
function generateWrapperScript(options) {
|
|
8621
8620
|
const claudePath = getClaudePath();
|
|
8622
|
-
return `#!/
|
|
8623
|
-
|
|
8624
|
-
|
|
8625
|
-
|
|
8626
|
-
|
|
8627
|
-
import { spawn } from 'child_process';
|
|
8628
|
-
|
|
8629
|
-
process.env.CLAUDE_CONFIG_DIR = "${options.configDir}";
|
|
8630
|
-
|
|
8631
|
-
// Execute the original Claude Code CLI with all arguments
|
|
8632
|
-
const claude = spawn("${claudePath}", process.argv.slice(2), {
|
|
8633
|
-
stdio: 'inherit',
|
|
8634
|
-
env: process.env
|
|
8635
|
-
});
|
|
8636
|
-
|
|
8637
|
-
claude.on('exit', (code) => {
|
|
8638
|
-
process.exit(code || 0);
|
|
8639
|
-
});
|
|
8621
|
+
return `#!/bin/sh
|
|
8622
|
+
# Claude Multi - Wrapper for ${options.name}
|
|
8623
|
+
# Generated by claude-multi
|
|
8624
|
+
export CLAUDE_CONFIG_DIR="${options.configDir}"
|
|
8625
|
+
exec "${claudePath}" "$@"
|
|
8640
8626
|
`;
|
|
8641
8627
|
}
|
|
8642
8628
|
function generateWindowsWrapperScript(options) {
|
package/package.json
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-multi",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.6",
|
|
4
4
|
"description": "Manage multiple Claude Code instances with different aliases and configurations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"claude-multi": "./
|
|
7
|
+
"claude-multi": "./bin/claude-multi.js"
|
|
8
8
|
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"dist/cli.js",
|
|
12
|
+
"CHANGELOG.md"
|
|
13
|
+
],
|
|
9
14
|
"scripts": {
|
|
10
|
-
"build": "bun build src/cli.ts --outdir dist --target node --format esm && chmod +x
|
|
15
|
+
"build": "bun build src/cli.ts --outdir dist --target node --format esm && chmod +x bin/claude-multi.js",
|
|
11
16
|
"dev": "bun run src/cli.ts",
|
|
12
17
|
"test": "bun test",
|
|
13
18
|
"prepublishOnly": "bun run build",
|
|
14
|
-
"test:binary": "./
|
|
19
|
+
"test:binary": "./bin/claude-multi.js",
|
|
15
20
|
"install:global": "bun link",
|
|
16
21
|
"docs:dev": "astro dev",
|
|
17
22
|
"docs:build": "astro build",
|
|
18
23
|
"docs:preview": "astro preview",
|
|
19
24
|
"ci:docs:deploy": "gh workflow run deploy-docs.yml",
|
|
20
|
-
"ci:publish": "gh workflow run publish.yml -f version=$(node -p \"require('./package.json').version\")"
|
|
25
|
+
"ci:publish": "gh workflow run publish.yml -f version=$(node -p \"require('./package.json').version\")",
|
|
26
|
+
"ci:test-install": "gh workflow run test-install.yml"
|
|
21
27
|
},
|
|
22
28
|
"keywords": [
|
|
23
29
|
"claude",
|
|
@@ -64,6 +70,7 @@
|
|
|
64
70
|
"three": "^0.184.0"
|
|
65
71
|
},
|
|
66
72
|
"engines": {
|
|
67
|
-
"node": ">=18.0.0"
|
|
73
|
+
"node": ">=18.0.0",
|
|
74
|
+
"bun": ">=1.0.0"
|
|
68
75
|
}
|
|
69
76
|
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: three
|
|
3
|
-
description: Three.js and WebGL adapter patterns for HyperFrames. Use when creating deterministic Three.js scenes, WebGL canvas layers, AnimationMixer timelines, camera motion, shader-driven visuals, or canvas renders that respond to HyperFrames hf-seek events.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Three.js for HyperFrames
|
|
7
|
-
|
|
8
|
-
HyperFrames supports Three.js through its `three` runtime adapter. The adapter does not own your scene. It publishes HyperFrames time and dispatches a seek event so your composition can render the exact frame.
|
|
9
|
-
|
|
10
|
-
## Contract
|
|
11
|
-
|
|
12
|
-
- Create the scene, camera, renderer, materials, and assets synchronously when possible.
|
|
13
|
-
- Render from HyperFrames time, not wall-clock time.
|
|
14
|
-
- Listen for the `hf-seek` event and render exactly that time.
|
|
15
|
-
- Load models, textures, and HDRIs before render-critical seeking. Do not fetch them at seek time.
|
|
16
|
-
- Avoid `requestAnimationFrame` or `renderer.setAnimationLoop` as the source of truth for render-critical motion.
|
|
17
|
-
|
|
18
|
-
The adapter sets `window.__hfThreeTime` and dispatches `new CustomEvent("hf-seek", { detail: { time } })` on each seek.
|
|
19
|
-
|
|
20
|
-
## Basic Pattern
|
|
21
|
-
|
|
22
|
-
```html
|
|
23
|
-
<canvas id="three-layer"></canvas>
|
|
24
|
-
<script type="module">
|
|
25
|
-
import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.181.2/+esm";
|
|
26
|
-
|
|
27
|
-
const canvas = document.getElementById("three-layer");
|
|
28
|
-
const renderer = new THREE.WebGLRenderer({ canvas, alpha: true, antialias: true });
|
|
29
|
-
// Match these to your composition's frame size.
|
|
30
|
-
renderer.setSize(1920, 1080, false);
|
|
31
|
-
renderer.setPixelRatio(1);
|
|
32
|
-
|
|
33
|
-
const scene = new THREE.Scene();
|
|
34
|
-
const camera = new THREE.PerspectiveCamera(35, 1920 / 1080, 0.1, 100);
|
|
35
|
-
camera.position.set(0, 0, 6);
|
|
36
|
-
|
|
37
|
-
const mesh = new THREE.Mesh(
|
|
38
|
-
new THREE.IcosahedronGeometry(1.4, 4),
|
|
39
|
-
new THREE.MeshStandardMaterial({ color: 0x64d2ff, roughness: 0.38 }),
|
|
40
|
-
);
|
|
41
|
-
scene.add(mesh);
|
|
42
|
-
scene.add(new THREE.HemisphereLight(0xffffff, 0x223344, 2));
|
|
43
|
-
|
|
44
|
-
function renderAt(time) {
|
|
45
|
-
mesh.rotation.y = time * 0.7;
|
|
46
|
-
mesh.rotation.x = Math.sin(time * 0.6) * 0.16;
|
|
47
|
-
renderer.render(scene, camera);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
window.addEventListener("hf-seek", (event) => {
|
|
51
|
-
renderAt(event.detail.time);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
renderAt(window.__hfThreeTime || 0);
|
|
55
|
-
</script>
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
```css
|
|
59
|
-
#three-layer {
|
|
60
|
-
width: 100%;
|
|
61
|
-
height: 100%;
|
|
62
|
-
display: block;
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## AnimationMixer Pattern
|
|
67
|
-
|
|
68
|
-
For GLTF or authored clip animation, seek the mixer directly:
|
|
69
|
-
|
|
70
|
-
```js
|
|
71
|
-
function renderAt(time) {
|
|
72
|
-
mixer.setTime(time);
|
|
73
|
-
renderer.render(scene, camera);
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
If several mixers exist, seek all of them from the same `time`.
|
|
78
|
-
|
|
79
|
-
## Good Uses
|
|
80
|
-
|
|
81
|
-
- Deterministic 3D objects, product spins, particles with seeded data, and shader plates.
|
|
82
|
-
- Camera moves derived from `time`.
|
|
83
|
-
- GLTF animation clips when assets are local and loaded before validation completes.
|
|
84
|
-
|
|
85
|
-
## Avoid
|
|
86
|
-
|
|
87
|
-
- Using `Date.now()`, `performance.now()`, or clock deltas to update scene state.
|
|
88
|
-
- Leaving render-critical work inside a free-running animation loop.
|
|
89
|
-
- Loading remote models or textures at render time.
|
|
90
|
-
- Device-pixel-ratio dependent output. Pin renderer size and pixel ratio for video renders.
|
|
91
|
-
- Post-processing passes that depend on previous frame history unless you can reconstruct state from time.
|
|
92
|
-
|
|
93
|
-
## Validation
|
|
94
|
-
|
|
95
|
-
After editing a Three.js composition:
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
npx hyperframes lint
|
|
99
|
-
npx hyperframes validate
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## Credits And References
|
|
103
|
-
|
|
104
|
-
- HyperFrames adapter source: `packages/core/src/runtime/adapters/three.ts`.
|
|
105
|
-
- Three.js `WebGLRenderer` docs: https://threejs.org/docs/pages/WebGLRenderer.html
|
|
106
|
-
- Three.js `AnimationMixer.setTime()` docs: https://threejs.org/docs/pages/AnimationMixer.html
|