forge-openclaw-plugin 0.2.24 → 0.2.26

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 (208) hide show
  1. package/README.md +13 -0
  2. package/dist/assets/{board-_C6oMy5w.js → board-ta0rUHOf.js} +3 -3
  3. package/dist/assets/{board-_C6oMy5w.js.map → board-ta0rUHOf.js.map} +1 -1
  4. package/dist/assets/index-Ro0ZF_az.css +1 -0
  5. package/dist/assets/index-ytlpSj23.js +79 -0
  6. package/dist/assets/index-ytlpSj23.js.map +1 -0
  7. package/dist/assets/{motion-D4sZgCHd.js → motion-fBKPB6yw.js} +3 -3
  8. package/dist/assets/motion-fBKPB6yw.js.map +1 -0
  9. package/dist/assets/{table-BWzTaky1.js → table-C-IGTQni.js} +2 -2
  10. package/dist/assets/{table-BWzTaky1.js.map → table-C-IGTQni.js.map} +1 -1
  11. package/dist/assets/{ui-BzK4azQb.js → ui-DInOpaYF.js} +2 -2
  12. package/dist/assets/{ui-BzK4azQb.js.map → ui-DInOpaYF.js.map} +1 -1
  13. package/dist/assets/vendor-lE3tZJcC.js +876 -0
  14. package/dist/assets/vendor-lE3tZJcC.js.map +1 -0
  15. package/dist/index.html +7 -8
  16. package/dist/openclaw/local-runtime.d.ts +3 -1
  17. package/dist/openclaw/local-runtime.js +51 -15
  18. package/dist/openclaw/parity.d.ts +1 -1
  19. package/dist/openclaw/parity.js +29 -0
  20. package/dist/openclaw/plugin-entry-shared.d.ts +1 -0
  21. package/dist/openclaw/plugin-entry-shared.js +31 -6
  22. package/dist/openclaw/plugin-sdk-types.d.ts +29 -0
  23. package/dist/openclaw/routes.js +236 -0
  24. package/dist/openclaw/session-bootstrap.d.ts +78 -0
  25. package/dist/openclaw/session-bootstrap.js +240 -0
  26. package/dist/openclaw/tools.js +279 -6
  27. package/dist/server/server/migrations/001_core.sql +411 -0
  28. package/dist/server/server/migrations/002_psyche.sql +392 -0
  29. package/dist/server/server/migrations/003_habits.sql +30 -0
  30. package/dist/server/server/migrations/004_habit_links.sql +8 -0
  31. package/dist/server/server/migrations/005_habit_psyche_links.sql +24 -0
  32. package/dist/server/server/migrations/006_work_adjustments.sql +14 -0
  33. package/dist/server/server/migrations/007_weekly_review_closures.sql +17 -0
  34. package/dist/server/server/migrations/008_calendar_execution.sql +147 -0
  35. package/dist/server/server/migrations/009_true_calendar_events.sql +195 -0
  36. package/dist/server/server/migrations/010_calendar_selection_state.sql +6 -0
  37. package/dist/server/server/migrations/011_calendar_timezone_backfill.sql +11 -0
  38. package/dist/server/server/migrations/012_work_block_ranges.sql +7 -0
  39. package/dist/server/server/migrations/013_microsoft_local_auth_settings.sql +8 -0
  40. package/dist/server/server/migrations/014_note_tags_and_ephemeral.sql +8 -0
  41. package/dist/server/server/migrations/015_multi_user_and_strategies.sql +244 -0
  42. package/dist/server/server/migrations/016_health_companion.sql +158 -0
  43. package/dist/server/server/migrations/016_strategy_contracts_and_user_graph.sql +22 -0
  44. package/dist/server/server/migrations/017_preferences.sql +131 -0
  45. package/dist/server/server/migrations/018_preference_catalogs.sql +31 -0
  46. package/dist/server/server/migrations/019_wiki_memory.sql +255 -0
  47. package/dist/server/server/migrations/020_wiki_page_hierarchy.sql +11 -0
  48. package/dist/server/server/migrations/021_hide_evidence_from_wiki_index.sql +3 -0
  49. package/dist/server/server/migrations/022_wiki_ingest_background.sql +85 -0
  50. package/dist/server/server/migrations/023_diagnostic_logs.sql +28 -0
  51. package/dist/server/server/migrations/024_questionnaires.sql +96 -0
  52. package/dist/server/server/migrations/025_ai_model_connections.sql +26 -0
  53. package/dist/server/server/migrations/026_custom_theme_settings.sql +2 -0
  54. package/dist/server/server/migrations/027_ai_processors.sql +31 -0
  55. package/dist/server/server/migrations/028_movement_domain.sql +136 -0
  56. package/dist/server/server/migrations/029_watch_micro_capture.sql +23 -0
  57. package/dist/server/server/migrations/030_surface_layouts.sql +5 -0
  58. package/dist/server/server/migrations/031_ai_processor_runtime_upgrades.sql +10 -0
  59. package/dist/server/server/migrations/032_ai_connectors.sql +44 -0
  60. package/dist/server/server/migrations/033_movement_trip_point_sync.sql +36 -0
  61. package/dist/server/server/migrations/034_movement_segment_sync.sql +49 -0
  62. package/dist/server/server/migrations/035_google_local_auth_settings.sql +2 -0
  63. package/dist/server/server/migrations/036_google_local_auth_client_secret.sql +2 -0
  64. package/dist/server/{app.js → server/src/app.js} +992 -25
  65. package/dist/server/server/src/connectors/box-registry.js +188 -0
  66. package/dist/server/{db.js → server/src/db.js} +6 -0
  67. package/dist/server/server/src/debug.js +19 -0
  68. package/dist/server/server/src/discovery-advertiser.js +114 -0
  69. package/dist/server/{health.js → server/src/health.js} +39 -11
  70. package/dist/server/{index.js → server/src/index.js} +4 -0
  71. package/dist/server/{managers → server/src/managers}/platform/llm-manager.js +40 -4
  72. package/dist/server/{managers → server/src/managers}/platform/openai-responses-provider.js +129 -19
  73. package/dist/server/server/src/movement.js +2935 -0
  74. package/dist/server/{openapi.js → server/src/openapi.js} +628 -5
  75. package/dist/server/{psyche-types.js → server/src/psyche-types.js} +15 -1
  76. package/dist/server/server/src/questionnaire-flow.js +552 -0
  77. package/dist/server/server/src/questionnaire-seeds.js +853 -0
  78. package/dist/server/server/src/questionnaire-types.js +340 -0
  79. package/dist/server/server/src/repositories/ai-connectors.js +1207 -0
  80. package/dist/server/server/src/repositories/ai-processors.js +547 -0
  81. package/dist/server/{repositories → server/src/repositories}/calendar.js +1 -1
  82. package/dist/server/{repositories → server/src/repositories}/entity-ownership.js +9 -1
  83. package/dist/server/{repositories → server/src/repositories}/habits.js +69 -5
  84. package/dist/server/server/src/repositories/model-settings.js +216 -0
  85. package/dist/server/{repositories → server/src/repositories}/notes.js +57 -15
  86. package/dist/server/{repositories → server/src/repositories}/preferences.js +124 -0
  87. package/dist/server/server/src/repositories/questionnaires.js +1338 -0
  88. package/dist/server/{repositories → server/src/repositories}/settings.js +156 -12
  89. package/dist/server/server/src/repositories/surface-layouts.js +76 -0
  90. package/dist/server/{repositories → server/src/repositories}/wiki-memory.js +5 -1
  91. package/dist/server/{services → server/src/services}/calendar-runtime.js +775 -58
  92. package/dist/server/{services → server/src/services}/entity-crud.js +81 -2
  93. package/dist/server/server/src/services/google-calendar-oauth-config.js +176 -0
  94. package/dist/server/server/src/services/openai-codex-oauth.js +153 -0
  95. package/dist/server/server/src/services/psyche-observation-calendar.js +46 -0
  96. package/dist/server/{types.js → server/src/types.js} +621 -14
  97. package/dist/server/server/src/watch-mobile.js +562 -0
  98. package/dist/server/{web.js → server/src/web.js} +30 -4
  99. package/dist/server/src/components/customization/utility-widgets.js +330 -0
  100. package/dist/server/src/components/workbench-boxes/health/health-boxes.js +92 -0
  101. package/dist/server/src/components/workbench-boxes/kanban/kanban-boxes.js +128 -0
  102. package/dist/server/src/components/workbench-boxes/movement/movement-boxes.js +37 -0
  103. package/dist/server/src/components/workbench-boxes/notes/notes-boxes.js +114 -0
  104. package/dist/server/src/components/workbench-boxes/projects/projects-boxes.js +57 -0
  105. package/dist/server/src/components/workbench-boxes/shared/define-workbench-box.js +4 -0
  106. package/dist/server/src/components/workbench-boxes/shared/generic-node-view.js +13 -0
  107. package/dist/server/src/components/workbench-boxes/today/today-boxes.js +63 -0
  108. package/dist/server/src/lib/api-error.js +37 -0
  109. package/dist/server/src/lib/api.js +1859 -0
  110. package/dist/server/src/lib/calendar-name-deduper.js +144 -0
  111. package/dist/server/src/lib/diagnostics.js +67 -0
  112. package/dist/server/src/lib/psyche-types.js +1 -0
  113. package/dist/server/src/lib/questionnaire-types.js +1 -0
  114. package/dist/server/src/lib/runtime-paths.js +24 -0
  115. package/dist/server/src/lib/schemas.js +234 -0
  116. package/dist/server/src/lib/snapshot-normalizer.js +374 -0
  117. package/dist/server/src/lib/theme-system.js +319 -0
  118. package/dist/server/src/lib/types.js +1 -0
  119. package/dist/server/src/lib/utils.js +22 -0
  120. package/dist/server/src/lib/workbench/boxes.js +16 -0
  121. package/dist/server/src/lib/workbench/nodes.js +15 -0
  122. package/dist/server/src/lib/workbench/registry.js +73 -0
  123. package/dist/server/src/lib/workbench/runtime.js +181 -0
  124. package/openclaw.plugin.json +1 -1
  125. package/package.json +6 -1
  126. package/server/index.js +68 -0
  127. package/server/migrations/024_questionnaires.sql +96 -0
  128. package/server/migrations/025_ai_model_connections.sql +26 -0
  129. package/server/migrations/026_custom_theme_settings.sql +2 -0
  130. package/server/migrations/027_ai_processors.sql +31 -0
  131. package/server/migrations/028_movement_domain.sql +136 -0
  132. package/server/migrations/029_watch_micro_capture.sql +23 -0
  133. package/server/migrations/030_surface_layouts.sql +5 -0
  134. package/server/migrations/031_ai_processor_runtime_upgrades.sql +10 -0
  135. package/server/migrations/032_ai_connectors.sql +44 -0
  136. package/server/migrations/033_movement_trip_point_sync.sql +36 -0
  137. package/server/migrations/034_movement_segment_sync.sql +49 -0
  138. package/server/migrations/035_google_local_auth_settings.sql +2 -0
  139. package/server/migrations/036_google_local_auth_client_secret.sql +2 -0
  140. package/skills/forge-openclaw/SKILL.md +15 -1
  141. package/skills/forge-openclaw/entity_conversation_playbooks.md +523 -87
  142. package/skills/forge-openclaw/psyche_entity_playbooks.md +331 -221
  143. package/dist/assets/index-DTCwBWAs.js +0 -65
  144. package/dist/assets/index-DTCwBWAs.js.map +0 -1
  145. package/dist/assets/index-DttXlAgi.css +0 -1
  146. package/dist/assets/motion-D4sZgCHd.js.map +0 -1
  147. package/dist/assets/vendor-De38P6YR.js +0 -729
  148. package/dist/assets/vendor-De38P6YR.js.map +0 -1
  149. package/dist/assets/viz-C6hfyqzu.js +0 -34
  150. package/dist/assets/viz-C6hfyqzu.js.map +0 -1
  151. package/skills/forge-openclaw/cron_jobs.md +0 -395
  152. /package/dist/server/{demo-data.js → server/src/demo-data.js} +0 -0
  153. /package/dist/server/{e2e-server.js → server/src/e2e-server.js} +0 -0
  154. /package/dist/server/{errors.js → server/src/errors.js} +0 -0
  155. /package/dist/server/{managers → server/src/managers}/base.js +0 -0
  156. /package/dist/server/{managers → server/src/managers}/contracts.js +0 -0
  157. /package/dist/server/{managers → server/src/managers}/platform/api-gateway-manager.js +0 -0
  158. /package/dist/server/{managers → server/src/managers}/platform/audit-manager.js +0 -0
  159. /package/dist/server/{managers → server/src/managers}/platform/authentication-manager.js +0 -0
  160. /package/dist/server/{managers → server/src/managers}/platform/authorization-manager.js +0 -0
  161. /package/dist/server/{managers → server/src/managers}/platform/background-job-manager.js +0 -0
  162. /package/dist/server/{managers → server/src/managers}/platform/configuration-manager.js +0 -0
  163. /package/dist/server/{managers → server/src/managers}/platform/database-manager.js +0 -0
  164. /package/dist/server/{managers → server/src/managers}/platform/event-bus-manager.js +0 -0
  165. /package/dist/server/{managers → server/src/managers}/platform/external-service-manager.js +0 -0
  166. /package/dist/server/{managers → server/src/managers}/platform/health-manager.js +0 -0
  167. /package/dist/server/{managers → server/src/managers}/platform/migration-manager.js +0 -0
  168. /package/dist/server/{managers → server/src/managers}/platform/search-index-manager.js +0 -0
  169. /package/dist/server/{managers → server/src/managers}/platform/secrets-manager.js +0 -0
  170. /package/dist/server/{managers → server/src/managers}/platform/session-manager.js +0 -0
  171. /package/dist/server/{managers → server/src/managers}/platform/storage-manager.js +0 -0
  172. /package/dist/server/{managers → server/src/managers}/platform/token-manager.js +0 -0
  173. /package/dist/server/{managers → server/src/managers}/platform/transaction-manager.js +0 -0
  174. /package/dist/server/{managers → server/src/managers}/platform/trusted-network.js +0 -0
  175. /package/dist/server/{managers → server/src/managers}/runtime.js +0 -0
  176. /package/dist/server/{managers → server/src/managers}/type-guards.js +0 -0
  177. /package/dist/server/{preferences-seeds.js → server/src/preferences-seeds.js} +0 -0
  178. /package/dist/server/{preferences-types.js → server/src/preferences-types.js} +0 -0
  179. /package/dist/server/{repositories → server/src/repositories}/activity-events.js +0 -0
  180. /package/dist/server/{repositories → server/src/repositories}/collaboration.js +0 -0
  181. /package/dist/server/{repositories → server/src/repositories}/deleted-entities.js +0 -0
  182. /package/dist/server/{repositories → server/src/repositories}/diagnostic-logs.js +0 -0
  183. /package/dist/server/{repositories → server/src/repositories}/domains.js +0 -0
  184. /package/dist/server/{repositories → server/src/repositories}/event-log.js +0 -0
  185. /package/dist/server/{repositories → server/src/repositories}/goals.js +0 -0
  186. /package/dist/server/{repositories → server/src/repositories}/projects.js +0 -0
  187. /package/dist/server/{repositories → server/src/repositories}/psyche.js +0 -0
  188. /package/dist/server/{repositories → server/src/repositories}/rewards.js +0 -0
  189. /package/dist/server/{repositories → server/src/repositories}/strategies.js +0 -0
  190. /package/dist/server/{repositories → server/src/repositories}/tags.js +0 -0
  191. /package/dist/server/{repositories → server/src/repositories}/task-runs.js +0 -0
  192. /package/dist/server/{repositories → server/src/repositories}/tasks.js +0 -0
  193. /package/dist/server/{repositories → server/src/repositories}/users.js +0 -0
  194. /package/dist/server/{repositories → server/src/repositories}/weekly-reviews.js +0 -0
  195. /package/dist/server/{repositories → server/src/repositories}/work-adjustments.js +0 -0
  196. /package/dist/server/{seed-demo.js → server/src/seed-demo.js} +0 -0
  197. /package/dist/server/{services → server/src/services}/context.js +0 -0
  198. /package/dist/server/{services → server/src/services}/dashboard.js +0 -0
  199. /package/dist/server/{services → server/src/services}/gamification.js +0 -0
  200. /package/dist/server/{services → server/src/services}/insights.js +0 -0
  201. /package/dist/server/{services → server/src/services}/projects.js +0 -0
  202. /package/dist/server/{services → server/src/services}/psyche.js +0 -0
  203. /package/dist/server/{services → server/src/services}/relations.js +0 -0
  204. /package/dist/server/{services → server/src/services}/reviews.js +0 -0
  205. /package/dist/server/{services → server/src/services}/run-recovery.js +0 -0
  206. /package/dist/server/{services → server/src/services}/tagging.js +0 -0
  207. /package/dist/server/{services → server/src/services}/task-run-watchdog.js +0 -0
  208. /package/dist/server/{services → server/src/services}/work-time.js +0 -0
