@almadar/std 16.145.0 → 16.147.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 (135) hide show
  1. package/behaviors/lolo/infra/atoms/std-migration-job.lolo +269 -0
  2. package/behaviors/lolo/infra/atoms/std-mod-queue.lolo +1 -1
  3. package/behaviors/lolo/ml/atoms/std-data-collector.lolo +56 -0
  4. package/behaviors/lolo/ml/atoms/std-graph-builder.lolo +90 -0
  5. package/behaviors/lolo/ml/atoms/std-ml-similarity.lolo +25 -13
  6. package/behaviors/lolo/ml/atoms/std-tokenizer.lolo +108 -0
  7. package/behaviors/lolo/ml/atoms/std-weight-validator.lolo +106 -0
  8. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +14 -0
  9. package/behaviors/lolo/ui/core/atoms/std-billable-hour.lolo +1 -1
  10. package/behaviors/lolo/ui/core/atoms/std-esign-flow.lolo +3 -3
  11. package/behaviors/lolo/ui/core/atoms/std-esign-request.lolo +4 -4
  12. package/behaviors/lolo/ui/core/atoms/std-event-log.lolo +2 -2
  13. package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +1 -1
  14. package/behaviors/lolo/ui/core/atoms/std-gallery.lolo +1 -1
  15. package/behaviors/lolo/ui/core/atoms/std-image-upload-multi.lolo +2 -2
  16. package/behaviors/lolo/ui/core/atoms/std-import.lolo +132 -0
  17. package/behaviors/lolo/ui/core/atoms/std-recurrence.lolo +5 -5
  18. package/behaviors/lolo/ui/core/atoms/std-saved-search.lolo +1 -1
  19. package/behaviors/lolo/ui/core/atoms/std-signature-capture.lolo +1 -1
  20. package/behaviors/lolo/ui/core/atoms/std-stats.lolo +1 -1
  21. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +3 -3
  22. package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +0 -2
  23. package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +0 -2
  24. package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +96 -0
  25. package/behaviors/lolo/ui/core/molecules/ui-import-progress.lolo +49 -0
  26. package/behaviors/lolo/ui/core/molecules/ui-import-source-picker.lolo +67 -0
  27. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +0 -2
  28. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +0 -2
  29. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +0 -2
  30. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +0 -2
  31. package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +0 -2
  32. package/behaviors/lolo/ui/game/atoms/std-dungeon-combat.lolo +2 -2
  33. package/behaviors/lolo/ui/game/molecules/std-worldmap-board-2d.lolo +1 -1
  34. package/behaviors/lolo/ui/game/organisms/ui-boardgame-board.lolo +2 -2
  35. package/behaviors/lolo/ui/game/organisms/ui-builder-board.lolo +2 -2
  36. package/behaviors/lolo/ui/game/organisms/ui-debugger-board.lolo +3 -3
  37. package/behaviors/lolo/ui/game/organisms/ui-physics-sandbox-board.lolo +3 -3
  38. package/behaviors/lolo/ui/game/organisms/ui-roguelike-board.lolo +1 -1
  39. package/behaviors/lolo/ui/game/organisms/ui-sequencer-board.lolo +1 -1
  40. package/behaviors/lolo/ui/learning/atoms/std-algo-heapsort.lolo +2 -2
  41. package/behaviors/lolo/ui/learning/atoms/std-algo-mst.lolo +3 -3
  42. package/behaviors/registry/factory-signatures.json +11531 -2142
  43. package/behaviors/registry/infra/atoms/std-migration-job.orb +1310 -0
  44. package/behaviors/registry/infra/atoms/std-mod-queue.orb +5 -5
  45. package/behaviors/registry/ml/atoms/std-data-collector.orb +324 -0
  46. package/behaviors/registry/ml/atoms/std-graph-builder.orb +480 -0
  47. package/behaviors/registry/ml/atoms/std-ml-similarity.orb +127 -72
  48. package/behaviors/registry/ml/atoms/std-tokenizer.orb +570 -0
  49. package/behaviors/registry/ml/atoms/std-weight-validator.orb +624 -0
  50. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +33 -1
  51. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +2 -2
  52. package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +17 -21
  53. package/behaviors/registry/ui/core/atoms/std-esign-request.orb +7 -13
  54. package/behaviors/registry/ui/core/atoms/std-event-log.orb +2 -4
  55. package/behaviors/registry/ui/core/atoms/std-file-store.orb +3 -4
  56. package/behaviors/registry/ui/core/atoms/std-gallery.orb +11 -20
  57. package/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +4 -4
  58. package/behaviors/registry/ui/core/atoms/std-import.orb +701 -0
  59. package/behaviors/registry/ui/core/atoms/std-recurrence.orb +5 -10
  60. package/behaviors/registry/ui/core/atoms/std-saved-search.orb +2 -2
  61. package/behaviors/registry/ui/core/atoms/std-signature-capture.orb +2 -2
  62. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +12 -25
  63. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +13 -26
  64. package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +354 -0
  65. package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +195 -0
  66. package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +279 -0
  67. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +12 -25
  68. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +0 -13
  69. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +8 -21
  70. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +0 -13
  71. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +0 -13
  72. package/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +4 -4
  73. package/behaviors/registry/ui/game/molecules/std-worldmap-board-2d.orb +6 -9
  74. package/behaviors/registry/ui/game/organisms/ui-boardgame-board.orb +4 -4
  75. package/behaviors/registry/ui/game/organisms/ui-builder-board.orb +4 -4
  76. package/behaviors/registry/ui/game/organisms/ui-debugger-board.orb +12 -12
  77. package/behaviors/registry/ui/game/organisms/ui-physics-sandbox-board.orb +19 -19
  78. package/behaviors/registry/ui/game/organisms/ui-roguelike-board.orb +1 -1
  79. package/behaviors/registry/ui/game/organisms/ui-sequencer-board.orb +2 -2
  80. package/behaviors/registry/ui/learning/atoms/std-algo-heapsort.orb +8 -8
  81. package/dist/behaviors/behaviors-embeddings.json +568 -496
  82. package/dist/behaviors/behaviors-registry.json +7518 -3936
  83. package/dist/behaviors/exports-reader.js +3093 -2581
  84. package/dist/behaviors/functions/index.d.ts +922 -14
  85. package/dist/behaviors/functions/index.js +3056 -2582
  86. package/dist/behaviors/index.d.ts +1 -1
  87. package/dist/behaviors/index.js +3094 -2582
  88. package/dist/behaviors/knob-embeddings.json +1 -1
  89. package/dist/behaviors/query.js +3093 -2581
  90. package/dist/behaviors/registry/factory-signatures.json +11531 -2142
  91. package/dist/behaviors/registry/infra/atoms/std-migration-job.orb +1310 -0
  92. package/dist/behaviors/registry/infra/atoms/std-mod-queue.orb +5 -5
  93. package/dist/behaviors/registry/ml/atoms/std-data-collector.orb +324 -0
  94. package/dist/behaviors/registry/ml/atoms/std-graph-builder.orb +480 -0
  95. package/dist/behaviors/registry/ml/atoms/std-ml-similarity.orb +127 -72
  96. package/dist/behaviors/registry/ml/atoms/std-tokenizer.orb +570 -0
  97. package/dist/behaviors/registry/ml/atoms/std-weight-validator.orb +624 -0
  98. package/dist/behaviors/registry/ui/core/atoms/std-app-layout.orb +33 -1
  99. package/dist/behaviors/registry/ui/core/atoms/std-billable-hour.orb +2 -2
  100. package/dist/behaviors/registry/ui/core/atoms/std-esign-flow.orb +17 -21
  101. package/dist/behaviors/registry/ui/core/atoms/std-esign-request.orb +7 -13
  102. package/dist/behaviors/registry/ui/core/atoms/std-event-log.orb +2 -4
  103. package/dist/behaviors/registry/ui/core/atoms/std-file-store.orb +3 -4
  104. package/dist/behaviors/registry/ui/core/atoms/std-gallery.orb +11 -20
  105. package/dist/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +4 -4
  106. package/dist/behaviors/registry/ui/core/atoms/std-import.orb +701 -0
  107. package/dist/behaviors/registry/ui/core/atoms/std-recurrence.orb +5 -10
  108. package/dist/behaviors/registry/ui/core/atoms/std-saved-search.orb +2 -2
  109. package/dist/behaviors/registry/ui/core/atoms/std-signature-capture.orb +2 -2
  110. package/dist/behaviors/registry/ui/core/molecules/ui-data-grid.orb +12 -25
  111. package/dist/behaviors/registry/ui/core/molecules/ui-data-list.orb +13 -26
  112. package/dist/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +354 -0
  113. package/dist/behaviors/registry/ui/core/molecules/ui-import-progress.orb +195 -0
  114. package/dist/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +279 -0
  115. package/dist/behaviors/registry/ui/core/molecules/ui-table-view.orb +12 -25
  116. package/dist/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +0 -13
  117. package/dist/behaviors/registry/ui/core/organisms/ui-entity-list.orb +8 -21
  118. package/dist/behaviors/registry/ui/core/organisms/ui-entity-table.orb +0 -13
  119. package/dist/behaviors/registry/ui/core/organisms/ui-timeline.orb +0 -13
  120. package/dist/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +4 -4
  121. package/dist/behaviors/registry/ui/game/molecules/std-worldmap-board-2d.orb +6 -9
  122. package/dist/behaviors/registry/ui/game/organisms/ui-boardgame-board.orb +4 -4
  123. package/dist/behaviors/registry/ui/game/organisms/ui-builder-board.orb +4 -4
  124. package/dist/behaviors/registry/ui/game/organisms/ui-debugger-board.orb +12 -12
  125. package/dist/behaviors/registry/ui/game/organisms/ui-physics-sandbox-board.orb +19 -19
  126. package/dist/behaviors/registry/ui/game/organisms/ui-roguelike-board.orb +1 -1
  127. package/dist/behaviors/registry/ui/game/organisms/ui-sequencer-board.orb +2 -2
  128. package/dist/behaviors/registry/ui/learning/atoms/std-algo-heapsort.orb +8 -8
  129. package/dist/behaviors-embeddings.json +568 -496
  130. package/dist/behaviors-registry.json +7518 -3936
  131. package/dist/index.d.ts +1 -1
  132. package/dist/index.js +3094 -2582
  133. package/dist/knob-embeddings.json +1 -1
  134. package/dist/registry/factory-signatures.json +11531 -2142
  135. package/package.json +2 -2
