forge-openclaw-plugin 0.2.15 → 0.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +39 -4
  2. package/dist/assets/{board-C_m78kvK.js → board-8L3uX7_O.js} +2 -2
  3. package/dist/assets/{board-C_m78kvK.js.map → board-8L3uX7_O.js.map} +1 -1
  4. package/dist/assets/index-Cj1IBH_w.js +36 -0
  5. package/dist/assets/index-Cj1IBH_w.js.map +1 -0
  6. package/dist/assets/index-DQT6EbuS.css +1 -0
  7. package/dist/assets/{motion-CpZvZumD.js → motion-1GAqqi8M.js} +2 -2
  8. package/dist/assets/{motion-CpZvZumD.js.map → motion-1GAqqi8M.js.map} +1 -1
  9. package/dist/assets/{table-DtyXTw03.js → table-DBGlgRjk.js} +2 -2
  10. package/dist/assets/{table-DtyXTw03.js.map → table-DBGlgRjk.js.map} +1 -1
  11. package/dist/assets/{ui-BXbpiKyS.js → ui-iTluWjC4.js} +2 -2
  12. package/dist/assets/{ui-BXbpiKyS.js.map → ui-iTluWjC4.js.map} +1 -1
  13. package/dist/assets/{vendor-QBH6qVEe.js → vendor-BvM2F9Dp.js} +151 -81
  14. package/dist/assets/vendor-BvM2F9Dp.js.map +1 -0
  15. package/dist/assets/{viz-w-IMeueL.js → viz-CNeunkfu.js} +2 -2
  16. package/dist/assets/{viz-w-IMeueL.js.map → viz-CNeunkfu.js.map} +1 -1
  17. package/dist/index.html +8 -8
  18. package/dist/openclaw/local-runtime.js +142 -9
  19. package/dist/openclaw/parity.js +1 -0
  20. package/dist/openclaw/plugin-entry-shared.js +7 -1
  21. package/dist/openclaw/routes.js +7 -0
  22. package/dist/openclaw/tools.js +198 -16
  23. package/dist/server/app.js +2615 -251
  24. package/dist/server/managers/platform/secrets-manager.js +44 -1
  25. package/dist/server/managers/runtime.js +3 -1
  26. package/dist/server/openapi.js +2212 -170
  27. package/dist/server/repositories/calendar.js +1101 -0
  28. package/dist/server/repositories/deleted-entities.js +10 -2
  29. package/dist/server/repositories/habits.js +358 -0
  30. package/dist/server/repositories/notes.js +161 -28
  31. package/dist/server/repositories/projects.js +45 -13
  32. package/dist/server/repositories/rewards.js +176 -6
  33. package/dist/server/repositories/settings.js +47 -5
  34. package/dist/server/repositories/task-runs.js +46 -10
  35. package/dist/server/repositories/tasks.js +25 -9
  36. package/dist/server/repositories/weekly-reviews.js +109 -0
  37. package/dist/server/repositories/work-adjustments.js +105 -0
  38. package/dist/server/services/calendar-runtime.js +1301 -0
  39. package/dist/server/services/context.js +16 -6
  40. package/dist/server/services/dashboard.js +6 -3
  41. package/dist/server/services/entity-crud.js +116 -3
  42. package/dist/server/services/gamification.js +66 -18
  43. package/dist/server/services/insights.js +2 -1
  44. package/dist/server/services/projects.js +32 -8
  45. package/dist/server/services/reviews.js +17 -2
  46. package/dist/server/services/work-time.js +27 -0
  47. package/dist/server/types.js +1069 -45
  48. package/openclaw.plugin.json +1 -1
  49. package/package.json +1 -1
  50. package/server/migrations/003_habits.sql +30 -0
  51. package/server/migrations/004_habit_links.sql +8 -0
  52. package/server/migrations/005_habit_psyche_links.sql +24 -0
  53. package/server/migrations/006_work_adjustments.sql +14 -0
  54. package/server/migrations/007_weekly_review_closures.sql +17 -0
  55. package/server/migrations/008_calendar_execution.sql +147 -0
  56. package/server/migrations/009_true_calendar_events.sql +195 -0
  57. package/server/migrations/010_calendar_selection_state.sql +6 -0
  58. package/server/migrations/011_calendar_timezone_backfill.sql +11 -0
  59. package/server/migrations/012_work_block_ranges.sql +7 -0
  60. package/server/migrations/013_microsoft_local_auth_settings.sql +8 -0
  61. package/server/migrations/014_note_tags_and_ephemeral.sql +8 -0
  62. package/skills/forge-openclaw/SKILL.md +130 -10
  63. package/skills/forge-openclaw/cron_jobs.md +395 -0
  64. package/dist/assets/index-BWtLtXwb.js +0 -36
  65. package/dist/assets/index-BWtLtXwb.js.map +0 -1
  66. package/dist/assets/index-Dp5GXY_z.css +0 -1
  67. package/dist/assets/vendor-QBH6qVEe.js.map +0 -1
