@floless/app 0.42.0 → 0.44.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.
- package/dist/floless-server.cjs +499 -335
- package/dist/templates/college-phase-exporter.flo +86 -0
- package/dist/templates/dummy-report.flo +104 -0
- package/dist/templates/hello-world.flo +91 -0
- package/dist/templates/screenshot-to-saved-settings.flo +56 -0
- package/dist/templates/steel-from-drawings.flo +73 -0
- package/dist/templates/steel-takeoff.flo +151 -0
- package/dist/templates/steel-to-ifc.flo +294 -0
- package/dist/templates/steel-to-tekla.flo +293 -0
- package/dist/templates/supabase-drawing-register.flo +63 -0
- package/dist/templates/tekla-bom-by-phase.flo +211 -0
- package/dist/templates/tekla-connection-xray.flo +39 -0
- package/dist/templates/tekla-pdf-takeoff.flo +106 -0
- package/dist/templates/tekla-selection-now.flo +129 -0
- package/dist/templates/tekla-selection-report.flo +145 -0
- package/dist/templates/tekla-watch-logger.flo +57 -0
- package/dist/templates/tekla-watch-smoke.flo +20 -0
- package/dist/templates/trimble-list-projects.flo +41 -0
- package/dist/templates/viewer-3d-demo.flo +65 -0
- package/dist/web/app.css +17 -0
- package/dist/web/aware.js +79 -0
- package/dist/web/index.html +17 -0
- package/dist/web/steel-editor.html +40 -18
- package/package.json +1 -1
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
app: steel-to-ifc
|
|
2
|
+
version: 0.1.0
|
|
3
|
+
display-name: Steel to IFC
|
|
4
|
+
description: |
|
|
5
|
+
Bake a read steel model OUT to a universal IFC file — open it in Tekla, SDS2, Revit or
|
|
6
|
+
Navisworks. Companion to steel-from-drawings: that app reads a drawing into a 3D scene and shows
|
|
7
|
+
it; this one writes the SAME scene to an IFC file (IfcColumn/IfcBeam as extruded sections on the
|
|
8
|
+
real grid) so you can take the schematic model straight into your detailing tool and finish there.
|
|
9
|
+
|
|
10
|
+
Same terminal-bake pattern — the FloLess way: your AI terminal bakes the scene inline
|
|
11
|
+
(read-strategy: bake); a deterministic, MODEL-FREE exec node writes the .ifc (no Tekla needed to
|
|
12
|
+
export — it never touches a Tekla model, just writes the file). Ships with the same EXAMPLE
|
|
13
|
+
frame so it runs out of the box; the floless-app-steel-from-drawings skill bakes your drawing's
|
|
14
|
+
scene into both apps so the IFC matches what you saw in 3D.
|
|
15
|
+
exposes-as-agent: false
|
|
16
|
+
inputs:
|
|
17
|
+
# BAKED at compose time: the terminal AI reads this drawing and writes the `scene` block below
|
|
18
|
+
# (the run never reads the drawing). read-strategy: bake surfaces "Re-read & re-bake ▸".
|
|
19
|
+
drawing:
|
|
20
|
+
type: image
|
|
21
|
+
widget: file
|
|
22
|
+
accept: [pdf, png, jpg]
|
|
23
|
+
read-strategy: bake
|
|
24
|
+
description: A structural steel drawing — baked into the scene below, then written out as IFC; swap it to re-read & re-bake.
|
|
25
|
+
output_path:
|
|
26
|
+
type: string
|
|
27
|
+
default: steel-from-drawings.ifc
|
|
28
|
+
description: Where to write the .ifc — FloLess fills this with your Downloads folder; editable per run.
|
|
29
|
+
requires:
|
|
30
|
+
- ifc@0.1.x
|
|
31
|
+
layout: linear
|
|
32
|
+
nodes:
|
|
33
|
+
# Model-free exec: reads the baked `scene` and writes a valid IFC4 file (IfcColumn/IfcBeam as
|
|
34
|
+
# extruded rectangle sections on the real grid), returning a summary report. NEVER derefs `model`
|
|
35
|
+
# (no Tekla needed); writes the .ifc via System.IO to the user's Downloads (or home). Re-bake —
|
|
36
|
+
# or the floless-app-steel-from-drawings skill — replaces `scene` with YOUR drawing's read.
|
|
37
|
+
- id: bake-ifc
|
|
38
|
+
agent: ifc
|
|
39
|
+
command: write
|
|
40
|
+
config:
|
|
41
|
+
scene:
|
|
42
|
+
meta:
|
|
43
|
+
name: "Example \u2014 steel framing (sample, not your drawing)"
|
|
44
|
+
units: mm
|
|
45
|
+
up: z
|
|
46
|
+
groups:
|
|
47
|
+
- key: column
|
|
48
|
+
label: Columns (HSS6x6x3/8)
|
|
49
|
+
color: '#60a5fa'
|
|
50
|
+
- key: beam
|
|
51
|
+
label: Beams (W10x33)
|
|
52
|
+
color: '#94a3b8'
|
|
53
|
+
elements:
|
|
54
|
+
- id: COL-1A
|
|
55
|
+
group: column
|
|
56
|
+
kind: box
|
|
57
|
+
from:
|
|
58
|
+
- 0
|
|
59
|
+
- 0
|
|
60
|
+
- 0
|
|
61
|
+
to:
|
|
62
|
+
- 0
|
|
63
|
+
- 0
|
|
64
|
+
- 4500
|
|
65
|
+
section:
|
|
66
|
+
w: 150
|
|
67
|
+
d: 150
|
|
68
|
+
meta:
|
|
69
|
+
profile: HSS6x6x3/8
|
|
70
|
+
grid: 1-A
|
|
71
|
+
- id: COL-1B
|
|
72
|
+
group: column
|
|
73
|
+
kind: box
|
|
74
|
+
from:
|
|
75
|
+
- 0
|
|
76
|
+
- 6000
|
|
77
|
+
- 0
|
|
78
|
+
to:
|
|
79
|
+
- 0
|
|
80
|
+
- 6000
|
|
81
|
+
- 4500
|
|
82
|
+
section:
|
|
83
|
+
w: 150
|
|
84
|
+
d: 150
|
|
85
|
+
meta:
|
|
86
|
+
profile: HSS6x6x3/8
|
|
87
|
+
grid: 1-B
|
|
88
|
+
- id: COL-2A
|
|
89
|
+
group: column
|
|
90
|
+
kind: box
|
|
91
|
+
from:
|
|
92
|
+
- 6000
|
|
93
|
+
- 0
|
|
94
|
+
- 0
|
|
95
|
+
to:
|
|
96
|
+
- 6000
|
|
97
|
+
- 0
|
|
98
|
+
- 4500
|
|
99
|
+
section:
|
|
100
|
+
w: 150
|
|
101
|
+
d: 150
|
|
102
|
+
meta:
|
|
103
|
+
profile: HSS6x6x3/8
|
|
104
|
+
grid: 2-A
|
|
105
|
+
- id: COL-2B
|
|
106
|
+
group: column
|
|
107
|
+
kind: box
|
|
108
|
+
from:
|
|
109
|
+
- 6000
|
|
110
|
+
- 6000
|
|
111
|
+
- 0
|
|
112
|
+
to:
|
|
113
|
+
- 6000
|
|
114
|
+
- 6000
|
|
115
|
+
- 4500
|
|
116
|
+
section:
|
|
117
|
+
w: 150
|
|
118
|
+
d: 150
|
|
119
|
+
meta:
|
|
120
|
+
profile: HSS6x6x3/8
|
|
121
|
+
grid: 2-B
|
|
122
|
+
- id: COL-3A
|
|
123
|
+
group: column
|
|
124
|
+
kind: box
|
|
125
|
+
from:
|
|
126
|
+
- 12000
|
|
127
|
+
- 0
|
|
128
|
+
- 0
|
|
129
|
+
to:
|
|
130
|
+
- 12000
|
|
131
|
+
- 0
|
|
132
|
+
- 4500
|
|
133
|
+
section:
|
|
134
|
+
w: 150
|
|
135
|
+
d: 150
|
|
136
|
+
meta:
|
|
137
|
+
profile: HSS6x6x3/8
|
|
138
|
+
grid: 3-A
|
|
139
|
+
- id: COL-3B
|
|
140
|
+
group: column
|
|
141
|
+
kind: box
|
|
142
|
+
from:
|
|
143
|
+
- 12000
|
|
144
|
+
- 6000
|
|
145
|
+
- 0
|
|
146
|
+
to:
|
|
147
|
+
- 12000
|
|
148
|
+
- 6000
|
|
149
|
+
- 4500
|
|
150
|
+
section:
|
|
151
|
+
w: 150
|
|
152
|
+
d: 150
|
|
153
|
+
meta:
|
|
154
|
+
profile: HSS6x6x3/8
|
|
155
|
+
grid: 3-B
|
|
156
|
+
- id: BM-12A
|
|
157
|
+
group: beam
|
|
158
|
+
kind: box
|
|
159
|
+
from:
|
|
160
|
+
- 0
|
|
161
|
+
- 0
|
|
162
|
+
- 4500
|
|
163
|
+
to:
|
|
164
|
+
- 6000
|
|
165
|
+
- 0
|
|
166
|
+
- 4500
|
|
167
|
+
section:
|
|
168
|
+
w: 150
|
|
169
|
+
d: 250
|
|
170
|
+
meta:
|
|
171
|
+
profile: W10x33
|
|
172
|
+
- id: BM-23A
|
|
173
|
+
group: beam
|
|
174
|
+
kind: box
|
|
175
|
+
from:
|
|
176
|
+
- 6000
|
|
177
|
+
- 0
|
|
178
|
+
- 4500
|
|
179
|
+
to:
|
|
180
|
+
- 12000
|
|
181
|
+
- 0
|
|
182
|
+
- 4500
|
|
183
|
+
section:
|
|
184
|
+
w: 150
|
|
185
|
+
d: 250
|
|
186
|
+
meta:
|
|
187
|
+
profile: W10x33
|
|
188
|
+
- id: BM-12B
|
|
189
|
+
group: beam
|
|
190
|
+
kind: box
|
|
191
|
+
from:
|
|
192
|
+
- 0
|
|
193
|
+
- 6000
|
|
194
|
+
- 4500
|
|
195
|
+
to:
|
|
196
|
+
- 6000
|
|
197
|
+
- 6000
|
|
198
|
+
- 4500
|
|
199
|
+
section:
|
|
200
|
+
w: 150
|
|
201
|
+
d: 250
|
|
202
|
+
meta:
|
|
203
|
+
profile: W10x33
|
|
204
|
+
- id: BM-23B
|
|
205
|
+
group: beam
|
|
206
|
+
kind: box
|
|
207
|
+
from:
|
|
208
|
+
- 6000
|
|
209
|
+
- 6000
|
|
210
|
+
- 4500
|
|
211
|
+
to:
|
|
212
|
+
- 12000
|
|
213
|
+
- 6000
|
|
214
|
+
- 4500
|
|
215
|
+
section:
|
|
216
|
+
w: 150
|
|
217
|
+
d: 250
|
|
218
|
+
meta:
|
|
219
|
+
profile: W10x33
|
|
220
|
+
- id: BM-1AB
|
|
221
|
+
group: beam
|
|
222
|
+
kind: box
|
|
223
|
+
from:
|
|
224
|
+
- 0
|
|
225
|
+
- 0
|
|
226
|
+
- 4500
|
|
227
|
+
to:
|
|
228
|
+
- 0
|
|
229
|
+
- 6000
|
|
230
|
+
- 4500
|
|
231
|
+
section:
|
|
232
|
+
w: 150
|
|
233
|
+
d: 250
|
|
234
|
+
meta:
|
|
235
|
+
profile: W10x33
|
|
236
|
+
- id: BM-2AB
|
|
237
|
+
group: beam
|
|
238
|
+
kind: box
|
|
239
|
+
from:
|
|
240
|
+
- 6000
|
|
241
|
+
- 0
|
|
242
|
+
- 4500
|
|
243
|
+
to:
|
|
244
|
+
- 6000
|
|
245
|
+
- 6000
|
|
246
|
+
- 4500
|
|
247
|
+
section:
|
|
248
|
+
w: 150
|
|
249
|
+
d: 250
|
|
250
|
+
meta:
|
|
251
|
+
profile: W10x33
|
|
252
|
+
- id: BM-3AB
|
|
253
|
+
group: beam
|
|
254
|
+
kind: box
|
|
255
|
+
from:
|
|
256
|
+
- 12000
|
|
257
|
+
- 0
|
|
258
|
+
- 4500
|
|
259
|
+
to:
|
|
260
|
+
- 12000
|
|
261
|
+
- 6000
|
|
262
|
+
- 4500
|
|
263
|
+
section:
|
|
264
|
+
w: 150
|
|
265
|
+
d: 250
|
|
266
|
+
meta:
|
|
267
|
+
profile: W10x33
|
|
268
|
+
grids:
|
|
269
|
+
- label: '1'
|
|
270
|
+
at:
|
|
271
|
+
- 0
|
|
272
|
+
- -3000
|
|
273
|
+
- 0
|
|
274
|
+
- label: '2'
|
|
275
|
+
at:
|
|
276
|
+
- 6000
|
|
277
|
+
- -3000
|
|
278
|
+
- 0
|
|
279
|
+
- label: '3'
|
|
280
|
+
at:
|
|
281
|
+
- 12000
|
|
282
|
+
- -3000
|
|
283
|
+
- 0
|
|
284
|
+
- label: A
|
|
285
|
+
at:
|
|
286
|
+
- -3000
|
|
287
|
+
- 0
|
|
288
|
+
- 0
|
|
289
|
+
- label: B
|
|
290
|
+
at:
|
|
291
|
+
- -3000
|
|
292
|
+
- 6000
|
|
293
|
+
- 0
|
|
294
|
+
output-path: "{{ inputs.output_path }}"
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
app: steel-to-tekla
|
|
2
|
+
version: 0.1.0
|
|
3
|
+
display-name: Steel to Tekla
|
|
4
|
+
description: |
|
|
5
|
+
Bake the read steel model straight into a LIVE Tekla model as native parts (columns + beams) via
|
|
6
|
+
the Tekla Open API — the deepest bake-out: real Tekla objects you detail as usual, not an IFC
|
|
7
|
+
import. Companion to steel-from-drawings (the 3D view) and steel-to-ifc (the universal file).
|
|
8
|
+
|
|
9
|
+
How it works: Tekla must be OPEN with a model. Your terminal AI bakes the scene inline
|
|
10
|
+
(read-strategy: bake); a WRITE exec creates a Beam per member (the drawing's profile, falling back
|
|
11
|
+
to a sized rectangular section when your Tekla environment doesn't carry that catalogue profile),
|
|
12
|
+
then commits. A snapshot is taken first, so Tekla's Undo reverts the whole bake in one step. Ships
|
|
13
|
+
an EXAMPLE frame; the floless-app-steel-from-drawings skill bakes your own drawing's scene in.
|
|
14
|
+
exposes-as-agent: false
|
|
15
|
+
inputs:
|
|
16
|
+
# BAKED at compose time: the terminal AI reads this drawing and writes the `scene` block below.
|
|
17
|
+
# read-strategy: bake surfaces "Re-read & re-bake ▸". The deterministic run reads the scene, not the drawing.
|
|
18
|
+
drawing:
|
|
19
|
+
type: image
|
|
20
|
+
widget: file
|
|
21
|
+
accept: [pdf, png, jpg]
|
|
22
|
+
read-strategy: bake
|
|
23
|
+
description: A structural steel drawing — baked into the scene below, then created as native Tekla parts; swap it to re-read & re-bake.
|
|
24
|
+
requires:
|
|
25
|
+
- tekla@0.1.x
|
|
26
|
+
layout: linear
|
|
27
|
+
nodes:
|
|
28
|
+
# WRITE exec: creates real Tekla members (a Beam per scene element) via the Open API, then commits.
|
|
29
|
+
# Needs Tekla OPEN with a model. snapshot: true → one Undo reverts the whole bake. Re-bake — or the
|
|
30
|
+
# floless-app-steel-from-drawings skill — replaces `scene` with YOUR drawing's read.
|
|
31
|
+
- id: bake-tekla
|
|
32
|
+
agent: tekla
|
|
33
|
+
command: bake-scene
|
|
34
|
+
mode: write
|
|
35
|
+
config:
|
|
36
|
+
version: "2026.0"
|
|
37
|
+
scene:
|
|
38
|
+
meta:
|
|
39
|
+
name: "Example \u2014 steel framing (sample, not your drawing)"
|
|
40
|
+
units: mm
|
|
41
|
+
up: z
|
|
42
|
+
groups:
|
|
43
|
+
- key: column
|
|
44
|
+
label: Columns (HSS6x6x3/8)
|
|
45
|
+
color: '#60a5fa'
|
|
46
|
+
- key: beam
|
|
47
|
+
label: Beams (W10x33)
|
|
48
|
+
color: '#94a3b8'
|
|
49
|
+
elements:
|
|
50
|
+
- id: COL-1A
|
|
51
|
+
group: column
|
|
52
|
+
kind: box
|
|
53
|
+
from:
|
|
54
|
+
- 0
|
|
55
|
+
- 0
|
|
56
|
+
- 0
|
|
57
|
+
to:
|
|
58
|
+
- 0
|
|
59
|
+
- 0
|
|
60
|
+
- 4500
|
|
61
|
+
section:
|
|
62
|
+
w: 150
|
|
63
|
+
d: 150
|
|
64
|
+
meta:
|
|
65
|
+
profile: HSS6x6x3/8
|
|
66
|
+
grid: 1-A
|
|
67
|
+
- id: COL-1B
|
|
68
|
+
group: column
|
|
69
|
+
kind: box
|
|
70
|
+
from:
|
|
71
|
+
- 0
|
|
72
|
+
- 6000
|
|
73
|
+
- 0
|
|
74
|
+
to:
|
|
75
|
+
- 0
|
|
76
|
+
- 6000
|
|
77
|
+
- 4500
|
|
78
|
+
section:
|
|
79
|
+
w: 150
|
|
80
|
+
d: 150
|
|
81
|
+
meta:
|
|
82
|
+
profile: HSS6x6x3/8
|
|
83
|
+
grid: 1-B
|
|
84
|
+
- id: COL-2A
|
|
85
|
+
group: column
|
|
86
|
+
kind: box
|
|
87
|
+
from:
|
|
88
|
+
- 6000
|
|
89
|
+
- 0
|
|
90
|
+
- 0
|
|
91
|
+
to:
|
|
92
|
+
- 6000
|
|
93
|
+
- 0
|
|
94
|
+
- 4500
|
|
95
|
+
section:
|
|
96
|
+
w: 150
|
|
97
|
+
d: 150
|
|
98
|
+
meta:
|
|
99
|
+
profile: HSS6x6x3/8
|
|
100
|
+
grid: 2-A
|
|
101
|
+
- id: COL-2B
|
|
102
|
+
group: column
|
|
103
|
+
kind: box
|
|
104
|
+
from:
|
|
105
|
+
- 6000
|
|
106
|
+
- 6000
|
|
107
|
+
- 0
|
|
108
|
+
to:
|
|
109
|
+
- 6000
|
|
110
|
+
- 6000
|
|
111
|
+
- 4500
|
|
112
|
+
section:
|
|
113
|
+
w: 150
|
|
114
|
+
d: 150
|
|
115
|
+
meta:
|
|
116
|
+
profile: HSS6x6x3/8
|
|
117
|
+
grid: 2-B
|
|
118
|
+
- id: COL-3A
|
|
119
|
+
group: column
|
|
120
|
+
kind: box
|
|
121
|
+
from:
|
|
122
|
+
- 12000
|
|
123
|
+
- 0
|
|
124
|
+
- 0
|
|
125
|
+
to:
|
|
126
|
+
- 12000
|
|
127
|
+
- 0
|
|
128
|
+
- 4500
|
|
129
|
+
section:
|
|
130
|
+
w: 150
|
|
131
|
+
d: 150
|
|
132
|
+
meta:
|
|
133
|
+
profile: HSS6x6x3/8
|
|
134
|
+
grid: 3-A
|
|
135
|
+
- id: COL-3B
|
|
136
|
+
group: column
|
|
137
|
+
kind: box
|
|
138
|
+
from:
|
|
139
|
+
- 12000
|
|
140
|
+
- 6000
|
|
141
|
+
- 0
|
|
142
|
+
to:
|
|
143
|
+
- 12000
|
|
144
|
+
- 6000
|
|
145
|
+
- 4500
|
|
146
|
+
section:
|
|
147
|
+
w: 150
|
|
148
|
+
d: 150
|
|
149
|
+
meta:
|
|
150
|
+
profile: HSS6x6x3/8
|
|
151
|
+
grid: 3-B
|
|
152
|
+
- id: BM-12A
|
|
153
|
+
group: beam
|
|
154
|
+
kind: box
|
|
155
|
+
from:
|
|
156
|
+
- 0
|
|
157
|
+
- 0
|
|
158
|
+
- 4500
|
|
159
|
+
to:
|
|
160
|
+
- 6000
|
|
161
|
+
- 0
|
|
162
|
+
- 4500
|
|
163
|
+
section:
|
|
164
|
+
w: 150
|
|
165
|
+
d: 250
|
|
166
|
+
meta:
|
|
167
|
+
profile: W10x33
|
|
168
|
+
- id: BM-23A
|
|
169
|
+
group: beam
|
|
170
|
+
kind: box
|
|
171
|
+
from:
|
|
172
|
+
- 6000
|
|
173
|
+
- 0
|
|
174
|
+
- 4500
|
|
175
|
+
to:
|
|
176
|
+
- 12000
|
|
177
|
+
- 0
|
|
178
|
+
- 4500
|
|
179
|
+
section:
|
|
180
|
+
w: 150
|
|
181
|
+
d: 250
|
|
182
|
+
meta:
|
|
183
|
+
profile: W10x33
|
|
184
|
+
- id: BM-12B
|
|
185
|
+
group: beam
|
|
186
|
+
kind: box
|
|
187
|
+
from:
|
|
188
|
+
- 0
|
|
189
|
+
- 6000
|
|
190
|
+
- 4500
|
|
191
|
+
to:
|
|
192
|
+
- 6000
|
|
193
|
+
- 6000
|
|
194
|
+
- 4500
|
|
195
|
+
section:
|
|
196
|
+
w: 150
|
|
197
|
+
d: 250
|
|
198
|
+
meta:
|
|
199
|
+
profile: W10x33
|
|
200
|
+
- id: BM-23B
|
|
201
|
+
group: beam
|
|
202
|
+
kind: box
|
|
203
|
+
from:
|
|
204
|
+
- 6000
|
|
205
|
+
- 6000
|
|
206
|
+
- 4500
|
|
207
|
+
to:
|
|
208
|
+
- 12000
|
|
209
|
+
- 6000
|
|
210
|
+
- 4500
|
|
211
|
+
section:
|
|
212
|
+
w: 150
|
|
213
|
+
d: 250
|
|
214
|
+
meta:
|
|
215
|
+
profile: W10x33
|
|
216
|
+
- id: BM-1AB
|
|
217
|
+
group: beam
|
|
218
|
+
kind: box
|
|
219
|
+
from:
|
|
220
|
+
- 0
|
|
221
|
+
- 0
|
|
222
|
+
- 4500
|
|
223
|
+
to:
|
|
224
|
+
- 0
|
|
225
|
+
- 6000
|
|
226
|
+
- 4500
|
|
227
|
+
section:
|
|
228
|
+
w: 150
|
|
229
|
+
d: 250
|
|
230
|
+
meta:
|
|
231
|
+
profile: W10x33
|
|
232
|
+
- id: BM-2AB
|
|
233
|
+
group: beam
|
|
234
|
+
kind: box
|
|
235
|
+
from:
|
|
236
|
+
- 6000
|
|
237
|
+
- 0
|
|
238
|
+
- 4500
|
|
239
|
+
to:
|
|
240
|
+
- 6000
|
|
241
|
+
- 6000
|
|
242
|
+
- 4500
|
|
243
|
+
section:
|
|
244
|
+
w: 150
|
|
245
|
+
d: 250
|
|
246
|
+
meta:
|
|
247
|
+
profile: W10x33
|
|
248
|
+
- id: BM-3AB
|
|
249
|
+
group: beam
|
|
250
|
+
kind: box
|
|
251
|
+
from:
|
|
252
|
+
- 12000
|
|
253
|
+
- 0
|
|
254
|
+
- 4500
|
|
255
|
+
to:
|
|
256
|
+
- 12000
|
|
257
|
+
- 6000
|
|
258
|
+
- 4500
|
|
259
|
+
section:
|
|
260
|
+
w: 150
|
|
261
|
+
d: 250
|
|
262
|
+
meta:
|
|
263
|
+
profile: W10x33
|
|
264
|
+
grids:
|
|
265
|
+
- label: '1'
|
|
266
|
+
at:
|
|
267
|
+
- 0
|
|
268
|
+
- -3000
|
|
269
|
+
- 0
|
|
270
|
+
- label: '2'
|
|
271
|
+
at:
|
|
272
|
+
- 6000
|
|
273
|
+
- -3000
|
|
274
|
+
- 0
|
|
275
|
+
- label: '3'
|
|
276
|
+
at:
|
|
277
|
+
- 12000
|
|
278
|
+
- -3000
|
|
279
|
+
- 0
|
|
280
|
+
- label: A
|
|
281
|
+
at:
|
|
282
|
+
- -3000
|
|
283
|
+
- 0
|
|
284
|
+
- 0
|
|
285
|
+
- label: B
|
|
286
|
+
at:
|
|
287
|
+
- -3000
|
|
288
|
+
- 6000
|
|
289
|
+
- 0
|
|
290
|
+
safety:
|
|
291
|
+
transaction-group: steel-from-drawings
|
|
292
|
+
snapshot: true
|
|
293
|
+
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
app: supabase-drawing-register
|
|
2
|
+
version: 0.1.0
|
|
3
|
+
display-name: Supabase Drawing Register
|
|
4
|
+
description: |
|
|
5
|
+
Reproduces the desktop "supabase-drawing-register" outcome on AWARE
|
|
6
|
+
(end goal, not the desktop mechanics):
|
|
7
|
+
|
|
8
|
+
Keep a Supabase drawing register in lock-step with the Tekla model. On
|
|
9
|
+
every drawing-change event, re-read the model's drawings and idempotently
|
|
10
|
+
upsert each into the Supabase `drawings` table (PostgREST). Long-running:
|
|
11
|
+
the tekla watch node makes this a stateful sync app (aware app stop to end).
|
|
12
|
+
|
|
13
|
+
Composed only against installed agents — tekla (curated) + http (the
|
|
14
|
+
http agent's supabase-rest recipe: apikey + Bearer, POST upsert with
|
|
15
|
+
Prefer: resolution=merge-duplicates on on_conflict=number). No Supabase-
|
|
16
|
+
specific agent needed; the key is provisioned once via `aware connect supabase`.
|
|
17
|
+
|
|
18
|
+
exposes-as-agent: false
|
|
19
|
+
|
|
20
|
+
requires:
|
|
21
|
+
- tekla@0.1.x
|
|
22
|
+
- http@0.1.x
|
|
23
|
+
|
|
24
|
+
requires-permissions:
|
|
25
|
+
network:
|
|
26
|
+
- https://app.connect.trimble.com # placeholder; Supabase host is per-project
|
|
27
|
+
filesystem: []
|
|
28
|
+
|
|
29
|
+
layout: linear
|
|
30
|
+
|
|
31
|
+
nodes:
|
|
32
|
+
# Read the model's drawings (identity = Mark, never Name). One-shot bulk sync;
|
|
33
|
+
# the live `tekla watch` (stream) variant is blocked on AWARE's invoke_stream
|
|
34
|
+
# (unimplemented in 0.37 — see gap note), so this runs on demand / model-open.
|
|
35
|
+
- id: drawings
|
|
36
|
+
agent: tekla
|
|
37
|
+
command: drawing-list
|
|
38
|
+
config:
|
|
39
|
+
status: any
|
|
40
|
+
|
|
41
|
+
# Idempotent BULK upsert of the whole drawing set in one PostgREST call.
|
|
42
|
+
# PostgREST accepts a JSON array body; `resolution=merge-duplicates` on
|
|
43
|
+
# `on_conflict=number` makes re-runs safe (new rows insert, existing update).
|
|
44
|
+
# (A top-level node rather than for-each: 0.37's compiler doesn't yet resolve
|
|
45
|
+
# the inner node of a `for-each do:` body — see gap note.)
|
|
46
|
+
- id: upsert
|
|
47
|
+
agent: http
|
|
48
|
+
command: post
|
|
49
|
+
config:
|
|
50
|
+
url: '{{ inputs.supabase_url }}/rest/v1/drawings'
|
|
51
|
+
headers:
|
|
52
|
+
apikey: '{{ secrets.supabase }}'
|
|
53
|
+
Authorization: 'Bearer {{ secrets.supabase }}'
|
|
54
|
+
Prefer: 'resolution=merge-duplicates,return=representation'
|
|
55
|
+
query:
|
|
56
|
+
on_conflict: 'number'
|
|
57
|
+
body: '{{ drawings.drawings }}'
|
|
58
|
+
safety:
|
|
59
|
+
transaction-group: register-sync
|
|
60
|
+
snapshot: false
|
|
61
|
+
|
|
62
|
+
connections:
|
|
63
|
+
- { from: drawings, to: upsert }
|