@almadar/std 16.245.0 → 16.246.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.
Files changed (68) hide show
  1. package/behaviors/behaviors-registry.json +534 -176
  2. package/behaviors/lolo/agent/atoms/std-agent-context.lolo +9 -4
  3. package/behaviors/lolo/agent/atoms/std-agent-memory.lolo +9 -4
  4. package/behaviors/lolo/agent/atoms/std-agent-proposal.lolo +9 -4
  5. package/behaviors/lolo/agent/atoms/std-agent-session.lolo +9 -4
  6. package/behaviors/lolo/agent/atoms/std-agent-suggestions.lolo +9 -4
  7. package/behaviors/lolo/agent/atoms/std-agent-tool-loop.lolo +9 -4
  8. package/behaviors/lolo/agent/organisms/std-agent-assistant.lolo +9 -4
  9. package/behaviors/lolo/ui/core/atoms/ui-svg-flow.lolo +1 -1
  10. package/behaviors/lolo/ui/core/molecules/ui-import-progress.lolo +1 -1
  11. package/behaviors/lolo/ui/game/atoms/ui-canvas.lolo +3 -3
  12. package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +3 -3
  13. package/behaviors/lolo/ui/game/atoms/ui-draw-group.lolo +1 -1
  14. package/behaviors/lolo/ui/game/atoms/ui-draw-mesh.lolo +1 -1
  15. package/behaviors/lolo/ui/game/atoms/ui-draw-skinned-mesh.lolo +3 -3
  16. package/behaviors/lolo/ui/learning/atoms/ui-biology-canvas.lolo +3 -3
  17. package/behaviors/lolo/ui/learning/atoms/ui-chemistry-canvas.lolo +3 -3
  18. package/behaviors/lolo/ui/learning/atoms/ui-physics-canvas.lolo +3 -3
  19. package/behaviors/lolo-behavior-contracts.json +1 -1
  20. package/behaviors/registry/agent/atoms/std-agent-context.orb +53 -67
  21. package/behaviors/registry/agent/atoms/std-agent-memory.orb +14 -51
  22. package/behaviors/registry/agent/atoms/std-agent-proposal.orb +50 -20
  23. package/behaviors/registry/agent/atoms/std-agent-session.orb +84 -91
  24. package/behaviors/registry/agent/atoms/std-agent-suggestions.orb +61 -24
  25. package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +61 -45
  26. package/behaviors/registry/agent/organisms/std-agent-assistant.orb +63 -26
  27. package/behaviors/registry/factory-signatures.json +1 -1
  28. package/behaviors/registry/ui/avl/atoms/ui-avl-state-machine.orb +2 -2
  29. package/behaviors/registry/ui/avl/atoms/ui-avl-transition-explainer.orb +2 -2
  30. package/behaviors/registry/ui/avl/atoms/ui-behavior-view.orb +2 -2
  31. package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +2 -2
  32. package/behaviors/registry/ui/core/atoms/ui-svg-flow.orb +11 -4
  33. package/behaviors/registry/ui/core/molecules/ui-agent-chat-feed.orb +1 -1
  34. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +2 -2
  35. package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +1 -1
  36. package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +2 -2
  37. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +2 -2
  38. package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +3 -3
  39. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +4 -4
  40. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +4 -4
  41. package/behaviors/registry/ui/core/organisms/ui-form.orb +4 -4
  42. package/behaviors/registry/ui/core/organisms/ui-state-machine-view.orb +136 -2
  43. package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +3 -2
  44. package/behaviors/registry/ui/game/atoms/ui-canvas.orb +51 -18
  45. package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +3 -3
  46. package/behaviors/registry/ui/game/atoms/ui-draw-group.orb +12 -5
  47. package/behaviors/registry/ui/game/atoms/ui-draw-mesh.orb +12 -5
  48. package/behaviors/registry/ui/game/atoms/ui-draw-skinned-mesh.orb +39 -14
  49. package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +51 -18
  50. package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +51 -18
  51. package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +51 -18
  52. package/canonical-operators.json +5 -5
  53. package/dist/behaviors/exports-reader.js +228 -218
  54. package/dist/behaviors/functions/index.d.ts +8 -8
  55. package/dist/behaviors/functions/index.js +228 -218
  56. package/dist/behaviors/index.js +228 -218
  57. package/dist/behaviors/query.js +228 -218
  58. package/dist/behaviors-embeddings.hash.json +3 -3
  59. package/dist/behaviors-embeddings.json +1 -1
  60. package/dist/behaviors-registry.json +534 -176
  61. package/dist/index.js +232 -222
  62. package/dist/knob-embeddings.hash.json +3 -3
  63. package/dist/knob-embeddings.json +7 -3
  64. package/dist/modules/array.js +4 -4
  65. package/dist/modules/index.js +4 -4
  66. package/dist/registry/factory-signatures.json +1 -1
  67. package/dist/registry.js +4 -4
  68. package/package.json +2 -2
