apexrest 1.2.0 → 1.3.0-beta.1

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 (151) hide show
  1. package/README.md +9 -3
  2. package/README.uk.md +9 -3
  3. package/dist/codex-compat/plugins/apexrest-apex/.codex-plugin/plugin.json +1 -1
  4. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aanalytics%2Fstatus-summary%401.0.0.json +19 -0
  5. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Acrud%2Freport-dialog%401.0.0.json +19 -0
  6. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fdetail%401.0.0.json +19 -0
  7. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Ffiltered-list%401.0.0.json +19 -0
  8. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fhistory%401.0.0.json +19 -0
  9. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fmaster-detail%401.0.0.json +19 -0
  10. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/generator.json +5 -0
  11. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/manifest.json +29 -0
  12. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/analytics/status-summary/1.0.0/block.yaml +59 -0
  13. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/analytics/status-summary/1.0.0/renderer.json +14 -0
  14. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/crud/report-dialog/1.0.0/block.yaml +66 -0
  15. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/crud/report-dialog/1.0.0/renderer.json +14 -0
  16. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/detail/1.0.0/block.yaml +59 -0
  17. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/detail/1.0.0/renderer.json +14 -0
  18. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/filtered-list/1.0.0/block.yaml +59 -0
  19. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/filtered-list/1.0.0/renderer.json +14 -0
  20. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/history/1.0.0/block.yaml +59 -0
  21. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/history/1.0.0/renderer.json +14 -0
  22. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/master-detail/1.0.0/block.yaml +59 -0
  23. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/master-detail/1.0.0/renderer.json +14 -0
  24. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/profiles.json +10 -0
  25. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/revocations.json +1 -0
  26. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/crm.yaml +172 -0
  27. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/index.json +12 -0
  28. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/service-desk.yaml +120 -0
  29. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/index.html +7 -0
  30. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.js +234 -2
  31. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-allocation.schema.json +33 -0
  32. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-block.schema.json +208 -0
  33. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-blueprint.schema.json +664 -0
  34. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-command.schema.json +106 -0
  35. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-contract.schema.json +174 -0
  36. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-diagnostic.schema.json +26 -0
  37. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-entity.schema.json +141 -0
  38. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-evidence.schema.json +95 -0
  39. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-field.schema.json +53 -0
  40. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-instance.schema.json +117 -0
  41. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-lock.schema.json +54 -0
  42. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-operation.schema.json +55 -0
  43. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-owner.schema.json +105 -0
  44. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-parameters.schema.json +61 -0
  45. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-plan.schema.json +1010 -0
  46. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-renderer.schema.json +69 -0
  47. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-state.schema.json +146 -0
  48. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/deploy-plan.schema.json +760 -169
  49. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/operations.schema.json +486 -0
  50. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/project.schema.json +13 -0
  51. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/sync-state.schema.json +238 -0
  52. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__yaml__LICENSE +13 -0
  53. package/dist/codex-compat/plugins/apexrest-apex/runtime/apexrest.mjs +21 -11
  54. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-2BBNJVKW.mjs +1996 -0
  55. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-HOKFFGSZ.mjs → chunk-33GE2NWZ.mjs} +1 -1
  56. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-5JI3XEAK.mjs +14 -0
  57. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-2ZUNLCLK.mjs → chunk-BAHECVGO.mjs} +30 -10
  58. package/dist/{runtime/chunk-SPZVXAM5.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-CYPFCUNE.mjs} +7 -4
  59. package/dist/{runtime/chunk-3MDDJFXN.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-EBBEN4AV.mjs} +29 -6
  60. package/dist/{runtime/chunk-NDZ2RWQU.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-ESDVN7DS.mjs} +3 -2
  61. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-AQZLLQ3D.mjs → chunk-FTTPESNK.mjs} +2 -2
  62. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-S24BD6PY.mjs → chunk-G3KR57BY.mjs} +1 -1
  63. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-TXVQLYTH.mjs → chunk-HKJVCGQQ.mjs} +118 -87
  64. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-WK5GP4ES.mjs → chunk-KQ5IDT7Z.mjs} +2 -2
  65. package/dist/{runtime/chunk-7RZW5QV2.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-RWGJITHZ.mjs} +5 -5
  66. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-IX6V6ZGW.mjs → chunk-WXP75UUP.mjs} +5 -5
  67. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-YPLIIQ4Y.mjs +10233 -0
  68. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-QIVPMPU3.mjs → chunk-YQHHPRJH.mjs} +1 -1
  69. package/dist/codex-compat/plugins/apexrest-apex/runtime/mcp.mjs +7 -7
  70. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/SKILL.md +1 -1
  71. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/SKILL.md +18 -0
  72. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/agents/openai.yaml +4 -0
  73. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/references/workflow.md +15 -0
  74. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/SKILL.md +3 -1
  75. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/SKILL.md +3 -1
  76. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/references/cli-catalog.md +8 -1
  77. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/SKILL.md +2 -0
  78. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/SKILL.md +3 -1
  79. package/dist/resources/blocks/evidence/block%3Aanalytics%2Fstatus-summary%401.0.0.json +19 -0
  80. package/dist/resources/blocks/evidence/block%3Acrud%2Freport-dialog%401.0.0.json +19 -0
  81. package/dist/resources/blocks/evidence/block%3Aread%2Fdetail%401.0.0.json +19 -0
  82. package/dist/resources/blocks/evidence/block%3Aread%2Ffiltered-list%401.0.0.json +19 -0
  83. package/dist/resources/blocks/evidence/block%3Aread%2Fhistory%401.0.0.json +19 -0
  84. package/dist/resources/blocks/evidence/block%3Aread%2Fmaster-detail%401.0.0.json +19 -0
  85. package/dist/resources/blocks/generator.json +5 -0
  86. package/dist/resources/blocks/manifest.json +29 -0
  87. package/dist/resources/blocks/packages/analytics/status-summary/1.0.0/block.yaml +59 -0
  88. package/dist/resources/blocks/packages/analytics/status-summary/1.0.0/renderer.json +14 -0
  89. package/dist/resources/blocks/packages/crud/report-dialog/1.0.0/block.yaml +66 -0
  90. package/dist/resources/blocks/packages/crud/report-dialog/1.0.0/renderer.json +14 -0
  91. package/dist/resources/blocks/packages/read/detail/1.0.0/block.yaml +59 -0
  92. package/dist/resources/blocks/packages/read/detail/1.0.0/renderer.json +14 -0
  93. package/dist/resources/blocks/packages/read/filtered-list/1.0.0/block.yaml +59 -0
  94. package/dist/resources/blocks/packages/read/filtered-list/1.0.0/renderer.json +14 -0
  95. package/dist/resources/blocks/packages/read/history/1.0.0/block.yaml +59 -0
  96. package/dist/resources/blocks/packages/read/history/1.0.0/renderer.json +14 -0
  97. package/dist/resources/blocks/packages/read/master-detail/1.0.0/block.yaml +59 -0
  98. package/dist/resources/blocks/packages/read/master-detail/1.0.0/renderer.json +14 -0
  99. package/dist/resources/blocks/profiles.json +10 -0
  100. package/dist/resources/blocks/revocations.json +1 -0
  101. package/dist/resources/blueprints/crm.yaml +172 -0
  102. package/dist/resources/blueprints/index.json +12 -0
  103. package/dist/resources/blueprints/service-desk.yaml +120 -0
  104. package/dist/resources/panel/index.html +7 -0
  105. package/dist/resources/panel/panel.js +234 -2
  106. package/dist/resources/schemas/composer-allocation.schema.json +33 -0
  107. package/dist/resources/schemas/composer-block.schema.json +208 -0
  108. package/dist/resources/schemas/composer-blueprint.schema.json +664 -0
  109. package/dist/resources/schemas/composer-command.schema.json +106 -0
  110. package/dist/resources/schemas/composer-contract.schema.json +174 -0
  111. package/dist/resources/schemas/composer-diagnostic.schema.json +26 -0
  112. package/dist/resources/schemas/composer-entity.schema.json +141 -0
  113. package/dist/resources/schemas/composer-evidence.schema.json +95 -0
  114. package/dist/resources/schemas/composer-field.schema.json +53 -0
  115. package/dist/resources/schemas/composer-instance.schema.json +117 -0
  116. package/dist/resources/schemas/composer-lock.schema.json +54 -0
  117. package/dist/resources/schemas/composer-operation.schema.json +55 -0
  118. package/dist/resources/schemas/composer-owner.schema.json +105 -0
  119. package/dist/resources/schemas/composer-parameters.schema.json +61 -0
  120. package/dist/resources/schemas/composer-plan.schema.json +1010 -0
  121. package/dist/resources/schemas/composer-renderer.schema.json +69 -0
  122. package/dist/resources/schemas/composer-state.schema.json +146 -0
  123. package/dist/resources/schemas/deploy-plan.schema.json +760 -169
  124. package/dist/resources/schemas/operations.schema.json +486 -0
  125. package/dist/resources/schemas/project.schema.json +13 -0
  126. package/dist/resources/schemas/sync-state.schema.json +238 -0
  127. package/dist/resources/third-party/node_modules__yaml__LICENSE +13 -0
  128. package/dist/runtime/apexrest.mjs +21 -11
  129. package/dist/runtime/chunk-2BBNJVKW.mjs +1996 -0
  130. package/dist/runtime/{chunk-HOKFFGSZ.mjs → chunk-33GE2NWZ.mjs} +1 -1
  131. package/dist/runtime/chunk-5JI3XEAK.mjs +14 -0
  132. package/dist/runtime/{chunk-2ZUNLCLK.mjs → chunk-BAHECVGO.mjs} +30 -10
  133. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-SPZVXAM5.mjs → runtime/chunk-CYPFCUNE.mjs} +7 -4
  134. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-3MDDJFXN.mjs → runtime/chunk-EBBEN4AV.mjs} +29 -6
  135. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-NDZ2RWQU.mjs → runtime/chunk-ESDVN7DS.mjs} +3 -2
  136. package/dist/runtime/{chunk-AQZLLQ3D.mjs → chunk-FTTPESNK.mjs} +2 -2
  137. package/dist/runtime/{chunk-S24BD6PY.mjs → chunk-G3KR57BY.mjs} +1 -1
  138. package/dist/runtime/{chunk-TXVQLYTH.mjs → chunk-HKJVCGQQ.mjs} +118 -87
  139. package/dist/runtime/{chunk-WK5GP4ES.mjs → chunk-KQ5IDT7Z.mjs} +2 -2
  140. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-7RZW5QV2.mjs → runtime/chunk-RWGJITHZ.mjs} +5 -5
  141. package/dist/runtime/{chunk-IX6V6ZGW.mjs → chunk-WXP75UUP.mjs} +5 -5
  142. package/dist/runtime/chunk-YPLIIQ4Y.mjs +10233 -0
  143. package/dist/runtime/{chunk-QIVPMPU3.mjs → chunk-YQHHPRJH.mjs} +1 -1
  144. package/dist/runtime/mcp.mjs +7 -7
  145. package/package.json +10 -3
  146. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-4MYHJ2IU.mjs +0 -1208
  147. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-BD2AVCFU.mjs +0 -367
  148. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-YLXJ6H4J.mjs +0 -14
  149. package/dist/runtime/chunk-4MYHJ2IU.mjs +0 -1208
  150. package/dist/runtime/chunk-BD2AVCFU.mjs +0 -367
  151. package/dist/runtime/chunk-YLXJ6H4J.mjs +0 -14
