@rubytech/create-maxy 1.0.762 → 1.0.763

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy",
3
- "version": "1.0.762",
3
+ "version": "1.0.763",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy": "./dist/index.js"
@@ -802,6 +802,56 @@ FOR (tc:ToolCall) REQUIRE tc.callId IS UNIQUE;
802
802
  CREATE INDEX tool_call_account_started IF NOT EXISTS
803
803
  FOR (tc:ToolCall) ON (tc.accountId, tc.startedAt);
804
804
 
805
+ // ----------------------------------------------------------
806
+ // Component — Task 815 admin-resume rehydration.
807
+ //
808
+ // Every render-component event emitted on an assistant turn
809
+ // produces one Component node linked to its parent Message via
810
+ // (Message)-[:HAS_COMPONENT]->(Component). The agent's narrative
811
+ // text stays on Message.content; component name + data JSON +
812
+ // position-relative-to-text live here. Sibling-node design (not
813
+ // JSON-on-Message) avoids Neo4j's 128KB property soft-limit when
814
+ // document-editor bodies are large.
815
+ //
816
+ // Atomicity: persisted in the same Cypher transaction as the
817
+ // parent Message — no orphan Component possible. Reader is a
818
+ // single round-trip via OPTIONAL MATCH + collect (sort-before-
819
+ // collect: WITH m, c ORDER BY c.ordinal ASC, then collect).
820
+ //
821
+ // Properties:
822
+ // componentId — UUID, primary key
823
+ // conversationId / accountId / messageId — denormalised for
824
+ // account-scoped reads and cross-account isolation audits
825
+ // name — component name (document-editor, action-buttons,
826
+ // single-select, etc.)
827
+ // data — JSON-encoded payload string. Validated structurally
828
+ // on read (parseable, non-null object); per-component
829
+ // schema validation lives in validateComponentData.
830
+ // ordinal — 0-indexed sequence within the parent Message,
831
+ // tiebreak for components with the same textOffset.
832
+ // textOffset — length of Message.content at the moment this
833
+ // component arrived in the SSE stream. Reader uses
834
+ // it to interleave text-runs and components when
835
+ // reconstructing events: AdminEvent[].
836
+ // submitted — true once a PERSISTENT_COMPONENT (action-list,
837
+ // document-editor, rich-content-editor, grid-editor)
838
+ // was submitted by the user. Server-side detection
839
+ // of `_componentDone:true` user turns flips this.
840
+ // submittedAt — datetime when submitted=true was set (null otherwise)
841
+ // createdAt — datetime when the component was persisted
842
+ //
843
+ // (:Message)-[:HAS_COMPONENT]->(:Component)
844
+ // ----------------------------------------------------------
845
+
846
+ CREATE CONSTRAINT component_id_unique IF NOT EXISTS
847
+ FOR (c:Component) REQUIRE c.componentId IS UNIQUE;
848
+
849
+ CREATE INDEX component_message IF NOT EXISTS
850
+ FOR (c:Component) ON (c.messageId);
851
+
852
+ CREATE INDEX component_account IF NOT EXISTS
853
+ FOR (c:Component) ON (c.accountId);
854
+
805
855
  // ----------------------------------------------------------
806
856
  // :Trashed — Task 576 soft-delete primitive.
807
857
  //