@@ -0,0 +1,340 @@
1
+ import { z } from "zod";
2
+ const trimmedString = z.string().trim();
3
+ const nonEmptyTrimmedString = trimmedString.min(1);
4
+ const stringArraySchema = z.array(nonEmptyTrimmedString);
5
+ export const questionnaireSourceClassSchema = z.enum([
6
+ "public_domain",
7
+ "free_use",
8
+ "open_access",
9
+ "open_noncommercial",
10
+ "free_clinician",
11
+ "secondary_verified"
12
+ ]);
13
+ export const questionnaireAvailabilitySchema = z.enum([
14
+ "open",
15
+ "free_clinician",
16
+ "custom"
17
+ ]);
18
+ export const questionnairePresentationModeSchema = z.enum([
19
+ "single_question",
20
+ "batched_likert"
21
+ ]);
22
+ export const questionnaireVersionStatusSchema = z.enum([
23
+ "draft",
24
+ "published",
25
+ "archived"
26
+ ]);
27
+ export const questionnaireInstrumentStatusSchema = z.enum([
28
+ "active",
29
+ "archived"
30
+ ]);
31
+ export const questionnaireRunStatusSchema = z.enum([
32
+ "draft",
33
+ "completed",
34
+ "abandoned"
35
+ ]);
36
+ export const questionnaireComparatorSchema = z.enum([
37
+ "eq",
38
+ "neq",
39
+ "gt",
40
+ "gte",
41
+ "lt",
42
+ "lte"
43
+ ]);
44
+ export const questionnaireScoreValueTypeSchema = z.enum([
45
+ "number",
46
+ "text",
47
+ "boolean",
48
+ "percent"
49
+ ]);
50
+ export const questionnaireMissingModeSchema = z.enum([
51
+ "require_all",
52
+ "allow_partial",
53
+ "min_answered"
54
+ ]);
55
+ export const questionnaireOptionSchema = z.object({
56
+ key: nonEmptyTrimmedString,
57
+ label: nonEmptyTrimmedString,
58
+ value: z.number(),
59
+ description: trimmedString.default("")
60
+ });
61
+ export const questionnaireFlowRuleSchema = z.object({
62
+ script: nonEmptyTrimmedString
63
+ });
64
+ export const questionnaireItemSchema = z.object({
65
+ id: nonEmptyTrimmedString,
66
+ prompt: nonEmptyTrimmedString,
67
+ shortLabel: trimmedString.default(""),
68
+ description: trimmedString.default(""),
69
+ helperText: trimmedString.default(""),
70
+ required: z.boolean().default(true),
71
+ visibility: questionnaireFlowRuleSchema.nullable().default(null),
72
+ options: z.array(questionnaireOptionSchema).min(1),
73
+ tags: stringArraySchema.default([])
74
+ });
75
+ export const questionnaireSectionSchema = z.object({
76
+ id: nonEmptyTrimmedString,
77
+ title: nonEmptyTrimmedString,
78
+ description: trimmedString.default(""),
79
+ visibility: questionnaireFlowRuleSchema.nullable().default(null),
80
+ itemIds: stringArraySchema.min(1)
81
+ });
82
+ export const questionnaireDefinitionSchema = z.object({
83
+ locale: nonEmptyTrimmedString.default("en"),
84
+ instructions: trimmedString.default(""),
85
+ completionNote: trimmedString.default(""),
86
+ presentationMode: questionnairePresentationModeSchema,
87
+ responseStyle: nonEmptyTrimmedString,
88
+ itemIds: stringArraySchema.min(1),
89
+ items: z.array(questionnaireItemSchema).min(1),
90
+ sections: z.array(questionnaireSectionSchema).min(1),
91
+ pageSize: z.number().int().min(1).max(64).nullable().default(null)
92
+ });
93
+ export const questionnaireConstExpressionSchema = z.object({
94
+ kind: z.literal("const"),
95
+ value: z.union([z.number(), z.string(), z.boolean(), z.null()])
96
+ });
97
+ export const questionnaireAnswerExpressionSchema = z.object({
98
+ kind: z.literal("answer"),
99
+ itemId: nonEmptyTrimmedString,
100
+ defaultValue: z.number().nullable().optional()
101
+ });
102
+ export const questionnaireScoreExpressionRefSchema = z.object({
103
+ kind: z.literal("score"),
104
+ scoreKey: nonEmptyTrimmedString
105
+ });
106
+ export const questionnaireScoreExpressionSchema = z.lazy(() => z.union([
107
+ questionnaireConstExpressionSchema,
108
+ questionnaireAnswerExpressionSchema,
109
+ questionnaireScoreExpressionRefSchema,
110
+ z.object({
111
+ kind: z.enum(["add", "multiply", "min", "max"]),
112
+ values: z.array(questionnaireScoreExpressionSchema).min(1)
113
+ }),
114
+ z.object({
115
+ kind: z.enum(["subtract", "divide"]),
116
+ left: questionnaireScoreExpressionSchema,
117
+ right: questionnaireScoreExpressionSchema,
118
+ zeroValue: z.number().nullable().optional()
119
+ }),
120
+ z.object({
121
+ kind: z.enum(["sum", "average"]),
122
+ itemIds: stringArraySchema.min(1)
123
+ }),
124
+ z.object({
125
+ kind: z.literal("weighted_sum"),
126
+ terms: z
127
+ .array(z.object({
128
+ itemId: nonEmptyTrimmedString,
129
+ weight: z.number()
130
+ }))
131
+ .min(1)
132
+ }),
133
+ z.object({
134
+ kind: z.enum(["count_if", "filtered_mean"]),
135
+ itemIds: stringArraySchema.min(1),
136
+ comparator: questionnaireComparatorSchema,
137
+ target: z.number()
138
+ }),
139
+ z.object({
140
+ kind: z.literal("compare"),
141
+ comparator: questionnaireComparatorSchema,
142
+ left: questionnaireScoreExpressionSchema,
143
+ right: questionnaireScoreExpressionSchema
144
+ }),
145
+ z.object({
146
+ kind: z.literal("if"),
147
+ condition: questionnaireScoreExpressionSchema,
148
+ then: questionnaireScoreExpressionSchema,
149
+ else: questionnaireScoreExpressionSchema
150
+ }),
151
+ z.object({
152
+ kind: z.literal("round"),
153
+ value: questionnaireScoreExpressionSchema,
154
+ digits: z.number().int().min(0).max(6)
155
+ })
156
+ ]));
157
+ export const questionnaireMissingPolicySchema = z.object({
158
+ mode: questionnaireMissingModeSchema,
159
+ minAnswered: z.number().int().min(0).nullable().optional()
160
+ });
161
+ export const questionnaireScoreBandSchema = z.object({
162
+ label: nonEmptyTrimmedString,
163
+ min: z.number().nullable().optional(),
164
+ max: z.number().nullable().optional(),
165
+ severity: trimmedString.default("")
166
+ });
167
+ export const questionnaireScoreDefinitionSchema = z.object({
168
+ key: nonEmptyTrimmedString,
169
+ label: nonEmptyTrimmedString,
170
+ description: trimmedString.default(""),
171
+ valueType: questionnaireScoreValueTypeSchema.default("number"),
172
+ expression: questionnaireScoreExpressionSchema,
173
+ dependsOnItemIds: stringArraySchema.default([]),
174
+ missingPolicy: questionnaireMissingPolicySchema
175
+ .default({ mode: "require_all" })
176
+ .optional(),
177
+ bands: z.array(questionnaireScoreBandSchema).default([]),
178
+ roundTo: z.number().int().min(0).max(6).nullable().optional(),
179
+ unitLabel: trimmedString.default("")
180
+ });
181
+ export const questionnaireScoringSchema = z.object({
182
+ scores: z.array(questionnaireScoreDefinitionSchema).min(1)
183
+ });
184
+ export const questionnaireProvenanceSourceSchema = z.object({
185
+ label: nonEmptyTrimmedString,
186
+ url: nonEmptyTrimmedString,
187
+ citation: trimmedString.default(""),
188
+ notes: trimmedString.default("")
189
+ });
190
+ export const questionnaireProvenanceSchema = z.object({
191
+ retrievalDate: nonEmptyTrimmedString,
192
+ sourceClass: questionnaireSourceClassSchema,
193
+ scoringNotes: trimmedString.default(""),
194
+ sources: z.array(questionnaireProvenanceSourceSchema).min(1)
195
+ });
196
+ export const questionnaireVersionSchema = z.object({
197
+ id: z.string(),
198
+ instrumentId: z.string(),
199
+ versionNumber: z.number().int().min(1),
200
+ status: questionnaireVersionStatusSchema,
201
+ label: trimmedString.default(""),
202
+ isReadOnly: z.boolean(),
203
+ definition: questionnaireDefinitionSchema,
204
+ scoring: questionnaireScoringSchema,
205
+ provenance: questionnaireProvenanceSchema,
206
+ createdBy: trimmedString.nullable(),
207
+ createdAt: z.string(),
208
+ updatedAt: z.string(),
209
+ publishedAt: z.string().nullable()
210
+ });
211
+ export const questionnaireHistoryPointSchema = z.object({
212
+ runId: z.string(),
213
+ completedAt: z.string(),
214
+ primaryScore: z.number().nullable(),
215
+ primaryScoreLabel: trimmedString.default(""),
216
+ bandLabel: trimmedString.default("")
217
+ });
218
+ export const questionnaireInstrumentSummarySchema = z.object({
219
+ id: z.string(),
220
+ key: nonEmptyTrimmedString,
221
+ slug: nonEmptyTrimmedString,
222
+ title: nonEmptyTrimmedString,
223
+ subtitle: trimmedString.default(""),
224
+ description: trimmedString.default(""),
225
+ aliases: stringArraySchema.default([]),
226
+ symptomDomains: stringArraySchema.default([]),
227
+ tags: stringArraySchema.default([]),
228
+ sourceClass: questionnaireSourceClassSchema,
229
+ availability: questionnaireAvailabilitySchema,
230
+ responseStyle: nonEmptyTrimmedString,
231
+ presentationMode: questionnairePresentationModeSchema,
232
+ itemCount: z.number().int().min(0),
233
+ isSelfReport: z.boolean(),
234
+ isSystem: z.boolean(),
235
+ isReadOnly: z.boolean(),
236
+ ownerUserId: trimmedString.nullable(),
237
+ currentVersionId: z.string().nullable(),
238
+ currentVersionNumber: z.number().int().min(1).nullable(),
239
+ latestRunId: z.string().nullable(),
240
+ latestRunAt: z.string().nullable(),
241
+ completedRunCount: z.number().int().min(0),
242
+ primarySourceUrl: trimmedString.default(""),
243
+ createdAt: z.string(),
244
+ updatedAt: z.string()
245
+ });
246
+ export const questionnaireInstrumentDetailSchema = questionnaireInstrumentSummarySchema.extend({
247
+ status: questionnaireInstrumentStatusSchema,
248
+ currentVersion: questionnaireVersionSchema.nullable(),
249
+ draftVersion: questionnaireVersionSchema.nullable(),
250
+ versions: z.array(questionnaireVersionSchema),
251
+ history: z.array(questionnaireHistoryPointSchema),
252
+ latestDraftRunId: z.string().nullable()
253
+ });
254
+ export const questionnaireAnswerSchema = z.object({
255
+ itemId: nonEmptyTrimmedString,
256
+ optionKey: trimmedString.nullable(),
257
+ valueText: trimmedString.default(""),
258
+ numericValue: z.number().nullable(),
259
+ answer: z.record(z.string(), z.unknown()).default({}),
260
+ createdAt: z.string(),
261
+ updatedAt: z.string()
262
+ });
263
+ export const questionnaireRunScoreSchema = z.object({
264
+ scoreKey: nonEmptyTrimmedString,
265
+ label: nonEmptyTrimmedString,
266
+ valueNumeric: z.number().nullable(),
267
+ valueText: trimmedString.nullable(),
268
+ bandLabel: trimmedString.default(""),
269
+ severity: trimmedString.default(""),
270
+ details: z.record(z.string(), z.unknown()).default({}),
271
+ createdAt: z.string()
272
+ });
273
+ export const questionnaireRunSchema = z.object({
274
+ id: z.string(),
275
+ instrumentId: z.string(),
276
+ versionId: z.string(),
277
+ userId: trimmedString.nullable(),
278
+ status: questionnaireRunStatusSchema,
279
+ startedAt: z.string(),
280
+ updatedAt: z.string(),
281
+ completedAt: z.string().nullable(),
282
+ progressIndex: z.number().int().min(0)
283
+ });
284
+ export const questionnaireRunDetailSchema = z.object({
285
+ run: questionnaireRunSchema,
286
+ instrument: questionnaireInstrumentSummarySchema,
287
+ version: questionnaireVersionSchema,
288
+ answers: z.array(questionnaireAnswerSchema),
289
+ scores: z.array(questionnaireRunScoreSchema),
290
+ history: z.array(questionnaireHistoryPointSchema)
291
+ });
292
+ export const questionnaireAnswerInputSchema = z.object({
293
+ itemId: nonEmptyTrimmedString,
294
+ optionKey: trimmedString.nullable().optional(),
295
+ valueText: trimmedString.default(""),
296
+ numericValue: z.number().nullable().optional(),
297
+ answer: z.record(z.string(), z.unknown()).default({})
298
+ });
299
+ export const startQuestionnaireRunSchema = z.object({
300
+ versionId: z.string().trim().min(1).nullable().optional(),
301
+ userId: z.string().trim().min(1).nullable().optional()
302
+ });
303
+ export const updateQuestionnaireRunSchema = z.object({
304
+ answers: z.array(questionnaireAnswerInputSchema).default([]),
305
+ progressIndex: z.number().int().min(0).nullable().optional()
306
+ });
307
+ export const createQuestionnaireInstrumentSchema = z.object({
308
+ title: nonEmptyTrimmedString,
309
+ subtitle: trimmedString.default(""),
310
+ description: trimmedString.default(""),
311
+ aliases: stringArraySchema.default([]),
312
+ symptomDomains: stringArraySchema.default([]),
313
+ tags: stringArraySchema.default([]),
314
+ sourceClass: questionnaireSourceClassSchema.default("secondary_verified"),
315
+ availability: questionnaireAvailabilitySchema.default("custom"),
316
+ isSelfReport: z.boolean().default(true),
317
+ userId: z.string().trim().min(1).nullable().optional(),
318
+ versionLabel: trimmedString.default("Draft 1"),
319
+ definition: questionnaireDefinitionSchema,
320
+ scoring: questionnaireScoringSchema,
321
+ provenance: questionnaireProvenanceSchema
322
+ });
323
+ export const updateQuestionnaireVersionSchema = z.object({
324
+ title: nonEmptyTrimmedString,
325
+ subtitle: trimmedString.default(""),
326
+ description: trimmedString.default(""),
327
+ aliases: stringArraySchema.default([]),
328
+ symptomDomains: stringArraySchema.default([]),
329
+ tags: stringArraySchema.default([]),
330
+ sourceClass: questionnaireSourceClassSchema,
331
+ availability: questionnaireAvailabilitySchema,
332
+ isSelfReport: z.boolean(),
333
+ label: trimmedString.default(""),
334
+ definition: questionnaireDefinitionSchema,
335
+ scoring: questionnaireScoringSchema,
336
+ provenance: questionnaireProvenanceSchema
337
+ });
338
+ export const publishQuestionnaireVersionSchema = z.object({
339
+ label: trimmedString.default("")
340
+ });