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,257 +0,0 @@
|
|
|
1
|
-
import { createNote } from "../repositories/notes.js";
|
|
2
|
-
import { updateTask } from "../repositories/tasks.js";
|
|
3
|
-
import { searchEntities } from "../services/entity-crud.js";
|
|
4
|
-
const SEARCH_TOOL = {
|
|
5
|
-
key: "forge.search_entities",
|
|
6
|
-
label: "Search Forge entities",
|
|
7
|
-
description: "Search Forge entities by query and entity types. Args: { query, entityTypes?, limit? }",
|
|
8
|
-
accessMode: "read"
|
|
9
|
-
};
|
|
10
|
-
const MOVE_TASK_TOOL = {
|
|
11
|
-
key: "forge.update_task_status",
|
|
12
|
-
label: "Move task",
|
|
13
|
-
description: "Update a task status. Args: { taskId, status } where status is backlog, focus, in_progress, blocked, or done.",
|
|
14
|
-
accessMode: "write"
|
|
15
|
-
};
|
|
16
|
-
const CREATE_NOTE_TOOL = {
|
|
17
|
-
key: "forge.create_note",
|
|
18
|
-
label: "Create note",
|
|
19
|
-
description: "Create an evidence note. Args: { title, markdown, summary? }.",
|
|
20
|
-
accessMode: "write"
|
|
21
|
-
};
|
|
22
|
-
const GENERIC_SURFACE_BOXES = [
|
|
23
|
-
["overview", "/overview", "Overview", "Strategic overview and priorities."],
|
|
24
|
-
["goals-index", "/goals", "Goals", "Goals workspace and long-range direction."],
|
|
25
|
-
["habits-index", "/habits", "Habits", "Recurring commitments and check-ins."],
|
|
26
|
-
["project-detail", "/projects/:projectId", "Project detail", "Project execution surface."],
|
|
27
|
-
["projects", "/projects", "Projects", "Projects browser and search."],
|
|
28
|
-
["strategies-index", "/strategies", "Strategies", "Strategy graphs and sequencing."],
|
|
29
|
-
["strategy-detail", "/strategies/:strategyId", "Strategy detail", "Single strategy execution plan."],
|
|
30
|
-
["preferences-index", "/preferences", "Preferences", "Preference model and comparisons."],
|
|
31
|
-
["calendar", "/calendar", "Calendar", "Calendar planning and timeboxes."],
|
|
32
|
-
["movement", "/movement", "Movement", "Movement stays, trips, and mobility context."],
|
|
33
|
-
["sleep", "/sleep", "Sleep", "Sleep session review and recovery context."],
|
|
34
|
-
["sports", "/sports", "Sports", "Workout history and sport reflection."],
|
|
35
|
-
["kanban", "/kanban", "Kanban", "Task execution board."],
|
|
36
|
-
["today", "/today", "Today", "Daily execution and focus."],
|
|
37
|
-
["notes", "/notes", "Notes", "Notes browser and evidence surface."],
|
|
38
|
-
["wiki", "/wiki", "Wiki", "Wiki knowledge workspace."],
|
|
39
|
-
["psyche", "/psyche", "Psyche", "Psychological reflection and maps."],
|
|
40
|
-
["activity", "/activity", "Activity", "Activity timeline and audit trail."],
|
|
41
|
-
["insights", "/insights", "Insights", "Synthesized system recommendations."],
|
|
42
|
-
["review-weekly", "/review/weekly", "Weekly review", "Weekly reflection report."],
|
|
43
|
-
["settings", "/settings", "Settings", "Forge settings and operator controls."],
|
|
44
|
-
["workbench", "/workbench", "Workbench", "Custom utility surface."]
|
|
45
|
-
].map(([surfaceId, routePath, label, description]) => ({
|
|
46
|
-
boxId: `surface:${surfaceId}:main`,
|
|
47
|
-
surfaceId,
|
|
48
|
-
routePath,
|
|
49
|
-
label,
|
|
50
|
-
description,
|
|
51
|
-
category: "Views",
|
|
52
|
-
capabilityModes: ["content"],
|
|
53
|
-
toolAdapters: []
|
|
54
|
-
}));
|
|
55
|
-
const FEATURE_BOXES = [
|
|
56
|
-
{
|
|
57
|
-
boxId: "kanban:board",
|
|
58
|
-
surfaceId: "kanban",
|
|
59
|
-
routePath: "/kanban",
|
|
60
|
-
label: "Kanban board",
|
|
61
|
-
description: "Task board with task search context and task status actions.",
|
|
62
|
-
category: "Execution",
|
|
63
|
-
capabilityModes: ["content", "tool"],
|
|
64
|
-
toolAdapters: [SEARCH_TOOL, MOVE_TASK_TOOL]
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
boxId: "projects:list",
|
|
68
|
-
surfaceId: "projects",
|
|
69
|
-
routePath: "/projects",
|
|
70
|
-
label: "Projects list",
|
|
71
|
-
description: "Project browser, filters, and search context.",
|
|
72
|
-
category: "Execution",
|
|
73
|
-
capabilityModes: ["content", "tool"],
|
|
74
|
-
toolAdapters: [SEARCH_TOOL]
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
boxId: "today:focus",
|
|
78
|
-
surfaceId: "today",
|
|
79
|
-
routePath: "/today",
|
|
80
|
-
label: "Today focus",
|
|
81
|
-
description: "Today priorities and daily focus context.",
|
|
82
|
-
category: "Execution",
|
|
83
|
-
capabilityModes: ["content", "tool"],
|
|
84
|
-
toolAdapters: [SEARCH_TOOL]
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
boxId: "overview:priorities",
|
|
88
|
-
surfaceId: "overview",
|
|
89
|
-
routePath: "/overview",
|
|
90
|
-
label: "Overview priorities",
|
|
91
|
-
description: "Priority summary, momentum, and active work context.",
|
|
92
|
-
category: "Views",
|
|
93
|
-
capabilityModes: ["content"],
|
|
94
|
-
toolAdapters: []
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
boxId: "notes:quick-capture",
|
|
98
|
-
surfaceId: "notes",
|
|
99
|
-
routePath: "/notes",
|
|
100
|
-
label: "Quick capture",
|
|
101
|
-
description: "Simple note capture and evidence drafting surface.",
|
|
102
|
-
category: "Capture",
|
|
103
|
-
capabilityModes: ["content", "tool"],
|
|
104
|
-
toolAdapters: [CREATE_NOTE_TOOL]
|
|
105
|
-
}
|
|
106
|
-
];
|
|
107
|
-
function summarizeSearchMatches(boxId, query, entityTypes, limit) {
|
|
108
|
-
const result = searchEntities({
|
|
109
|
-
searches: [
|
|
110
|
-
{
|
|
111
|
-
query,
|
|
112
|
-
entityTypes,
|
|
113
|
-
includeDeleted: false,
|
|
114
|
-
limit
|
|
115
|
-
}
|
|
116
|
-
]
|
|
117
|
-
}).results[0];
|
|
118
|
-
const matches = result?.ok ? result.matches ?? [] : [];
|
|
119
|
-
const lines = matches.slice(0, limit).map((match) => {
|
|
120
|
-
const title = typeof match.title === "string"
|
|
121
|
-
? match.title
|
|
122
|
-
: typeof match.name === "string"
|
|
123
|
-
? match.name
|
|
124
|
-
: typeof match.id === "string"
|
|
125
|
-
? match.id
|
|
126
|
-
: "Untitled";
|
|
127
|
-
const entityType = typeof match.entityType === "string" ? match.entityType : "entity";
|
|
128
|
-
return `${entityType}: ${title}`;
|
|
129
|
-
});
|
|
130
|
-
return {
|
|
131
|
-
boxId,
|
|
132
|
-
label: getForgeBoxCatalogEntry(boxId)?.label ?? boxId,
|
|
133
|
-
capturedAt: new Date().toISOString(),
|
|
134
|
-
contentText: lines.length > 0
|
|
135
|
-
? lines.join("\n")
|
|
136
|
-
: "No matching Forge entities were found for this box snapshot.",
|
|
137
|
-
contentJson: {
|
|
138
|
-
matches
|
|
139
|
-
},
|
|
140
|
-
tools: getForgeBoxCatalogEntry(boxId)?.toolAdapters ?? []
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
export function listForgeBoxCatalog() {
|
|
144
|
-
return [...GENERIC_SURFACE_BOXES, ...FEATURE_BOXES];
|
|
145
|
-
}
|
|
146
|
-
export function getForgeBoxCatalogEntry(boxId) {
|
|
147
|
-
return listForgeBoxCatalog().find((entry) => entry.boxId === boxId) ?? null;
|
|
148
|
-
}
|
|
149
|
-
export function buildConnectorOutputCatalogEntry(input) {
|
|
150
|
-
return {
|
|
151
|
-
boxId: `connector-output:${input.outputId}`,
|
|
152
|
-
surfaceId: null,
|
|
153
|
-
routePath: `/connectors/${input.connectorId}`,
|
|
154
|
-
label: `${input.title} output`,
|
|
155
|
-
description: "Published AI connector output.",
|
|
156
|
-
category: "Connector outputs",
|
|
157
|
-
capabilityModes: ["content"],
|
|
158
|
-
toolAdapters: []
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
export function resolveForgeBoxSnapshot(boxId) {
|
|
162
|
-
if (boxId === "kanban:board") {
|
|
163
|
-
return summarizeSearchMatches(boxId, "", ["task"], 24);
|
|
164
|
-
}
|
|
165
|
-
if (boxId === "projects:list") {
|
|
166
|
-
return summarizeSearchMatches(boxId, "", ["project"], 20);
|
|
167
|
-
}
|
|
168
|
-
if (boxId === "today:focus") {
|
|
169
|
-
return summarizeSearchMatches(boxId, "", ["task", "habit"], 16);
|
|
170
|
-
}
|
|
171
|
-
if (boxId === "overview:priorities") {
|
|
172
|
-
return summarizeSearchMatches(boxId, "", ["goal", "project", "task"], 18);
|
|
173
|
-
}
|
|
174
|
-
const entry = getForgeBoxCatalogEntry(boxId);
|
|
175
|
-
return {
|
|
176
|
-
boxId,
|
|
177
|
-
label: entry?.label ?? boxId,
|
|
178
|
-
capturedAt: new Date().toISOString(),
|
|
179
|
-
contentText: entry
|
|
180
|
-
? `${entry.label}\n${entry.description}\nRoute: ${entry.routePath ?? "n/a"}`
|
|
181
|
-
: "This box is registered but no live snapshot resolver is available yet.",
|
|
182
|
-
contentJson: entry
|
|
183
|
-
? {
|
|
184
|
-
surfaceId: entry.surfaceId,
|
|
185
|
-
routePath: entry.routePath,
|
|
186
|
-
category: entry.category
|
|
187
|
-
}
|
|
188
|
-
: null,
|
|
189
|
-
tools: entry?.toolAdapters ?? []
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
export function executeForgeBoxTool(boxId, toolKey, args) {
|
|
193
|
-
if (toolKey === "forge.search_entities") {
|
|
194
|
-
const query = typeof args.query === "string" ? args.query.trim() : "";
|
|
195
|
-
const entityTypes = Array.isArray(args.entityTypes)
|
|
196
|
-
? args.entityTypes.filter((entry) => typeof entry === "string" && entry.trim().length > 0)
|
|
197
|
-
: [];
|
|
198
|
-
const limit = typeof args.limit === "number" && Number.isFinite(args.limit)
|
|
199
|
-
? Math.max(1, Math.min(50, Math.round(args.limit)))
|
|
200
|
-
: 12;
|
|
201
|
-
return summarizeSearchMatches(boxId, query, entityTypes, limit);
|
|
202
|
-
}
|
|
203
|
-
if (toolKey === "forge.update_task_status") {
|
|
204
|
-
const taskId = typeof args.taskId === "string" ? args.taskId : "";
|
|
205
|
-
const status = typeof args.status === "string" ? args.status : "";
|
|
206
|
-
const allowed = new Set([
|
|
207
|
-
"backlog",
|
|
208
|
-
"focus",
|
|
209
|
-
"in_progress",
|
|
210
|
-
"blocked",
|
|
211
|
-
"done"
|
|
212
|
-
]);
|
|
213
|
-
if (!taskId || !allowed.has(status)) {
|
|
214
|
-
throw new Error("forge.update_task_status requires { taskId, status } with a valid task status.");
|
|
215
|
-
}
|
|
216
|
-
const task = updateTask(taskId, { status: status }, { source: "agent", actor: "AI Connector" });
|
|
217
|
-
if (!task) {
|
|
218
|
-
throw new Error(`Task ${taskId} was not found.`);
|
|
219
|
-
}
|
|
220
|
-
return {
|
|
221
|
-
ok: true,
|
|
222
|
-
task
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
if (toolKey === "forge.create_note") {
|
|
226
|
-
const title = typeof args.title === "string" ? args.title.trim() : "";
|
|
227
|
-
const markdown = typeof args.markdown === "string" ? args.markdown.trim() : "";
|
|
228
|
-
const summary = typeof args.summary === "string" ? args.summary.trim() : markdown.slice(0, 160);
|
|
229
|
-
if (!title || !markdown) {
|
|
230
|
-
throw new Error("forge.create_note requires { title, markdown }.");
|
|
231
|
-
}
|
|
232
|
-
const note = createNote({
|
|
233
|
-
kind: "evidence",
|
|
234
|
-
title,
|
|
235
|
-
slug: "",
|
|
236
|
-
spaceId: "",
|
|
237
|
-
parentSlug: null,
|
|
238
|
-
indexOrder: 0,
|
|
239
|
-
showInIndex: false,
|
|
240
|
-
aliases: [],
|
|
241
|
-
summary,
|
|
242
|
-
contentMarkdown: markdown,
|
|
243
|
-
author: "AI Connector",
|
|
244
|
-
destroyAt: null,
|
|
245
|
-
sourcePath: "ai-connector",
|
|
246
|
-
frontmatter: {},
|
|
247
|
-
revisionHash: "",
|
|
248
|
-
links: [],
|
|
249
|
-
tags: []
|
|
250
|
-
}, { source: "agent", actor: "AI Connector" });
|
|
251
|
-
return {
|
|
252
|
-
ok: true,
|
|
253
|
-
note
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
throw new Error(`Unsupported Forge box tool: ${toolKey}`);
|
|
257
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { psycheObservationCalendarPayloadSchema } from "../psyche-types.js";
|
|
2
|
-
import { listNotesByObservedAtRange, resolveNoteObservedAt } from "../repositories/notes.js";
|
|
3
|
-
import { filterOwnedEntities } from "../repositories/entity-ownership.js";
|
|
4
|
-
import { listBehaviorPatterns, listTriggerReports } from "../repositories/psyche.js";
|
|
5
|
-
function collectAvailableTags(observations) {
|
|
6
|
-
const seen = new Set();
|
|
7
|
-
const tags = [];
|
|
8
|
-
for (const observation of observations) {
|
|
9
|
-
for (const tag of observation.note.tags ?? []) {
|
|
10
|
-
const normalized = tag.trim().toLowerCase();
|
|
11
|
-
if (!normalized || seen.has(normalized)) {
|
|
12
|
-
continue;
|
|
13
|
-
}
|
|
14
|
-
seen.add(normalized);
|
|
15
|
-
tags.push(tag);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return tags.sort((left, right) => left.localeCompare(right));
|
|
19
|
-
}
|
|
20
|
-
export function getPsycheObservationCalendar({ from, to, userIds }) {
|
|
21
|
-
const patterns = filterOwnedEntities("behavior_pattern", listBehaviorPatterns(), userIds);
|
|
22
|
-
const reports = filterOwnedEntities("trigger_report", listTriggerReports(200), userIds);
|
|
23
|
-
const notes = listNotesByObservedAtRange({ from, to, userIds, limit: 600 });
|
|
24
|
-
const patternsById = new Map(patterns.map((pattern) => [pattern.id, pattern]));
|
|
25
|
-
const reportsById = new Map(reports.map((report) => [report.id, report]));
|
|
26
|
-
const observations = notes.map((note) => ({
|
|
27
|
-
id: note.id,
|
|
28
|
-
observedAt: resolveNoteObservedAt(note),
|
|
29
|
-
note,
|
|
30
|
-
linkedPatterns: note.links
|
|
31
|
-
.filter((link) => link.entityType === "behavior_pattern")
|
|
32
|
-
.map((link) => patternsById.get(link.entityId) ?? null)
|
|
33
|
-
.filter((pattern) => pattern !== null),
|
|
34
|
-
linkedReports: note.links
|
|
35
|
-
.filter((link) => link.entityType === "trigger_report")
|
|
36
|
-
.map((link) => reportsById.get(link.entityId) ?? null)
|
|
37
|
-
.filter((report) => report !== null)
|
|
38
|
-
}));
|
|
39
|
-
return psycheObservationCalendarPayloadSchema.parse({
|
|
40
|
-
generatedAt: new Date().toISOString(),
|
|
41
|
-
from,
|
|
42
|
-
to,
|
|
43
|
-
observations,
|
|
44
|
-
availableTags: collectAvailableTags(observations)
|
|
45
|
-
});
|
|
46
|
-
}
|
package/dist/server/web.js
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { access, readFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
const distDir = path.join(process.cwd(), "dist");
|
|
4
|
-
const packagedRuntimeDistDir = path.join(process.cwd(), "plugins", "forge-codex", "runtime", "dist");
|
|
5
|
-
const defaultBasePath = process.env.FORGE_BASE_PATH ?? "/forge/";
|
|
6
|
-
const contentTypes = {
|
|
7
|
-
".css": "text/css; charset=utf-8",
|
|
8
|
-
".html": "text/html; charset=utf-8",
|
|
9
|
-
".js": "application/javascript; charset=utf-8",
|
|
10
|
-
".json": "application/json; charset=utf-8",
|
|
11
|
-
".map": "application/json; charset=utf-8",
|
|
12
|
-
".svg": "image/svg+xml",
|
|
13
|
-
".woff": "font/woff",
|
|
14
|
-
".woff2": "font/woff2"
|
|
15
|
-
};
|
|
16
|
-
function normalizeBasePath(value) {
|
|
17
|
-
if (!value || value === "/") {
|
|
18
|
-
return "/";
|
|
19
|
-
}
|
|
20
|
-
const withLeadingSlash = value.startsWith("/") ? value : `/${value}`;
|
|
21
|
-
return withLeadingSlash.endsWith("/") ? withLeadingSlash : `${withLeadingSlash}/`;
|
|
22
|
-
}
|
|
23
|
-
function stripBasePath(requestPath, basePath) {
|
|
24
|
-
const normalizedBasePath = normalizeBasePath(basePath);
|
|
25
|
-
if (normalizedBasePath === "/") {
|
|
26
|
-
return requestPath;
|
|
27
|
-
}
|
|
28
|
-
const normalizedRoot = normalizedBasePath.slice(0, -1);
|
|
29
|
-
if (requestPath === normalizedRoot) {
|
|
30
|
-
return "/";
|
|
31
|
-
}
|
|
32
|
-
if (requestPath.startsWith(normalizedBasePath)) {
|
|
33
|
-
const stripped = requestPath.slice(normalizedRoot.length);
|
|
34
|
-
return stripped.startsWith("/") ? stripped : `/${stripped}`;
|
|
35
|
-
}
|
|
36
|
-
return requestPath;
|
|
37
|
-
}
|
|
38
|
-
function resolveAsset(clientDir, requestPath) {
|
|
39
|
-
if (requestPath === "/") {
|
|
40
|
-
return path.join(clientDir, "index.html");
|
|
41
|
-
}
|
|
42
|
-
const safePath = requestPath.replace(/^\/+/, "");
|
|
43
|
-
return path.join(clientDir, safePath);
|
|
44
|
-
}
|
|
45
|
-
async function getClientDir() {
|
|
46
|
-
try {
|
|
47
|
-
await access(path.join(distDir, "index.html"));
|
|
48
|
-
return distDir;
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
await access(path.join(packagedRuntimeDistDir, "index.html"));
|
|
52
|
-
return packagedRuntimeDistDir;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
async function serveAsset(requestPath, reply) {
|
|
56
|
-
if (requestPath.startsWith("/api")) {
|
|
57
|
-
reply.code(404);
|
|
58
|
-
return { error: "Not found" };
|
|
59
|
-
}
|
|
60
|
-
const clientDir = await getClientDir();
|
|
61
|
-
const normalizedRequestPath = stripBasePath(requestPath, defaultBasePath);
|
|
62
|
-
const assetPath = resolveAsset(clientDir, normalizedRequestPath);
|
|
63
|
-
const ext = path.extname(assetPath);
|
|
64
|
-
try {
|
|
65
|
-
const payload = await readFile(assetPath);
|
|
66
|
-
reply.type(contentTypes[ext] ?? "application/octet-stream");
|
|
67
|
-
reply.header("Cache-Control", "no-store, max-age=0, must-revalidate");
|
|
68
|
-
if (ext === ".html") {
|
|
69
|
-
reply.header("Pragma", "no-cache");
|
|
70
|
-
}
|
|
71
|
-
return payload;
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
if (!path.extname(normalizedRequestPath)) {
|
|
75
|
-
try {
|
|
76
|
-
const payload = await readFile(path.join(clientDir, "index.html"));
|
|
77
|
-
reply.type(contentTypes[".html"]);
|
|
78
|
-
reply.header("Cache-Control", "no-store, max-age=0, must-revalidate");
|
|
79
|
-
reply.header("Pragma", "no-cache");
|
|
80
|
-
return payload;
|
|
81
|
-
}
|
|
82
|
-
catch {
|
|
83
|
-
reply.code(503);
|
|
84
|
-
return {
|
|
85
|
-
code: "frontend_not_built",
|
|
86
|
-
error: "Forge frontend build output is missing. Run the Vite build before serving the modern web client.",
|
|
87
|
-
statusCode: 503
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
reply.code(404);
|
|
92
|
-
return { error: "Asset not found" };
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
export async function registerWebRoutes(app) {
|
|
96
|
-
app.get("/", async (_request, reply) => serveAsset("/", reply));
|
|
97
|
-
app.get("/*", async (request, reply) => serveAsset(request.url, reply));
|
|
98
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|