@@ -0,0 +1,106 @@
1
+ app std-weight-validator "1.0.0"
2
+ "std-weight-validator — a constraint-checking atom for model weights, applying the same discipline as the zero-warning validator to weights: constrained and checked, not trusted (Almadar_Intelligence_Ladder.md §7.5). Checks a candidate weight tensor against three pure predicate constraints — magnitude bounds (every element's absolute value must clear maxMagnitude), forbidden regions (excluded [min,max] bands no weight may land in even within the magnitude bound), and a regression threshold against a baseline tensor (per-element drift must not exceed regressionThreshold; 0 disables the check) — and reports every violated check with its detail. Emits WEIGHTS_ACCEPTED when all three checks clear, or WEIGHTS_REJECTED carrying the full violations list otherwise. Pure circuit logic: predicates and comparisons only, no ML compute, no model call."
3
+
4
+ type Range = { min: float!, max: float! }
5
+
6
+ orbital MlWeightValidatorOrbital {
7
+
8
+ entity WeightValidation [runtime] {
9
+ weights : [float] = []
10
+ baseline : [float] = []
11
+ violations : [object] = []
12
+ valid : boolean = false
13
+ status : "idle" | "checked" = idle
14
+ }
15
+
16
+ trait WeightValidatorRun -> WeightValidation [lifecycle, instance] {
17
+ initial: idle
18
+
19
+ config {
20
+ maxMagnitude : float = 10
21
+ @label "Max weight magnitude"
22
+ @description "Every weight's absolute value must not exceed this bound"
23
+ @tier "policy"
24
+ forbiddenRegions : [Range] = []
25
+ @label "Forbidden regions"
26
+ @description "Value ranges no weight may fall inside, even within the magnitude bound"
27
+ @tier "domain"
28
+ regressionThreshold : float = 0
29
+ @label "Regression threshold"
30
+ @description "Max allowed per-element absolute drift between candidate and baseline weights; 0 disables the regression check"
31
+ @tier "policy"
32
+ }
33
+
34
+ state idle {
35
+ INIT -> idle
36
+ (set @entity.weights [])
37
+ (set @entity.baseline [])
38
+ (set @entity.violations [])
39
+ (set @entity.valid false)
40
+ (set @entity.status idle)
41
+
42
+ VALIDATE_WEIGHTS -> checked
43
+ (let ((cand ?weights)
44
+ (base ?baseline)
45
+ (magnitudeHits (array/filter @cand (fn w (> (math/abs @w) @config.maxMagnitude))))
46
+ (regionHits (array/filter @cand (fn w (array/some @config.forbiddenRegions (fn r (and (>= @w @r.min) (<= @w @r.max)))))))
47
+ (regressionHits (if (> @config.regressionThreshold 0)
48
+ (array/filter (array/range 0 (array/len @cand))
49
+ (fn i (> (math/abs (- (array/nth @cand @i) (array/nth @base @i))) @config.regressionThreshold)))
50
+ []))
51
+ (violations (array/concat
52
+ (array/map @magnitudeHits (fn w { check: "magnitude", value: @w }))
53
+ (array/map @regionHits (fn w { check: "forbidden-region", value: @w }))
54
+ (array/map @regressionHits (fn i { check: "regression", index: @i })))))
55
+ (do
56
+ (set @entity.weights @cand)
57
+ (set @entity.baseline @base)
58
+ (set @entity.violations @violations)
59
+ (if (== (array/len @violations) 0)
60
+ (do
61
+ (set @entity.valid true)
62
+ (set @entity.status checked)
63
+ (emit WEIGHTS_ACCEPTED { weights: @cand }))
64
+ (do
65
+ (set @entity.valid false)
66
+ (set @entity.status checked)
67
+ (emit WEIGHTS_REJECTED { violations: @violations, request: ?request })))))
68
+ }
69
+
70
+ state checked {
71
+ INIT -> checked
72
+ (set @entity.status checked)
73
+ RESET -> idle
74
+ (set @entity.weights [])
75
+ (set @entity.baseline [])
76
+ (set @entity.violations [])
77
+ (set @entity.valid false)
78
+ (set @entity.status idle)
79
+ }
80
+
81
+ emits {
82
+ WEIGHTS_ACCEPTED -> external {
83
+ weights : [float]!
84
+ }
85
+ @description "All constraint checks passed — magnitude bounds, forbidden regions, and regression are all clear"
86
+ @tier "primary"
87
+
88
+ WEIGHTS_REJECTED -> external {
89
+ violations : [object]!
90
+ request : object
91
+ }
92
+ @description "At least one constraint check failed; violations lists every failing check with its detail (magnitude, forbidden-region, or regression). request echoes the originating request untouched so the next rung can project its own inputs out of it"
93
+ @tier "primary"
94
+ }
95
+
96
+ listens {
97
+ VALIDATE_WEIGHTS {
98
+ weights : [float]!
99
+ baseline : [float]
100
+ request : object
101
+ }
102
+ }
103
+ }
104
+
105
+ page "/ml-weight-validator" as MlWeightValidatorPage -> WeightValidatorRun
106
+ }
@@ -43,6 +43,7 @@ orbital AppLayoutOrbital {
43
43
  searchEvent: @config.searchEvent
44
44
  topBarActions: @config.topBarActions
45
45
  type: @config.layoutPattern
46
+ user: (if @config.viewerName { avatar: @config.viewerAvatar, email: @config.viewerEmail, name: @config.viewerName } null)
46
47
  }]