@@ -0,0 +1,105 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { getDatabase } from "../db.js";
3
+ import { createWorkAdjustmentSchema, workAdjustmentSchema } from "../types.js";
4
+ function mapWorkAdjustment(row) {
5
+ return workAdjustmentSchema.parse({
6
+ id: row.id,
7
+ entityType: row.entity_type,
8
+ entityId: row.entity_id,
9
+ requestedDeltaMinutes: row.requested_delta_minutes,
10
+ appliedDeltaMinutes: row.applied_delta_minutes,
11
+ note: row.note,
12
+ actor: row.actor,
13
+ source: row.source,
14
+ createdAt: row.created_at
15
+ });
16
+ }
17
+ export function createWorkAdjustment(input, activity, now = new Date()) {
18
+ const parsed = createWorkAdjustmentSchema.parse(input);
19
+ const adjustment = workAdjustmentSchema.parse({
20
+ id: `wadj_${randomUUID().replaceAll("-", "").slice(0, 10)}`,
21
+ entityType: parsed.entityType,
22
+ entityId: parsed.entityId,
23
+ requestedDeltaMinutes: parsed.deltaMinutes,
24
+ appliedDeltaMinutes: input.appliedDeltaMinutes,
25
+ note: parsed.note,
26
+ actor: activity.actor ?? null,
27
+ source: activity.source,
28
+ createdAt: now.toISOString()
29
+ });
30
+ getDatabase()
31
+ .prepare(`INSERT INTO work_adjustments (
32
+ id,
33
+ entity_type,
34
+ entity_id,
35
+ requested_delta_minutes,
36
+ applied_delta_minutes,
37
+ note,
38
+ actor,
39
+ source,
40
+ created_at
41
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`)
42
+ .run(adjustment.id, adjustment.entityType, adjustment.entityId, adjustment.requestedDeltaMinutes, adjustment.appliedDeltaMinutes, adjustment.note, adjustment.actor, adjustment.source, adjustment.createdAt);
43
+ return adjustment;
44
+ }
45
+ export function listWorkAdjustmentsForEntity(entityType, entityId, limit = 50) {
46
+ const rows = getDatabase()
47
+ .prepare(`SELECT
48
+ id,
49
+ entity_type,
50
+ entity_id,
51
+ requested_delta_minutes,
52
+ applied_delta_minutes,
53
+ note,
54
+ actor,
55
+ source,
56
+ created_at
57
+ FROM work_adjustments
58
+ WHERE entity_type = ? AND entity_id = ?
59
+ ORDER BY created_at DESC
60
+ LIMIT ?`)
61
+ .all(entityType, entityId, limit);
62
+ return rows.map(mapWorkAdjustment);
63
+ }
64
+ export function getWorkAdjustmentSecondsByEntity(entityType, entityId) {
65
+ const row = getDatabase()
66
+ .prepare(`SELECT COALESCE(SUM(applied_delta_minutes), 0) AS total_minutes
67
+ FROM work_adjustments
68
+ WHERE entity_type = ? AND entity_id = ?`)
69
+ .get(entityType, entityId);
70
+ return Math.trunc((row?.total_minutes ?? 0) * 60);
71
+ }
72
+ function getWorkAdjustmentSecondsMap(entityType, entityIds) {
73
+ if (entityIds.length === 0) {
74
+ return new Map();
75
+ }
76
+ const placeholders = entityIds.map(() => "?").join(", ");
77
+ const rows = getDatabase()
78
+ .prepare(`SELECT entity_id, COALESCE(SUM(applied_delta_minutes), 0) AS total_minutes
79
+ FROM work_adjustments
80
+ WHERE entity_type = ? AND entity_id IN (${placeholders})
81
+ GROUP BY entity_id`)
82
+ .all(entityType, ...entityIds);
83
+ return new Map(rows.map((row) => [row.entity_id, Math.trunc(row.total_minutes * 60)]));
84
+ }
85
+ function listWorkAdjustmentSecondsMap(entityType) {
86
+ const rows = getDatabase()
87
+ .prepare(`SELECT entity_id, COALESCE(SUM(applied_delta_minutes), 0) AS total_minutes
88
+ FROM work_adjustments
89
+ WHERE entity_type = ?
90
+ GROUP BY entity_id`)
91
+ .all(entityType);
92
+ return new Map(rows.map((row) => [row.entity_id, Math.trunc(row.total_minutes * 60)]));
93
+ }
94
+ export function getTaskWorkAdjustmentSecondsMap(taskIds) {
95
+ return getWorkAdjustmentSecondsMap("task", taskIds);
96
+ }
97
+ export function getProjectWorkAdjustmentSecondsMap(projectIds) {
98
+ return getWorkAdjustmentSecondsMap("project", projectIds);
99
+ }
100
+ export function listTaskWorkAdjustmentSecondsMap() {
101
+ return listWorkAdjustmentSecondsMap("task");
102
+ }
103
+ export function listProjectWorkAdjustmentSecondsMap() {
104
+ return listWorkAdjustmentSecondsMap("project");
105
+ }