@floless/app 0.52.0 → 0.53.0

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.
@@ -52856,7 +52856,7 @@ function appVersion() {
52856
52856
  return resolveVersion({
52857
52857
  isSea: isSea2(),
52858
52858
  sqVersionXml: readSqVersionXml(),
52859
- define: true ? "0.52.0" : void 0,
52859
+ define: true ? "0.53.0" : void 0,
52860
52860
  pkgVersion: readPkgVersion()
52861
52861
  });
52862
52862
  }
@@ -52866,7 +52866,7 @@ function resolveChannel(s) {
52866
52866
  return "dev";
52867
52867
  }
52868
52868
  function appChannel() {
52869
- return resolveChannel({ isSea: isSea2(), define: true ? "0.52.0" : void 0 });
52869
+ return resolveChannel({ isSea: isSea2(), define: true ? "0.53.0" : void 0 });
52870
52870
  }
52871
52871
 
52872
52872
  // workflow-update.ts
@@ -53893,7 +53893,7 @@ function contractToScene(contractInput) {
53893
53893
  color: pickColor(profile, i, contract)
53894
53894
  }));
53895
53895
  return {
53896
- scene: { meta: { name: contract.title || "Steel takeoff", units: "mm", up: "z" }, groups, elements },
53896
+ scene: { meta: { name: contract.title || "Steel Model", units: "mm", up: "z" }, groups, elements },
53897
53897
  skipped
53898
53898
  };
53899
53899
  }
@@ -60636,7 +60636,7 @@ var PRODUCT_SKILLS = [
60636
60636
  "floless-app-steel-takeoff",
60637
60637
  // read a steel drawing into an editable steel.takeoff/v1 contract (the Steel Takeoff reader)
60638
60638
  "floless-app-tweak-contract",
60639
- // handle a tweak-contract request from the steel-takeoff contract editor (Slice 2 AI round-trip)
60639
+ // handle a tweak-contract request from the Steel Model contract editor (Slice 2 AI round-trip)
60640
60640
  "floless-app-ui",
60641
60641
  // compose Custom Panels (~/.floless/ui/extensions.json) for the Dashboard
60642
60642
  "floless-app-workflows",
@@ -40,7 +40,7 @@ documented in `floless-app-bridge`; the five types map to:
40
40
  |---|---|---|
41
41
  | `tweak` | "Tweak node **`<nodeId>`** in **`<appId>`** — *<instruction>*" | `floless-app-workflows` |
42
42
  | `use-template` | "Add template **<template.name>** to **`<appId>`**" | `floless-app-workflows` |
43
- | `tweak-contract` | "Edit the steel-takeoff contract for **`<appId>`** — *<instruction>* (+N screenshot(s))" | `floless-app-tweak-contract` |
43
+ | `tweak-contract` | "Edit the Steel Model contract for **`<appId>`** — *<instruction>* (+N screenshot(s))" | `floless-app-tweak-contract` |
44
44
  | `ui-customize` | "Customize the Dashboard (optionally `panel <panelId>`) — *<instruction>*" | `floless-app-ui` |
45
45
  | `rebake` | "Re-read the **<inputName>** drawing (<sourceName>) in **`<appId>`** — *<instruction>*" | `floless-app-rebake` |
46
46
 
@@ -127,7 +127,7 @@ the user at the editor:
127
127
  - **Read each framing plan** via **`floless-app-steel-takeoff`** — it runs the filter pre-stage
128
128
  (isolate the steel linework by layer/thickness/colour), the vision read, the AISC/EN/BS lookup
129
129
  via the detailer, honors `target_confidence`, writes the `steel.takeoff/v1` contract, and opens
130
- the overlay editor. One contract per `steel-takeoff` app; multi-sheet sets ride the filter's
130
+ the overlay editor. One contract per `steel-model` app; multi-sheet sets ride the filter's
131
131
  `sheets[]` + the editor's plan switcher.
132
132
  - **Pre-fill the connection library** from `company-rules.md` (stage 2): emit the firm's rows into
133
133
  the contract's `connections[]` with `source:"company-rules"`; the user reviews/assigns them per
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: floless-app-steel-takeoff
3
- description: Read a structural steel drawing into an editable steel.takeoff/v1 contract in floless.app — the "Steel Takeoff" reader. Triggers on a pending floless `rebake` request for the `steel-takeoff` app (queued from its "Re-read & re-bake ▸" button), or asks like "read this framing plan into a takeoff", "turn this structural drawing into a takeoff", "bake my drawing into steel-takeoff", "extract members from this PDF". Teaches the host AI to READ a steel drawing (PDF/image) with its own vision at COMPOSE time, build a steel.takeoff/v1 contract (members + profiles + elevations + weights from AISC lookup), write it to the contract store, and hand control to the editor — no model in the run path, no API key.
3
+ description: Read a structural steel drawing into an editable steel.takeoff/v1 contract in floless.app — the "Steel Takeoff" reader. Triggers on a pending floless `rebake` request for the `steel-model` app (queued from its "Re-read & re-bake ▸" button), or asks like "read this framing plan into a takeoff", "turn this structural drawing into a takeoff", "bake my drawing into steel-model", "extract members from this PDF". Teaches the host AI to READ a steel drawing (PDF/image) with its own vision at COMPOSE time, build a steel.takeoff/v1 contract (members + profiles + elevations + weights from AISC lookup), write it to the contract store, and hand control to the editor — no model in the run path, no API key.
4
4
  metadata:
5
5
  version: 0.1.0
6
6
  ---
@@ -9,7 +9,7 @@ metadata:
9
9
 
10
10
  ## What this is
11
11
 
12
- `steel-takeoff` is a FloLess app that turns a structural steel drawing into an editable
12
+ `steel-model` is a FloLess app that turns a structural steel drawing into an editable
13
13
  **takeoff contract** — members, profiles, AISC weights, T.O. elevations, connection detail refs
14
14
  — rendered in the overlay editor, then baked at Approve into the app's `read` node.
15
15
 
@@ -34,7 +34,7 @@ but do not attempt them here.
34
34
  ### 1. Find the drawing
35
35
 
36
36
  From a `rebake` request: `GET http://localhost:<port>/api/requests` → the entry with
37
- `type:"rebake"` and `appId:"steel-takeoff"` carries `snapshots: ["<abs path>"]` (the drawing
37
+ `type:"rebake"` and `appId:"steel-model"` carries `snapshots: ["<abs path>"]` (the drawing
38
38
  file) and optionally `sourceName` (the original filename — use it for the `source.name`
39
39
  provenance field). If the user just attaches or points at a drawing in prose, skip the lookup
40
40
  and proceed from that path.
@@ -72,7 +72,7 @@ native/display coords):
72
72
  `*BEAM*STEL*`, `*COL*`, `*BRACE*`, `*JOIST*`) → default **on**; others off. Mark