@@ -0,0 +1,59 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "block:read/master-detail",
4
+ "version": "1.0.0",
5
+ "kind": "block",
6
+ "name": "Master-detail read view",
7
+ "aliases": [
8
+ "батько",
9
+ "рядки",
10
+ "master detail"
11
+ ],
12
+ "status": "experimental",
13
+ "license": "Apache-2.0",
14
+ "origin": "apexrest-dev/apexrest-codex",
15
+ "recipeRefs": [
16
+ "component:reports/interactive-report/recipes/basic",
17
+ "component:regions/cards/recipes/basic"
18
+ ],
19
+ "compatibility": {
20
+ "profileRefs": [
21
+ "profile:apex261-ut261-mmd3102"
22
+ ]
23
+ },
24
+ "renderer": "master-detail",
25
+ "ports": {
26
+ "inputs": [
27
+ "records"
28
+ ],
29
+ "outputs": []
30
+ },
31
+ "requires": {
32
+ "blocks": [],
33
+ "capabilities": [
34
+ "key",
35
+ "readAuthorization"
36
+ ]
37
+ },
38
+ "source": {
39
+ "files": [
40
+ "renderer.json"
41
+ ]
42
+ },
43
+ "effects": {
44
+ "local": [
45
+ "reviewed application source and tracked Composer state"
46
+ ],
47
+ "deployment": [
48
+ "full application import through existing policy-aware pipeline"
49
+ ],
50
+ "applicationRuntime": [
51
+ "read scoped records"
52
+ ],
53
+ "authentication": "preserve"
54
+ },
55
+ "limitations": [
56
+ "Experimental; live Oracle and authenticated browser qualification not run.",
57
+ "Only reviewed scalar contracts; no automatic DDL or business-table writes."
58
+ ]
59
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "renderer": "master-detail",
4
+ "escape": "native-plain-text",
5
+ "transaction": "caller-owned",
6
+ "savedPayload": [
7
+ "entityRef",
8
+ "recordKey",
9
+ "recordVersion",
10
+ "operation",
11
+ "originInstance",
12
+ "correlationId"
13
+ ]
14
+ }
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "id": "profile:apex261-ut261-mmd3102",
4
+ "apex": "26.1.4",
5
+ "universalTheme": "26.1",
6
+ "mmd": "26.1.0+3102",
7
+ "source": "existing pinned recipes and Oracle MMD",
8
+ "qualification": "experimental"
9
+ }
10
+ ]
@@ -0,0 +1,172 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "application": {
4
+ "mode": "extend",
5
+ "compatibilityProfile": "profile:apex261-ut261-mmd3102",
6
+ "preserve": {
7
+ "authentication": true,
8
+ "authorization": true,
9
+ "unmanagedSource": true
10
+ }
11
+ },
12
+ "entities": {
13
+ "Customer": {
14
+ "read": {
15
+ "kind": "oracle-table",
16
+ "object": "CMP_CUSTOMERS",
17
+ "key": [
18
+ "id"
19
+ ],
20
+ "fields": {
21
+ "id": {
22
+ "column": "CUSTOMER_ID",
23
+ "type": "integer",
24
+ "nullable": false
25
+ },
26
+ "name": {
27
+ "column": "CUSTOMER_NAME",
28
+ "type": "string",
29
+ "nullable": false,
30
+ "maxLength": 200
31
+ },
32
+ "status": {
33
+ "column": "STATUS",
34
+ "type": "string",
35
+ "nullable": false,
36
+ "maxLength": 16
37
+ },
38
+ "version": {
39
+ "column": "ROW_VERSION",
40
+ "type": "integer",
41
+ "nullable": false
42
+ }
43
+ }
44
+ },
45
+ "authorization": {
46
+ "readContract": "project:customer-access",
47
+ "writeContract": "project:customer-access"
48
+ },
49
+ "capabilities": {
50
+ "optimisticLock": {
51
+ "field": "version"
52
+ }
53
+ }
54
+ }
55
+ },
56
+ "commands": {
57
+ "SaveCustomer": {
58
+ "kind": "oracle-procedure",
59
+ "package": "CMP_CUSTOMER_API",
60
+ "procedure": "SAVE_CUSTOMER",
61
+ "signatureRef": "project:save-customer",
62
+ "transaction": "caller-owned",
63
+ "inputs": {
64
+ "P_CUSTOMER_ID": {
65
+ "from": "record.id",
66
+ "mode": "in-out"
67
+ },
68
+ "P_CUSTOMER_NAME": {
69
+ "from": "record.name",
70
+ "mode": "in"
71
+ },
72
+ "P_STATUS": {
73
+ "from": "record.status",
74
+ "mode": "in"
75
+ },
76
+ "P_EXPECTED_VERSION": {
77
+ "from": "record.version",
78
+ "mode": "in"
79
+ }
80
+ },
81
+ "outputs": {
82
+ "recordKey": {
83
+ "from": "P_CUSTOMER_ID"
84
+ },
85
+ "recordVersion": {
86
+ "from": "P_ROW_VERSION"
87
+ }
88
+ },
89
+ "errorContract": "project:customer-errors",
90
+ "authorizationContract": "project:customer-access"
91
+ }
92
+ },
93
+ "contracts": {
94
+ "project:customer-access": {
95
+ "schemaVersion": 1,
96
+ "kind": "authorization",
97
+ "rowPredicate": "OWNER_NAME = :APP_USER",
98
+ "expression": "apex_authorization.is_authorized('CMP_CUSTOMER_WRITE')",
99
+ "provenance": "Isolated CRM fixture; server-owned APEX identity; live qualification pending"
100
+ },
101
+ "project:save-customer": {
102
+ "schemaVersion": 1,
103
+ "kind": "command",
104
+ "transaction": "caller-owned",
105
+ "parameters": {
106
+ "P_CUSTOMER_ID": {
107
+ "mode": "in-out",
108
+ "type": "NUMBER"
109
+ },
110
+ "P_CUSTOMER_NAME": {
111
+ "mode": "in",
112
+ "type": "VARCHAR2"
113
+ },
114
+ "P_STATUS": {
115
+ "mode": "in",
116
+ "type": "VARCHAR2"
117
+ },
118
+ "P_EXPECTED_VERSION": {
119
+ "mode": "in",
120
+ "type": "NUMBER"
121
+ },
122
+ "P_ROW_VERSION": {
123
+ "mode": "out",
124
+ "type": "NUMBER"
125
+ }
126
+ },
127
+ "provenance": "fixture API source; caller owns transaction"
128
+ },
129
+ "project:customer-errors": {
130
+ "schemaVersion": 1,
131
+ "kind": "errors",
132
+ "provenance": "-20001 authorization, -20002 validation, -20003 optimistic conflict; generic client messages"
133
+ }
134
+ },
135
+ "blocks": {
136
+ "CustomerList": {
137
+ "use": "block:crud/report-dialog@1.0.0",
138
+ "parameters": {
139
+ "title": "Customers",
140
+ "createEnabled": true,
141
+ "editEnabled": true,
142
+ "editableFields": [
143
+ "name",
144
+ "status"
145
+ ]
146
+ },
147
+ "bindings": {
148
+ "records": "entity:Customer",
149
+ "saveRecord": "command:SaveCustomer"
150
+ }
151
+ },
152
+ "CustomerSummary": {
153
+ "use": "block:analytics/status-summary@1.0.0",
154
+ "parameters": {
155
+ "title": "Customer status",
156
+ "groupField": "status"
157
+ },
158
+ "bindings": {
159
+ "records": "entity:Customer"
160
+ }
161
+ }
162
+ },
163
+ "connections": [
164
+ {
165
+ "from": "CustomerList.events.saved",
166
+ "to": "CustomerSummary.actions.refresh",
167
+ "behavior": {
168
+ "coalesce": true
169
+ }
170
+ }
171
+ ]
172
+ }
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "id": "blueprint:crm@1.0.0",
4
+ "title": "CRM Customers / Клієнти",
5
+ "path": "crm.yaml"
6
+ },
7
+ {
8
+ "id": "blueprint:service-desk@1.0.0",
9
+ "title": "Service Desk / Сервісна служба",
10
+ "path": "service-desk.yaml"
11
+ }
12
+ ]
@@ -0,0 +1,120 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "application": {
4
+ "mode": "extend",
5
+ "compatibilityProfile": "profile:apex261-ut261-mmd3102",
6
+ "preserve": {
7
+ "authentication": true,
8
+ "authorization": true,
9
+ "unmanagedSource": true
10
+ }
11
+ },
12
+ "entities": {
13
+ "Ticket": {
14
+ "read": {
15
+ "kind": "oracle-table",
16
+ "object": "CMP_TICKETS",
17
+ "key": [
18
+ "id"
19
+ ],
20
+ "fields": {
21
+ "id": {
22
+ "column": "TICKET_ID",
23
+ "type": "integer",
24
+ "nullable": false
25
+ },
26
+ "title": {
27
+ "column": "TITLE",
28
+ "type": "string",
29
+ "nullable": false,
30
+ "maxLength": 200
31
+ },
32
+ "status": {
33
+ "column": "STATUS",
34
+ "type": "string",
35
+ "nullable": false,
36
+ "maxLength": 16
37
+ },
38
+ "parentId": {
39
+ "column": "PARENT_ID",
40
+ "type": "integer",
41
+ "nullable": true
42
+ },
43
+ "changedAt": {
44
+ "column": "CHANGED_AT",
45
+ "type": "timestamp",
46
+ "nullable": false
47
+ }
48
+ }
49
+ },
50
+ "authorization": {
51
+ "readContract": "project:ticket-access"
52
+ },
53
+ "capabilities": {}
54
+ }
55
+ },
56
+ "commands": {},
57
+ "contracts": {
58
+ "project:ticket-access": {
59
+ "schemaVersion": 1,
60
+ "kind": "authorization",
61
+ "rowPredicate": "OWNER_NAME = :APP_USER",
62
+ "provenance": "Isolated Service Desk fixture; no live qualification"
63
+ }
64
+ },
65
+ "blocks": {
66
+ "Tickets": {
67
+ "use": "block:read/filtered-list@1.0.0",
68
+ "parameters": {
69
+ "title": "Service desk tickets",
70
+ "filterField": "status"
71
+ },
72
+ "bindings": {
73
+ "records": "entity:Ticket"
74
+ }
75
+ },
76
+ "TicketStatus": {
77
+ "use": "block:analytics/status-summary@1.0.0",
78
+ "parameters": {
79
+ "title": "Ticket status",
80
+ "groupField": "status"
81
+ },
82
+ "bindings": {
83
+ "records": "entity:Ticket"
84
+ }
85
+ },
86
+ "TicketDetail": {
87
+ "use": "block:read/detail@1.0.0",
88
+ "parameters": {
89
+ "title": "Ticket detail",
90
+ "detailField": "title"
91
+ },
92
+ "bindings": {
93
+ "records": "entity:Ticket"
94
+ }
95
+ },
96
+ "TicketHistory": {
97
+ "use": "block:read/history@1.0.0",
98
+ "parameters": {
99
+ "title": "Ticket history",
100
+ "groupField": "status",
101
+ "timeField": "changedAt",
102
+ "detailField": "title"
103
+ },
104
+ "bindings": {
105
+ "records": "entity:Ticket"
106
+ }
107
+ },
108
+ "TicketLines": {
109
+ "use": "block:read/master-detail@1.0.0",
110
+ "parameters": {
111
+ "title": "Ticket lines",
112
+ "parentField": "parentId"
113
+ },
114
+ "bindings": {
115
+ "records": "entity:Ticket"
116
+ }
117
+ }
118
+ },
119
+ "connections": []
120
+ }
@@ -13,6 +13,7 @@
13
13
  <nav aria-label="Development views">