@@ -5,11 +5,16 @@ type AgentChatMessage = {
5
5
  role : "user" | "assistant"
6
6
  content : string!
7
7
  }
8
- type AgentTool = {
9
- event : event
10
- read : string
11
- scope : "declared"
8
+ type AgentToolScope = {
9
+ scope : "declared"!
12
10
  }
11
+ type AgentToolInput = {
12
+ event : EventAddress!
13
+ }
14
+ type AgentToolRead = {
15
+ read : string!
16
+ }
17
+ type AgentTool = AgentToolScope | AgentToolInput | AgentToolRead
13
18
 
14
19
  orbital AgentContextOrbital {
15
20
  type ContextSummarized = Event { summary : string, keyPoints : [string] } "Fired when the older turns have been summarized"
@@ -5,11 +5,16 @@ type AgentChatMessage = {
5
5
  role : "user" | "assistant"
6
6
  content : string!
7
7
  }
8
- type AgentTool = {
9
- event : event
10
- read : string
11
- scope : "declared"
8
+ type AgentToolScope = {
9
+ scope : "declared"!
12
10
  }
11
+ type AgentToolInput = {
12
+ event : EventAddress!
13
+ }
14
+ type AgentToolRead = {
15
+ read : string!
16
+ }
17
+ type AgentTool = AgentToolScope | AgentToolInput | AgentToolRead
13
18
  type AgentMemoryRow = {
14
19
  id : string!
15
20
  content : string!
@@ -2,11 +2,16 @@ app std-agent-proposal "1.0.0"
2
2
  "std-agent-proposal — an agent that reads what the person hands over, works out a structured proposal, and commits nothing until they approve it. The app starts it with PROPOSAL_REQUESTED { input, context } (any trait emitting it, or the person typing into the start form when `showInputForm` is on). A second std-agent-tool-loop answers with `instructions`, `prompt` and `tools` as the signed-in person — `quiet`, its reply and failure renamed PROPOSAL_LOOP_REPLIED / PROPOSAL_LOOP_FAILED so they never reach the assistant's chat — and submits its proposal through one declared input, PROPOSE (its @description is the tool text): a summary and a list of items, each a flat map of scalar values the app names. The person reviews it (the summary, the items drawn with `itemPattern` and `itemFields`) and chooses: Approve emits PROPOSAL_APPROVED { proposal } for the app to commit (the app owns the commit; this atom writes nothing); Revise sends their written feedback back to the agent, which proposes again; Discard emits PROPOSAL_DISCARDED. Cancel while the agent works aborts its model call and emits PROPOSAL_CANCELLED. A run that fails, or ends without proposing, shows its error with Retry and Discard. The panel renders into `panelSlot`. Import the orbital once per app: `orbital Proposal = Proposal.orbitals.AgentProposalOrbital { config { instructions: \"…\", prompt: \"…\", itemFields: […] } }`, restating `tools` with PROPOSE addressed by its local orbital name (`{ event: Proposal.AgentProposalWorkflow.PROPOSE }`). Instructions, prompts, item fields and labels are the app's vocabulary, declared in config."
3
3
  ;; @capabilities "agent proposal, review before commit, human approval of agent output, approve or revise agent suggestions, structured proposal review, ai drafts for approval, extract then confirm"
4
4
 
5
- type AgentTool = {
6
- event : event
7
- read : string
8
- scope : "declared"
5
+ type AgentToolScope = {
6
+ scope : "declared"!
9
7
  }
8
+ type AgentToolInput = {
9
+ event : EventAddress!
10
+ }
11
+ type AgentToolRead = {
12
+ read : string!
13
+ }
14
+ type AgentTool = AgentToolScope | AgentToolInput | AgentToolRead
10
15
  type AgentChatMessage = {
11
16
  role : "user" | "assistant"
12
17
  content : string!
@@ -24,11 +24,16 @@ type AgentThreadRow = {
24
24
  content : string!
25
25
  createdAt : number
26
26
  }
27
- type AgentTool = {
28
- event : event
29
- read : string
30
- scope : "declared"
27
+ type AgentToolScope = {
28
+ scope : "declared"!
31
29
  }
30
+ type AgentToolInput = {
31
+ event : EventAddress!
32
+ }
33
+ type AgentToolRead = {
34
+ read : string!
35
+ }
36
+ type AgentTool = AgentToolScope | AgentToolInput | AgentToolRead
32
37
  type AgentToolKind = "input" | "read" | "invalid"
33
38
  type AgentMessageEntry = {
34
39
  type : "message"!
@@ -2,11 +2,16 @@ app std-agent-suggestions "1.0.0"
2
2
  "std-agent-suggestions — an agent that proactively proposes things to the signed-in person, who accepts or dismisses each one. The agent proposes through one declared input, PROPOSE_SUGGESTION (its @description is the tool text): a kind, a title, a body that gives its reasoning, an optional action (a name the app routes) with a payload, an optional href, and a subject (what it is about). A suggestion's signature is kind:action:subject; a signature that was ever proposed to this person, accepted or dismissed included, is never stored again (SUGGESTION_DUPLICATE), and no more than `maxPending` wait at once (SUGGESTION_LIMIT_REACHED). `kinds` and `actions`, when listed, are the only values accepted (SUGGESTION_REJECTED). The agent runs on its own: any trait emitting SUGGESTIONS_TRIGGERED (or an app event routed into AgentSuggestionTrigger's TRIGGERED by re-binding that trait in the import body with `omit { AgentSuggestionTrigger }` and its own `listens`) asks for a run, and once `cooldownMinutes` have passed since this person's last run a second std-agent-tool-loop answers `prompt` with `tools` as the signed-in person — `quiet`, so it streams no live steps and toasts no failure, and its reply and failure are renamed PROACTIVE_REPLIED / PROACTIVE_FAILED so they never reach the assistant's chat. AgentSuggestionInbox lists the pending suggestions with Accept and Dismiss and an empty state that offers to look again (SUGGESTIONS_ANALYZE_REQUESTED). Accept stores accepted, emits SUGGESTION_ACCEPTED { action, payload, href, … } for the app to route (and navigates to `href` when the suggestion has one); Dismiss stores dismissed and emits SUGGESTION_DISMISSED. The inbox renders into `panelSlot`: `main` inline (the content of a std-panel-launcher), or `modal`/`drawer` opened with OPEN and closed with CLOSE (set std-app-layout's notificationClickEvent, or a topBarActions event, to SUGGESTIONS_OPEN_REQUESTED). Import the orbital once per app: `orbital Suggestions = Suggest.orbitals.AgentSuggestionsOrbital { entity MySuggestion entities { AgentSuggestionRun: MySuggestionRun } config { … } }`, retargeting the records onto owner-scoped entities (`ownerId` a relation to your [identity] roster, with @read/@create/@update); a suggestion's proposer, inbox and trigger read only the rows whose ownerId is the signed-in person. PROPOSE_SUGGESTION's refusals (SUGGESTION_DUPLICATE, SUGGESTION_LIMIT_REACHED, SUGGESTION_REJECTED) are the agent's tool response; no trait listens to them. Suggestion kinds, actions and prompts are the app's vocabulary, declared in config."
3
3
  ;; @capabilities "proactive suggestions, agent recommendations, suggestion inbox, next best action, accept or dismiss suggestions, notification bell suggestions, agent proposals"
4
4
 
5
- type AgentTool = {
6
- event : event
7
- read : string
8
- scope : "declared"
5
+ type AgentToolScope = {
6
+ scope : "declared"!
9
7
  }
8
+ type AgentToolInput = {
9
+ event : EventAddress!
10
+ }
11
+ type AgentToolRead = {
12
+ read : string!
13
+ }
14
+ type AgentTool = AgentToolScope | AgentToolInput | AgentToolRead
10
15
  type AgentChatMessage = {
11
16
  role : "user" | "assistant"
12
17
  content : string!
@@ -1,11 +1,16 @@
1
1
  app std-agent-tool-loop "2.0.0"
2
2
  "std-agent-tool-loop — answers a conversation by operating the running app as the caller, through `call-service llm call-tools`. Its `tools` are `{ scope: declared }` (every declared external input plus a read over every persisted entity), or named declared inputs (addressed like a listens source: `Trait.EVENT`, `Orbital.Trait.EVENT`) and entities to read; each input fires as the signed-in user through the ordinary dispatch (guards and entity policies apply) and each read returns only the rows the caller may read. Headless: the conversation UI (std-agent-session) shows the reply; a failure shows as a toast, unless `quiet` is on (a background run nobody is watching: no live steps and no toast). CONVERSE carries the conversation (and optionally what std-agent-memory recalled); ASSISTANT_STEP carries each step live while it works (a model call, a tool it used, what the app answered) to the asking tab; ASSISTANT_REPLIED carries the reply, every step and the token usage; ASSISTANT_REPLY_FAILED carries the error. These names are the assistant contract std-agent-session's conversation hears from any orbital. Compose with std-agent-session (the conversation) and std-agent-trace (the step record)."
3
3
 
4
- type AgentTool = {
5
- event : event
6
- read : string
7
- scope : "declared"
4
+ type AgentToolScope = {
5
+ scope : "declared"!
8
6
  }
7
+ type AgentToolInput = {
8
+ event : EventAddress!
9
+ }
10
+ type AgentToolRead = {
11
+ read : string!
12
+ }
13
+ type AgentTool = AgentToolScope | AgentToolInput | AgentToolRead
9
14
  type AgentChatMessage = {
10
15
  role : "user" | "assistant"
11
16
  content : string!
@@ -1,11 +1,16 @@
1
1
  app std-agent-assistant "2.0.0"
2
2
  "std-agent-assistant — an in-app assistant that operates the running app for the signed-in user. Each section's floating button opens it in a side panel docked beside the page (std-panel-launcher; a side sheet on small screens), where the conversation shows every step the assistant takes live as it works; /assistant is the same conversation as a full page, in the app's own shell (pass `appName` and `navItems`); past conversations and what the assistant remembers open in place from its toolbar (Back returns to the chat), on either surface. One request flows down a chain of std agent atoms on the bus: the conversation (std-agent-session) SENDs → CONVERSE → std-agent-context bounds it → std-agent-memory adds what it recalls → std-agent-tool-loop answers it through `call-service llm call-tools`, firing only the inputs and reading only the entities its `tools` allow, as the signed-in user → ASSISTANT_REPLIED goes back to the conversation, to memory (remembered) and to std-agent-trace (the run record). By default the tools are the program's own declarations: every `-> external` input (its @description is the tool text) and a read over every persisted entity, so composing building blocks composes the assistant's abilities. Any section's page gets the assistant with two traits, `XAssistant = AgentSession.traits.AgentConversation` and a std-panel-launcher dock: the conversation speaks the ASSISTANT_* contract from any orbital, so the assistant needs no per-section wiring. Import the orbital once per app: `orbital Assistant = Agent.orbitals.AgentAssistantOrbital { config { instructions: \"…\" } }`. The conversation, memory and run records live in AgentRecordsOrbital; retarget them onto your own owner-scoped entities (`ownerId` a relation to your [identity] roster, with @read/@create) with `entities { AgentMessage: …, AgentMemory: …, AgentRun: …, AgentChat: … }`. The conversation is kept across pages and reloads (each person's most recently used conversation is the current one);"
3
3
 
4
- type AgentTool = {
5
- event : event
6
- read : string
7
- scope : "declared"
4
+ type AgentToolScope = {
5
+ scope : "declared"!
8
6
  }
7
+ type AgentToolInput = {
8
+ event : EventAddress!
9
+ }
10
+ type AgentToolRead = {
11
+ read : string!
12
+ }
13
+ type AgentTool = AgentToolScope | AgentToolInput | AgentToolRead
9
14
  type AgentLink = {
10
15
  label : string!
11
16
  href : string!
@@ -43,7 +43,7 @@ orbital SvgFlowOrbital {
43
43
  }
44
44
 
45
45
  config {
46
- points : [[number]] = []
46
+ points : [[number, number]] = []
47
47
  @label "Points"
48
48
  @description "points prop"
49
49
  @tier "presentation"
@@ -52,7 +52,7 @@ orbital ImportProgressOrbital {
52
52
  @label "Counts"
53
53
  @description "Unit counts"
54
54
  @tier "presentation"
55
- labels : Map string string = { item: "Item" }
55
+ labels : Map string string = { fetching: "Item" }
56
56
  @label "Labels"
57
57
  @description "Step label overrides"
58
58
  @tier "presentation"
@@ -32,12 +32,12 @@ orbital CanvasOrbital {
32
32
  type CanvasLightingAmbient = {
33
33
  intensity : number
34
34
  color : string
35
- position : [number]
35
+ position : [number, number, number]
36
36
  }
37
37
  type CanvasLightingDirectional = {
38
38
  intensity : number
39
39
  color : string
40
- position : [number]
40
+ position : [number, number, number]
41
41
  }
42
42
  type CanvasLightingHemisphere = {
43
43
  intensity : number
@@ -47,7 +47,7 @@ orbital CanvasOrbital {
47
47
  type CanvasLightingPointsItem = {
48
48
  intensity : number
49
49
  color : string
50
- position : [number]!
50
+ position : [number, number, number]!
51
51
  distance : number
52
52
  decay : number
53
53
  }
@@ -132,15 +132,15 @@ orbital ControlGridOrbital {
132
132
  @label "Direction Event"
133
133
  @description "Event-bus event emitted with `{ direction, pressed }` (kind='dpad')"
134
134
  @tier "presentation"
135
- directionEvents : Map string string = { item: "INIT" }
135
+ directionEvents : Map string string = { up: "INIT" }
136
136
  @label "Direction Events"
137
137
  @description "Per-direction PRESS → the board's SEMANTIC event (kind='dpad'), e.g. `{ left: 'LEFT', right: 'RIGHT', up: 'JUMP' }`. Lets the d-pad emit the SAME intent events as the keyboard so the FSM stays device-agnostic."
138
138
  @tier "presentation"
139
- directionReleaseEvents : Map string string = { item: "INIT" }
139
+ directionReleaseEvents : Map string string = { up: "INIT" }
140
140
  @label "Direction Release Events"
141
141
  @description "Per-direction RELEASE → semantic event, e.g. `{ left: 'STOP', right: 'STOP' }`. Omit a direction to ignore its release."
142
142
  @tier "presentation"
143
- directionAssets : Map string ControlGridDirectionAssetsValue = { item: { url: "https://almadar-kflow-assets.web.app/shared/ui-roguelike-board/default/features/sword.png", role: "item", category: "item", animations: ["static"], style: "pixel", dimension: "2d", aspect: "1:1", name: "item", thumbnailUrl: "" } }
143
+ directionAssets : Map string ControlGridDirectionAssetsValue = { up: { url: "https://almadar-kflow-assets.web.app/shared/ui-roguelike-board/default/features/sword.png", role: "item", category: "item", animations: ["static"], style: "pixel", dimension: "2d", aspect: "1:1", name: "item", thumbnailUrl: "" } }
144
144
  @label "Direction Assets"
145
145
  @description "Per-direction sprite assets for kind='dpad' buttons (e.g. Kenny arrow PNGs). Falls back to arrow emoji."
146
146
  @tier "presentation"
@@ -64,7 +64,7 @@ orbital DrawGroupOrbital {
64
64
  @label "Rotate"
65
65
  @description "Rotation in radians (painter units)."
66
66
  @tier "presentation"
67
- rotation : [number] = []
67
+ rotation : [number, number, number]
68
68
  @label "Rotation"
69
69
  @description "Euler rotation `[x, y, z]` in radians (world axes) — per-axis joint rotation for the 3D backend; a group placed at a joint with children authored joint-local IS a bone. The 2D painter applies only the in-plane `z` component, after `rotate`."
70
70
  @tier "presentation"
@@ -144,7 +144,7 @@ orbital DrawMeshOrbital {
144
144
  @label "Skin"
145
145
  @description "`polyhedron` only: smooth-skinning weights binding the vertices to named bone groups. Vertices must then be authored in BIND POSE model space; the bones' animated transforms deform them."
146
146
  @tier "presentation"
147
- rotation : [number] = []
147
+ rotation : [number, number, number]
148
148
  @label "Rotation"
149
149
  @description "Euler rotation `[x, y, z]` in radians."
150
150
  @tier "presentation"
@@ -23,7 +23,7 @@ orbital DrawSkinnedMeshOrbital {
23
23
  }
24
24
  type DrawSkinnedMeshMesh = {
25
25
  vertices : [DrawSkinnedMeshMeshVerticesItem]!
26
- triangles : [[number]]!
26
+ triangles : [[number, number, number]]!
27
27
  }
28
28
  type DrawSkinnedMeshMeshVerticesItem = {
29
29
  x : number!
@@ -39,8 +39,8 @@ orbital DrawSkinnedMeshOrbital {
39
39
  type DrawSkinnedMeshBonesItem = {
40
40
  name : string!
41
41
  parent : string
42
- pivot : [number]!
43
- tip : [number]!
42
+ pivot : [number, number]!
43
+ tip : [number, number]!
44
44
  }
45
45
  type DrawSkinnedMeshClip = {
46
46
  frames : [Map string number]!
@@ -32,12 +32,12 @@ orbital BiologyCanvasOrbital {
32
32
  type BiologyCanvasLightingAmbient = {
33
33
  intensity : number
34
34
  color : string
35
- position : [number]
35
+ position : [number, number, number]
36
36
  }
37
37
  type BiologyCanvasLightingDirectional = {
38
38
  intensity : number
39
39
  color : string
40
- position : [number]
40
+ position : [number, number, number]
41
41
  }
42
42
  type BiologyCanvasLightingHemisphere = {
43
43
  intensity : number
@@ -47,7 +47,7 @@ orbital BiologyCanvasOrbital {
47
47
  type BiologyCanvasLightingPointsItem = {
48
48
  intensity : number
49
49
  color : string
50
- position : [number]!
50
+ position : [number, number, number]!
51
51
  distance : number
52
52
  decay : number
53
53
  }
@@ -32,12 +32,12 @@ orbital ChemistryCanvasOrbital {
32
32
  type ChemistryCanvasLightingAmbient = {
33
33
  intensity : number
34
34
  color : string
35
- position : [number]
35
+ position : [number, number, number]
36
36
  }
37
37
  type ChemistryCanvasLightingDirectional = {
38
38
  intensity : number
39
39
  color : string
40
- position : [number]
40
+ position : [number, number, number]
41
41
  }
42
42
  type ChemistryCanvasLightingHemisphere = {
43
43
  intensity : number
@@ -47,7 +47,7 @@ orbital ChemistryCanvasOrbital {
47
47
  type ChemistryCanvasLightingPointsItem = {
48
48
  intensity : number
49
49
  color : string
50
- position : [number]!
50
+ position : [number, number, number]!
51
51
  distance : number
52
52
  decay : number
53
53
  }
@@ -32,12 +32,12 @@ orbital PhysicsCanvasOrbital {
32
32
  type PhysicsCanvasLightingAmbient = {
33
33
  intensity : number
34
34
  color : string
35
- position : [number]
35
+ position : [number, number, number]
36
36
  }
37
37
  type PhysicsCanvasLightingDirectional = {
38
38
  intensity : number
39
39
  color : string
40
- position : [number]
40
+ position : [number, number, number]
41
41
  }
42
42
  type PhysicsCanvasLightingHemisphere = {
43
43
  intensity : number
@@ -47,7 +47,7 @@ orbital PhysicsCanvasOrbital {
47
47
  type PhysicsCanvasLightingPointsItem = {
48
48
  intensity : number
49
49
  color : string
50
- position : [number]!
50
+ position : [number, number, number]!
51
51
  distance : number
52
52
  decay : number
53
53
  }