mirror of
https://github.com/flash555588/ai-model-workbench.git
synced 2026-07-22 06:56:38 +00:00
Release 0.7.6
This commit is contained in:
parent
654c8611ec
commit
6c088e2ac1
11 changed files with 57 additions and 23 deletions
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
## 0.7.6 - 2026-07-12
|
||||
|
||||
- Review: use `window.requestAnimationFrame()` and `window.cancelAnimationFrame()` for Babylon preview frame scheduling so Obsidian source review accepts the timer calls.
|
||||
|
||||
## 0.7.5 - 2026-07-12
|
||||
|
||||
- Stability: gate conversion-backed direct file views behind an explicit Load model action even when Obsidian restores them through `onLoadFile`, preventing STEP/STP workspace restore loops from freezing the vault.
|
||||
|
|
|
|||
15
README.md
15
README.md
|
|
@ -89,23 +89,20 @@
|
|||
|
||||
## Current Release
|
||||
|
||||
`0.7.5` upgrades the Slice and measurement workflows across Babylon.js and Three.js previews. Slice now uses a stable world-horizontal `0°` reset, editable position and X/Y/Z rotation fields, a model-covering cutting board, synchronized plane-local ruler/gizmo controls, and linked interaction rules that prevent conflicts with focus, measurement, disassembly, and camera orbit.
|
||||
`0.7.6` is a source-review patch for the `0.7.5` Slice and measurement release. It preserves the `0.7.5` interaction behavior while using the review-approved global window animation-frame APIs throughout the Babylon preview.
|
||||
|
||||
Release highlights:
|
||||
|
||||
- Defines Slice `0°` as the world-horizontal XZ plane and resets it through the model's world-bounds center at `50%`.
|
||||
- Adds editable Slice position and X/Y/Z rotation inputs synchronized with the in-scene cutting board, ruler, move handle, and rotation rings.
|
||||
- Stabilizes Babylon.js and Three.js Slice dragging with a fixed gesture frame, centered pivot, camera-inertia isolation, snap hysteresis, and frame-coalesced updates.
|
||||
- Sizes the cutting board beyond all projected model corners and updates clipping planes in place to avoid flicker while moving.
|
||||
- Measures the whole model by default; only an explicitly focused component narrows the measurement target.
|
||||
- Coordinates Slice, measurement, focus, and disassembly as linked exclusive modes while preserving camera orbit and view overlays.
|
||||
- Replaces Babylon preview `activeWindow.requestAnimationFrame()` with `window.requestAnimationFrame()` as required by Obsidian source review.
|
||||
- Uses the matching `window.cancelAnimationFrame()` API for Babylon focus and Slice frame cancellation.
|
||||
- Keeps the `0.7.5` world-horizontal Slice reset, numeric position/rotation controls, centered rotation pivot, adaptive cutting board, measurement scope, and linked interaction rules unchanged.
|
||||
- Babylon.js compatibility mode remains the default for single-model previews, with Three.js still available as an explicit opt-in route.
|
||||
- Converted GLB outputs from STEP/FBX/3MF/DAE/etc. can use a configurable Three.js fast path with silent Babylon fallback.
|
||||
- Auxiliary conversion side files can be stored in a user-selected folder instead of only under the Obsidian config directory.
|
||||
- Direct file view, `3dgrid`, measurement, camera zoom, and large-model loading paths have tighter performance and stability behavior.
|
||||
- README warnings now call out STEP/CAD conversion limits, external converter risk, large-model resource pressure, generated side files, renderer-route differences, mobile limits, and optional remote-draft privacy.
|
||||
|
||||
See [docs/release-notes/0.7.5.md](docs/release-notes/0.7.5.md), [docs/release-notes/0.7.1.md](docs/release-notes/0.7.1.md), and [CHANGELOG.md](CHANGELOG.md) for the full release history.
|
||||
See [docs/release-notes/0.7.6.md](docs/release-notes/0.7.6.md), [docs/release-notes/0.7.5.md](docs/release-notes/0.7.5.md), and [CHANGELOG.md](CHANGELOG.md) for the full release history.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -654,7 +651,7 @@ ai-model-workbench/
|
|||
|
||||
### Release Publishing
|
||||
|
||||
Releases are published by the GitHub Actions `Release` workflow. Push a tag that matches `manifest.json`, for example `0.7.5`, or run the workflow manually. The workflow uploads only `main.js`, `manifest.json`, and `styles.css`, removes unsupported release assets, verifies asset sizes and SHA-256 hashes, includes versioned release notes when available, and generates GitHub artifact attestations for the published files. After a release is published, run `npm run verify:obsidian -- --release-tag 0.7.5` to install the assets downloaded from GitHub into the temporary Obsidian vault.
|
||||
Releases are published by the GitHub Actions `Release` workflow. Push a tag that matches `manifest.json`, for example `0.7.6`, or run the workflow manually. The workflow uploads only `main.js`, `manifest.json`, and `styles.css`, removes unsupported release assets, verifies asset sizes and SHA-256 hashes, includes versioned release notes when available, and generates GitHub artifact attestations for the published files. After a release is published, run `npm run verify:obsidian -- --release-tag 0.7.6` to install the assets downloaded from GitHub into the temporary Obsidian vault.
|
||||
|
||||
### Release Token Safety
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ Use this page to choose the right document before changing code.
|
|||
- `../CHANGELOG.md` - current unreleased and release history.
|
||||
- `release-notes/0.6.0-plus.md` - user-facing rolling update log for the
|
||||
`0.6.0+` release line.
|
||||
- `release-notes/0.7.6.md` - GitHub release notes for the Babylon timer source-review patch.
|
||||
- `release-notes/0.7.5.md` - GitHub release notes for the Slice and measurement interaction release.
|
||||
- `release-notes/0.7.1.md` - GitHub release notes for the `0.7.1` source-review patch.
|
||||
- `release-notes/0.7.0.md` - GitHub release notes for the `0.7.0` compatibility release.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ README, implementation, verification scripts, and release/security docs.
|
|||
|
||||
AI Model Workbench is an Obsidian plugin that renders 3D model files inside a vault,
|
||||
adds 3D annotations/bookmarks, and generates linked knowledge notes from model evidence.
|
||||
The current package version is `0.7.5`.
|
||||
The current package version is `0.7.6`.
|
||||
|
||||
Important runtime files:
|
||||
|
||||
|
|
@ -240,7 +240,7 @@ npm run verify:preview -- --model "models/resource-fixtures/grouped-parts/groupe
|
|||
|
||||
## Current Follow-Up Direction
|
||||
|
||||
Short-term product direction after `0.7.5`:
|
||||
Short-term product direction after `0.7.6`:
|
||||
|
||||
- Keep tightening auto part registration and cross-model part reuse feedback.
|
||||
- Keep improving direct workbench UX without prematurely moving all workbench routes.
|
||||
|
|
|
|||
32
docs/release-notes/0.7.6.md
Normal file
32
docs/release-notes/0.7.6.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# AI Model Workbench 0.7.6
|
||||
|
||||
`0.7.6` is a source-review patch for the `0.7.5` Slice and measurement
|
||||
interaction release.
|
||||
|
||||
## Changes
|
||||
|
||||
- Replaced Babylon preview `activeWindow.requestAnimationFrame()` with
|
||||
`window.requestAnimationFrame()` to satisfy Obsidian's timer API source-review
|
||||
rule.
|
||||
- Replaced the related Babylon focus and Slice frame cancellations with
|
||||
`window.cancelAnimationFrame()` for consistent scheduling and cleanup.
|
||||
- Rebuilt the packaged plugin assets with the review-approved calls.
|
||||
|
||||
## Behavior
|
||||
|
||||
- Slice, measurement, focus, disassembly, annotation, and camera behavior are
|
||||
unchanged from `0.7.5`.
|
||||
- Babylon.js compatibility mode remains the default single-model route.
|
||||
- Three.js opt-in routing, Converted GLB fast-path behavior, and Babylon fallback
|
||||
remain unchanged.
|
||||
- No settings or persisted-data migration is introduced.
|
||||
|
||||
## Verification
|
||||
|
||||
- `npm run lint`
|
||||
- `npm run typecheck`
|
||||
- `npm test`
|
||||
- `npm run verify:preview`
|
||||
- `npm run build`
|
||||
- `npm run verify:release`
|
||||
- `npm run verify:obsidian -- --clean`
|
||||
2
main.js
2
main.js
File diff suppressed because one or more lines are too long
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "ai-model-workbench",
|
||||
"name": "AI Model Workbench",
|
||||
"version": "0.7.5",
|
||||
"version": "0.7.6",
|
||||
"minAppVersion": "1.5.0",
|
||||
"description": "Turn 3D models into linked knowledge assets.",
|
||||
"author": "flash",
|
||||
|
|
|
|||
4
package-lock.json
generated
4
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "obsidian-ai-model-workbench",
|
||||
"version": "0.7.5",
|
||||
"version": "0.7.6",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "obsidian-ai-model-workbench",
|
||||
"version": "0.7.5",
|
||||
"version": "0.7.6",
|
||||
"dependencies": {
|
||||
"@babylonjs/core": "^9.6.0",
|
||||
"@babylonjs/loaders": "^9.6.0",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "obsidian-ai-model-workbench",
|
||||
"version": "0.7.5",
|
||||
"version": "0.7.6",
|
||||
"private": true,
|
||||
"description": "Obsidian plugin for turning 3D models into linked knowledge assets.",
|
||||
"scripts": {
|
||||
|
|
|
|||
|
|
@ -1869,7 +1869,7 @@ export class BabylonModelPreview implements WorkbenchPreview {
|
|||
const startedAt = performance.now();
|
||||
|
||||
if (this.focusWorldPointFrame) {
|
||||
activeWindow.cancelAnimationFrame(this.focusWorldPointFrame);
|
||||
window.cancelAnimationFrame(this.focusWorldPointFrame);
|
||||
this.focusWorldPointFrame = 0;
|
||||
}
|
||||
|
||||
|
|
@ -2024,7 +2024,7 @@ export class BabylonModelPreview implements WorkbenchPreview {
|
|||
destroy() {
|
||||
this.engine.stopRenderLoop();
|
||||
if (this.focusWorldPointFrame) {
|
||||
activeWindow.cancelAnimationFrame(this.focusWorldPointFrame);
|
||||
window.cancelAnimationFrame(this.focusWorldPointFrame);
|
||||
this.focusWorldPointFrame = 0;
|
||||
}
|
||||
this._onPickCallbacks = [];
|
||||
|
|
@ -2062,7 +2062,7 @@ export class BabylonModelPreview implements WorkbenchPreview {
|
|||
this.viewportObserver = null;
|
||||
this.resizeObs.disconnect();
|
||||
if (this.sliceMoveFrame) {
|
||||
activeWindow.cancelAnimationFrame(this.sliceMoveFrame);
|
||||
window.cancelAnimationFrame(this.sliceMoveFrame);
|
||||
this.sliceMoveFrame = 0;
|
||||
}
|
||||
this.pendingSliceMove = null;
|
||||
|
|
@ -2382,7 +2382,7 @@ export class BabylonModelPreview implements WorkbenchPreview {
|
|||
clientY: event.clientY,
|
||||
};
|
||||
if (!this.sliceMoveFrame) {
|
||||
this.sliceMoveFrame = activeWindow.requestAnimationFrame(() => {
|
||||
this.sliceMoveFrame = window.requestAnimationFrame(() => {
|
||||
this.sliceMoveFrame = 0;
|
||||
this.flushSliceDragUpdate();
|
||||
});
|
||||
|
|
@ -2392,7 +2392,7 @@ export class BabylonModelPreview implements WorkbenchPreview {
|
|||
|
||||
private flushSliceDragUpdate(): void {
|
||||
if (this.sliceMoveFrame) {
|
||||
activeWindow.cancelAnimationFrame(this.sliceMoveFrame);
|
||||
window.cancelAnimationFrame(this.sliceMoveFrame);
|
||||
this.sliceMoveFrame = 0;
|
||||
}
|
||||
const sample = this.pendingSliceMove;
|
||||
|
|
@ -2479,7 +2479,7 @@ export class BabylonModelPreview implements WorkbenchPreview {
|
|||
|
||||
private stabilizeCameraForSliceDrag(): void {
|
||||
if (this.focusWorldPointFrame) {
|
||||
activeWindow.cancelAnimationFrame(this.focusWorldPointFrame);
|
||||
window.cancelAnimationFrame(this.focusWorldPointFrame);
|
||||
this.focusWorldPointFrame = 0;
|
||||
}
|
||||
this.camera.inertialAlphaOffset = 0;
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"0.0.1":"1.5.0","0.0.2":"1.5.0","0.0.3":"1.5.0","0.0.4":"1.5.0","0.0.5-beta.0":"1.5.0","0.1.1":"1.5.0","0.1.2":"1.5.0","0.1.4":"1.5.0","0.1.5":"1.5.0","0.1.6":"1.5.0","0.1.7":"1.5.0","0.1.8":"1.5.0","0.1.9":"1.5.0","0.2.0":"1.5.0","0.2.1":"1.5.0","0.2.2":"1.5.0","0.2.3":"1.5.0","0.2.4":"1.5.0","0.2.5":"1.5.0","0.3.0":"1.5.0","0.3.1":"1.5.0","0.4.0":"1.5.0","0.4.3":"1.5.0","0.5.1":"1.5.0","0.5.3":"1.5.0","0.5.5":"1.5.0","0.5.7":"1.5.0","0.5.8":"1.5.0","0.6.0":"1.5.0","0.6.1":"1.5.0","0.7.0":"1.5.0","0.7.1":"1.5.0","0.7.5":"1.5.0"}
|
||||
{"0.0.1":"1.5.0","0.0.2":"1.5.0","0.0.3":"1.5.0","0.0.4":"1.5.0","0.0.5-beta.0":"1.5.0","0.1.1":"1.5.0","0.1.2":"1.5.0","0.1.4":"1.5.0","0.1.5":"1.5.0","0.1.6":"1.5.0","0.1.7":"1.5.0","0.1.8":"1.5.0","0.1.9":"1.5.0","0.2.0":"1.5.0","0.2.1":"1.5.0","0.2.2":"1.5.0","0.2.3":"1.5.0","0.2.4":"1.5.0","0.2.5":"1.5.0","0.3.0":"1.5.0","0.3.1":"1.5.0","0.4.0":"1.5.0","0.4.3":"1.5.0","0.5.1":"1.5.0","0.5.3":"1.5.0","0.5.5":"1.5.0","0.5.7":"1.5.0","0.5.8":"1.5.0","0.6.0":"1.5.0","0.6.1":"1.5.0","0.7.0":"1.5.0","0.7.1":"1.5.0","0.7.5":"1.5.0","0.7.6":"1.5.0"}
|
||||
|
|
|
|||
Loading…
Reference in a new issue