forge-openclaw-plugin 0.2.25 → 0.2.27
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/README.md +59 -3
- package/dist/assets/{board-VmF4FAfr.js → board-C6jCchjI.js} +3 -3
- package/dist/assets/{board-VmF4FAfr.js.map → board-C6jCchjI.js.map} +1 -1
- package/dist/assets/index-DVvS8iiU.css +1 -0
- package/dist/assets/index-zYB-9Dfo.js +85 -0
- package/dist/assets/index-zYB-9Dfo.js.map +1 -0
- package/dist/assets/knowledge-graph-layout.worker-DRvzPxhP.js +2 -0
- package/dist/assets/knowledge-graph-layout.worker-DRvzPxhP.js.map +1 -0
- package/dist/assets/{motion-DvkU14p-.js → motion-DFHrH2rd.js} +2 -2
- package/dist/assets/{motion-DvkU14p-.js.map → motion-DFHrH2rd.js.map} +1 -1
- package/dist/assets/{table-DgiPof9E.js → table-ZL7Di_u3.js} +2 -2
- package/dist/assets/{table-DgiPof9E.js.map → table-ZL7Di_u3.js.map} +1 -1
- package/dist/assets/{ui-nYfoC0Gq.js → ui-CKNPpz7q.js} +2 -2
- package/dist/assets/{ui-nYfoC0Gq.js.map → ui-CKNPpz7q.js.map} +1 -1
- package/dist/assets/vendor-DoNZuFhn.js +1247 -0
- package/dist/assets/vendor-DoNZuFhn.js.map +1 -0
- package/dist/index.html +7 -8
- package/dist/openclaw/local-runtime.d.ts +3 -1
- package/dist/openclaw/local-runtime.js +67 -15
- package/dist/openclaw/plugin-entry-shared.js +24 -2
- package/dist/openclaw/plugin-sdk-types.d.ts +17 -0
- package/dist/openclaw/routes.d.ts +27 -0
- package/dist/openclaw/routes.js +16 -12
- package/dist/openclaw/tools.js +0 -3
- package/dist/server/server/migrations/001_core.sql +411 -0
- package/dist/server/server/migrations/002_psyche.sql +392 -0
- package/dist/server/server/migrations/003_habits.sql +30 -0
- package/dist/server/server/migrations/004_habit_links.sql +8 -0
- package/dist/server/server/migrations/005_habit_psyche_links.sql +24 -0
- package/dist/server/server/migrations/006_work_adjustments.sql +14 -0
- package/dist/server/server/migrations/007_weekly_review_closures.sql +17 -0
- package/dist/server/server/migrations/008_calendar_execution.sql +147 -0
- package/dist/server/server/migrations/009_true_calendar_events.sql +195 -0
- package/dist/server/server/migrations/010_calendar_selection_state.sql +6 -0
- package/dist/server/server/migrations/011_calendar_timezone_backfill.sql +11 -0
- package/dist/server/server/migrations/012_work_block_ranges.sql +7 -0
- package/dist/server/server/migrations/013_microsoft_local_auth_settings.sql +8 -0
- package/dist/server/server/migrations/014_note_tags_and_ephemeral.sql +8 -0
- package/dist/server/server/migrations/015_multi_user_and_strategies.sql +244 -0
- package/dist/server/server/migrations/016_health_companion.sql +158 -0
- package/dist/server/server/migrations/016_strategy_contracts_and_user_graph.sql +22 -0
- package/dist/server/server/migrations/017_preferences.sql +131 -0
- package/dist/server/server/migrations/018_preference_catalogs.sql +31 -0
- package/dist/server/server/migrations/019_wiki_memory.sql +255 -0
- package/dist/server/server/migrations/020_wiki_page_hierarchy.sql +11 -0
- package/dist/server/server/migrations/021_hide_evidence_from_wiki_index.sql +3 -0
- package/dist/server/server/migrations/022_wiki_ingest_background.sql +85 -0
- package/dist/server/server/migrations/023_diagnostic_logs.sql +28 -0
- package/dist/server/server/migrations/024_questionnaires.sql +96 -0
- package/dist/server/server/migrations/025_ai_model_connections.sql +26 -0
- package/dist/server/server/migrations/026_custom_theme_settings.sql +2 -0
- package/dist/server/server/migrations/027_ai_processors.sql +31 -0
- package/dist/server/server/migrations/028_movement_domain.sql +136 -0
- package/dist/server/server/migrations/029_watch_micro_capture.sql +23 -0
- package/dist/server/server/migrations/030_surface_layouts.sql +5 -0
- package/dist/server/server/migrations/031_ai_processor_runtime_upgrades.sql +10 -0
- package/dist/server/server/migrations/032_ai_connectors.sql +44 -0
- package/dist/server/server/migrations/033_movement_trip_point_sync.sql +36 -0
- package/dist/server/server/migrations/034_movement_segment_sync.sql +49 -0
- package/dist/server/server/migrations/035_google_local_auth_settings.sql +2 -0
- package/dist/server/server/migrations/036_google_local_auth_client_secret.sql +2 -0
- package/dist/server/server/migrations/037_workbench_public_inputs_and_run_inputs.sql +5 -0
- package/dist/server/server/migrations/038_data_management_settings.sql +11 -0
- package/dist/server/server/migrations/039_life_force_and_action_points.sql +114 -0
- package/dist/server/server/migrations/040_screen_time_domain.sql +89 -0
- package/dist/server/server/migrations/041_companion_source_states.sql +21 -0
- package/dist/server/server/migrations/042_movement_boxes.sql +47 -0
- package/dist/server/server/migrations/043_movement_box_overlap_overrides.sql +26 -0
- package/dist/server/{app.js → server/src/app.js} +2112 -414
- package/dist/server/server/src/connectors/box-registry.js +223 -0
- package/dist/server/server/src/data-management-types.js +107 -0
- package/dist/server/{db.js → server/src/db.js} +72 -4
- package/dist/server/server/src/debug.js +19 -0
- package/dist/server/{demo-data.js → server/src/demo-data.js} +2 -2
- package/dist/server/{health.js → server/src/health.js} +702 -18
- package/dist/server/{managers → server/src/managers}/platform/llm-manager.js +7 -4
- package/dist/server/server/src/managers/platform/mock-workbench-provider.js +149 -0
- package/dist/server/{managers → server/src/managers}/platform/secrets-manager.js +18 -1
- package/dist/server/{managers → server/src/managers}/runtime.js +9 -0
- package/dist/server/{movement.js → server/src/movement.js} +1971 -112
- package/dist/server/{openapi.js → server/src/openapi.js} +491 -3
- package/dist/server/{psyche-types.js → server/src/psyche-types.js} +9 -1
- package/dist/server/{repositories → server/src/repositories}/activity-events.js +8 -0
- package/dist/server/{repositories → server/src/repositories}/ai-connectors.js +758 -47
- package/dist/server/{repositories → server/src/repositories}/calendar.js +1 -1
- package/dist/server/{repositories → server/src/repositories}/habits.js +37 -1
- package/dist/server/{repositories → server/src/repositories}/model-settings.js +13 -3
- package/dist/server/{repositories → server/src/repositories}/notes.js +3 -0
- package/dist/server/{repositories → server/src/repositories}/settings.js +431 -21
- package/dist/server/{repositories → server/src/repositories}/tasks.js +170 -10
- package/dist/server/server/src/runtime-data-root.js +82 -0
- package/dist/server/server/src/screen-time.js +802 -0
- package/dist/server/{services → server/src/services}/calendar-runtime.js +775 -58
- package/dist/server/server/src/services/data-management.js +788 -0
- package/dist/server/{services → server/src/services}/entity-crud.js +205 -2
- package/dist/server/server/src/services/google-calendar-oauth-config.js +176 -0
- package/dist/server/server/src/services/knowledge-graph.js +1455 -0
- package/dist/server/server/src/services/life-force-model.js +197 -0
- package/dist/server/server/src/services/life-force.js +1270 -0
- package/dist/server/server/src/services/psyche-observation-calendar.js +413 -0
- package/dist/server/{types.js → server/src/types.js} +420 -29
- package/dist/server/server/src/web.js +332 -0
- package/dist/server/src/components/customization/utility-widgets.js +439 -0
- package/dist/server/src/components/ui/info-tooltip.js +25 -0
- package/dist/server/src/components/workbench-boxes/calendar/calendar-boxes.js +78 -0
- package/dist/server/src/components/workbench-boxes/goals/goals-boxes.js +62 -0
- package/dist/server/src/components/workbench-boxes/habits/habits-boxes.js +62 -0
- package/dist/server/src/components/workbench-boxes/health/health-boxes.js +147 -0
- package/dist/server/src/components/workbench-boxes/insights/insights-boxes.js +50 -0
- package/dist/server/src/components/workbench-boxes/kanban/kanban-boxes.js +136 -0
- package/dist/server/src/components/workbench-boxes/movement/movement-boxes.js +47 -0
- package/dist/server/src/components/workbench-boxes/notes/notes-boxes.js +132 -0
- package/dist/server/src/components/workbench-boxes/overview/overview-boxes.js +65 -0
- package/dist/server/src/components/workbench-boxes/preferences/preferences-boxes.js +78 -0
- package/dist/server/src/components/workbench-boxes/projects/projects-boxes.js +62 -0
- package/dist/server/src/components/workbench-boxes/psyche/psyche-boxes.js +88 -0
- package/dist/server/src/components/workbench-boxes/questionnaires/questionnaires-boxes.js +61 -0
- package/dist/server/src/components/workbench-boxes/review/review-boxes.js +53 -0
- package/dist/server/src/components/workbench-boxes/shared/define-workbench-box.js +6 -0
- package/dist/server/src/components/workbench-boxes/shared/generic-node-view.js +49 -0
- package/dist/server/src/components/workbench-boxes/strategies/strategies-boxes.js +62 -0
- package/dist/server/src/components/workbench-boxes/tasks/tasks-boxes.js +76 -0
- package/dist/server/src/components/workbench-boxes/today/today-boxes.js +78 -0
- package/dist/server/src/components/workbench-boxes/wiki/wiki-boxes.js +60 -0
- package/dist/server/src/lib/api-error.js +37 -0
- package/dist/server/src/lib/api.js +2118 -0
- package/dist/server/src/lib/calendar-name-deduper.js +144 -0
- package/dist/server/src/lib/data-management-types.js +1 -0
- package/dist/server/src/lib/diagnostics.js +67 -0
- package/dist/server/src/lib/entity-visuals.js +279 -0
- package/dist/server/src/lib/knowledge-graph-types.js +276 -0
- package/dist/server/src/lib/knowledge-graph.js +470 -0
- package/dist/server/src/lib/psyche-types.js +1 -0
- package/dist/server/src/lib/questionnaire-types.js +1 -0
- package/dist/server/src/lib/runtime-paths.js +24 -0
- package/dist/server/src/lib/schemas.js +238 -0
- package/dist/server/src/lib/snapshot-normalizer.js +416 -0
- package/dist/server/src/lib/theme-system.js +319 -0
- package/dist/server/src/lib/types.js +1 -0
- package/dist/server/src/lib/utils.js +22 -0
- package/dist/server/src/lib/workbench/boxes.js +16 -0
- package/dist/server/src/lib/workbench/contracts.js +229 -0
- package/dist/server/src/lib/workbench/nodes.js +215 -0
- package/dist/server/src/lib/workbench/registry.js +120 -0
- package/dist/server/src/lib/workbench/runtime.js +397 -0
- package/dist/server/src/lib/workbench/tool-catalog.js +68 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/server/index.js +68 -0
- package/server/migrations/035_google_local_auth_settings.sql +2 -0
- package/server/migrations/036_google_local_auth_client_secret.sql +2 -0
- package/server/migrations/037_workbench_public_inputs_and_run_inputs.sql +5 -0
- package/server/migrations/038_data_management_settings.sql +11 -0
- package/server/migrations/039_life_force_and_action_points.sql +114 -0
- package/server/migrations/040_screen_time_domain.sql +89 -0
- package/server/migrations/041_companion_source_states.sql +21 -0
- package/server/migrations/042_movement_boxes.sql +47 -0
- package/server/migrations/043_movement_box_overlap_overrides.sql +26 -0
- package/skills/forge-openclaw/SKILL.md +27 -11
- package/skills/forge-openclaw/entity_conversation_playbooks.md +411 -46
- package/skills/forge-openclaw/psyche_entity_playbooks.md +195 -20
- package/dist/assets/index-CFCKDIMH.js +0 -67
- package/dist/assets/index-CFCKDIMH.js.map +0 -1
- package/dist/assets/index-ZPY6U1TU.css +0 -1
- package/dist/assets/vendor-D9PTEPSB.js +0 -824
- package/dist/assets/vendor-D9PTEPSB.js.map +0 -1
- package/dist/assets/viz-Cqb6s--o.js +0 -34
- package/dist/assets/viz-Cqb6s--o.js.map +0 -1
- package/dist/server/connectors/box-registry.js +0 -257
- package/dist/server/services/psyche-observation-calendar.js +0 -46
- package/dist/server/web.js +0 -98
- /package/dist/server/{discovery-advertiser.js → server/src/discovery-advertiser.js} +0 -0
- /package/dist/server/{e2e-server.js → server/src/e2e-server.js} +0 -0
- /package/dist/server/{errors.js → server/src/errors.js} +0 -0
- /package/dist/server/{index.js → server/src/index.js} +0 -0
- /package/dist/server/{managers → server/src/managers}/base.js +0 -0
- /package/dist/server/{managers → server/src/managers}/contracts.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/api-gateway-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/audit-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/authentication-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/authorization-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/background-job-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/configuration-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/database-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/event-bus-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/external-service-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/health-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/migration-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/openai-responses-provider.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/search-index-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/session-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/storage-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/token-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/transaction-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/trusted-network.js +0 -0
- /package/dist/server/{managers → server/src/managers}/type-guards.js +0 -0
- /package/dist/server/{preferences-seeds.js → server/src/preferences-seeds.js} +0 -0
- /package/dist/server/{preferences-types.js → server/src/preferences-types.js} +0 -0
- /package/dist/server/{questionnaire-flow.js → server/src/questionnaire-flow.js} +0 -0
- /package/dist/server/{questionnaire-seeds.js → server/src/questionnaire-seeds.js} +0 -0
- /package/dist/server/{questionnaire-types.js → server/src/questionnaire-types.js} +0 -0
- /package/dist/server/{repositories → server/src/repositories}/ai-processors.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/collaboration.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/deleted-entities.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/diagnostic-logs.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/domains.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/entity-ownership.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/event-log.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/goals.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/preferences.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/projects.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/psyche.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/questionnaires.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/rewards.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/strategies.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/surface-layouts.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/tags.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/task-runs.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/users.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/weekly-reviews.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/wiki-memory.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/work-adjustments.js +0 -0
- /package/dist/server/{seed-demo.js → server/src/seed-demo.js} +0 -0
- /package/dist/server/{services → server/src/services}/context.js +0 -0
- /package/dist/server/{services → server/src/services}/dashboard.js +0 -0
- /package/dist/server/{services → server/src/services}/gamification.js +0 -0
- /package/dist/server/{services → server/src/services}/insights.js +0 -0
- /package/dist/server/{services → server/src/services}/openai-codex-oauth.js +0 -0
- /package/dist/server/{services → server/src/services}/projects.js +0 -0
- /package/dist/server/{services → server/src/services}/psyche.js +0 -0
- /package/dist/server/{services → server/src/services}/relations.js +0 -0
- /package/dist/server/{services → server/src/services}/reviews.js +0 -0
- /package/dist/server/{services → server/src/services}/run-recovery.js +0 -0
- /package/dist/server/{services → server/src/services}/tagging.js +0 -0
- /package/dist/server/{services → server/src/services}/task-run-watchdog.js +0 -0
- /package/dist/server/{services → server/src/services}/work-time.js +0 -0
- /package/dist/server/{watch-mobile.js → server/src/watch-mobile.js} +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { LEGACY_WORKBENCH_PORT_KINDS, WORKBENCH_PORT_KINDS, normalizeWorkbenchPortKind } from "../../src/lib/workbench/nodes.js";
|
|
2
3
|
export const taskStatusSchema = z.enum([
|
|
3
4
|
"backlog",
|
|
4
5
|
"focus",
|
|
@@ -33,6 +34,13 @@ export const habitFrequencySchema = z.enum(["daily", "weekly"]);
|
|
|
33
34
|
export const habitPolaritySchema = z.enum(["positive", "negative"]);
|
|
34
35
|
export const habitStatusSchema = z.enum(["active", "paused", "archived"]);
|
|
35
36
|
export const habitCheckInStatusSchema = z.enum(["done", "missed"]);
|
|
37
|
+
export const habitOrderBySchema = z.enum([
|
|
38
|
+
"needs_attention",
|
|
39
|
+
"name",
|
|
40
|
+
"streak",
|
|
41
|
+
"created_at",
|
|
42
|
+
"updated_at"
|
|
43
|
+
]);
|
|
36
44
|
export const calendarProviderSchema = z.enum([
|
|
37
45
|
"google",
|
|
38
46
|
"apple",
|
|
@@ -79,6 +87,35 @@ export const calendarTimeboxSourceSchema = z.enum([
|
|
|
79
87
|
"live_run"
|
|
80
88
|
]);
|
|
81
89
|
export const workAdjustmentEntityTypeSchema = z.enum(["task", "project"]);
|
|
90
|
+
export const taskResolutionKindSchema = z.enum(["completed", "split"]);
|
|
91
|
+
export const actionProfileModeSchema = z.enum([
|
|
92
|
+
"impulse",
|
|
93
|
+
"rate",
|
|
94
|
+
"hybrid",
|
|
95
|
+
"recovery",
|
|
96
|
+
"container"
|
|
97
|
+
]);
|
|
98
|
+
export const actionProfileSourceMethodSchema = z.enum([
|
|
99
|
+
"seeded",
|
|
100
|
+
"inferred",
|
|
101
|
+
"manual",
|
|
102
|
+
"learned"
|
|
103
|
+
]);
|
|
104
|
+
export const actionCostBandSchema = z.enum([
|
|
105
|
+
"tiny",
|
|
106
|
+
"light",
|
|
107
|
+
"standard",
|
|
108
|
+
"heavy",
|
|
109
|
+
"brutal"
|
|
110
|
+
]);
|
|
111
|
+
export const lifeForceStatKeySchema = z.enum([
|
|
112
|
+
"life_force",
|
|
113
|
+
"activation",
|
|
114
|
+
"focus",
|
|
115
|
+
"vigor",
|
|
116
|
+
"composure",
|
|
117
|
+
"flow"
|
|
118
|
+
]);
|
|
82
119
|
export const activityEntityTypeSchema = z.enum([
|
|
83
120
|
"task",
|
|
84
121
|
"habit",
|
|
@@ -115,7 +152,9 @@ export const activityEntityTypeSchema = z.enum([
|
|
|
115
152
|
"calendar_event",
|
|
116
153
|
"work_block",
|
|
117
154
|
"work_block_template",
|
|
118
|
-
"task_timebox"
|
|
155
|
+
"task_timebox",
|
|
156
|
+
"sleep_session",
|
|
157
|
+
"workout_session"
|
|
119
158
|
]);
|
|
120
159
|
export const activitySourceSchema = z.enum([
|
|
121
160
|
"ui",
|
|
@@ -123,12 +162,18 @@ export const activitySourceSchema = z.enum([
|
|
|
123
162
|
"agent",
|
|
124
163
|
"system"
|
|
125
164
|
]);
|
|
126
|
-
export const diagnosticLogLevelSchema = z.
|
|
165
|
+
export const diagnosticLogLevelSchema = z.preprocess((value) => {
|
|
166
|
+
if (typeof value !== "string") {
|
|
167
|
+
return value;
|
|
168
|
+
}
|
|
169
|
+
const normalized = value.trim().toLowerCase();
|
|
170
|
+
return normalized === "warn" ? "warning" : normalized;
|
|
171
|
+
}, z.enum([
|
|
127
172
|
"debug",
|
|
128
173
|
"info",
|
|
129
174
|
"warning",
|
|
130
175
|
"error"
|
|
131
|
-
]);
|
|
176
|
+
]));
|
|
132
177
|
export const diagnosticLogSourceSchema = z.enum([
|
|
133
178
|
"ui",
|
|
134
179
|
"openclaw",
|
|
@@ -210,7 +255,9 @@ export const crudEntityTypeSchema = z.enum([
|
|
|
210
255
|
"preference_catalog_item",
|
|
211
256
|
"preference_context",
|
|
212
257
|
"preference_item",
|
|
213
|
-
"questionnaire_instrument"
|
|
258
|
+
"questionnaire_instrument",
|
|
259
|
+
"sleep_session",
|
|
260
|
+
"workout_session"
|
|
214
261
|
]);
|
|
215
262
|
export const rewardableEntityTypeSchema = z.enum([
|
|
216
263
|
"system",
|
|
@@ -447,6 +494,108 @@ export const workAdjustmentResultSchema = z.object({
|
|
|
447
494
|
reward: z.lazy(() => rewardLedgerEventSchema).nullable(),
|
|
448
495
|
metrics: z.lazy(() => xpMetricsPayloadSchema)
|
|
449
496
|
});
|
|
497
|
+
export const actionDemandWeightsSchema = z.object({
|
|
498
|
+
activation: z.number().min(0).max(1),
|
|
499
|
+
focus: z.number().min(0).max(1),
|
|
500
|
+
vigor: z.number().min(0).max(1),
|
|
501
|
+
composure: z.number().min(0).max(1),
|
|
502
|
+
flow: z.number().min(0).max(1)
|
|
503
|
+
});
|
|
504
|
+
export const actionProfileSchema = z.object({
|
|
505
|
+
id: z.string(),
|
|
506
|
+
profileKey: nonEmptyTrimmedString,
|
|
507
|
+
title: nonEmptyTrimmedString,
|
|
508
|
+
entityType: trimmedString.nullable().default(null),
|
|
509
|
+
mode: actionProfileModeSchema,
|
|
510
|
+
startupAp: z.number().min(0).default(0),
|
|
511
|
+
totalCostAp: z.number().min(0).default(0),
|
|
512
|
+
expectedDurationSeconds: z.number().int().positive().nullable().default(null),
|
|
513
|
+
sustainRateApPerHour: z.number().min(0).default(0),
|
|
514
|
+
demandWeights: actionDemandWeightsSchema,
|
|
515
|
+
doubleCountPolicy: z.enum([
|
|
516
|
+
"primary_only",
|
|
517
|
+
"secondary_weighted",
|
|
518
|
+
"always_count",
|
|
519
|
+
"container_only"
|
|
520
|
+
]),
|
|
521
|
+
sourceMethod: actionProfileSourceMethodSchema,
|
|
522
|
+
costBand: actionCostBandSchema.default("standard"),
|
|
523
|
+
recoveryEffect: z.number().default(0),
|
|
524
|
+
metadata: z.record(z.string(), z.unknown()).default({}),
|
|
525
|
+
createdAt: z.string(),
|
|
526
|
+
updatedAt: z.string()
|
|
527
|
+
});
|
|
528
|
+
export const taskActionPointSummarySchema = z.object({
|
|
529
|
+
costBand: actionCostBandSchema,
|
|
530
|
+
totalCostAp: z.number().min(0),
|
|
531
|
+
expectedDurationSeconds: z.number().int().positive(),
|
|
532
|
+
sustainRateApPerHour: z.number().min(0),
|
|
533
|
+
spentTodayAp: z.number().min(0),
|
|
534
|
+
spentTotalAp: z.number().min(0),
|
|
535
|
+
remainingAp: z.number().min(0)
|
|
536
|
+
});
|
|
537
|
+
export const taskSplitSuggestionSchema = z.object({
|
|
538
|
+
shouldSplit: z.boolean(),
|
|
539
|
+
reason: trimmedString.nullable().default(null),
|
|
540
|
+
thresholdSeconds: z.number().int().positive()
|
|
541
|
+
});
|
|
542
|
+
export const lifeForceStatStateSchema = z.object({
|
|
543
|
+
key: lifeForceStatKeySchema,
|
|
544
|
+
label: nonEmptyTrimmedString,
|
|
545
|
+
level: z.number().int().min(1),
|
|
546
|
+
xp: z.number().min(0),
|
|
547
|
+
xpToNextLevel: z.number().min(0),
|
|
548
|
+
costModifier: z.number().min(0)
|
|
549
|
+
});
|
|
550
|
+
export const lifeForceCurvePointSchema = z.object({
|
|
551
|
+
minuteOfDay: z.number().int().min(0).max(24 * 60),
|
|
552
|
+
rateApPerHour: z.number().min(0),
|
|
553
|
+
locked: z.boolean().optional()
|
|
554
|
+
});
|
|
555
|
+
export const lifeForceDrainEntrySchema = z.object({
|
|
556
|
+
id: z.string(),
|
|
557
|
+
sourceType: nonEmptyTrimmedString,
|
|
558
|
+
sourceId: nonEmptyTrimmedString,
|
|
559
|
+
title: nonEmptyTrimmedString,
|
|
560
|
+
role: z.enum(["primary", "secondary", "background", "recovery"]),
|
|
561
|
+
apPerHour: z.number(),
|
|
562
|
+
instantAp: z.number(),
|
|
563
|
+
why: trimmedString.default(""),
|
|
564
|
+
startedAt: z.string().nullable().default(null),
|
|
565
|
+
endsAt: z.string().nullable().default(null)
|
|
566
|
+
});
|
|
567
|
+
export const lifeForceWarningSchema = z.object({
|
|
568
|
+
id: z.string(),
|
|
569
|
+
tone: z.enum(["info", "warning", "danger", "success"]),
|
|
570
|
+
title: nonEmptyTrimmedString,
|
|
571
|
+
detail: trimmedString.default("")
|
|
572
|
+
});
|
|
573
|
+
export const lifeForcePayloadSchema = z.object({
|
|
574
|
+
userId: z.string(),
|
|
575
|
+
dateKey: dateOnlySchema,
|
|
576
|
+
baselineDailyAp: z.number().min(0),
|
|
577
|
+
dailyBudgetAp: z.number().min(0),
|
|
578
|
+
spentTodayAp: z.number(),
|
|
579
|
+
remainingAp: z.number(),
|
|
580
|
+
forecastAp: z.number(),
|
|
581
|
+
targetBandMinAp: z.number().min(0),
|
|
582
|
+
targetBandMaxAp: z.number().min(0),
|
|
583
|
+
instantCapacityApPerHour: z.number().min(0),
|
|
584
|
+
instantFreeApPerHour: z.number(),
|
|
585
|
+
overloadApPerHour: z.number().min(0),
|
|
586
|
+
currentDrainApPerHour: z.number().min(0),
|
|
587
|
+
fatigueBufferApPerHour: z.number().min(0),
|
|
588
|
+
sleepRecoveryMultiplier: z.number().min(0),
|
|
589
|
+
readinessMultiplier: z.number().min(0),
|
|
590
|
+
fatigueDebtCarry: z.number().min(0),
|
|
591
|
+
stats: z.array(lifeForceStatStateSchema),
|
|
592
|
+
currentCurve: z.array(lifeForceCurvePointSchema),
|
|
593
|
+
activeDrains: z.array(lifeForceDrainEntrySchema),
|
|
594
|
+
warnings: z.array(lifeForceWarningSchema),
|
|
595
|
+
recommendations: z.array(trimmedString),
|
|
596
|
+
topTaskIdsNeedingSplit: z.array(z.string()),
|
|
597
|
+
updatedAt: z.string()
|
|
598
|
+
});
|
|
450
599
|
export const noteLinkSchema = z.object({
|
|
451
600
|
entityType: crudEntityTypeSchema,
|
|
452
601
|
entityId: nonEmptyTrimmedString,
|
|
@@ -558,10 +707,12 @@ export const taskSchema = z.object({
|
|
|
558
707
|
.number()
|
|
559
708
|
.int()
|
|
560
709
|
.min(60)
|
|
561
|
-
.max(86_400)
|
|
710
|
+
.max(7 * 86_400)
|
|
562
711
|
.nullable()
|
|
563
|
-
.default(
|
|
712
|
+
.default(86_400),
|
|
564
713
|
schedulingRules: calendarSchedulingRulesSchema.nullable().default(null),
|
|
714
|
+
resolutionKind: taskResolutionKindSchema.nullable().default(null),
|
|
715
|
+
splitParentTaskId: z.string().nullable().default(null),
|
|
565
716
|
completedAt: z.string().nullable(),
|
|
566
717
|
createdAt: z.string(),
|
|
567
718
|
updatedAt: z.string(),
|
|
@@ -576,6 +727,20 @@ export const taskSchema = z.object({
|
|
|
576
727
|
activeRunCount: 0,
|
|
577
728
|
hasCurrentRun: false,
|
|
578
729
|
currentRunId: null
|
|
730
|
+
}),
|
|
731
|
+
actionPointSummary: taskActionPointSummarySchema.default({
|
|
732
|
+
costBand: "standard",
|
|
733
|
+
totalCostAp: 100,
|
|
734
|
+
expectedDurationSeconds: 86_400,
|
|
735
|
+
sustainRateApPerHour: 100 / 24,
|
|
736
|
+
spentTodayAp: 0,
|
|
737
|
+
spentTotalAp: 0,
|
|
738
|
+
remainingAp: 100
|
|
739
|
+
}),
|
|
740
|
+
splitSuggestion: taskSplitSuggestionSchema.default({
|
|
741
|
+
shouldSplit: false,
|
|
742
|
+
reason: null,
|
|
743
|
+
thresholdSeconds: 2 * 86_400
|
|
579
744
|
})
|
|
580
745
|
});
|
|
581
746
|
export const taskRunSchema = z.object({
|
|
@@ -1220,6 +1385,9 @@ export const themePreferenceSchema = z.enum([
|
|
|
1220
1385
|
"solar",
|
|
1221
1386
|
"aurora",
|
|
1222
1387
|
"ember",
|
|
1388
|
+
"paper",
|
|
1389
|
+
"dawn",
|
|
1390
|
+
"atelier",
|
|
1223
1391
|
"custom",
|
|
1224
1392
|
"system"
|
|
1225
1393
|
]);
|
|
@@ -1249,10 +1417,29 @@ export const microsoftCalendarAuthSettingsSchema = z.object({
|
|
|
1249
1417
|
isReadyForSignIn: z.boolean(),
|
|
1250
1418
|
setupMessage: z.string()
|
|
1251
1419
|
});
|
|
1420
|
+
export const googleCalendarAuthSettingsSchema = z.object({
|
|
1421
|
+
clientId: z.string(),
|
|
1422
|
+
clientSecret: z.string(),
|
|
1423
|
+
storedClientId: z.string(),
|
|
1424
|
+
storedClientSecret: z.string(),
|
|
1425
|
+
appBaseUrl: z.string(),
|
|
1426
|
+
redirectUri: z.string(),
|
|
1427
|
+
allowedOrigins: z.array(z.string()),
|
|
1428
|
+
usesPkce: z.literal(true),
|
|
1429
|
+
requiresServerClientSecret: z.literal(false),
|
|
1430
|
+
oauthClientType: z.literal("desktop_app"),
|
|
1431
|
+
authMode: z.literal("localhost_pkce"),
|
|
1432
|
+
isConfigured: z.boolean(),
|
|
1433
|
+
isReadyForPairing: z.boolean(),
|
|
1434
|
+
isLocalOnly: z.literal(true),
|
|
1435
|
+
runtimeOrigin: z.string(),
|
|
1436
|
+
setupMessage: z.string()
|
|
1437
|
+
});
|
|
1252
1438
|
export const aiModelProviderSchema = z.enum([
|
|
1253
1439
|
"openai-api",
|
|
1254
1440
|
"openai-codex",
|
|
1255
|
-
"openai-compatible"
|
|
1441
|
+
"openai-compatible",
|
|
1442
|
+
"mock"
|
|
1256
1443
|
]);
|
|
1257
1444
|
export const aiModelAuthModeSchema = z.enum(["api_key", "oauth"]);
|
|
1258
1445
|
export const aiModelConnectionStatusSchema = z.enum([
|
|
@@ -1414,17 +1601,59 @@ export const forgeBoxToolAdapterSchema = z.object({
|
|
|
1414
1601
|
key: nonEmptyTrimmedString,
|
|
1415
1602
|
label: nonEmptyTrimmedString,
|
|
1416
1603
|
description: trimmedString.default(""),
|
|
1417
|
-
accessMode: aiProcessorAccessModeSchema.default("read")
|
|
1604
|
+
accessMode: aiProcessorAccessModeSchema.default("read"),
|
|
1605
|
+
argsSchema: z.record(z.string(), z.unknown()).optional()
|
|
1606
|
+
});
|
|
1607
|
+
const workbenchPortKindSchema = z
|
|
1608
|
+
.enum([...WORKBENCH_PORT_KINDS, ...LEGACY_WORKBENCH_PORT_KINDS])
|
|
1609
|
+
.transform((value) => normalizeWorkbenchPortKind({ kind: value }));
|
|
1610
|
+
export const forgeBoxPortShapeFieldSchema = z.object({
|
|
1611
|
+
key: nonEmptyTrimmedString,
|
|
1612
|
+
label: nonEmptyTrimmedString,
|
|
1613
|
+
kind: workbenchPortKindSchema.default("record"),
|
|
1614
|
+
description: trimmedString.optional(),
|
|
1615
|
+
required: z.boolean().default(false)
|
|
1616
|
+
});
|
|
1617
|
+
export const forgeBoxPortDefinitionSchema = z.object({
|
|
1618
|
+
key: nonEmptyTrimmedString,
|
|
1619
|
+
label: nonEmptyTrimmedString,
|
|
1620
|
+
kind: workbenchPortKindSchema.default("record"),
|
|
1621
|
+
description: trimmedString.optional(),
|
|
1622
|
+
required: z.boolean().default(false),
|
|
1623
|
+
expandableKeys: z.array(nonEmptyTrimmedString).default([]),
|
|
1624
|
+
modelName: trimmedString.optional(),
|
|
1625
|
+
itemKind: trimmedString.optional(),
|
|
1626
|
+
shape: z.array(forgeBoxPortShapeFieldSchema).default([]),
|
|
1627
|
+
exampleValue: trimmedString.optional()
|
|
1628
|
+
});
|
|
1629
|
+
export const aiConnectorPublicInputBindingSchema = z.object({
|
|
1630
|
+
nodeId: nonEmptyTrimmedString,
|
|
1631
|
+
targetKey: nonEmptyTrimmedString,
|
|
1632
|
+
targetKind: z.enum(["input", "param"]).default("input")
|
|
1633
|
+
});
|
|
1634
|
+
export const aiConnectorPublicInputSchema = forgeBoxPortDefinitionSchema.extend({
|
|
1635
|
+
defaultValue: z.unknown().optional(),
|
|
1636
|
+
bindings: z.array(aiConnectorPublicInputBindingSchema).default([])
|
|
1418
1637
|
});
|
|
1419
1638
|
export const forgeBoxCatalogEntrySchema = z.object({
|
|
1420
|
-
|
|
1639
|
+
id: nonEmptyTrimmedString,
|
|
1640
|
+
boxId: trimmedString.optional(),
|
|
1421
1641
|
surfaceId: trimmedString.nullable(),
|
|
1422
1642
|
routePath: trimmedString.nullable(),
|
|
1423
|
-
|
|
1643
|
+
title: nonEmptyTrimmedString,
|
|
1644
|
+
label: trimmedString.optional(),
|
|
1645
|
+
icon: trimmedString.nullable().optional(),
|
|
1424
1646
|
description: trimmedString.default(""),
|
|
1425
1647
|
category: nonEmptyTrimmedString,
|
|
1426
|
-
|
|
1427
|
-
|
|
1648
|
+
tags: z.array(nonEmptyTrimmedString).default([]),
|
|
1649
|
+
capabilityModes: z.array(forgeBoxCapabilityModeSchema).default(["content"]).optional(),
|
|
1650
|
+
inputs: z.array(forgeBoxPortDefinitionSchema).default([]),
|
|
1651
|
+
params: z.array(forgeBoxPortDefinitionSchema).default([]),
|
|
1652
|
+
output: z.array(forgeBoxPortDefinitionSchema).default([]),
|
|
1653
|
+
tools: z.array(forgeBoxToolAdapterSchema).default([]),
|
|
1654
|
+
outputs: z.array(forgeBoxPortDefinitionSchema).default([]).optional(),
|
|
1655
|
+
toolAdapters: z.array(forgeBoxToolAdapterSchema).default([]).optional(),
|
|
1656
|
+
snapshotResolverKey: trimmedString.optional()
|
|
1428
1657
|
});
|
|
1429
1658
|
export const forgeBoxSnapshotSchema = z.object({
|
|
1430
1659
|
boxId: nonEmptyTrimmedString,
|
|
@@ -1436,11 +1665,16 @@ export const forgeBoxSnapshotSchema = z.object({
|
|
|
1436
1665
|
});
|
|
1437
1666
|
export const aiConnectorKindSchema = z.enum(["functor", "chat"]);
|
|
1438
1667
|
export const aiConnectorNodeTypeSchema = z.enum([
|
|
1668
|
+
"box",
|
|
1439
1669
|
"box_input",
|
|
1670
|
+
"value",
|
|
1440
1671
|
"user_input",
|
|
1441
1672
|
"functor",
|
|
1442
1673
|
"chat",
|
|
1443
|
-
"output"
|
|
1674
|
+
"output",
|
|
1675
|
+
"merge",
|
|
1676
|
+
"template",
|
|
1677
|
+
"pick_key"
|
|
1444
1678
|
]);
|
|
1445
1679
|
export const aiConnectorNodeModelConfigSchema = z.object({
|
|
1446
1680
|
connectionId: trimmedString.nullable().default(null),
|
|
@@ -1462,9 +1696,20 @@ export const aiConnectorNodeSchema = z.object({
|
|
|
1462
1696
|
description: trimmedString.default(""),
|
|
1463
1697
|
boxId: trimmedString.nullable().optional(),
|
|
1464
1698
|
prompt: trimmedString.optional(),
|
|
1699
|
+
promptTemplate: trimmedString.optional(),
|
|
1465
1700
|
systemPrompt: trimmedString.optional(),
|
|
1466
1701
|
outputKey: trimmedString.optional(),
|
|
1467
1702
|
enabledToolKeys: z.array(nonEmptyTrimmedString).default([]),
|
|
1703
|
+
inputs: z.array(forgeBoxPortDefinitionSchema).default([]).optional(),
|
|
1704
|
+
outputs: z.array(forgeBoxPortDefinitionSchema).default([]).optional(),
|
|
1705
|
+
params: z.array(forgeBoxPortDefinitionSchema).default([]).optional(),
|
|
1706
|
+
paramValues: z.record(z.string(), z.unknown()).default({}).optional(),
|
|
1707
|
+
template: trimmedString.optional(),
|
|
1708
|
+
selectedKey: trimmedString.optional(),
|
|
1709
|
+
valueType: z
|
|
1710
|
+
.enum(["string", "number", "boolean", "null", "array", "object"])
|
|
1711
|
+
.optional(),
|
|
1712
|
+
valueLiteral: trimmedString.optional(),
|
|
1468
1713
|
modelConfig: aiConnectorNodeModelConfigSchema.optional()
|
|
1469
1714
|
})
|
|
1470
1715
|
});
|
|
@@ -1488,7 +1733,55 @@ export const aiConnectorRunResultSchema = z.object({
|
|
|
1488
1733
|
label: z.string(),
|
|
1489
1734
|
text: z.string(),
|
|
1490
1735
|
json: z.record(z.string(), z.unknown()).nullable()
|
|
1736
|
+
})),
|
|
1737
|
+
nodeResults: z
|
|
1738
|
+
.array(z.object({
|
|
1739
|
+
nodeId: nonEmptyTrimmedString,
|
|
1740
|
+
nodeType: aiConnectorNodeTypeSchema,
|
|
1741
|
+
label: nonEmptyTrimmedString,
|
|
1742
|
+
input: z.array(z.object({
|
|
1743
|
+
sourceNodeId: nonEmptyTrimmedString,
|
|
1744
|
+
sourceHandle: trimmedString.nullable(),
|
|
1745
|
+
targetHandle: trimmedString.nullable(),
|
|
1746
|
+
text: z.string(),
|
|
1747
|
+
json: z.record(z.string(), z.unknown()).nullable()
|
|
1748
|
+
})),
|
|
1749
|
+
primaryText: z.string(),
|
|
1750
|
+
payload: z.record(z.string(), z.unknown()).nullable(),
|
|
1751
|
+
outputMap: z.record(z.string(), z.object({
|
|
1752
|
+
text: z.string(),
|
|
1753
|
+
json: z.record(z.string(), z.unknown()).nullable()
|
|
1754
|
+
})),
|
|
1755
|
+
tools: z.array(z.string()).default([]),
|
|
1756
|
+
logs: z.array(z.string()).default([]),
|
|
1757
|
+
error: z.string().nullable(),
|
|
1758
|
+
timingMs: z.number().int().nonnegative().nullable().optional()
|
|
1491
1759
|
}))
|
|
1760
|
+
.default([]),
|
|
1761
|
+
debugTrace: z
|
|
1762
|
+
.object({
|
|
1763
|
+
nodes: z.array(z.object({
|
|
1764
|
+
nodeId: nonEmptyTrimmedString,
|
|
1765
|
+
nodeType: aiConnectorNodeTypeSchema,
|
|
1766
|
+
label: nonEmptyTrimmedString,
|
|
1767
|
+
input: z.array(z.object({
|
|
1768
|
+
sourceNodeId: nonEmptyTrimmedString,
|
|
1769
|
+
sourceHandle: trimmedString.nullable(),
|
|
1770
|
+
targetHandle: trimmedString.nullable(),
|
|
1771
|
+
text: z.string(),
|
|
1772
|
+
json: z.record(z.string(), z.unknown()).nullable()
|
|
1773
|
+
})),
|
|
1774
|
+
output: z.object({
|
|
1775
|
+
text: z.string(),
|
|
1776
|
+
json: z.record(z.string(), z.unknown()).nullable()
|
|
1777
|
+
}),
|
|
1778
|
+
tools: z.array(z.string()).default([]),
|
|
1779
|
+
logs: z.array(z.string()).default([]),
|
|
1780
|
+
error: z.string().nullable()
|
|
1781
|
+
})),
|
|
1782
|
+
errors: z.array(z.string()).default([])
|
|
1783
|
+
})
|
|
1784
|
+
.optional()
|
|
1492
1785
|
});
|
|
1493
1786
|
export const aiConnectorRunSchema = z.object({
|
|
1494
1787
|
id: nonEmptyTrimmedString,
|
|
@@ -1496,6 +1789,7 @@ export const aiConnectorRunSchema = z.object({
|
|
|
1496
1789
|
mode: z.enum(["run", "chat"]),
|
|
1497
1790
|
status: z.enum(["running", "completed", "failed"]),
|
|
1498
1791
|
userInput: z.string(),
|
|
1792
|
+
inputs: z.record(z.string(), z.unknown()).default({}),
|
|
1499
1793
|
context: z.record(z.string(), z.unknown()).default({}),
|
|
1500
1794
|
conversationId: trimmedString.nullable(),
|
|
1501
1795
|
result: aiConnectorRunResultSchema.nullable(),
|
|
@@ -1528,6 +1822,7 @@ export const aiConnectorSchema = z.object({
|
|
|
1528
1822
|
nodes: z.array(aiConnectorNodeSchema).default([]),
|
|
1529
1823
|
edges: z.array(aiConnectorEdgeSchema).default([])
|
|
1530
1824
|
}),
|
|
1825
|
+
publicInputs: z.array(aiConnectorPublicInputSchema).default([]),
|
|
1531
1826
|
publishedOutputs: z.array(aiConnectorOutputSchema).default([]),
|
|
1532
1827
|
lastRun: aiConnectorRunSchema.nullable(),
|
|
1533
1828
|
legacyProcessorId: trimmedString.nullable().default(null),
|
|
@@ -1792,6 +2087,7 @@ export const settingsPayloadSchema = z.object({
|
|
|
1792
2087
|
psycheAuthRequired: z.boolean()
|
|
1793
2088
|
}),
|
|
1794
2089
|
calendarProviders: z.object({
|
|
2090
|
+
google: googleCalendarAuthSettingsSchema,
|
|
1795
2091
|
microsoft: microsoftCalendarAuthSettingsSchema
|
|
1796
2092
|
}),
|
|
1797
2093
|
modelSettings: modelSettingsPayloadSchema,
|
|
@@ -1982,6 +2278,8 @@ export const activityListQuerySchema = z.object({
|
|
|
1982
2278
|
entityType: activityEntityTypeSchema.optional(),
|
|
1983
2279
|
entityId: nonEmptyTrimmedString.optional(),
|
|
1984
2280
|
source: activitySourceSchema.optional(),
|
|
2281
|
+
from: flexibleCalendarQueryDateSchema.optional(),
|
|
2282
|
+
to: flexibleCalendarQueryDateSchema.optional(),
|
|
1985
2283
|
includeCorrected: z.coerce.boolean().optional(),
|
|
1986
2284
|
userIds: repeatedTrimmedStringQuerySchema.optional(),
|
|
1987
2285
|
limit: z.coerce.number().int().positive().max(100).optional()
|
|
@@ -2004,14 +2302,28 @@ export const calendarOverviewQuerySchema = z.object({
|
|
|
2004
2302
|
to: flexibleCalendarQueryDateSchema.optional(),
|
|
2005
2303
|
userIds: repeatedTrimmedStringQuerySchema.optional()
|
|
2006
2304
|
});
|
|
2305
|
+
export const psycheObservationCalendarExportFormatSchema = z.enum([
|
|
2306
|
+
"json",
|
|
2307
|
+
"csv",
|
|
2308
|
+
"markdown",
|
|
2309
|
+
"ics"
|
|
2310
|
+
]);
|
|
2311
|
+
export const psycheObservationCalendarExportQuerySchema = z.object({
|
|
2312
|
+
from: flexibleCalendarQueryDateSchema.optional(),
|
|
2313
|
+
to: flexibleCalendarQueryDateSchema.optional(),
|
|
2314
|
+
userIds: repeatedTrimmedStringQuerySchema.optional(),
|
|
2315
|
+
tags: repeatedTrimmedStringQuerySchema.optional(),
|
|
2316
|
+
includeObservations: z.coerce.boolean().optional(),
|
|
2317
|
+
includeActivity: z.coerce.boolean().optional(),
|
|
2318
|
+
onlyHumanOwned: z.coerce.boolean().optional(),
|
|
2319
|
+
search: trimmedString.optional(),
|
|
2320
|
+
format: psycheObservationCalendarExportFormatSchema.default("markdown")
|
|
2321
|
+
});
|
|
2007
2322
|
export const createCalendarConnectionSchema = z.discriminatedUnion("provider", [
|
|
2008
2323
|
z.object({
|
|
2009
2324
|
provider: z.literal("google"),
|
|
2010
2325
|
label: nonEmptyTrimmedString,
|
|
2011
|
-
|
|
2012
|
-
clientId: nonEmptyTrimmedString,
|
|
2013
|
-
clientSecret: nonEmptyTrimmedString,
|
|
2014
|
-
refreshToken: nonEmptyTrimmedString,
|
|
2326
|
+
authSessionId: nonEmptyTrimmedString,
|
|
2015
2327
|
selectedCalendarUrls: z.array(nonEmptyTrimmedString.url()).min(1),
|
|
2016
2328
|
forgeCalendarUrl: nonEmptyTrimmedString.url().nullable().optional(),
|
|
2017
2329
|
createForgeCalendar: z.boolean().optional().default(false)
|
|
@@ -2043,13 +2355,6 @@ export const createCalendarConnectionSchema = z.discriminatedUnion("provider", [
|
|
|
2043
2355
|
})
|
|
2044
2356
|
]);
|
|
2045
2357
|
export const discoverCalendarConnectionSchema = z.discriminatedUnion("provider", [
|
|
2046
|
-
z.object({
|
|
2047
|
-
provider: z.literal("google"),
|
|
2048
|
-
username: nonEmptyTrimmedString,
|
|
2049
|
-
clientId: nonEmptyTrimmedString,
|
|
2050
|
-
clientSecret: nonEmptyTrimmedString,
|
|
2051
|
-
refreshToken: nonEmptyTrimmedString
|
|
2052
|
-
}),
|
|
2053
2358
|
z.object({
|
|
2054
2359
|
provider: z.literal("apple"),
|
|
2055
2360
|
username: nonEmptyTrimmedString,
|
|
@@ -2065,6 +2370,10 @@ export const discoverCalendarConnectionSchema = z.discriminatedUnion("provider",
|
|
|
2065
2370
|
export const startMicrosoftCalendarOauthSchema = z.object({
|
|
2066
2371
|
label: nonEmptyTrimmedString.optional()
|
|
2067
2372
|
});
|
|
2373
|
+
export const startGoogleCalendarOauthSchema = z.object({
|
|
2374
|
+
label: nonEmptyTrimmedString.optional(),
|
|
2375
|
+
browserOrigin: trimmedString.optional()
|
|
2376
|
+
});
|
|
2068
2377
|
export const testMicrosoftCalendarOauthConfigurationSchema = z.object({
|
|
2069
2378
|
clientId: nonEmptyTrimmedString.regex(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/, "Microsoft client IDs must use the standard app registration GUID format."),
|
|
2070
2379
|
tenantId: trimmedString.default("common"),
|
|
@@ -2078,6 +2387,14 @@ export const microsoftCalendarOauthSessionSchema = z.object({
|
|
|
2078
2387
|
error: z.string().nullable(),
|
|
2079
2388
|
discovery: calendarDiscoveryPayloadSchema.nullable()
|
|
2080
2389
|
});
|
|
2390
|
+
export const googleCalendarOauthSessionSchema = z.object({
|
|
2391
|
+
sessionId: nonEmptyTrimmedString,
|
|
2392
|
+
status: z.enum(["pending", "authorized", "error", "consumed", "expired"]),
|
|
2393
|
+
authUrl: z.string().url().nullable(),
|
|
2394
|
+
accountLabel: z.string().nullable(),
|
|
2395
|
+
error: z.string().nullable(),
|
|
2396
|
+
discovery: calendarDiscoveryPayloadSchema.nullable()
|
|
2397
|
+
});
|
|
2081
2398
|
export const updateCalendarConnectionSchema = z.object({
|
|
2082
2399
|
label: nonEmptyTrimmedString.optional(),
|
|
2083
2400
|
selectedCalendarUrls: z.array(nonEmptyTrimmedString.url()).optional()
|
|
@@ -2288,6 +2605,7 @@ export const habitListQuerySchema = z.object({
|
|
|
2288
2605
|
status: habitStatusSchema.optional(),
|
|
2289
2606
|
polarity: habitPolaritySchema.optional(),
|
|
2290
2607
|
dueToday: z.coerce.boolean().optional(),
|
|
2608
|
+
orderBy: habitOrderBySchema.optional(),
|
|
2291
2609
|
userIds: repeatedTrimmedStringQuerySchema.optional(),
|
|
2292
2610
|
limit: z.coerce.number().int().positive().max(100).optional()
|
|
2293
2611
|
});
|
|
@@ -2360,12 +2678,13 @@ export const taskMutationShape = {
|
|
|
2360
2678
|
.number()
|
|
2361
2679
|
.int()
|
|
2362
2680
|
.min(60)
|
|
2363
|
-
.max(86_400)
|
|
2681
|
+
.max(7 * 86_400)
|
|
2364
2682
|
.nullable()
|
|
2365
|
-
.default(
|
|
2683
|
+
.default(86_400),
|
|
2366
2684
|
schedulingRules: calendarSchedulingRulesSchema.nullable().default(null),
|
|
2367
2685
|
sortOrder: z.number().int().nonnegative().optional(),
|
|
2368
2686
|
tagIds: uniqueStringArraySchema.default([]),
|
|
2687
|
+
actionCostBand: actionCostBandSchema.default("standard"),
|
|
2369
2688
|
notes: z.array(nestedCreateNoteSchema).default([])
|
|
2370
2689
|
};
|
|
2371
2690
|
export const createTaskSchema = z.object(taskMutationShape);
|
|
@@ -2508,14 +2827,44 @@ export const updateTaskSchema = z.object({
|
|
|
2508
2827
|
.number()
|
|
2509
2828
|
.int()
|
|
2510
2829
|
.min(60)
|
|
2511
|
-
.max(86_400)
|
|
2830
|
+
.max(7 * 86_400)
|
|
2512
2831
|
.nullable()
|
|
2513
2832
|
.optional(),
|
|
2514
2833
|
schedulingRules: calendarSchedulingRulesSchema.nullable().optional(),
|
|
2834
|
+
resolutionKind: taskResolutionKindSchema.nullable().optional(),
|
|
2835
|
+
splitParentTaskId: z.string().nullable().optional(),
|
|
2836
|
+
enforceTodayWorkLog: z.boolean().optional(),
|
|
2837
|
+
completedTodayWorkSeconds: z
|
|
2838
|
+
.number()
|
|
2839
|
+
.int()
|
|
2840
|
+
.min(0)
|
|
2841
|
+
.max(7 * 86_400)
|
|
2842
|
+
.optional(),
|
|
2843
|
+
actionCostBand: actionCostBandSchema.optional(),
|
|
2515
2844
|
sortOrder: z.number().int().nonnegative().optional(),
|
|
2516
2845
|
tagIds: uniqueStringArraySchema.optional(),
|
|
2517
2846
|
notes: z.array(nestedCreateNoteSchema).optional()
|
|
2518
2847
|
});
|
|
2848
|
+
export const lifeForceProfilePatchSchema = z.object({
|
|
2849
|
+
baseDailyAp: z.number().int().min(50).max(500).optional(),
|
|
2850
|
+
readinessMultiplier: z.number().min(0.5).max(1.5).optional(),
|
|
2851
|
+
stats: z
|
|
2852
|
+
.record(lifeForceStatKeySchema, z.number().int().min(1).max(100))
|
|
2853
|
+
.optional()
|
|
2854
|
+
});
|
|
2855
|
+
export const lifeForceTemplateUpdateSchema = z.object({
|
|
2856
|
+
points: z.array(lifeForceCurvePointSchema).min(2)
|
|
2857
|
+
});
|
|
2858
|
+
export const fatigueSignalCreateSchema = z.object({
|
|
2859
|
+
signalType: z.enum(["tired", "okay_again"]),
|
|
2860
|
+
observedAt: dateTimeSchema.optional(),
|
|
2861
|
+
note: trimmedString.optional()
|
|
2862
|
+
});
|
|
2863
|
+
export const taskSplitCreateSchema = z.object({
|
|
2864
|
+
firstTitle: nonEmptyTrimmedString,
|
|
2865
|
+
secondTitle: nonEmptyTrimmedString,
|
|
2866
|
+
remainingRatio: z.number().min(0.1).max(0.9).default(0.5)
|
|
2867
|
+
});
|
|
2519
2868
|
export const tagSuggestionRequestSchema = z.object({
|
|
2520
2869
|
title: trimmedString.default(""),
|
|
2521
2870
|
description: trimmedString.default(""),
|
|
@@ -2595,6 +2944,12 @@ export const updateSettingsSchema = z.object({
|
|
|
2595
2944
|
.optional(),
|
|
2596
2945
|
calendarProviders: z
|
|
2597
2946
|
.object({
|
|
2947
|
+
google: z
|
|
2948
|
+
.object({
|
|
2949
|
+
clientId: trimmedString.optional(),
|
|
2950
|
+
clientSecret: trimmedString.optional()
|
|
2951
|
+
})
|
|
2952
|
+
.optional(),
|
|
2598
2953
|
microsoft: z
|
|
2599
2954
|
.object({
|
|
2600
2955
|
clientId: trimmedString.optional(),
|
|
@@ -2603,7 +2958,37 @@ export const updateSettingsSchema = z.object({
|
|
|
2603
2958
|
})
|
|
2604
2959
|
.optional()
|
|
2605
2960
|
})
|
|
2606
|
-
.optional()
|
|
2961
|
+
.optional()
|
|
2962
|
+
.superRefine((value, context) => {
|
|
2963
|
+
if (!value) {
|
|
2964
|
+
return;
|
|
2965
|
+
}
|
|
2966
|
+
const google = value.google;
|
|
2967
|
+
if (!google) {
|
|
2968
|
+
return;
|
|
2969
|
+
}
|
|
2970
|
+
const hasClientIdField = google.clientId !== undefined;
|
|
2971
|
+
const hasClientSecretField = google.clientSecret !== undefined;
|
|
2972
|
+
const hasClientIdValue = (google.clientId?.length ?? 0) > 0;
|
|
2973
|
+
const hasClientSecretValue = (google.clientSecret?.length ?? 0) > 0;
|
|
2974
|
+
if (hasClientIdField !== hasClientSecretField) {
|
|
2975
|
+
const message = "When overriding Google OAuth credentials, provide both the client ID and client secret together, or clear both fields together.";
|
|
2976
|
+
context.addIssue({
|
|
2977
|
+
code: z.ZodIssueCode.custom,
|
|
2978
|
+
path: ["google", hasClientIdField ? "clientSecret" : "clientId"],
|
|
2979
|
+
message
|
|
2980
|
+
});
|
|
2981
|
+
return;
|
|
2982
|
+
}
|
|
2983
|
+
if (hasClientIdValue !== hasClientSecretValue) {
|
|
2984
|
+
const message = "When overriding Google OAuth credentials, provide both the client ID and client secret together, or clear both fields together.";
|
|
2985
|
+
context.addIssue({
|
|
2986
|
+
code: z.ZodIssueCode.custom,
|
|
2987
|
+
path: ["google", hasClientIdValue ? "clientSecret" : "clientId"],
|
|
2988
|
+
message
|
|
2989
|
+
});
|
|
2990
|
+
}
|
|
2991
|
+
}),
|
|
2607
2992
|
modelSettings: z
|
|
2608
2993
|
.object({
|
|
2609
2994
|
forgeAgent: z
|
|
@@ -2640,6 +3025,7 @@ export const upsertAiModelConnectionSchema = z
|
|
|
2640
3025
|
.superRefine((value, context) => {
|
|
2641
3026
|
const authMode = value.authMode ??
|
|
2642
3027
|
(value.provider === "openai-codex" ? "oauth" : "api_key");
|
|
3028
|
+
const isMockProvider = value.provider === "mock";
|
|
2643
3029
|
if (value.provider === "openai-codex" && authMode !== "oauth") {
|
|
2644
3030
|
context.addIssue({
|
|
2645
3031
|
code: z.ZodIssueCode.custom,
|
|
@@ -2648,6 +3034,7 @@ export const upsertAiModelConnectionSchema = z
|
|
|
2648
3034
|
});
|
|
2649
3035
|
}
|
|
2650
3036
|
if (authMode === "api_key" &&
|
|
3037
|
+
!isMockProvider &&
|
|
2651
3038
|
!value.id?.trim() &&
|
|
2652
3039
|
!value.apiKey?.trim()) {
|
|
2653
3040
|
context.addIssue({
|
|
@@ -2724,6 +3111,7 @@ export const createAiConnectorSchema = z.object({
|
|
|
2724
3111
|
kind: aiConnectorKindSchema.default("functor"),
|
|
2725
3112
|
homeSurfaceId: trimmedString.nullable().default(null),
|
|
2726
3113
|
endpointEnabled: z.boolean().default(true),
|
|
3114
|
+
publicInputs: z.array(aiConnectorPublicInputSchema).default([]),
|
|
2727
3115
|
graph: z
|
|
2728
3116
|
.object({
|
|
2729
3117
|
nodes: z.array(aiConnectorNodeSchema).default([]),
|
|
@@ -2737,6 +3125,7 @@ export const updateAiConnectorSchema = z.object({
|
|
|
2737
3125
|
kind: aiConnectorKindSchema.optional(),
|
|
2738
3126
|
homeSurfaceId: trimmedString.nullable().optional(),
|
|
2739
3127
|
endpointEnabled: z.boolean().optional(),
|
|
3128
|
+
publicInputs: z.array(aiConnectorPublicInputSchema).optional(),
|
|
2740
3129
|
graph: z
|
|
2741
3130
|
.object({
|
|
2742
3131
|
nodes: z.array(aiConnectorNodeSchema).default([]),
|
|
@@ -2746,9 +3135,11 @@ export const updateAiConnectorSchema = z.object({
|
|
|
2746
3135
|
});
|
|
2747
3136
|
export const runAiConnectorSchema = z.object({
|
|
2748
3137
|
userInput: trimmedString.default(""),
|
|
3138
|
+
inputs: z.record(z.string(), z.unknown()).default({}),
|
|
2749
3139
|
context: z.record(z.string(), z.unknown()).default({}),
|
|
2750
3140
|
boxSnapshots: z.record(z.string(), z.unknown()).default({}),
|
|
2751
|
-
conversationId: trimmedString.nullable().default(null)
|
|
3141
|
+
conversationId: trimmedString.nullable().default(null),
|
|
3142
|
+
debug: z.boolean().default(false)
|
|
2752
3143
|
});
|
|
2753
3144
|
export const createAgentTokenSchema = z.object({
|
|
2754
3145
|
label: nonEmptyTrimmedString,
|