Release 0.7.6

This commit is contained in:
flash555588 2026-07-12 23:28:52 +08:00
parent 654c8611ec
commit 6c088e2ac1
11 changed files with 57 additions and 23 deletions

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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.

View 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`

File diff suppressed because one or more lines are too long

View file

@ -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
View file

@ -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",

View file

@ -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": {

View file

@ -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;

View file

@ -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"}