14
14
  <button data-view="overview" aria-current="page"><span>◈</span> Overview</button>
15
15
  <button data-view="operations"><span>↗</span> APEX operations</button>
16
+ <button data-view="catalog"><span>▦</span> Catalog</button>
16
17
  <button data-view="settings"><span>☷</span> Settings</button>
17
18
  </nav>
18
19
  <div class="sidebar-bottom"><span id="connection" class="badge">Connecting</span><p id="updated" class="subtle">Waiting for workspace data</p><button id="refresh" class="quiet">Refresh now</button></div>
@@ -27,6 +28,12 @@
27
28
  <div class="card"><div class="section-heading"><div><h2>Run a check</h2><p class="subtle">Use the selected project's existing toolchain and authorization.</p></div></div><div class="actions"><button id="validate">Compile APEX source</button><label>Environment<select id="environment"><option value="">Choose environment</option></select></label><label>Test suite<select id="suite"><option value="unit">Unit</option><option value="sql">SQL</option><option value="api">API</option><option value="e2e">Playwright E2E</option><option value="all">All configured</option></select></label><button id="run-tests">Run checks</button><button id="plan">Prepare deployment plan</button><button id="open-browser">Open verification browser</button></div><p class="subtle">Application imports keep their existing plan, backup and approval gates. This panel does not grant deployment permission.</p></div>