73
73
  `drawable: false` on pure text/dimension/title-block layers.
74
74
  5. Set `filter.mode: "layer"`, `filter.active: 0`. **PUT** the contract
75
- (`PUT /api/contract/steel-takeoff`). On a re-read, preserve any existing per-facet `on` flags.
75
+ (`PUT /api/contract/steel-model`). On a re-read, preserve any existing per-facet `on` flags.
76
76
 
77
77
  Then tell the user to open the **Filter** node, flip through the sheets, narrow to the steel, and
78
78
  **Save**. The saved `on` flags + `mode` are what step 2 reads — **per sheet** (each sheet's elements
@@ -180,7 +180,7 @@ excluded from the average and counted separately as the headline drag).
180
180
  **The score endpoint is your gauge — call it, don't guess:**
181
181
 
182
182
  ```
183
- POST http://localhost:<port>/api/contract/steel-takeoff/score
183
+ POST http://localhost:<port>/api/contract/steel-model/score
184
184
  Content-Type: application/json
185
185
  { "contract": <your draft contract>, "target": <target_confidence, e.g. 70> }
186
186
  ```
@@ -309,7 +309,7 @@ Key field rules:
309
309
  ### 5. Write to the contract store
310
310
 
311
311
  ```
312
- PUT http://localhost:<port>/api/contract/steel-takeoff
312
+ PUT http://localhost:<port>/api/contract/steel-model
313
313
  Content-Type: application/json
314
314
 
315
315
  <contract JSON body>
@@ -317,7 +317,7 @@ Content-Type: application/json
317
317
 
318
318
  The server schema-validates the body. If it responds with `400`, read the error, fix the
319
319
  offending fields, and re-PUT. You can read back the current contract with
320
- `GET /api/contract/steel-takeoff`.
320
+ `GET /api/contract/steel-model`.
321
321
 
322
322
  ### 6. Hand off to the user
323
323
 
@@ -347,7 +347,7 @@ DELETE http://localhost:<port>/api/requests/<id>
347
347
 
348
348
  Never write client, firm, or project identifiers into files, commits, or responses. The
349
349
  contract carries the source path in `source.path` and an embedded raster in `raster_b64` — both
350
- are machine-local (stored under `~/.floless/contracts/steel-takeoff.json` by the server and
350
+ are machine-local (stored under `~/.floless/contracts/steel-model.json` by the server and
351
351
  never committed). Clip title blocks from any embedded preview.
352
352
 
353
353
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: floless-app-tweak-contract
3
- description: This skill should be used when there is a pending floless `tweak-contract` request — the user typed an instruction in the steel-takeoff contract editor and clicked Send (Ask AI). Also triggers on asks like "edit the steel takeoff contract via AI", "adjust the steel takeoff in the contract editor", "the user asked me to change the steel contract", "pick up my tweak-contract request", "update the member profile in the contract". It teaches the host AI to read the request, fetch the current steel.takeoff/v1 contract, apply the instruction (and any pasted screenshots), PUT the updated contract back, and resolve the request.
3
+ description: This skill should be used when there is a pending floless `tweak-contract` request — the user typed an instruction in the Steel Model contract editor and clicked Send (Ask AI). Also triggers on asks like "edit the steel takeoff contract via AI", "adjust the steel takeoff in the contract editor", "the user asked me to change the steel contract", "pick up my tweak-contract request", "update the member profile in the contract". It teaches the host AI to read the request, fetch the current steel.takeoff/v1 contract, apply the instruction (and any pasted screenshots), PUT the updated contract back, and resolve the request.
4
4
  metadata:
5
5
  version: 0.1.0
6
6
  ---
@@ -9,7 +9,7 @@ metadata:
9
9
 
10
10
  ## What this is
11
11
 
12
- The floless.app steel-takeoff contract editor surfaces an **Ask AI** panel: the user types
12
+ The floless.app Steel Model contract editor surfaces an **Ask AI** panel: the user types
13
13
  an instruction ("change all W12X26 to W14X30", "add a new beam on sheet S-202", "mark this
14
14
  member as moment-frame") and optionally pastes screenshots, then clicks **Send**. That records
15
15
  a `tweak-contract` request in the reverse channel. You pick it up here, edit the contract
@@ -1,6 +1,6 @@
1
- app: steel-takeoff
1
+ app: steel-model
2
2
  version: 0.2.0
3
- display-name: Steel Takeoff
3
+ display-name: Steel Model
4
4
  publisher: floless
5
5
  module: steel-detailer
6
6
  description: |
package/dist/web/aware.js CHANGED
@@ -2880,7 +2880,7 @@
2880
2880
  }
2881
2881
 
2882
2882
  // ── Workflow update (module-shaped) ─────────────────────────────────────────────
2883
- // A FloLess-published workflow (e.g. steel-takeoff) has a newer bundled template. Poll GET
2883
+ // A FloLess-published workflow (e.g. steel-model) has a newer bundled template. Poll GET
2884
2884
  // /api/workflows/updates; when the OPEN app has one, show a pill → modal with the changelog →
2885
2885
  // "Back up & update" POSTs /api/workflows/:id/update (backup → swap structure → re-bake the user's
2886
2886
  // data from the contract store → recompile) → reload the app. No auto-update. `_wfUpdates` + the
@@ -1,5 +1,5 @@
1
1
  /*
2
- * steel-3d-view.js — the 3D render/interaction layer for the steel-takeoff editor's 3D mode.
2
+ * steel-3d-view.js — the 3D render/interaction layer for the steel-model editor's 3D mode.
3
3
  *
4
4
  * Three.js lives ONLY here (the rest of the editor is import-free). It renders the SAME scene the
5
5
  * IFC/Tekla bake uses (fetched from /api/contract/:id/scene → contractToScene), so the editable 3D
@@ -1,5 +1,5 @@
1
1
  <!doctype html><html><head><meta charset=utf-8>
2
- <title>Steel takeoff — editor</title>
2
+ <title>Steel Model — editor</title>
3
3
  <style>
4
4
  :root{--bg:#0f172a;--panel:#1e293b;--line:#334155;--text:#e2e8f0;--mut:#94a3b8;--brand:#3b82f6}
5
5
  /* Theme EVERY scrollbar — no native white default may leak (applies to the canvas, panels, and every modal list). */
@@ -204,7 +204,7 @@
204
204
  <script type="module" src="./steel-3d-view.js"></script>
205
205
  </head><body>
206
206
  <header>
207
- <b>Steel takeoff</b>
207
+ <b>Steel Model</b>
208
208
  <div id=viewToggle role=group aria-label="Canvas view"><button id=vt2d class="seg on" aria-pressed=true title="Plan view (2D overlay)">2D</button><button id=vt3d class=seg aria-pressed=false title="3D model view">3D</button></div>
209
209
  <select id=planSel title="Switch plan view"></select>
210
210
  <span class=stat>Members <b id=mc>0</b></span><span class=stat>Weight <b id=wt>0</b> tons · <b id=wtlb>0</b> lb</span>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floless/app",
3
- "version": "0.52.0",
3
+ "version": "0.53.0",
4
4
  "type": "module",
5
5
  "description": "Thin localhost host for floless.app — serves web/ and shells the aware CLI. No engine, no LLM.",
6
6
  "bin": {