forge-openclaw-plugin 0.3.14 → 0.3.16
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 +8 -8
- package/dist/assets/{action-bar-B9MYlps2.js → action-bar-DgrmzFrI.js} +1 -1
- package/dist/assets/{activity-page-DbzbChcE.js → activity-page-CF451ueg.js} +1 -1
- package/dist/assets/{ai-surface-workspace-CF0257Hs.js → ai-surface-workspace-DtwybxJB.js} +1 -1
- package/dist/assets/{atlas-panel-CO3RYAKn.js → atlas-panel-CB3uYk_K.js} +1 -1
- package/dist/assets/{calendar-page-BuuHKEHC.js → calendar-page-BYsDuLnh.js} +1 -1
- package/dist/assets/{calendar-rules-DKftgNx5.js → calendar-rules-DXuOv2J-.js} +1 -1
- package/dist/assets/{calendar-week-toolbar-ChIpkT-G.js → calendar-week-toolbar-8PJmiUE_.js} +1 -1
- package/dist/assets/{companion-sync-lab-page-BZRX4Btw.js → companion-sync-lab-page-DzWNOaBh.js} +1 -1
- package/dist/assets/{daily-metrics-dashboard-CXDsaAQd.js → daily-metrics-dashboard-CHcYxDhs.js} +1 -1
- package/dist/assets/{define-workbench-box-CpG0Zb1L.js → define-workbench-box-DcI0_QKW.js} +1 -1
- package/dist/assets/{entity-link-multiselect-Dl4rZqdg.js → entity-link-multiselect-C--AiCMb.js} +1 -1
- package/dist/assets/{entity-note-count-link-Bs1aKYyD.js → entity-note-count-link-xne6mshj.js} +1 -1
- package/dist/assets/{entity-notes-surface-B56XSw7M.js → entity-notes-surface-jy6Psist.js} +1 -1
- package/dist/assets/{execution-board-D66C_ikW.js → execution-board-BSUZCIIx.js} +1 -1
- package/dist/assets/{faceted-token-search-Dg2rjknH.js → faceted-token-search-BMQ1Wwzt.js} +1 -1
- package/dist/assets/{flagship-signal-deck-C6KVPhmM.js → flagship-signal-deck-DjcskRwF.js} +1 -1
- package/dist/assets/{floating-action-menu-DAFAEBcA.js → floating-action-menu-cGhbJ2tc.js} +1 -1
- package/dist/assets/{generic-node-view-C6DK5hJ6.js → generic-node-view-DNVwfqqq.js} +1 -1
- package/dist/assets/{goal-detail-page-CC4VXud6.js → goal-detail-page-dAbyCilO.js} +1 -1
- package/dist/assets/{goal-dialog-15hD8EBp.js → goal-dialog-DH50D0tP.js} +1 -1
- package/dist/assets/{goals-page-CQ2lJMzI.js → goals-page-DkMy9mPD.js} +1 -1
- package/dist/assets/{habits-page-a7KVPaQp.js → habits-page-CCQR8rg6.js} +1 -1
- package/dist/assets/{health-boxes-DqgvIYoL.js → health-boxes-BPTgGM6G.js} +1 -1
- package/dist/assets/index-VzCGTBS_.css +1 -0
- package/dist/assets/{index-FpGANF9S.js → index-izRKx6JK.js} +2 -2
- package/dist/assets/{inline-note-fields-COgzxr_7.js → inline-note-fields-D4mCM1gO.js} +1 -1
- package/dist/assets/{insight-flow-dialog-Dmb6NSGp.js → insight-flow-dialog-Btp6bkbV.js} +1 -1
- package/dist/assets/{insights-page-OnqR4cYI.js → insights-page-1qM4mxjS.js} +1 -1
- package/dist/assets/{kanban-boxes-BWUzntCV.js → kanban-boxes-u_A-UJG-.js} +1 -1
- package/dist/assets/{kanban-page-BI16Gzp_.js → kanban-page-CKCa_3Qb.js} +1 -1
- package/dist/assets/{knowledge-graph-page-DxEBaEke.js → knowledge-graph-page-BZOxRv19.js} +1 -1
- package/dist/assets/{life-force-page-CDEXEQai.js → life-force-page-BZlyA144.js} +1 -1
- package/dist/assets/{life-force-workspace-C7UOnJEf.js → life-force-workspace-CtAWZXNw.js} +1 -1
- package/dist/assets/{metric-tile-boeHB1R1.js → metric-tile-Bkx2btO2.js} +1 -1
- package/dist/assets/{movement-boxes-BUSqaTL2.js → movement-boxes-QZ2EIS9q.js} +1 -1
- package/dist/assets/{movement-page-DcbO0497.js → movement-page-B-3ihggI.js} +1 -1
- package/dist/assets/{note-markdown-DXXI3W3V.js → note-markdown-BWedRE3c.js} +1 -1
- package/dist/assets/{note-tags-input-CYh3TVW2.js → note-tags-input-DZkCqI1w.js} +1 -1
- package/dist/assets/{notes-boxes-CMJXX2K0.js → notes-boxes-DGFmt7Dp.js} +1 -1
- package/dist/assets/{notes-page-DvHMcQey.js → notes-page-DYkn04tz.js} +1 -1
- package/dist/assets/{open-in-graph-button-4UYrp1XP.js → open-in-graph-button-CjvkEj1P.js} +1 -1
- package/dist/assets/{orbit-map-BwK7sDaC.js → orbit-map-CRHSPenk.js} +1 -1
- package/dist/assets/{overview-page-Z5vaUTm3.js → overview-page-D6LsjPWe.js} +1 -1
- package/dist/assets/{page-hero-DvrM83_C.js → page-hero-BLhM8FF3.js} +1 -1
- package/dist/assets/{pill-cluster-DYI3Ibj8.js → pill-cluster-B5bYs_e2.js} +1 -1
- package/dist/assets/{preference-entity-handoff-button-C2ATjvws.js → preference-entity-handoff-button-CfCQl3cW.js} +1 -1
- package/dist/assets/{preferences-page-BAexXHye.js → preferences-page-OltGdsQ2.js} +1 -1
- package/dist/assets/{project-collections-B9nr-Ts-.js → project-collections-FfBIVwXu.js} +1 -1
- package/dist/assets/{project-detail-page-B9PqyPu9.js → project-detail-page-CCm3iZPQ.js} +1 -1
- package/dist/assets/{project-dialog-CBA-D65n.js → project-dialog-B_J1ESMk.js} +1 -1
- package/dist/assets/{project-management-hierarchy-page-DXK14jn0.js → project-management-hierarchy-page-BNzvtNZj.js} +1 -1
- package/dist/assets/{project-management-section-nav-DJ3QKCtr.js → project-management-section-nav-DBNHt9p5.js} +1 -1
- package/dist/assets/{projects-boxes-iBu_PRqe.js → projects-boxes-BvlVsO5q.js} +1 -1
- package/dist/assets/{projects-page-CdAk-ByT.js → projects-page-BUf7KV-_.js} +1 -1
- package/dist/assets/{psyche-behaviors-page-CbhhTfU2.js → psyche-behaviors-page-jtyhdpJ1.js} +1 -1
- package/dist/assets/{psyche-flashcards-page-DQaw_vUQ.js → psyche-flashcards-page-05606-97.js} +1 -1
- package/dist/assets/{psyche-goal-map-page-C-ZTVOEP.js → psyche-goal-map-page-Cw-aqS3Y.js} +1 -1
- package/dist/assets/{psyche-graph-DYzeClxn.js → psyche-graph-0E22QHPe.js} +1 -1
- package/dist/assets/{psyche-metrics-page-C9hKn10A.js → psyche-metrics-page-DBFVPeMa.js} +1 -1
- package/dist/assets/{psyche-mode-guide-page-CR8e984W.js → psyche-mode-guide-page-DI-LNEDT.js} +1 -1
- package/dist/assets/psyche-modes-page-CaMupyfi.js +1 -0
- package/dist/assets/{psyche-page-CTdIDkw9.js → psyche-page-CFBq0YKf.js} +1 -1
- package/dist/assets/{psyche-patterns-page-Drgm-f7I.js → psyche-patterns-page-sp4ikoef.js} +1 -1
- package/dist/assets/{psyche-questionnaire-builder-page-gRwdGXde.js → psyche-questionnaire-builder-page-DEt0UDsz.js} +1 -1
- package/dist/assets/{psyche-questionnaire-detail-page-CIP9b2UI.js → psyche-questionnaire-detail-page-BXQbOE6A.js} +1 -1
- package/dist/assets/{psyche-questionnaire-run-detail-page-SYndwtF3.js → psyche-questionnaire-run-detail-page-Cd3ClsSK.js} +1 -1
- package/dist/assets/{psyche-questionnaire-run-page-CXiJyd5i.js → psyche-questionnaire-run-page-D_EokOQm.js} +1 -1
- package/dist/assets/{psyche-questionnaires-page-CFPKwA3O.js → psyche-questionnaires-page-D1Ov2L4n.js} +1 -1
- package/dist/assets/{psyche-report-detail-page-dU30a2WE.js → psyche-report-detail-page-9HyPr8BJ.js} +1 -1
- package/dist/assets/{psyche-reports-page-Cn0EBndy.js → psyche-reports-page-BeyJg5fb.js} +1 -1
- package/dist/assets/{psyche-schemas-beliefs-page-Bab4xSWv.js → psyche-schemas-beliefs-page-DNmf-Vma.js} +1 -1
- package/dist/assets/{psyche-screen-time-page-lIe6GQxJ.js → psyche-screen-time-page-DJMDR5oo.js} +1 -1
- package/dist/assets/{psyche-self-observation-page-BTE3KfIl.js → psyche-self-observation-page-DFKXG1Yv.js} +1 -1
- package/dist/assets/{psyche-values-page-DclBZ9xw.js → psyche-values-page-TWKth89J.js} +1 -1
- package/dist/assets/{question-flow-dialog-Ded2E85L.js → question-flow-dialog-D-_EvoAt.js} +1 -1
- package/dist/assets/{report-chain-fields-DY640iqL.js → report-chain-fields-Dy-jBQDn.js} +1 -1
- package/dist/assets/{rewards-page-FxUXB76B.js → rewards-page-D3ymEd2X.js} +1 -1
- package/dist/assets/{scheduling-rules-editor-jakFfxqF.js → scheduling-rules-editor-CAd290IE.js} +1 -1
- package/dist/assets/{schema-badge-30B5syHA.js → schema-badge-BLaVI1D7.js} +1 -1
- package/dist/assets/{schemas-Db29G8NU.js → schemas-B0Pa-V-A.js} +1 -1
- package/dist/assets/{select-menu-BF2zI3RW.js → select-menu-DcS4Ukjf.js} +1 -1
- package/dist/assets/{settings-agents-page-Bh-Bv6FQ.js → settings-agents-page-Bt38HhEJ.js} +1 -1
- package/dist/assets/{settings-bin-page-DT8JJero.js → settings-bin-page-DqyVI1i1.js} +1 -1
- package/dist/assets/{settings-calendar-page-BA4_Qqiu.js → settings-calendar-page-DPSSZV3s.js} +1 -1
- package/dist/assets/{settings-data-page-K4kpmQJY.js → settings-data-page-BdHsD1C_.js} +1 -1
- package/dist/assets/{settings-logs-page-DkuNPAZo.js → settings-logs-page-D9OnWoFq.js} +1 -1
- package/dist/assets/{settings-mobile-page-4pCNwD91.js → settings-mobile-page-DFpsXA4M.js} +1 -1
- package/dist/assets/{settings-models-page-CZHG3t7W.js → settings-models-page-DaFXLp-O.js} +1 -1
- package/dist/assets/{settings-page-B_Be0vOY.js → settings-page-m_3iYPwU.js} +1 -1
- package/dist/assets/{settings-rewards-page-C6nFTWJu.js → settings-rewards-page-B2aBm-dA.js} +1 -1
- package/dist/assets/{settings-section-nav-Lo-VKCfZ.js → settings-section-nav-CMeU19Rx.js} +1 -1
- package/dist/assets/{settings-users-page-CVzNp4-m.js → settings-users-page-D8jyewJl.js} +1 -1
- package/dist/assets/{settings-wiki-page-DXM--7BB.js → settings-wiki-page-DjOgQJAh.js} +1 -1
- package/dist/assets/{sleep-page-DvPdZMKx.js → sleep-page-D8-dA4bE.js} +1 -1
- package/dist/assets/{sports-page-DjuZlOur.js → sports-page-CK3PgPKB.js} +1 -1
- package/dist/assets/{strategies-page-PE1IlatS.js → strategies-page-aFpJath-.js} +1 -1
- package/dist/assets/{strategy-detail-page-C4KiEGCI.js → strategy-detail-page-CobF5qLv.js} +1 -1
- package/dist/assets/{strategy-dialog-Cwf7Y3P5.js → strategy-dialog-Fgoaoob5.js} +1 -1
- package/dist/assets/{surface-ubuOfukq.js → surface-D0dqgX-k.js} +1 -1
- package/dist/assets/{task-detail-page-B3SMFZQ3.js → task-detail-page-CDK79bzk.js} +1 -1
- package/dist/assets/{task-dialog-CI_Fy_FW.js → task-dialog-eCDTF8xe.js} +4 -4
- package/dist/assets/{timebox-planning-dialog-BtFuVoA1.js → timebox-planning-dialog-CNZIGSpd.js} +1 -1
- package/dist/assets/{today-boxes-CYuxSkZf.js → today-boxes-CYfskVrM.js} +1 -1
- package/dist/assets/{today-page-CHGpLEZ3.js → today-page-Bnh8wopq.js} +1 -1
- package/dist/assets/{training-load-page-GZJF-Yy5.js → training-load-page-C7lq-jqy.js} +1 -1
- package/dist/assets/{user-badge-ByhC6bMU.js → user-badge-MEZuJiir.js} +1 -1
- package/dist/assets/{utility-widgets-ilORjDmg.js → utility-widgets-h5eG2jvc.js} +1 -1
- package/dist/assets/{vitals-page-mdEqIm_9.js → vitals-page-eoFnQ3XL.js} +1 -1
- package/dist/assets/{weekly-review-page-C8W-yg5r.js → weekly-review-page-C7BU1gkK.js} +1 -1
- package/dist/assets/{weight-loss-page-BApTknCn.js → weight-loss-page-Cc7Do3XY.js} +1 -1
- package/dist/assets/{wiki-article-markdown-DBccllQg.js → wiki-article-markdown-CCKoSptz.js} +1 -1
- package/dist/assets/{wiki-editor-page-BfRfH1O3.js → wiki-editor-page-BpbxZrgz.js} +1 -1
- package/dist/assets/{wiki-ingest-history-page-C-6H3MU6.js → wiki-ingest-history-page-D5Wfr8pc.js} +1 -1
- package/dist/assets/{wiki-ingest-modal-DnlhByD_.js → wiki-ingest-modal-DhRVsEwC.js} +1 -1
- package/dist/assets/{wiki-page-DPZ55e3x.js → wiki-page-1vf-HErs.js} +1 -1
- package/dist/assets/{workbench-flow-page-_-NKIx5R.js → workbench-flow-page-y9FxDbKO.js} +1 -1
- package/dist/assets/{workbench-page-NIAzggwX.js → workbench-page-Da16AZvN.js} +1 -1
- package/dist/assets/{workout-detail-page-3fxr6HL4.js → workout-detail-page-Cq0YamXF.js} +1 -1
- package/dist/index.html +6 -6
- package/dist/openclaw/api-client.js +28 -2
- package/dist/openclaw/index.d.ts +2 -7
- package/dist/openclaw/local-runtime.js +31 -14
- package/dist/server/{server → apps/api}/src/app.js +12 -7
- package/dist/server/{server → apps/api}/src/connectors/box-registry.js +3 -3
- package/dist/server/{server → apps/api}/src/db.js +23 -4
- package/dist/server/{server → apps/api}/src/health-weight-loss.js +1 -1
- package/dist/server/{server → apps/api}/src/openapi.js +4 -0
- package/dist/server/{server → apps/api}/src/questionnaire-seeds.js +1 -1
- package/dist/server/{server → apps/api}/src/repositories/ai-connectors.js +1 -1
- package/dist/server/{server → apps/api}/src/repositories/habits.js +1 -1
- package/dist/server/{server → apps/api}/src/services/companion-iroh.js +4 -1
- package/dist/server/{server → apps/api}/src/services/doctor.js +3 -3
- package/dist/server/{server → apps/api}/src/services/gamification-assets.js +1 -1
- package/dist/server/{server → apps/api}/src/services/gamification.js +1 -1
- package/dist/server/{server → apps/api}/src/services/knowledge-graph.js +3 -3
- package/dist/server/{server → apps/api}/src/types.js +2 -2
- package/dist/server/{server → apps/api}/src/watch-mobile.js +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +8 -6
- package/server/index.js +9 -4
- package/skills/forge-openclaw/SKILL.md +59 -13
- package/skills/forge-openclaw/entity_conversation_playbooks.md +150 -5
- package/skills/forge-openclaw/psyche_entity_playbooks.md +77 -0
- package/dist/assets/favicon-B6oXI6k4.ico +0 -0
- package/dist/assets/favicon-Bai4rhyS.png +0 -0
- package/dist/assets/favicon-ERg17ZCd.svg +0 -3
- package/dist/assets/index-ClJbJhca.css +0 -1
- package/dist/assets/psyche-modes-page-lQdpAcY3.js +0 -1
- package/skills/forge-openclaw/SKILL.md.bak-20260415 +0 -552
- package/skills/forge-openclaw/entity_conversation_playbooks.md.bak-20260415 +0 -1303
- /package/dist/server/{server → apps/api}/migrations/001_core.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/002_psyche.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/003_habits.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/004_habit_links.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/005_habit_psyche_links.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/006_work_adjustments.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/007_weekly_review_closures.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/008_calendar_execution.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/009_true_calendar_events.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/010_calendar_selection_state.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/011_calendar_timezone_backfill.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/012_work_block_ranges.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/013_microsoft_local_auth_settings.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/014_note_tags_and_ephemeral.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/015_multi_user_and_strategies.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/016_health_companion.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/016_strategy_contracts_and_user_graph.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/017_preferences.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/018_preference_catalogs.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/019_wiki_memory.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/020_wiki_page_hierarchy.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/021_hide_evidence_from_wiki_index.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/022_wiki_ingest_background.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/023_diagnostic_logs.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/024_questionnaires.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/025_ai_model_connections.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/026_custom_theme_settings.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/027_ai_processors.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/028_movement_domain.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/029_watch_micro_capture.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/030_surface_layouts.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/031_ai_processor_runtime_upgrades.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/032_ai_connectors.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/033_movement_trip_point_sync.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/034_movement_segment_sync.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/035_google_local_auth_settings.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/036_google_local_auth_client_secret.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/037_workbench_public_inputs_and_run_inputs.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/038_data_management_settings.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/039_life_force_and_action_points.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/040_screen_time_domain.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/041_companion_source_states.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/042_movement_boxes.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/043_movement_box_overlap_overrides.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/044_macos_local_calendar_provider.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/045_sleep_nights_and_raw_segments.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/046_work_item_hierarchy.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/047_sleep_source_records.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/048_task_run_git_context.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/049_agent_runtime_sessions.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/050_agent_token_bootstrap_policy.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/051_agent_token_scope_policy.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/052_agent_identity_tightening.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/053_agent_runtime_session_canonical_labels.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/054_sqlite_backed_wiki_memory.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/055_gamification_progression.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/056_gamification_equipment.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/057_gamification_catalog_cleanup.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/058_gamification_theme_preference.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/059_data_backup_retention.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/060_psyche_devrage_metrics.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/061_health_workout_raw_evidence.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/062_health_mobile_sync_sessions.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/063_psyche_flashcards.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/064_health_workout_time_series_identity.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/065_weight_loss_nutrition_insights.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/066_watch_action_receipts.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/067_weight_loss_daily_active_overrides.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/068_remove_generated_movement_wiki_logs.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/069_psyche_devrage_cumulative_rage.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/070_health_mobile_sync_completion_index.sql +0 -0
- /package/dist/server/{server → apps/api}/migrations/071_agent_runtime_claude_identity.sql +0 -0
- /package/dist/server/{server → apps/api}/src/data-management-types.js +0 -0
- /package/dist/server/{server → apps/api}/src/debug.js +0 -0
- /package/dist/server/{server → apps/api}/src/demo-data.js +0 -0
- /package/dist/server/{server → apps/api}/src/discovery-advertiser.js +0 -0
- /package/dist/server/{server → apps/api}/src/e2e-server.js +0 -0
- /package/dist/server/{server → apps/api}/src/errors.js +0 -0
- /package/dist/server/{server → apps/api}/src/health-workout-adapters.js +0 -0
- /package/dist/server/{server → apps/api}/src/health-workout-analytics.js +0 -0
- /package/dist/server/{server → apps/api}/src/health.js +0 -0
- /package/dist/server/{server → apps/api}/src/index.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/base.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/contracts.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/api-gateway-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/audit-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/authentication-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/authorization-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/background-job-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/configuration-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/database-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/event-bus-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/external-service-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/health-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/llm-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/migration-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/mock-workbench-provider.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/openai-responses-provider.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/search-index-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/secrets-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/session-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/storage-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/token-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/transaction-manager.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/platform/trusted-network.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/runtime.js +0 -0
- /package/dist/server/{server → apps/api}/src/managers/type-guards.js +0 -0
- /package/dist/server/{server → apps/api}/src/movement.js +0 -0
- /package/dist/server/{server → apps/api}/src/preferences-seeds.js +0 -0
- /package/dist/server/{server → apps/api}/src/preferences-types.js +0 -0
- /package/dist/server/{server → apps/api}/src/psyche-types.js +0 -0
- /package/dist/server/{server → apps/api}/src/questionnaire-flow.js +0 -0
- /package/dist/server/{server → apps/api}/src/questionnaire-types.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/activity-events.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/agent-runtime-sessions.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/ai-processors.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/calendar.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/collaboration.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/deleted-entities.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/diagnostic-logs.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/domains.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/entity-ownership.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/event-log.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/gamification.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/goals.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/model-settings.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/notes.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/preferences.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/projects.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/psyche.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/questionnaires.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/rewards.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/settings.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/strategies.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/surface-layouts.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/tags.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/task-runs.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/tasks.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/users.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/weekly-reviews.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/wiki-memory.js +0 -0
- /package/dist/server/{server → apps/api}/src/repositories/work-adjustments.js +0 -0
- /package/dist/server/{server → apps/api}/src/runtime-data-root.js +0 -0
- /package/dist/server/{server → apps/api}/src/screen-time.js +0 -0
- /package/dist/server/{server → apps/api}/src/seed-demo.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/calendar-runtime.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/context.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/dashboard.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/data-management.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/devrage-scanner.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/devrage.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/entity-crud.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/git-helper.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/google-calendar-oauth-config.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/insights.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/legacy-wiki-markdown-import.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/life-force-model.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/life-force.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/macos-calendar-helper.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/openai-codex-oauth.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/projects.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/psyche-observation-calendar.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/psyche.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/relations.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/reviews.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/run-recovery.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/tagging.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/task-run-watchdog.js +0 -0
- /package/dist/server/{server → apps/api}/src/services/work-time.js +0 -0
- /package/dist/server/{server → apps/api}/src/web.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/customization/utility-widgets.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/ui/info-tooltip.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/calendar/calendar-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/goals/goals-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/habits/habits-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/health/health-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/insights/insights-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/kanban/kanban-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/movement/movement-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/notes/notes-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/overview/overview-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/preferences/preferences-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/projects/projects-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/psyche/psyche-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/questionnaires/questionnaires-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/review/review-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/shared/define-workbench-box.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/shared/generic-node-view.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/strategies/strategies-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/tasks/tasks-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/today/today-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/components/workbench-boxes/wiki/wiki-boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/api-error.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/api.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/calendar-name-deduper.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/data-management-types.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/date-keys.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/diagnostics.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/entity-visuals.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/gamification-catalog.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/knowledge-graph-types.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/knowledge-graph.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/psyche-schemas.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/psyche-types.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/questionnaire-types.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/runtime-paths.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/schemas.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/snapshot-normalizer.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/theme-system.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/types.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/utils.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/weight-loss-energy-model.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/weight-loss-types.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/workbench/boxes.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/workbench/contracts.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/workbench/nodes.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/workbench/registry.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/workbench/runtime.js +0 -0
- /package/dist/server/{src → apps/web/src}/lib/workbench/tool-catalog.js +0 -0
|
@@ -3105,6 +3105,7 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
|
3105
3105
|
"If the user already answered the normal opening question, do not repeat it. Move to the next missing clarification.",
|
|
3106
3106
|
"Do not over-therapize logistical entities. For tasks, calendar events, work blocks, timeboxes, and task runs, one brief confirming sentence plus one question is usually enough.",
|
|
3107
3107
|
"After each substantive answer, briefly say what is becoming clearer and ask only for the next thing that still changes the record shape or usefulness.",
|
|
3108
|
+
"Before asking a follow-up, know what the user's answer would change: save, update, review, link, schedule, correct, run, publish, preserve, enrich, open the UI, or stop. If no possible answer would change the next action, summarize and act instead of asking.",
|
|
3108
3109
|
"Use a minimum save-readiness checkpoint before asking another follow-up. For normal batch entities, act when you have accepted wording, meaningful body, and any ownership or placement that changes later use; do not ask for tags, links, priority, dates, assignees, or status just because optional fields exist. For operational records, act when the target action plus the time, object, or state that makes it truthful is clear. For read-model surfaces, read once the practical question and answer-changing scope are clear. For specialized Movement, Life Force, and Workbench writes, act once the lane plus target span/object/weekday/flow/run/node and intended correction or effect are clear.",
|
|
3109
3110
|
"For strategic, reflective, or emotionally meaningful non-Psyche records, ask what feels important to keep true before you ask for labels, dates, or taxonomy.",
|
|
3110
3111
|
"For reflection-sensitive non-Psyche records such as questionnaire_instrument, questionnaire_run, self_observation, reflective note, wiki_page, sleep_session, workout_session, preference_judgment, and preference_signal, first ask what the reflection should help the user understand, decide, notice, remember, or change later; then keep the API posture exact: batch CRUD for normal stored records, questionnaire run actions for answer lifecycle, self-observation calendar reads plus observed-note writes, and wiki routes for wiki pages.",
|
|
@@ -3116,6 +3117,7 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
|
3116
3117
|
"For review requests, ask what practical question the user wants the read to answer before you ask for more scope.",
|
|
3117
3118
|
"For review-first requests, use the correct read posture before asking write-shaped questions: shared batch search or read hints for normal entities, wiki/calendar dedicated reads for specialized CRUD, read-model routes for overviews, and Movement, Life Force, or Workbench dedicated reads for those domain surfaces. After the read, answer the practical question before asking for any save, correction, link, run, enrichment, or publish detail.",
|
|
3118
3119
|
"After a review, overview, navigation, or specialized read returns data, first answer the user's practical question in plain language, then name one implication or uncertainty that matters for the next decision. Ask a follow-up only if it changes the next action: save, update, correct, link, schedule, run, publish, enrich, or open the UI.",
|
|
3120
|
+
"After a read, make the read's decision value explicit: what it rules in, what it rules out, and what one uncertainty remains. If no answer-changing uncertainty remains, close cleanly.",
|
|
3119
3121
|
"Treat userId, owner, and human/bot assignees as accountability and scope, not as opening form fields. Ask whose record or owner scope matters only when it changes visibility, review results, collaboration, automation behavior, or later filtering.",
|
|
3120
3122
|
"For read and overview requests, ask for human or bot user scope only when the answer would meaningfully differ across owners; otherwise keep the next question focused on the user's practical question.",
|
|
3121
3123
|
"The opening question should help the user understand what they are actually trying to save, decide, review, or change, not make them perform the schema out loud.",
|
|
@@ -3126,6 +3128,7 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
|
3126
3128
|
"Do not minimize functional analysis, trigger chains, behavior patterns, modes, beliefs, or schema themes. After at least one concrete example is clear, offer one careful interpretive hypothesis when it would help the user understand what the reaction may be protecting, predicting, relieving, or costing.",
|
|
3127
3129
|
"Phrase Psyche interpretive hypotheses as collaborative and testable, not as verdicts. Ask whether the hypothesis lands or needs correction before turning it into a saved belief, pattern, mode, trigger report, or note.",
|
|
3128
3130
|
"A useful Psyche hypothesis starts from the user's concrete example, names one possible protection, prediction, relief, or cost, and asks for correction before it becomes a saved record shape.",
|
|
3131
|
+
"When the user reports an urge or wants a Psyche flashcard, search flashcards first, show a matching card's message before adding support, and if no card fits create only after the cue or urge sentence and short message are clear; postpone visual style, colors, tags, and optional links until the intervention sentence works.",
|
|
3129
3132
|
"For Psyche save-readiness, stop deepening once the user recognizes the working formulation and the minimum shape is present: belief sentence, functional loop, behavior move, part-state, trigger episode, value, event type, emotion definition, or flashcard cue/message. Ask one accuracy question at most, then save through shared batch CRUD when the user says yes.",
|
|
3130
3133
|
"Once the Movement, Life Force, or Workbench job is clear, speak in product nouns such as timeline, overlay, weekday template, published output, run detail, or node result instead of generic record language.",
|
|
3131
3134
|
"If the next answer would not change the route, wording, timing, or write shape in a meaningful way, stop asking and act.",
|
|
@@ -5265,7 +5268,7 @@ function buildAgentOnboardingPayload(request) {
|
|
|
5265
5268
|
],
|
|
5266
5269
|
verifyCommands: [
|
|
5267
5270
|
`curl -s ${origin}/api/v1/health`,
|
|
5268
|
-
"openclaw plugins install --link --dangerously-force-unsafe-install ./projects/forge/openclaw
|
|
5271
|
+
"openclaw plugins install --link --dangerously-force-unsafe-install ./projects/forge/plugins/openclaw",
|
|
5269
5272
|
"openclaw plugins inspect forge-openclaw-plugin --runtime",
|
|
5270
5273
|
"openclaw gateway restart",
|
|
5271
5274
|
"openclaw forge onboarding",
|
|
@@ -5486,19 +5489,21 @@ function buildAgentOnboardingPayload(request) {
|
|
|
5486
5489
|
saveSuggestionPlacement: "end_of_message",
|
|
5487
5490
|
saveSuggestionTone: "gentle_optional",
|
|
5488
5491
|
maxQuestionsPerTurn: 1,
|
|
5492
|
+
depthCalibrationRule: "Before deepening an intake, decide whether this is quick capture, guided formulation, review-first help, or action-first execution. Quick capture means the user already supplied usable wording and wants it saved, remembered, or logged; reflect the working shape once, ask only the one structural, accuracy, or consent detail that changes the write, and do not force full exploration. Guided formulation means the user asks to understand, name, map, decide, or work through unclear or charged material; use active listening, one lane at a time, and Psyche hypotheses when appropriate before saving. Review-first means read the relevant stored entity, overview, or specialized surface before asking write-shaped questions. Action-first means the target task run, work adjustment, preference signal or judgment, questionnaire run, Movement correction, Life Force signal or weekday template, or Workbench run or output is already clear, so act or ask only for the missing target, span, flow, run, node, weekday, correction, or consent. Do not downgrade psychologically meaningful material into quick capture when the user wants exploration, and do not expand a simple storage request into therapy or project planning.",
|
|
5493
|
+
operationLaneRule: "Keep the operation lane explicit before asking for lower-level details. Normal stored entities can be added, updated, reviewed or navigated, linked, or placed. Action workflows use verbs such as start, continue, complete, adjust, judge, signal, publish, sync, or observe. Specialized CRUD surfaces use lifecycle verbs such as create, read, update, sync, reconnect, delete, or browse. Read-model surfaces need a practical read question and scope before any write-shaped follow-up. Movement, Life Force, and Workbench use review, correct, repair, run, inspect, publish, or preserve lanes through their dedicated route keys. Psyche entities need a formulation lane before the storage lane when the user wants understanding; direct saves can move to one accuracy or consent question.",
|
|
5489
5494
|
psycheExplorationRule: "When a Psyche entity needs understanding first, begin with one exploratory question before any working formulation, replacement belief, suggested title, or save pitch. Keep the opening reflection to one or two short sentences, stay in plain prose instead of bullets or numbered lists, keep that first reply short, do not mention Forge search or save structure yet, avoid colons or list-shaped phrasing, prefer what/when/how over why until the experience is grounded, wait for the user's answer before offering a fuller formulation, ask permission before moving from charged exploration into naming or challenge when needed, make the next question help the user feel more able to name the experience rather than more examined, do not widen into adjacent entities until the current one has a working sentence the user recognizes, and once the lived experience is coherent stop deepening and help the user name it cleanly. After one concrete example is clear and a hypothesis lands or is corrected, translate it into a saveable record shape such as a belief sentence, functional loop, behavior, mode, trigger report, value, event type, or emotion definition; do not leave the user with interpretation alone, name the primary Forge record it is becoming, and ask one accuracy or consent question instead of reopening broad exploration, then use the shared batch entity routes after the user accepts the wording or explicitly asks to save. When the user is updating a Psyche record because of one fresh episode, anchor in that episode before renaming the durable formulation, begin with the smallest part of the old wording that no longer fits, and do not reopen the full origin story unless the new understanding is truly structural. If the user accepts the wording, move toward the save instead of reopening deeper exploration.",
|
|
5490
5495
|
progressiveDisclosureRule: "Treat partial answers as progress, not as failed intake. Before asking another question, identify what is already usable: operation, entity or surface, target record or time span, working wording, owner or placement, route lane, and consent. Say the usable part back briefly, then ask only for the first missing detail that changes the action: duplicate disambiguation, hierarchy parent, time window, weekday, flow, run, node, correction, link, or save consent. For normal batch entities, do not ask for optional tags, priority, status, dates, color, links, or assignees when the accepted wording and meaningful body are already enough unless that metadata changes accountability, retrieval, or execution. For Movement, Life Force, and Workbench, if the user's wording already implies the dedicated lane, skip the broad route-family question and ask only for the target span, place, weekday, profile field, flow, run, node, output, correction, or consent that is still missing. For direct Psyche saves or updates, treat an offered belief sentence, functional loop, part voice, trigger episode, value phrase, event kind, emotion signature, or flashcard message as real data; ask one accuracy or consent question instead of reopening origin, evidence, or repair.",
|
|
5491
5496
|
writeConfirmationRule: "After create, update, delete, restore, run, read, or repair actions, confirm the user-facing record, action, and result in the user's language instead of reopening intake. For batch creates and updates, confirm the working title or accepted wording, container, and owner or placement only when those changed retrieval, accountability, or execution; if optional tags, priority, status, color, links, dates, or assignees were left provisional, say that plainly once instead of asking for all of them. For action workflows, confirm the real product action such as task run started or completed, work adjustment applied, preference judgment or signal submitted, questionnaire run updated or completed, calendar connection synced, or self-observation note written. For Psyche saves, confirm the accepted wording and whether it was saved as a first version, update, link, archive, or distinct version; do not reopen origin, evidence, repair, or adjacent entity mapping after the save unless that next object is already visible and materially useful. Ask a follow-up only if it changes the next action: correction, link, schedule, run, publish, enrichment, preservation choice, or UI handoff.",
|
|
5492
|
-
specializedSurfaceRule: "For Movement, Life Force, and Workbench, clarify the job first, then choose the dedicated route family internally and do not guess at a generic CRUD path. Use specializedDomainSurfaces.routeSelectionQuestions when they are present so the next follow-up selects the right route instead of asking generic questions. When available, use forge_call_movement_route, forge_call_life_force_route, or forge_call_workbench_route after the lane is clear. In user-facing language, talk about timeline, overlay, weekday template, published output, run detail, or node result rather than surfaces, payloads, read paths, mutation paths, or CRUD. If the truth of the current state is still uncertain, read the relevant dedicated view before you mutate it. When the user already named a precise correction or review target, confirm only the route-selecting detail that is still missing. After a concrete Movement, Life Force, or Workbench correction, mutation, or result-producing run, read the relevant view back when the user is trying to understand the result rather than just store it: timeline or place/settings detail for Movement, the Life Force overview for energy-planning impact, and flow detail, run detail, node result, latest node output, published output, or run history for Workbench. After any dedicated read, translate the result into one next action: no change, Movement overlay/place/settings/link, Life Force workload/recovery/timebox/meeting/task-choice change, or Workbench rerun/node inspection/flow edit/publish/preserve/stop. Ask only for the missing span, place, weekday, flow, run, node, output, correction, preservation choice, or confirmation that would change that action. The canonical runtime routes stay under /api/v1/*, and the OpenClaw HTTP mirror exposes the same families under /forge/v1/movement, /forge/v1/life-force, and /forge/v1/workbench.",
|
|
5493
|
-
reviewShortcutRule: "When the user is reviewing or correcting an existing record, ask what practical question they want the read or correction to answer, then narrow the saved object, timeframe, or route family first. Use the correct read posture before asking write-shaped questions: shared batch search or read hints for normal entities, wiki/calendar dedicated reads for specialized CRUD, read-model routes for overviews, and Movement, Life Force, or Workbench dedicated reads for those domain surfaces. After the read, answer the practical question before asking for any save, correction, link, run, enrichment, or publish detail. If several actions are possible, narrow to the one most directly supported by the read instead of handing the user a broad menu. Do not reopen the whole intake unless the user is actually redefining the record.",
|
|
5497
|
+
specializedSurfaceRule: "For Movement, Life Force, and Workbench, clarify the job first, then choose the dedicated route family internally and do not guess at a generic CRUD path. Use specializedDomainSurfaces.routeSelectionQuestions when they are present so the next follow-up selects the right route instead of asking generic questions. Before every dedicated call, run a route-contract handshake internally: select the product lane in plain language, verify the matching routeKey against live onboarding routeKeys and methodRoutes, fill any placeholders through pathParams, and ask the user only for the missing product noun that fills the placeholder. When available, use forge_call_movement_route, forge_call_life_force_route, or forge_call_workbench_route after the lane is clear. If a route-key tool is unavailable, stale, or missing the needed key, read live onboarding and use the exact specializedDomainSurfaces.methodRoutes entry for the selected lane; cross-check OpenAPI only to confirm the same method and path, do not fall back to generic batch CRUD, do not invent a nearby raw path, and treat schema disagreement as a Forge contract bug to fix. Before calling a specialized route, inspect its methodRoutes entry for placeholders such as :id, :weekday, :slug, :runId, :nodeId, or :pointId, then fill each one through pathParams with the same placeholder name; do not hide IDs in query, body, or routeKey. If the contract is missing a lane the product clearly supports, report a contract bug instead of silently using generic batch CRUD or a nearby route. In user-facing language, talk about timeline, overlay, weekday template, published output, run detail, or node result rather than surfaces, payloads, read paths, mutation paths, or CRUD. If the truth of the current state is still uncertain, read the relevant dedicated view before you mutate it. When the user already named a precise correction or review target, confirm only the route-selecting detail that is still missing. After a concrete Movement, Life Force, or Workbench correction, mutation, or result-producing run, read the relevant view back when the user is trying to understand the result rather than just store it: timeline or place/settings detail for Movement, the Life Force overview for energy-planning impact, and flow detail, run detail, node result, latest node output, published output, or run history for Workbench. After any dedicated read, translate the result into one next action: no change, Movement overlay/place/settings/link, Life Force workload/recovery/timebox/meeting/task-choice change, or Workbench rerun/node inspection/flow edit/publish/preserve/stop. Ask only for the missing span, place, weekday, flow, run, node, output, correction, preservation choice, or confirmation that would change that action. The canonical runtime routes stay under /api/v1/*, and the OpenClaw HTTP mirror exposes the same families under /forge/v1/movement, /forge/v1/life-force, and /forge/v1/workbench.",
|
|
5498
|
+
reviewShortcutRule: "When the user is reviewing or correcting an existing record, ask what practical question they want the read or correction to answer, then narrow the saved object, timeframe, or route family first. Use the correct read posture before asking write-shaped questions: shared batch search or read hints for normal entities, wiki/calendar dedicated reads for specialized CRUD, read-model routes for overviews, and Movement, Life Force, or Workbench dedicated reads for those domain surfaces. After the read, answer the practical question before asking for any save, correction, link, run, enrichment, or publish detail, and state what the read rules in, rules out, or leaves uncertain. If several actions are possible, narrow to the one most directly supported by the read instead of handing the user a broad menu. Do not reopen the whole intake unless the user is actually redefining the record.",
|
|
5494
5499
|
readModelWriteRule: "Self-observation is note-backed and should be written through observed notes with frontmatter.observedAt only when a lightweight episode observation is the right container. Do not use it as the default bucket for Psyche material: prefer trigger_report for one emotionally meaningful episode, behavior_pattern for functional analysis of a recurring loop, behavior for one repeated move, belief_entry for a core sentence, mode_guide_session or mode_profile for a central part-state, and wiki_page for durable memory such as books, articles, concepts, sources, or personal manuals. Sleep and workout sessions stay on batch CRUD by default; use the reflective review helpers only when enriching one already-known record after review.",
|
|
5495
5500
|
psycheOpeningQuestionRule: "Prefer a concrete opening question tied to the entity: ask when the value mattered, what happened the last time the pattern appeared, what cue or body signal came first before the behavior, what the belief starts saying about self or outcome, what feels most at risk inside the mode, what the part is trying to get the user to do or stop doing, or where the shift began in the incident. Reflect briefly before the question, choose one follow-up lane at a time, say what is becoming clearer before the next deeper question, and if several Psyche entities are visible hold the adjacent ones lightly until the main container is clear.",
|
|
5496
|
-
psycheHypothesisRule: "When one concrete Psyche example is visible, a helpful hypothesis should start from evidence in the user's own example, offer one testable interpretation, name the function without blame such as protection, prediction, relief, or cost, and ask whether the danger, need, or wording fits. Use the hypothesis timing checkpoint before asking a second or third deepening question: offer a hypothesis when one concrete episode, body cue, belief sentence, behavior, or mode voice is visible and the hypothesis would change the record shape, wording, links, or next action. Do not keep asking broad exploratory Psyche questions after the cue, meaning, protection, payoff, or cost is already visible. For behavior_pattern, belief_entry, mode_profile, mode_guide_session, and trigger_report, the next helpful move is usually one active formulation plus one correction question, not another passive reflection. Hypotheses should reduce the formulation burden. Do not make the user prove the experience: after one hypothesis, ask one fit-or-correction question rather than a stack of evidence, origin, and repair questions. If accuracy needs grounding, ask for the smallest lived cue or contrast that would change the wording, danger, protection, payoff, cost, or record shape. Do not hypothesize yet when no concrete moment is visible, the user only wants a direct mechanical save, the user is flooded or unsafe, or the only available interpretation would be diagnosis-like, an origin story, or a certainty claim. Do not present schema, mode, belief, or pattern language as a verdict. Do not leave the user with interpretation alone; name the primary Forge record and ask one accuracy or consent question that moves toward saving the corrected formulation. If the user corrects the hypothesis, revise it once and move toward the saveable record shape instead of asking for another broad story.",
|
|
5501
|
+
psycheHypothesisRule: "When one concrete Psyche example is visible, a helpful hypothesis should start from evidence in the user's own example, offer one testable interpretation, name the function without blame such as protection, prediction, relief, or cost, and ask whether the danger, need, or wording fits. Use the hypothesis timing checkpoint before asking a second or third deepening question: offer a hypothesis when one concrete episode, body cue, belief sentence, behavior, or mode voice is visible and the hypothesis would change the record shape, wording, links, or next action. Use the Psyche hypothesis examples when another broad question would make the user do all the interpretation alone: behavior_pattern should test cue, protection, payoff, and cost; belief_entry should test the activated sentence; mode_profile and mode_guide_session should test the part's job and feared danger; trigger_report should test the sequence; event_type and emotion_definition should test future recognition. Do not keep asking broad exploratory Psyche questions after the cue, meaning, protection, payoff, or cost is already visible. For behavior_pattern, belief_entry, mode_profile, mode_guide_session, and trigger_report, the next helpful move is usually one active formulation plus one correction question, not another passive reflection. Hypotheses should reduce the formulation burden. Do not make the user prove the experience: after one hypothesis, ask one fit-or-correction question rather than a stack of evidence, origin, and repair questions. If accuracy needs grounding, ask for the smallest lived cue or contrast that would change the wording, danger, protection, payoff, cost, or record shape. Do not hypothesize yet when no concrete moment is visible, the user only wants a direct mechanical save, the user is flooded or unsafe, or the only available interpretation would be diagnosis-like, an origin story, or a certainty claim. Do not present schema, mode, belief, or pattern language as a verdict. Do not leave the user with interpretation alone; name the primary Forge record and ask one accuracy or consent question that moves toward saving the corrected formulation. For flashcard support, search existing flashcards first and show a matching message before adding coaching; create only after the cue or urge sentence and short message are clear, and postpone visual style, colors, tags, and optional links until the intervention sentence works. If the user corrects the hypothesis, revise it once and move toward the saveable record shape instead of asking for another broad story.",
|
|
5497
5502
|
mixedIntentSequencingRule: "When one user message combines several Forge jobs, identify the primary job and the order of operations before asking a follow-up. If a read changes the truth of a later write, read first: Movement timeline or box detail before correction, Workbench run or node detail before editing or publishing, and Life Force overview before changing durable assumptions when the current energy picture is uncertain. If the user asks to understand and save Psyche material plus create a support record, formulate the primary Psyche record first, then derive the flashcard, note, link, task, or habit from the accepted wording. If the user already gave the concrete action, do not ask a broad lane question; say the product sequence briefly and ask only for the missing span, wording, flow, run, node, weekday, or link that changes the next action.",
|
|
5498
5503
|
duplicateDisambiguationRule: "Before creating or updating a normal stored entity when duplicate risk is plausible, search the shared batch entity route by entity type, distinctive title or wording, owner scope, and linked content. If a likely existing record appears, ask whether the user wants to update that record, link to it, or save a separate new record; do not reopen the whole create flow. For Psyche records, a similar belief, pattern, mode, trigger report, value, or flashcard is a formulation choice, not a duplicate error: compare the sentence, cue/payoff/cost, protective job, episode, urge sentence, or message and let the user choose update, link, or new version. For wiki_page and calendar_connection, use dedicated search/list/read routes before creating another page or connection. For Movement, Life Force, and Workbench, use the dedicated read lanes instead of batch duplicate search.",
|
|
5499
5504
|
destructiveActionRule: "Before deleting, archiving, invalidating, overwriting, disconnecting, or substantially replacing a Forge record or specialized object, confirm the exact target and what should remain understandable. Prefer normal soft-delete for stored entities unless the user explicitly asks for permanent removal. For Psyche records, preserve therapeutic history by asking whether the old belief, pattern, mode, trigger report, value, or flashcard should be updated, linked as history, archived, or kept distinct; do not delete it just because a cleaner formulation exists. For Movement, distinguish user-defined overlay deletion from automatic-box invalidation and stay/trip/point deletion, and read the specific span first when the target is uncertain. For calendar connections, Workbench flows, wiki pages, and questionnaire instruments, ask what downstream sync, published output, backlinks, run history, or completed runs should remain understandable before deleting or replacing the saved object.",
|
|
5500
|
-
followUpQuestionRule: "After a substantive answer, do not restart the opener or jump to the next schema field. First say what became clearer in concrete language, then choose exactly one next lane: wording, boundary, placement, timing, route scope, link, hypothesis, or write confirmation. Ask the smallest question that would change the record shape, route choice, useful wording, timing, or
|
|
5501
|
-
antiDriftRule: "Avoid vague reflective filler and internal route language. Keep a private action trace: intent, entity or dedicated domain lane, exact read/write/run tool, required target identifiers, and the one missing detail that would change the action. Do not narrate that trace to the user. Replace phrases like 'that sounds important' with the specific stake you heard, and replace API nouns like surface, CRUD, payload, mutation path, route key, or endpoint with user-facing product nouns such as belief, pattern, note, wiki page, timeline, overlay, missing stay, weekday template, flow, run, node result, or published output. Ask one product-language question when the trace is unclear; with the user, ask about the real thing: the span, place, weekday, flow, run, node, belief sentence, parent record, or save confirmation. When reporting actions, say the product result first: saved the belief, corrected the missing stay, updated the weekday energy pattern, or read the failed node. Mention route keys, HTTP paths, payloads, or batch routes only for implementation debugging. If a question would only decorate the intake, skip it.",
|
|
5505
|
+
followUpQuestionRule: "After a substantive answer, do not restart the opener or jump to the next schema field. First say what became clearer in concrete language, then choose exactly one next lane: wording, boundary, placement, timing, route scope, link, hypothesis, or write confirmation. Run the no-question gate before every follow-up: ask only if the answer can change record type, accepted wording, hierarchy placement, owner/accountability, timing, route lane, target object, correction, link, verification read, run/publish/preserve action, or consent. Ask the smallest question that would change the record shape, route choice, useful wording, timing, links, or next action. Before asking, be able to name what a possible answer would change: save, update, review, link, schedule, correct, run, publish, preserve, enrich, open the UI, or stop. If nothing decision-relevant would change, stop asking, summarize the working record, and act with consent. If the question would only add warmth, completeness, optional metadata, or form polish, skip it.",
|
|
5506
|
+
antiDriftRule: "Avoid vague reflective filler and internal route language. Keep a private action trace: intent, entity or dedicated domain lane, exact read/write/run tool, required target identifiers, and the one missing detail that would change the action. Do not narrate that trace to the user. Replace phrases like 'that sounds important' with the specific stake you heard, and replace API nouns like surface, CRUD, payload, mutation path, route key, batch route, or endpoint with user-facing product nouns such as belief, pattern, note, wiki page, timeline, overlay, missing stay, weekday template, flow, run, node result, or published output. Ask one product-language question when the trace is unclear; with the user, ask about the real thing: the span, place, weekday, flow, run, node, belief sentence, parent record, or save confirmation. If you cannot yet name the product noun, ask one grounding question instead of adding reflective filler. When reporting actions, say the product result first: saved the belief, corrected the missing stay, updated the weekday energy pattern, or read the failed node. Mention route keys, HTTP paths, payloads, or batch routes only for implementation debugging. If a question would only decorate the intake, skip it.",
|
|
5502
5507
|
duplicateCheckRoute: "/api/v1/entities/search",
|
|
5503
5508
|
uiSuggestionRule: "offer_visual_ui_when_review_or_editing_would_be_easier",
|
|
5504
5509
|
browserFallbackRule: "Do not open the Forge UI or a browser just to create or update normal entities when the batch entity tools can do the job. Batch CRUD is the default for simple entities; avoid spamming the agent with a large one-route-per-entity mental model.",
|
|
@@ -5520,7 +5525,7 @@ function buildAgentOnboardingPayload(request) {
|
|
|
5520
5525
|
searchRule: "forge_search_entities accepts searches as an array. Search before create or update when duplicate risk exists.",
|
|
5521
5526
|
createRule: "Each create operation must include entityType and full data. entityType alone is not enough. This includes calendar_event, work_block_template, task_timebox, sleep_session, workout_session, preference CRUD entities, and questionnaire_instrument alongside the usual planning and Psyche entities.",
|
|
5522
5527
|
updateRule: "Each update operation must include entityType, id, and patch. For projects, lifecycle changes are status patches: active to restart, paused to suspend, completed to finish. Keep task and project scheduling rules on those same patch payloads. Official habit outcomes can also be logged through forge_update_entities by patching the habit with checkIn: { status, dateKey?, note?, description? } instead of route-hunting. Calendar-event updates still run downstream provider projection sync, and manual health-session field edits belong on the batch route by default rather than on the reflective review helpers.",
|
|
5523
|
-
specializedRouteToolRule: "forge_call_movement_route, forge_call_life_force_route, and forge_call_workbench_route expect { routeKey, pathParams?, query?, body? }. Choose routeKey from the tool schema or entityRouteModel.specializedDomainSurfaces, fill pathParams
|
|
5528
|
+
specializedRouteToolRule: "forge_call_movement_route, forge_call_life_force_route, and forge_call_workbench_route expect { routeKey, pathParams?, query?, body? }. Choose routeKey from the tool schema or entityRouteModel.specializedDomainSurfaces, fill every methodRoutes placeholder with pathParams using names such as id, weekday, slug, runId, nodeId, or pointId, use query for read filters and userIds, and use body only for POST, PATCH, or PUT route keys. Do not put required IDs or weekdays inside routeKey, query, or body when the published path has a placeholder. The Life Force overview route key maps to GET /api/v1/life-force; do not invent /api/v1/life-force/overview. Normal stored entities still use the shared batch entity tools.",
|
|
5524
5529
|
createExample: '{"operations":[{"entityType":"goal","data":{"title":"Create meaningfully"},"clientRef":"goal-create-1"},{"entityType":"goal","data":{"title":"Build a beautiful family"},"clientRef":"goal-create-2"}]}',
|
|
5525
5530
|
updateExample: '{"operations":[{"entityType":"project","id":"project_123","patch":{"status":"paused","schedulingRules":{"blockWorkBlockKinds":["main_activity"],"allowWorkBlockKinds":["secondary_activity"]}},"clientRef":"project-suspend-1"},{"entityType":"habit","id":"habit_456","patch":{"checkIn":{"status":"missed","note":"Resisted the urge after dinner.","description":"85 sec reset"}},"clientRef":"habit-check-in-1"}]}',
|
|
5526
5531
|
specializedRouteToolExample: '{"routeKey":"weekdayTemplate","pathParams":{"weekday":"monday"},"body":{"points":[{"hour":13,"freeAp":-4}]}}',
|
|
@@ -8,9 +8,9 @@ import { updateTask } from "../repositories/tasks.js";
|
|
|
8
8
|
import { getOverviewContext } from "../services/context.js";
|
|
9
9
|
import { searchEntities } from "../services/entity-crud.js";
|
|
10
10
|
import { getWikiHealth, listWikiPages } from "../repositories/wiki-memory.js";
|
|
11
|
-
import { executeCommonWorkbenchTool, mapWorkbenchTools } from "../../../src/lib/workbench/runtime.js";
|
|
12
|
-
import { getWorkbenchNodeCatalog, getWorkbenchNodeDefinition } from "../../../src/lib/workbench/registry.js";
|
|
13
|
-
import { normalizeWorkbenchPortDefinition } from "../../../src/lib/workbench/nodes.js";
|
|
11
|
+
import { executeCommonWorkbenchTool, mapWorkbenchTools } from "../../../web/src/lib/workbench/runtime.js";
|
|
12
|
+
import { getWorkbenchNodeCatalog, getWorkbenchNodeDefinition } from "../../../web/src/lib/workbench/registry.js";
|
|
13
|
+
import { normalizeWorkbenchPortDefinition } from "../../../web/src/lib/workbench/nodes.js";
|
|
14
14
|
function createSnapshotForConnectorOutput(boxId) {
|
|
15
15
|
const outputId = boxId.replace(/^connector-output:/, "");
|
|
16
16
|
const rows = getDatabase()
|
|
@@ -15,10 +15,29 @@ function dateOffsetIso(days) {
|
|
|
15
15
|
date.setUTCDate(date.getUTCDate() + days);
|
|
16
16
|
return date.toISOString().slice(0, 10);
|
|
17
17
|
}
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
18
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
const apiRoot = path.resolve(moduleDir, "..");
|
|
20
|
+
const migrationsDir = path.join(apiRoot, "migrations");
|
|
21
21
|
const userSharedForgeDataRoot = path.join(os.homedir(), ".forge");
|
|
22
|
+
function findSourceProjectRoot(startDir) {
|
|
23
|
+
let current = path.resolve(startDir);
|
|
24
|
+
while (true) {
|
|
25
|
+
if (existsSync(path.join(current, "package.json")) &&
|
|
26
|
+
existsSync(path.join(current, "apps", "api", "migrations")) &&
|
|
27
|
+
existsSync(path.join(current, "apps", "web", "src"))) {
|
|
28
|
+
return current;
|
|
29
|
+
}
|
|
30
|
+
const parent = path.dirname(current);
|
|
31
|
+
if (parent === current) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
current = parent;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const sourceProjectRoot = findSourceProjectRoot(apiRoot);
|
|
38
|
+
const monorepoForgeDataRoot = sourceProjectRoot
|
|
39
|
+
? path.resolve(sourceProjectRoot, "..", "..", "data", "forge")
|
|
40
|
+
: null;
|
|
22
41
|
function resolveCanonicalDataDir(root = dataRoot) {
|
|
23
42
|
return path.resolve(root);
|
|
24
43
|
}
|
|
@@ -72,7 +91,7 @@ export function resolveDefaultDataRoot(currentWorkingDir = process.cwd()) {
|
|
|
72
91
|
// Inside the private monorepo, prefer the tracked shared Forge data root so
|
|
73
92
|
// the local app, Hermes, OpenClaw, and repo-managed data all point at the
|
|
74
93
|
// same state by default.
|
|
75
|
-
if (existsSync(monorepoForgeDataRoot)) {
|
|
94
|
+
if (monorepoForgeDataRoot && existsSync(monorepoForgeDataRoot)) {
|
|
76
95
|
return monorepoForgeDataRoot;
|
|
77
96
|
}
|
|
78
97
|
return path.resolve(userSharedForgeDataRoot || currentWorkingDir);
|
|
@@ -4,7 +4,7 @@ import { getDatabase, runInTransaction } from "./db.js";
|
|
|
4
4
|
import { getSettings } from "./repositories/settings.js";
|
|
5
5
|
import { getDefaultUser, resolveUserForMutation } from "./repositories/users.js";
|
|
6
6
|
import { readEncryptedSecret } from "./repositories/calendar.js";
|
|
7
|
-
import { hallNiddkWeeklyRateKgToDailyEnergyAdjustment } from "../../src/lib/weight-loss-energy-model.js";
|
|
7
|
+
import { hallNiddkWeeklyRateKgToDailyEnergyAdjustment } from "../../web/src/lib/weight-loss-energy-model.js";
|
|
8
8
|
const ACTIVE_BASELINE_WINDOW_DAYS = 7;
|
|
9
9
|
const optionalNumberSchema = z
|
|
10
10
|
.union([z.coerce.number().finite(), z.null()])
|
|
@@ -4137,6 +4137,8 @@ export function buildOpenApiDocument() {
|
|
|
4137
4137
|
"saveSuggestionPlacement",
|
|
4138
4138
|
"saveSuggestionTone",
|
|
4139
4139
|
"maxQuestionsPerTurn",
|
|
4140
|
+
"depthCalibrationRule",
|
|
4141
|
+
"operationLaneRule",
|
|
4140
4142
|
"psycheExplorationRule",
|
|
4141
4143
|
"specializedSurfaceRule",
|
|
4142
4144
|
"reviewShortcutRule",
|
|
@@ -4158,6 +4160,8 @@ export function buildOpenApiDocument() {
|
|
|
4158
4160
|
saveSuggestionPlacement: { type: "string" },
|
|
4159
4161
|
saveSuggestionTone: { type: "string" },
|
|
4160
4162
|
maxQuestionsPerTurn: { type: "integer" },
|
|
4163
|
+
depthCalibrationRule: { type: "string" },
|
|
4164
|
+
operationLaneRule: { type: "string" },
|
|
4161
4165
|
psycheExplorationRule: { type: "string" },
|
|
4162
4166
|
specializedSurfaceRule: { type: "string" },
|
|
4163
4167
|
reviewShortcutRule: { type: "string" },
|
|
@@ -649,7 +649,7 @@ const QUESTIONNAIRE_SEEDS = [
|
|
|
649
649
|
},
|
|
650
650
|
{
|
|
651
651
|
label: "WHO AUDIT manual PDF",
|
|
652
|
-
url: "https://iris.who.int/
|
|
652
|
+
url: "https://iris.who.int/apps/api/api/core/bitstreams/c57d9855-5450-4c46-84b1-c88a6df4192c/content",
|
|
653
653
|
citation: "World Health Organization. AUDIT manual and self-report questionnaire appendix.",
|
|
654
654
|
notes: "WHO manual permits free review, reproduction, and translation for non-commercial use."
|
|
655
655
|
}
|
|
@@ -8,7 +8,7 @@ import { createAiConnectorSchema, aiConnectorConversationSchema, aiConnectorRunR
|
|
|
8
8
|
import { FORGE_DEFAULT_AGENT_ID, getAiModelConnectionById, listAiModelConnections, readModelConnectionCredential } from "./model-settings.js";
|
|
9
9
|
import { getAiProcessorById, listAiProcessorLinks, listAiProcessors } from "./ai-processors.js";
|
|
10
10
|
import { buildConnectorOutputCatalogEntry, executeForgeBoxTool, resolveForgeBoxSnapshot } from "../connectors/box-registry.js";
|
|
11
|
-
import { normalizeWorkbenchPortDefinition } from "../../../src/lib/workbench/nodes.js";
|
|
11
|
+
import { normalizeWorkbenchPortDefinition } from "../../../web/src/lib/workbench/nodes.js";
|
|
12
12
|
const execFile = promisify(execFileCallback);
|
|
13
13
|
const MAX_TOOL_STEPS = 6;
|
|
14
14
|
const MAX_RUN_HISTORY = 20;
|
|
@@ -11,7 +11,7 @@ import { recordActivityEvent } from "./activity-events.js";
|
|
|
11
11
|
import { filterDeletedEntities, filterDeletedIds, isEntityDeleted } from "./deleted-entities.js";
|
|
12
12
|
import { recordHabitCheckInReward, reverseLatestHabitCheckInReward } from "./rewards.js";
|
|
13
13
|
import { createHabitCheckInSchema, createHabitSchema, habitCheckInSchema, habitSchema, updateHabitSchema } from "../types.js";
|
|
14
|
-
import { formatLocalDateKey } from "../../../src/lib/date-keys.js";
|
|
14
|
+
import { formatLocalDateKey } from "../../../web/src/lib/date-keys.js";
|
|
15
15
|
function todayKey(now = new Date()) {
|
|
16
16
|
return formatLocalDateKey(now);
|
|
17
17
|
}
|
|
@@ -317,19 +317,22 @@ function candidateIrohBinaries() {
|
|
|
317
317
|
const binaryName = process.platform === "win32" ? "forge-companion-iroh.exe" : "forge-companion-iroh";
|
|
318
318
|
const platformKey = `${process.platform}-${process.arch}`;
|
|
319
319
|
return candidateIrohAssetRoots().flatMap((root) => [
|
|
320
|
+
path.join(root, "packages", "companion-iroh", "target", "release", binaryName),
|
|
321
|
+
path.join(root, "packages", "companion-iroh", "target", "debug", binaryName),
|
|
320
322
|
path.join(root, "companion-iroh", "target", "release", binaryName),
|
|
321
323
|
path.join(root, "companion-iroh", "target", "debug", binaryName),
|
|
322
324
|
path.join(root, "companion-iroh-src", "target", "release", binaryName),
|
|
323
325
|
path.join(root, "companion-iroh-src", "target", "debug", binaryName),
|
|
324
326
|
path.join(root, "dist", "companion-iroh-src", "target", "release", binaryName),
|
|
325
327
|
path.join(root, "dist", "companion-iroh-src", "target", "debug", binaryName),
|
|
326
|
-
path.join(root, "openclaw
|
|
328
|
+
path.join(root, "plugins/openclaw", "dist", "companion-iroh", platformKey, binaryName),
|
|
327
329
|
path.join(root, "companion-iroh", platformKey, binaryName),
|
|
328
330
|
path.join(root, "companion-iroh", binaryName)
|
|
329
331
|
]);
|
|
330
332
|
}
|
|
331
333
|
function resolveCompanionIrohManifestPath() {
|
|
332
334
|
const candidates = candidateIrohAssetRoots().flatMap((root) => [
|
|
335
|
+
path.join(root, "packages", "companion-iroh", "Cargo.toml"),
|
|
333
336
|
path.join(root, "companion-iroh", "Cargo.toml"),
|
|
334
337
|
path.join(root, "companion-iroh-src", "Cargo.toml"),
|
|
335
338
|
path.join(root, "dist", "companion-iroh-src", "Cargo.toml")
|
|
@@ -2,9 +2,9 @@ import { access, readdir } from "node:fs/promises";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { getDatabase, runInTransaction } from "../db.js";
|
|
5
|
-
import { GAMIFICATION_CATALOG } from "../../../src/lib/gamification-catalog.js";
|
|
6
|
-
const
|
|
7
|
-
const migrationsDir = path.join(
|
|
5
|
+
import { GAMIFICATION_CATALOG } from "../../../web/src/lib/gamification-catalog.js";
|
|
6
|
+
const apiRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
7
|
+
const migrationsDir = path.join(apiRoot, "migrations");
|
|
8
8
|
const safeIntegrityRefreshFix = {
|
|
9
9
|
id: "settings.integrity.refresh",
|
|
10
10
|
kind: "safe_auto_fix",
|
|
@@ -5,7 +5,7 @@ import { access, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import AdmZip from "adm-zip";
|
|
7
7
|
import { getEffectiveDataRoot } from "../db.js";
|
|
8
|
-
import { GAMIFICATION_CATALOG, GAMIFICATION_MASCOT_KEYS } from "../../../src/lib/gamification-catalog.js";
|
|
8
|
+
import { GAMIFICATION_CATALOG, GAMIFICATION_MASCOT_KEYS } from "../../../web/src/lib/gamification-catalog.js";
|
|
9
9
|
const assetVersion = "0.2.59";
|
|
10
10
|
const defaultReleaseBaseUrl = "https://github.com/albertbuchard/forge/releases/download/forge-gamification-assets-v0.2.59";
|
|
11
11
|
const styleDefinitions = [
|
|
@@ -2,7 +2,7 @@ import { getDatabase } from "../db.js";
|
|
|
2
2
|
import { enqueueGamificationCelebration, getGamificationEquipment, insertGamificationUnlock, listGamificationDailyActivity, listGamificationUnlocks, listUnseenGamificationCelebrations, replaceGamificationDailyActivity, upsertGamificationEquipment } from "../repositories/gamification.js";
|
|
3
3
|
import { getDailyAmbientXp, listRewardRules, recordEntityCreationReward } from "../repositories/rewards.js";
|
|
4
4
|
import { getDefaultUser, listUsers, listUsersByIds } from "../repositories/users.js";
|
|
5
|
-
import { GAMIFICATION_CATALOG, GAMIFICATION_STREAK_AWAY_DAY_KEYS, GAMIFICATION_STREAK_POWER_DAY_KEYS } from "../../../src/lib/gamification-catalog.js";
|
|
5
|
+
import { GAMIFICATION_CATALOG, GAMIFICATION_STREAK_AWAY_DAY_KEYS, GAMIFICATION_STREAK_POWER_DAY_KEYS } from "../../../web/src/lib/gamification-catalog.js";
|
|
6
6
|
import { achievementSignalSchema, gamificationCatalogPayloadSchema, gamificationProfileSchema, milestoneRewardSchema } from "../types.js";
|
|
7
7
|
const XP_CURVE_VERSION = "smith-forge";
|
|
8
8
|
const ENTITY_CREATION_REWARD_SOURCES = [
|
|
@@ -12,9 +12,9 @@ import { listTasks } from "../repositories/tasks.js";
|
|
|
12
12
|
import { listWikiSpaces } from "../repositories/wiki-memory.js";
|
|
13
13
|
import { listProjectSummaries } from "./projects.js";
|
|
14
14
|
import { listAiConnectors } from "../repositories/ai-connectors.js";
|
|
15
|
-
import { buildKnowledgeGraphFacets, buildKnowledgeGraphFocusPayload, filterKnowledgeGraphData, selectKnowledgeGraphVisibleNodeIds } from "../../../src/lib/knowledge-graph.js";
|
|
16
|
-
import { getEntityVisual } from "../../../src/lib/entity-visuals.js";
|
|
17
|
-
import { KNOWLEDGE_GRAPH_RELATION_FAMILY_MAP, buildKnowledgeGraphFocusHref, buildKnowledgeGraphNodeId, getKnowledgeGraphEntityHref } from "../../../src/lib/knowledge-graph-types.js";
|
|
15
|
+
import { buildKnowledgeGraphFacets, buildKnowledgeGraphFocusPayload, filterKnowledgeGraphData, selectKnowledgeGraphVisibleNodeIds } from "../../../web/src/lib/knowledge-graph.js";
|
|
16
|
+
import { getEntityVisual } from "../../../web/src/lib/entity-visuals.js";
|
|
17
|
+
import { KNOWLEDGE_GRAPH_RELATION_FAMILY_MAP, buildKnowledgeGraphFocusHref, buildKnowledgeGraphNodeId, getKnowledgeGraphEntityHref } from "../../../web/src/lib/knowledge-graph-types.js";
|
|
18
18
|
const GRAPH_RANGE = {
|
|
19
19
|
from: "2000-01-01T00:00:00.000Z",
|
|
20
20
|
to: "2100-01-01T00:00:00.000Z"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { LEGACY_WORKBENCH_PORT_KINDS, WORKBENCH_PORT_KINDS, normalizeWorkbenchPortKind } from "../../src/lib/workbench/nodes.js";
|
|
3
|
-
import { formatLocalDateKey } from "../../src/lib/date-keys.js";
|
|
2
|
+
import { LEGACY_WORKBENCH_PORT_KINDS, WORKBENCH_PORT_KINDS, normalizeWorkbenchPortKind } from "../../web/src/lib/workbench/nodes.js";
|
|
3
|
+
import { formatLocalDateKey } from "../../web/src/lib/date-keys.js";
|
|
4
4
|
export const taskStatusSchema = z.enum([
|
|
5
5
|
"backlog",
|
|
6
6
|
"focus",
|
|
@@ -11,7 +11,7 @@ import { listProjectSummaries } from "./services/projects.js";
|
|
|
11
11
|
import { listTasks, updateTask } from "./repositories/tasks.js";
|
|
12
12
|
import { claimTaskRun, completeTaskRun, focusTaskRun, heartbeatTaskRun, listTaskRuns, releaseTaskRun } from "./repositories/task-runs.js";
|
|
13
13
|
import { createTriggerReport, listBehaviorPatterns, listBehaviors, listEmotionDefinitions, listEventTypes, listModeProfiles, listPsycheValues, listTriggerReports } from "./repositories/psyche.js";
|
|
14
|
-
import { formatLocalDateKey } from "../../src/lib/date-keys.js";
|
|
14
|
+
import { formatLocalDateKey } from "../../web/src/lib/date-keys.js";
|
|
15
15
|
const watchHistoryStateSchema = z.enum(["aligned", "unaligned", "unknown"]);
|
|
16
16
|
const watchPromptKindSchema = z.enum([
|
|
17
17
|
"new_place",
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "forge-openclaw-plugin",
|
|
3
3
|
"name": "Forge",
|
|
4
4
|
"description": "Curated OpenClaw adapter for the Forge collaboration API, UI entrypoint, and localhost auto-start runtime.",
|
|
5
|
-
"version": "0.3.
|
|
5
|
+
"version": "0.3.16",
|
|
6
6
|
"activation": {
|
|
7
7
|
"onStartup": true,
|
|
8
8
|
"onCapabilities": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forge-openclaw-plugin",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.16",
|
|
4
4
|
"description": "Curated OpenClaw adapter for the Forge collaboration API, UI entrypoint, and localhost auto-start runtime.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/albertbuchard/forge.git",
|
|
11
|
-
"directory": "openclaw
|
|
11
|
+
"directory": "plugins/openclaw"
|
|
12
12
|
},
|
|
13
|
-
"homepage": "https://github.com/albertbuchard/forge/tree/main/openclaw
|
|
13
|
+
"homepage": "https://github.com/albertbuchard/forge/tree/main/plugins/openclaw#readme",
|
|
14
14
|
"bugs": {
|
|
15
15
|
"url": "https://github.com/albertbuchard/forge/issues"
|
|
16
16
|
},
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"./dist/openclaw/index.js"
|
|
41
41
|
],
|
|
42
42
|
"install": {
|
|
43
|
-
"minHostVersion": ">=2026.
|
|
43
|
+
"minHostVersion": ">=2026.6.9"
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"openclaw": "2026.
|
|
47
|
+
"openclaw": "2026.6.9"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@azure/msal-node": "^5.1.2",
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"@fontsource-variable/sora": "^5.2.8",
|
|
58
58
|
"@fontsource/space-grotesk": "^5.2.10",
|
|
59
59
|
"@hookform/resolvers": "^5.1.1",
|
|
60
|
+
"@mariozechner/pi-agent-core": "^0.73.1",
|
|
60
61
|
"@mariozechner/pi-ai": "^0.66.1",
|
|
61
62
|
"@radix-ui/react-dialog": "^1.1.14",
|
|
62
63
|
"@reduxjs/toolkit": "^2.11.2",
|
|
@@ -80,7 +81,7 @@
|
|
|
80
81
|
"graphology-layout": "^0.6.1",
|
|
81
82
|
"graphology-layout-forceatlas2": "^0.10.1",
|
|
82
83
|
"lucide-react": "^0.525.0",
|
|
83
|
-
"node-ical": "^0.
|
|
84
|
+
"node-ical": "^0.26.1",
|
|
84
85
|
"qrcode": "^1.5.4",
|
|
85
86
|
"react": "^19.1.0",
|
|
86
87
|
"react-arborist": "^3.4.3",
|
|
@@ -105,6 +106,7 @@
|
|
|
105
106
|
"follow-redirects": "^1.16.0",
|
|
106
107
|
"hono": "^4.12.18",
|
|
107
108
|
"ip-address": "^10.2.0",
|
|
109
|
+
"markdown-it": "^14.2.0",
|
|
108
110
|
"ws": "^8.20.1",
|
|
109
111
|
"uuid": "^14.0.0"
|
|
110
112
|
},
|
package/server/index.js
CHANGED
|
@@ -4,10 +4,15 @@ import path from "node:path";
|
|
|
4
4
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
5
|
|
|
6
6
|
const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
7
|
-
const repoRoot = path.resolve(packageRoot, "..");
|
|
8
|
-
const builtRuntimeEntry = path.join(packageRoot, "dist", "server", "
|
|
9
|
-
const devRuntimeEntry = path.join(repoRoot, "
|
|
10
|
-
const devDataRootWrapper = path.join(
|
|
7
|
+
const repoRoot = path.resolve(packageRoot, "..", "..");
|
|
8
|
+
const builtRuntimeEntry = path.join(packageRoot, "dist", "server", "apps", "api", "src", "index.js");
|
|
9
|
+
const devRuntimeEntry = path.join(repoRoot, "apps", "api", "src", "index.ts");
|
|
10
|
+
const devDataRootWrapper = path.join(
|
|
11
|
+
repoRoot,
|
|
12
|
+
"scripts",
|
|
13
|
+
"dev",
|
|
14
|
+
"with-openclaw-plugin-data-root.mjs"
|
|
15
|
+
);
|
|
11
16
|
const tsxCliEntry = path.join(repoRoot, "node_modules", "tsx", "dist", "cli.mjs");
|
|
12
17
|
const devModeFlag = (process.env.FORGE_OPENCLAW_DEV ?? "").trim().toLowerCase();
|
|
13
18
|
const useDevRuntime = devModeFlag === "1" || devModeFlag === "true" || devModeFlag === "yes";
|