28
29
  <div id="operations-live"></div>
29
30
  </section>
31
+ <section data-page="catalog" hidden>
32
+ <form id="catalog-search" class="card"><h2>Executable blocks</h2><label>Search English or Ukrainian<input id="catalog-query" value="block:" maxlength="256" required></label><button type="submit">Search catalog</button><div id="catalog-hits"></div></form>
33
+ <div class="card"><h2>Contracts and qualification</h2><p class="subtle">Experimental blocks require live qualification. Previews show source as text.</p><pre id="catalog-detail"></pre></div>
34
+ <form id="catalog-add" class="card"><h2>Add to blueprint</h2><label>Blueprint path<input id="compose-blueprint" value="app.blueprint.yaml" required></label><label>Instance name<input id="compose-instance" value="NewList" required></label><label>Parameters and bindings (JSON)<textarea id="compose-parameters" rows="9">{"parameters":{"title":"Records"},"bindings":{"records":"entity:Customer"}}</textarea></label><button type="submit">Review blueprint diff</button><pre id="blueprint-diff"></pre><button id="blueprint-apply" type="button" disabled>Apply reviewed blueprint change</button></form>
35
+ <div class="card"><h2>Compose application</h2><button id="compose-plan" type="button">Plan and compile offline</button><button id="compose-materialize" type="button" disabled>Materialize reviewed plan</button><button id="compose-cancel" type="button" disabled>Cancel operation</button><pre id="compose-review"></pre><p class="subtle">Materialization writes local source only. Deployment keeps its existing policy and backup gates.</p></div>
36
+ </section>
30
37
  <section data-page="settings" hidden>
31
38
  <div class="two-columns">
32
39
  <form id="sqlcl-form" class="card"><p class="eyebrow">ORACLE CONNECTION</p><h2>Database connectivity</h2><p class="subtle">Saved at plugin level for new APEXREST operations across projects.</p><label>Database network transport<select id="sqlcl-transport"><option value="direct">Direct Oracle listener</option><option value="ords">ORDS HTTP(S)</option></select></label><p id="sqlcl-transport-note" class="subtle"></p><label>SQLcl execution<select id="sqlcl-mode"><option value="cli">SQLcl CLI</option><option value="mcp">Official SQLcl MCP</option></select></label><label>MCP restriction level<select id="sqlcl-level"><option value="4">Level 4 · restricted (default)</option><option value="1">Level 1 · allow SQLcl scripts</option></select></label><button type="submit">Save SQLcl settings</button></form>