47
48
  })
48
49
  AppLayoutStateLoaded -> composing
@@ -94,6 +95,19 @@ orbital AppLayoutOrbital {
94
95
  @description "Name shown in the top-left of the chrome header."
95
96
  @synonyms "app title, product name, brand name, application name, site name"
96
97
  @tier "presentation"
98
+ viewerName : string = ""
99
+ @label "Who is signed in"
100
+ @description "Display name of the signed-in viewer, shown in the app bar's account menu — typically @user.name. Blank renders no account menu, so people can see which account (and which persona) they are viewing the app as only when it is actually known."
101
+ @synonyms "signed in user, current user, account, profile, persona, who am i"
102
+ @tier "presentation"
103
+ viewerEmail : string = ""
104
+ @label "Signed-in email"
105
+ @description "Email shown under the name in the account menu — typically @user.email."
106
+ @tier "presentation"
107
+ viewerAvatar : string = ""
108
+ @label "Signed-in avatar"
109
+ @description "Avatar image URL for the account menu."
110
+ @tier "presentation"
97
111
  navItems : [NavItem] = []
98
112
  @label "Which sections appear in the sidebar?"
99
113
  @description "Top-level navigation links shown on the left rail."
@@ -11,7 +11,7 @@ orbital BillableHourOrbital {
11
11
  workerName : string @description "The name of the worker associated with the time entry." @synonyms "employee, staff, personnel" = ""
12
12
  matterId : string @description "Unique identifier for the associated case or project." @synonyms "caseId, projectID, reference" = ""
13
13
  projectId : string @description "Identifier for the project associated with the time entry." @synonyms "project, task, reference" = ""
14
- workDate : string! @description "The date on which the work was performed." @synonyms "date, transaction date, service date"
14
+ workDate : date! @description "The date on which the work was performed." @synonyms "date, transaction date, service date"
15
15
  hours : number @description "The quantity of time recorded." @synonyms "duration, time, amount" = 0
16
16
  rate : number @description "The hourly charge for the work performed." @synonyms "price, cost, amount" = 0
17
17
  description : string @description "A textual explanation of the hour entry." @synonyms "explanation, notes, details, comment" = ""
@@ -18,11 +18,11 @@ orbital SignatureSessionOrbital {
18
18
  documentId : string! @description "Unique identifier for the associated document." @synonyms "fileID, docID, documentReference"
19
19
  documentName : string @description "The name of the document associated with the signature request." @synonyms "filename, document, file" = ""
20
20
  recipientName : string! @description "The name of the recipient for the signature request." @synonyms "recipient, name, user"
21
- recipientEmail : string! @description "The email address of the recipient." @synonyms "email, address, contact"
21
+ recipientEmail : email! @description "The email address of the recipient." @synonyms "email, address, contact"
22
22
  requesterName : string @description "The name of the user initiating the signature request." @synonyms "initiator, sender, originator" = ""
23
23
  status : "draft" | "sent" | "viewed" | "signed" | "declined" @description "Current state of the signature request." @synonyms "state, condition, stage" = draft
24
- sentAt : string @description "Timestamp indicating when the request was sent." @synonyms "sent date, submission time, dispatched" = ""
25
- signedAt : string @description "The date and time the signature was applied." @synonyms "signed date, completion date, signature time" = ""
24
+ sentAt : datetime @description "Timestamp indicating when the request was sent." @synonyms "sent date, submission time, dispatched"
25
+ signedAt : datetime @description "The date and time the signature was applied." @synonyms "signed date, completion date, signature time"
26
26
  pendingId : string @description "Unique identifier for a pending action or task." @synonyms "taskId, pendingKey, referenceId" = ""
27
27
  }
28
28
 
@@ -10,11 +10,11 @@ orbital ESignRequestOrbital {
10
10
  documentId : string! @description "Unique identifier for the associated document." @synonyms "document reference, file ID"
11
11
  documentName : string @description "The name of the document being requested for signature." @synonyms "filename, document title, file name" = ""
12
12
  recipientName : string! @description "The name of the recipient for the e-signature request." @synonyms "recipient, name, user"
13
- recipientEmail : string! @description "The email address of the recipient." @synonyms "email, address, contact"
13
+ recipientEmail : email! @description "The email address of the recipient." @synonyms "email, address, contact"
14
14
  status : "draft" | "sent" | "viewed" | "signed" | "declined" | "expired" @description "The current stage of the request lifecycle." @synonyms "state, condition, phase" = draft
15
- sentAt : string @description "Timestamp indicating when the request was sent." @synonyms "sent date, send time, dispatched at" = ""
16
- signedAt : string @description "Timestamp indicating when the request was signed." @synonyms "signed date, signature date, completion date" = ""
17
- expiresAt : string @description "The date and time when the request is no longer valid." @synonyms "expiration, expiry, due date" = ""
15
+ sentAt : datetime @description "Timestamp indicating when the request was sent." @synonyms "sent date, send time, dispatched at"
16
+ signedAt : datetime @description "Timestamp indicating when the request was signed." @synonyms "signed date, signature date, completion date"
17
+ expiresAt : datetime @description "The date and time when the request is no longer valid." @synonyms "expiration, expiry, due date"
18
18
  notes : string @description "Free-text comments or additional information." @synonyms "comment, remark, description, details" = ""
19
19
  }
20
20
 
@@ -22,14 +22,14 @@ orbital EventLogOrbital {
22
22
  title : string @description "The descriptive name or heading for the event log." @synonyms "heading, label, name" = ""
23
23
  description : string @description "A human-readable explanation of the event." @synonyms "text, details, explanation, summary" = ""
24
24
  kind : "created" | "updated" | "approved" | "rejected" @description "The type of event being logged." @synonyms "event type, event category, kind, status" = created
25
- date : string @description "The timestamp associated with the event." @synonyms "timestamp, time, occurred" = ""
25
+ date : date @description "The timestamp associated with the event." @synonyms "timestamp, time, occurred"
26
26
  allEntries : [LogEntry] @description "An array of log entry objects." @synonyms "entries, records, items, data" = []
27
27
  entries : [LogEntry] @description "A list of log entries, each with associated data." @synonyms "records, items, data, events" = []
28
28
  filterChips : [FilterChip] @description "Represents selectable filter options for event categories." @synonyms "filters, categories, types, selections" = []
29
29
  filterKind : string @description "The type of filter currently applied to the event log." @synonyms "filter, category, type" = ""
30
30
  backfillTitle : string @description "A descriptive title for a manually added event." @synonyms "manual title, user-provided title, custom title" = ""
31
31
  backfillDescription : string @description "A textual explanation for the event backfill process." @synonyms "explanation, details, notes, information" = ""
32
- backfillDate : string @description "The date and time when the event was manually added." @synonyms "timestamp, entered date, manual date" = ""
32
+ backfillDate : date @description "The date and time when the event was manually added." @synonyms "timestamp, entered date, manual date"
33
33
  backfillKind : string @description "Specifies the category or type of the manually added event." @synonyms "event type, category, kind" = ""
34
34
  errorMessage : string @description "A human-readable message indicating an error condition." @synonyms "error, error message, problem, issue" = ""
35
35
  }
@@ -17,7 +17,7 @@ orbital StoredFileOrbital {
17
17
  uploaderId : string @description "Identifier of the user who uploaded the file." @synonyms "user, owner, creator" = ""
18
18
  uploaderName : string @description "The name of the user who uploaded the file." @synonyms "owner, user, author" = ""
19
19
  folder : string @description "The path to the containing directory." @synonyms "parent, directory, location" = ""
20
- uploadedAt : string @description "Timestamp indicating when the file was uploaded." @synonyms "upload date, date uploaded, upload time" = ""
20
+ uploadedAt : datetime @description "Timestamp indicating when the file was uploaded." @synonyms "upload date, date uploaded, upload time"
21
21
  isArchived : boolean @description "Indicates whether the file is archived." @synonyms "archived, status, state" = false
22
22
  }
23
23
 
@@ -18,7 +18,7 @@ orbital GalleryItemOrbital {
18
18
  description : string @description "A brief textual summary of the item's content." @synonyms "caption, summary, details, notes"
19
19
  status : "active" | "inactive" | "pending" @description "Indicates the current state of the item." @synonyms "state, condition, flag" = active
20
20
  createdAt : string
21
- imageUrl : string @description "The URL pointing to the image resource." @synonyms "image, src, path" = "https://picsum.photos/seed/gallery/800/600"
21
+ imageUrl : image @description "The URL pointing to the image resource." @synonyms "image, src, path" = "https://picsum.photos/seed/gallery/800/600"
22
22
  }
23
23
 
24
24
  trait LoadingSpinner = Spinner.traits.SpinnerRender -> GalleryItem {
@@ -11,7 +11,7 @@ orbital UploadedImageOrbital {
11
11
 
12
12
  entity UploadedImage [persistent: uploadedimages] {
13
13
  id : string!
14
- url : string! @description "The accessible address for retrieving the image data." @synonyms "link, path, address"
14
+ url : url! @description "The accessible address for retrieving the image data." @synonyms "link, path, address"
15
15
  name : string @description "The filename or identifier for the uploaded image." @synonyms "filename, originalName, identifier"
16
16
  sizeBytes : number @description "The file size in bytes." @synonyms "length, filesize, bytes"
17
17
  mimeType : string @description "The file's internet media type." @synonyms "type, format, media type"
@@ -19,7 +19,7 @@ orbital UploadedImageOrbital {
19
19
  height : number @description "The vertical dimension of the image, in pixels." @synonyms "vertical, y, dimension"
20
20
  parentId : string @description "Identifier of the parent resource this image belongs to." @synonyms "parent, reference, source"
21
21
  parentType : string @description "Identifies the type of the parent entity." @synonyms "parent, type, category"
22
- uploadedAt : string @description "Timestamp indicating when the image was uploaded." @synonyms "date, timestamp, upload time"
22
+ uploadedAt : datetime @description "Timestamp indicating when the image was uploaded." @synonyms "date, timestamp, upload time"
23
23
  }
24
24
 
25
25
  trait UploadedImageUpload -> UploadedImage [interaction, collection] {
@@ -0,0 +1,132 @@
1
+ app std-import "1.0.0"
2
+ "std-import — a dropdown source menu (Paste text / Markdown files defaults; caller can override via config.sources) plus the OS file picker for file-kind sources. Emits IMPORT_REQUESTED { source, files } on the bus — source is the picked SourceOption descriptor; files carries file metadata when the picker ran (empty otherwise). The actual import work is delegated to a sibling std-migration-job, which listens for IMPORT_REQUESTED and drives the migration service. Mirrors std-export: the menu emits each entry's own literal event field, so overriding the event alone does not retarget the click — also set sources[].event to match."
3
+ orbital ImportOrbital {
4
+ uses Button from "std/behaviors/ui-button"
5
+ uses Menu from "std/behaviors/ui-menu"
6
+
7
+ type SourceOption = { id : string!, kind : string!, label : string!, event : string }
8
+
9
+ entity ImportPanel [runtime] {
10
+ id : string!
11
+ pendingSource : object = {}
12
+ pendingFiles : [object] = []
13
+ }
14
+
15
+ trait Button1 = Button.traits.ButtonRender -> ImportPanel {
16
+ config {
17
+ action: OPEN_IMPORT
18
+ icon: upload
19
+ label: @config.buttonLabel
20
+ size: sm
21
+ variant: ghost
22
+ }
23
+ }
24
+
25
+ trait Menu1 = Menu.traits.MenuRender -> ImportPanel {
26
+ config {
27
+ items: @config.sources
28
+ position: bottom-start
29
+ trigger: [@trait.Button1]
30
+ }
31
+ }
32
+
33
+ trait ImportMenu -> ImportPanel [interaction, instance] {
34
+ initial: idle
35
+
36
+ state idle {
37
+ INIT -> idle
38
+ (render-ui main { children: [@trait.Menu1], type: box })
39
+ OPEN_IMPORT -> idle
40
+ IMPORT_SOURCE_PICKED -> picking when (== (object/get (array/find @config.sources (fn s (== (object/get @s id) ?itemId))) kind "") "file")
41
+ (set @entity.pendingSource (array/find @config.sources (fn s (== (object/get @s id) ?itemId))))
42
+ (browser/open-file-picker { accept: @config.accept, multiple: true }
43
+ { emit: { success: FILES_PICKED, failure: PICK_FAILED } })
44
+ IMPORT_SOURCE_PICKED -> idle when (!= (object/get (array/find @config.sources (fn s (== (object/get @s id) ?itemId))) kind "") "file")
45
+ (set @entity.pendingSource (array/find @config.sources (fn s (== (object/get @s id) ?itemId))))
46
+ (emit IMPORT_REQUESTED { files: @entity.pendingFiles, source: @entity.pendingSource })
47
+ ;; Self-loops on the external emits so the validator sees in-atom
48
+ ;; listeners for events consumed by the sibling std-migration-job.
49
+ IMPORT_REQUESTED -> idle
50
+ IMPORT_FAILED -> idle
51
+ }
52
+
53
+ state picking {
54
+ FILES_PICKED -> idle
55
+ (set @entity.pendingFiles (object/get ?result files []))
56
+ (emit IMPORT_REQUESTED { files: @entity.pendingFiles, source: @entity.pendingSource })
57
+ PICK_FAILED -> idle
58
+ (emit IMPORT_FAILED { error: ?error })
59
+ }
60
+
61
+ emits {
62
+ IMPORT_REQUESTED -> external {
63
+ source : object!
64
+ files : [object]
65
+ }
66
+ @description "Requests an import from the picked source. source is the SourceOption descriptor (id/kind/label); files carries picker metadata (name/size/type/lastModified) for file-kind sources, empty otherwise. A sibling std-migration-job listens and drives the run."
67
+ @synonyms "import, upload, migrate, bring in data"
68
+ @tier "domain"
69
+ IMPORT_FAILED -> external {
70
+ error : string!
71
+ }
72
+ @description "The file picker failed or was cancelled at the OS level"
73
+ @synonyms "import error, picker failed"
74
+ @tier "internal"
75
+ FILES_PICKED {
76
+ result : object!
77
+ }
78
+ @description "browser/open-file-picker success envelope — result.files holds the picked file metadata"
79
+ @tier "secondary"
80
+ PICK_FAILED {
81
+ error : string!
82
+ }
83
+ @description "browser/open-file-picker failure signal"
84
+ @tier "secondary"
85
+ }
86
+
87
+ listens {
88
+ IMPORT_SOURCE_PICKED {
89
+ itemId : string!
90
+ label : string!
91
+ }
92
+ @description "A source entry was picked from the menu. itemId matches the SourceOption.id of the picked entry; kind is resolved from config.sources by id."
93
+ @synonyms "source selected, import source chosen"
94
+ @tier "domain"
95
+ }
96
+
97
+ config {
98
+ accept : string = ".md,.markdown,.txt"
99
+ @label "Accepted file types"
100
+ @description "File-extension filter for the OS file picker when a file-kind source is picked"
101
+ @synonyms "file filter, allowed extensions, accepted formats"
102
+ @tier "presentation"
103
+ buttonLabel : string = Import
104
+ @label "Button label"
105
+ @description "Text shown on the toolbar button that opens the import source popover"
106
+ @synonyms "the text on the import trigger button. user phrases: 'rename import button to X' / 'set the button label to X' -> X (e.g. 'Import Data', 'Add Sources')"
107
+ @tier "presentation"
108
+ event : string = IMPORT_SOURCE_PICKED
109
+ @label "Source-picked event"
110
+ @description "Event emitted when the user picks a source. Each entry in sources[] carries its own literal event field (no per-item templating in .lolo) — overriding this alone does not retarget the click; also set sources[].event to match."
111
+ @synonyms "bus event name. internal wiring; users rarely target directly"
112
+ @tier "internal"
113
+ sources : [SourceOption] = [{
114
+ event: IMPORT_SOURCE_PICKED
115
+ id: paste
116
+ kind: paste
117
+ label: "Paste text"
118
+ }, {
119
+ event: IMPORT_SOURCE_PICKED
120
+ id: markdown
121
+ kind: file
122
+ label: "Markdown files"
123
+ }]
124
+ @label "Import sources"
125
+ @description "Sources shown in the import popover. kind 'file' opens the OS file picker before IMPORT_REQUESTED; any other kind emits immediately (the host renders the matching input UI, e.g. a paste textarea)."
126
+ @synonyms "list of import source entries (paste / file / api / database). user phrases: 'only paste' -> keep only the paste entry; 'add database' -> append a database entry"
127
+ @tier "presentation"
128
+ }
129
+ }
130
+
131
+ page "/imports/menu" as ImportMenuPage -> ImportMenu, Button1, Menu1
132
+ }
@@ -16,18 +16,18 @@ orbital RecurrenceOrbital {
16
16
  id : string!
17
17
  title : string @description "A short, user-friendly name for the recurrence." @synonyms "label, heading, name" = ""
18
18
  notes : string @description "Free-form text providing additional information or context." @synonyms "comment, remark, description, details" = ""
19
- date : string @description "The date associated with this occurrence." @synonyms "due date, scheduled date, run date" = ""
19
+ date : date @description "The date associated with this occurrence." @synonyms "due date, scheduled date, run date"
20
20
  occurrences : [OccurrenceItem] @description "A list of scheduled event instances." @synonyms "events, instances, schedules, runs" = []
21
21
  frequency : "daily" | "weekly" | "monthly" | "yearly" @description "How often the recurrence happens." @synonyms "period, repeat, schedule" = weekly
22
22
  interval : number @description "The number of time units between occurrences." @synonyms "period, repetition, spacing" = 1
23
- startDate : string @description "The date when the recurrence begins." @synonyms "start date, begin date, initial date" = ""
24
- endDate : string @description "The date when the recurrence ends." @synonyms "end date, termination date, final date" = ""
23
+ startDate : date @description "The date when the recurrence begins." @synonyms "start date, begin date, initial date"
24
+ endDate : date @description "The date when the recurrence ends." @synonyms "end date, termination date, final date"
25
25
  endAfterCount : number @description "The number of occurrences after which the recurrence ends." @synonyms "count, limit, total" = 0
26
26
  summaryText : string @description "A human-readable summary of the recurrence rule." @synonyms "description, rule summary, explanation" = ""
27
27
  currentOccurrenceId : string @description "Unique identifier for the currently active occurrence." @synonyms "occurrence ID, run ID, current run" = ""
28
- currentOccurrenceDate : string @description "The date of the currently active occurrence." @synonyms "occurrence date, current date, run date" = ""
28
+ currentOccurrenceDate : date @description "The date of the currently active occurrence." @synonyms "occurrence date, current date, run date"
29
29
  currentOccurrenceLabel : string @description "A human-readable label for the current occurrence." @synonyms "current run, present instance, now" = ""
30
- rescheduleDate : string @description "The date to which the recurrence is rescheduled." @synonyms "new date, replacement date, revised date" = ""
30
+ rescheduleDate : date @description "The date to which the recurrence is rescheduled." @synonyms "new date, replacement date, revised date"
31
31
  skipReason : string @description "Reason provided when skipping a scheduled occurrence." @synonyms "rationale, explanation, justification" = ""
32
32
  errorMessage : string @description "Error message displayed to the user." @synonyms "error, message, problem" = ""
33
33
  }
@@ -17,7 +17,7 @@ orbital SavedSearchOrbital {
17
17
  alertEnabled : boolean @description "Indicates whether alerts are enabled for this saved search." @synonyms "enabled, active, notification status" = false
18
18
  alertFrequency : "instant" | "daily" | "weekly" @description "How often alerts are triggered." @synonyms "frequency, interval, recurrence" = daily
19
19
  userId : string @description "Identifier of the user who created the saved search." @synonyms "creator, owner, user_id"
20
- lastNotifiedAt : string @description "Timestamp of the last notification sent." @synonyms "last_notification, notified_at, last_alert"
20
+ lastNotifiedAt : datetime @description "Timestamp of the last notification sent." @synonyms "last_notification, notified_at, last_alert"
21
21
  createdAt : string
22
22
  }
23
23
 
@@ -15,7 +15,7 @@ orbital SignatureCaptureOrbital {
15
15
  targetType : string! @description "Specifies the type of target associated with the signature." @synonyms "type, kind, category"
16
16
  signerName : string! @description "The name of the person providing the signature." @synonyms "name, user, person"
17
17
  signatureDataUrl : string! @description "Encoded signature image data, typically a data URL." @synonyms "signature image, image data, signature representation"
18
- signedAt : string @description "Timestamp indicating when the signature was captured." @synonyms "date, time, timestamp"
18
+ signedAt : datetime @description "Timestamp indicating when the signature was captured." @synonyms "date, time, timestamp"
19
19
  ipAddress : string @description "The client's IP address during signature capture." @synonyms "client IP, source IP, originating IP"
20
20
  }
21
21
 
@@ -305,7 +305,7 @@ orbital StatsItemOrbital {
305
305
  }]
306
306
  look: elevated
307
307
  padding: lg
308
- type: card
308
+ type: "card"
309
309
  }]
310
310
  className: "relative w-full rounded-xl shadow-lg overflow-hidden"
311
311
  direction: vertical
@@ -56,7 +56,7 @@ orbital TagTaxonomyOrbital {
56
56
  children: [{
57
57
  align: center
58
58
  children: [{
59
- name: tag
59
+ name: "tag"
60
60
  size: sm
61
61
  type: icon
62
62
  }, {
@@ -168,7 +168,7 @@ orbital TagTaxonomyOrbital {
168
168
  children: [{
169
169
  align: center
170
170
  children: [{
171
- name: tag
171
+ name: "tag"
172
172
  size: sm
173
173
  type: icon
174
174
  }, {
@@ -266,7 +266,7 @@ orbital TagTaxonomyOrbital {
266
266
  children: [{
267
267
  align: center
268
268
  children: [{
269
- name: tag
269
+ name: "tag"
270
270
  size: sm
271
271
  type: icon
272
272
  }, {
@@ -106,8 +106,6 @@ orbital DataGridOrbital {
106
106
  look: @config.look
107
107
  type: data-grid
108
108
  })
109
- VIEW -> idle
110
- (emit VIEW {})
111
109
  }
112
110
 
113
111
  emits {
@@ -122,8 +122,6 @@ orbital DataListOrbital {
122
122
  look: @config.look
123
123
  type: data-list
124
124
  })
125
- VIEW -> idle
126
- (emit VIEW {})
127
125
  }
128
126
 
129
127
  emits {
@@ -0,0 +1,96 @@
1
+ app ui-import-preview-tree "1.0.0"
2
+ "ImportPreviewTree — UI factory (1:1 with the @almadar/ui import-preview-tree pattern)."
3
+ orbital ImportPreviewTreeOrbital {
4
+ type ImportPreviewTreeUnitsItem = {
5
+ ref : string!
6
+ targetEntity : string!
7
+ fields : Map string json!
8
+ parentRef : string
9
+ }
10
+ type ImportPreviewTreeSkippedItem = {
11
+ ref : string!
12
+ reason : string!
13
+ }
14
+ type ImportPreviewTreeEntityDisplayValue = {
15
+ singular : string!
16
+ plural : string!
17
+ }
18
+
19
+ entity ImportPreviewTreeItem [runtime] {
20
+ id : string!
21
+ }
22
+
23
+ trait ImportPreviewTreeRender -> @rebindable ImportPreviewTreeItem [interaction, instance] {
24
+ initial: idle
25
+
26
+ state idle {
27
+ INIT -> idle
28
+ (render-ui main {
29
+ units: @config.units
30
+ skipped: @config.skipped
31
+ entityDisplay: @config.entityDisplay
32
+ onConfirm: @config.onConfirm
33
+ onCancel: @config.onCancel
34
+ confirmLabel: @config.confirmLabel
35
+ cancelLabel: @config.cancelLabel
36
+ indent: @config.indent
37
+ className: @config.className
38
+ type: import-preview-tree
39
+ })
40
+ }
41
+
42
+ emits {
43
+ @config.onConfirm -> external {
44
+ id : string
45
+ }
46
+ @description "Called when the user confirms the staged import"
47
+ @tier "essential"
48
+ @config.onCancel -> external {
49
+ id : string
50
+ }
51
+ @description "Called when the user cancels the staged import"
52
+ @tier "essential"
53
+ }
54
+
55
+ config {
56
+ units : [ImportPreviewTreeUnitsItem] = [{ ref: "Ref", targetEntity: "Target Entity", fields: {}, parentRef: "Parent Ref" }, { ref: "Ref 2", targetEntity: "Target Entity 2", fields: {}, parentRef: "Parent Ref 2" }]
57
+ @label "Units"
58
+ @description "Staged units to preview"
59
+ @tier "presentation"
60
+ skipped : [ImportPreviewTreeSkippedItem] = []
61
+ @label "Skipped"
62
+ @description "Elements skipped during extraction, with reasons"
63
+ @tier "presentation"
64
+ entityDisplay : Map string ImportPreviewTreeEntityDisplayValue = { item: { singular: "Singular", plural: "Plural" } }
65
+ @label "Entity Display"
66
+ @description "Entity name → display labels; falls back to the entity name"
67
+ @tier "presentation"
68
+ onConfirm : string = "CONFIRM"
69
+ @label "On Confirm"
70
+ @description "Called when the user confirms the staged import"
71
+ @tier "presentation"
72
+ onCancel : string = "CANCEL"
73
+ @label "On Cancel"
74
+ @description "Called when the user cancels the staged import"
75
+ @tier "presentation"
76
+ confirmLabel : string = "Confirm import"
77
+ @label "Confirm Label"
78
+ @description "Confirm button label"
79
+ @tier "presentation"
80
+ cancelLabel : string = Cancel
81
+ @label "Cancel Label"
82
+ @description "Cancel button label"
83
+ @tier "presentation"
84
+ indent : number = 16
85
+ @label "Indent"
86
+ @description "Indent per tree depth in px (default: 16)"
87
+ @tier "presentation"
88
+ className : string
89
+ @label "Class Name"
90
+ @description "Additional CSS classes"
91
+ @tier "presentation"
92
+ }
93
+ }
94
+
95
+ page "/import-preview-tree" as ImportPreviewTreePage -> ImportPreviewTreeRender
96
+ }
@@ -0,0 +1,49 @@
1
+ app ui-import-progress "1.0.0"
2
+ "ImportProgress — UI factory (1:1 with the @almadar/ui import-progress pattern)."
3
+ orbital ImportProgressOrbital {
4
+ type ImportProgressCounts = {
5
+ staged : number
6
+ committed : number
7
+ failed : number
8
+ }
9
+
10
+ entity ImportProgressItem [runtime] {
11
+ id : string!
12
+ }
13
+
14
+ trait ImportProgressRender -> @rebindable ImportProgressItem [interaction, instance] {
15
+ initial: idle
16
+
17
+ state idle {
18
+ INIT -> idle
19
+ (render-ui main {
20
+ step: @config.step
21
+ counts: @config.counts
22
+ labels: @config.labels
23
+ className: @config.className
24
+ type: import-progress
25
+ })
26
+ }
27
+
28
+ config {
29
+ step : "fetching" | "mapping" | "reviewing" | "committing" | "done" | "failed" = fetching
30
+ @label "Step"
31
+ @description "Current lifecycle step"
32
+ @tier "presentation"
33
+ counts : ImportProgressCounts
34
+ @label "Counts"
35
+ @description "Unit counts"
36
+ @tier "presentation"
37
+ labels : Map string string = { item: "Item" }
38
+ @label "Labels"
39
+ @description "Step label overrides"
40
+ @tier "presentation"
41
+ className : string
42
+ @label "Class Name"
43
+ @description "Additional CSS classes"
44
+ @tier "presentation"
45
+ }
46
+ }
47
+
48
+ page "/import-progress" as ImportProgressPage -> ImportProgressRender
49
+ }