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.
- package/README.md +39 -4
- package/dist/assets/{board-C_m78kvK.js → board-8L3uX7_O.js} +2 -2
- package/dist/assets/{board-C_m78kvK.js.map → board-8L3uX7_O.js.map} +1 -1
- package/dist/assets/index-Cj1IBH_w.js +36 -0
- package/dist/assets/index-Cj1IBH_w.js.map +1 -0
- package/dist/assets/index-DQT6EbuS.css +1 -0
- package/dist/assets/{motion-CpZvZumD.js → motion-1GAqqi8M.js} +2 -2
- package/dist/assets/{motion-CpZvZumD.js.map → motion-1GAqqi8M.js.map} +1 -1
- package/dist/assets/{table-DtyXTw03.js → table-DBGlgRjk.js} +2 -2
- package/dist/assets/{table-DtyXTw03.js.map → table-DBGlgRjk.js.map} +1 -1
- package/dist/assets/{ui-BXbpiKyS.js → ui-iTluWjC4.js} +2 -2
- package/dist/assets/{ui-BXbpiKyS.js.map → ui-iTluWjC4.js.map} +1 -1
- package/dist/assets/{vendor-QBH6qVEe.js → vendor-BvM2F9Dp.js} +151 -81
- package/dist/assets/vendor-BvM2F9Dp.js.map +1 -0
- package/dist/assets/{viz-w-IMeueL.js → viz-CNeunkfu.js} +2 -2
- package/dist/assets/{viz-w-IMeueL.js.map → viz-CNeunkfu.js.map} +1 -1
- package/dist/index.html +8 -8
- package/dist/openclaw/local-runtime.js +142 -9
- package/dist/openclaw/parity.js +1 -0
- package/dist/openclaw/plugin-entry-shared.js +7 -1
- package/dist/openclaw/routes.js +7 -0
- package/dist/openclaw/tools.js +198 -16
- package/dist/server/app.js +2615 -251
- package/dist/server/managers/platform/secrets-manager.js +44 -1
- package/dist/server/managers/runtime.js +3 -1
- package/dist/server/openapi.js +2212 -170
- package/dist/server/repositories/calendar.js +1101 -0
- package/dist/server/repositories/deleted-entities.js +10 -2
- package/dist/server/repositories/habits.js +358 -0
- package/dist/server/repositories/notes.js +161 -28
- package/dist/server/repositories/projects.js +45 -13
- package/dist/server/repositories/rewards.js +176 -6
- package/dist/server/repositories/settings.js +47 -5
- package/dist/server/repositories/task-runs.js +46 -10
- package/dist/server/repositories/tasks.js +25 -9
- package/dist/server/repositories/weekly-reviews.js +109 -0
- package/dist/server/repositories/work-adjustments.js +105 -0
- package/dist/server/services/calendar-runtime.js +1301 -0
- package/dist/server/services/context.js +16 -6
- package/dist/server/services/dashboard.js +6 -3
- package/dist/server/services/entity-crud.js +116 -3
- package/dist/server/services/gamification.js +66 -18
- package/dist/server/services/insights.js +2 -1
- package/dist/server/services/projects.js +32 -8
- package/dist/server/services/reviews.js +17 -2
- package/dist/server/services/work-time.js +27 -0
- package/dist/server/types.js +1069 -45
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/server/migrations/003_habits.sql +30 -0
- package/server/migrations/004_habit_links.sql +8 -0
- package/server/migrations/005_habit_psyche_links.sql +24 -0
- package/server/migrations/006_work_adjustments.sql +14 -0
- package/server/migrations/007_weekly_review_closures.sql +17 -0
- package/server/migrations/008_calendar_execution.sql +147 -0
- package/server/migrations/009_true_calendar_events.sql +195 -0
- package/server/migrations/010_calendar_selection_state.sql +6 -0
- package/server/migrations/011_calendar_timezone_backfill.sql +11 -0
- package/server/migrations/012_work_block_ranges.sql +7 -0
- package/server/migrations/013_microsoft_local_auth_settings.sql +8 -0
- package/server/migrations/014_note_tags_and_ephemeral.sql +8 -0
- package/skills/forge-openclaw/SKILL.md +130 -10
- package/skills/forge-openclaw/cron_jobs.md +395 -0
- package/dist/assets/index-BWtLtXwb.js +0 -36
- package/dist/assets/index-BWtLtXwb.js.map +0 -1
- package/dist/assets/index-Dp5GXY_z.css +0 -1
- 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
|
+
}
|