forge-openclaw-plugin 0.2.28 → 0.2.29
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 +1 -1
- package/dist/assets/{board-DPFvZf-D.js → board-q8cfwaAW.js} +2 -2
- package/dist/assets/{board-DPFvZf-D.js.map → board-q8cfwaAW.js.map} +1 -1
- package/dist/assets/index-C6PCeHD_.css +1 -0
- package/dist/assets/index-bfHIqj0-.js +85 -0
- package/dist/assets/index-bfHIqj0-.js.map +1 -0
- package/dist/assets/{motion-Bvwc85ch.js → motion-DHfqFntt.js} +2 -2
- package/dist/assets/{motion-Bvwc85ch.js.map → motion-DHfqFntt.js.map} +1 -1
- package/dist/assets/{table-FJQTJvUR.js → table-DLweENXt.js} +2 -2
- package/dist/assets/{table-FJQTJvUR.js.map → table-DLweENXt.js.map} +1 -1
- package/dist/assets/{ui-GXFcgvSw.js → ui-BV0OYxkH.js} +2 -2
- package/dist/assets/{ui-GXFcgvSw.js.map → ui-BV0OYxkH.js.map} +1 -1
- package/dist/assets/{vendor-Cwf49UMz.js → vendor-OwcH20PM.js} +2 -2
- package/dist/assets/{vendor-Cwf49UMz.js.map → vendor-OwcH20PM.js.map} +1 -1
- package/dist/index.html +7 -7
- package/dist/server/server/migrations/044_macos_local_calendar_provider.sql +21 -0
- package/dist/server/server/src/app.js +87 -12
- package/dist/server/server/src/openapi.js +29 -1
- package/dist/server/server/src/repositories/calendar.js +144 -12
- package/dist/server/server/src/repositories/tasks.js +36 -17
- package/dist/server/server/src/services/calendar-runtime.js +613 -32
- package/dist/server/server/src/services/macos-calendar-helper.js +748 -0
- package/dist/server/server/src/types.js +46 -2
- package/dist/server/src/lib/api-error.js +2 -0
- package/dist/server/src/lib/api.js +39 -2
- package/dist/server/src/lib/calendar-name-deduper.js +2 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/server/migrations/044_macos_local_calendar_provider.sql +21 -0
- package/skills/forge-openclaw/SKILL.md +21 -5
- package/skills/forge-openclaw/entity_conversation_playbooks.md +88 -5
- package/dist/assets/index-Auw3JrdE.css +0 -1
- package/dist/assets/index-D1H7myQH.js +0 -85
- package/dist/assets/index-D1H7myQH.js.map +0 -1
|
@@ -70,9 +70,9 @@ function nextSortOrder(status) {
|
|
|
70
70
|
.get(status);
|
|
71
71
|
return row.max_sort + 1;
|
|
72
72
|
}
|
|
73
|
-
function normalizeCompletedAt(status, existingCompletedAt) {
|
|
73
|
+
function normalizeCompletedAt(status, existingCompletedAt, overrideCompletedAt) {
|
|
74
74
|
if (status === "done") {
|
|
75
|
-
return existingCompletedAt ?? new Date().toISOString();
|
|
75
|
+
return overrideCompletedAt ?? existingCompletedAt ?? new Date().toISOString();
|
|
76
76
|
}
|
|
77
77
|
return null;
|
|
78
78
|
}
|
|
@@ -203,10 +203,32 @@ function updateTaskRecord(current, input, activity) {
|
|
|
203
203
|
const movedColumns = nextStatus !== current.status;
|
|
204
204
|
const nextSort = input.sortOrder ??
|
|
205
205
|
(movedColumns ? nextSortOrder(nextStatus) : current.sortOrder);
|
|
206
|
+
const completionRequirement = nextStatus === "done"
|
|
207
|
+
? getTaskCompletionRequirement(current, current.userId ?? undefined)
|
|
208
|
+
: null;
|
|
209
|
+
const applyCompletionWorkLogAdjustment = (desiredTodaySeconds, currentTodayCreditedSeconds) => {
|
|
210
|
+
const deltaMinutes = Math.round((desiredTodaySeconds - currentTodayCreditedSeconds) / 60);
|
|
211
|
+
if (deltaMinutes === 0) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const appliedDeltaMinutes = deltaMinutes;
|
|
215
|
+
createWorkAdjustment({
|
|
216
|
+
entityType: "task",
|
|
217
|
+
entityId: current.id,
|
|
218
|
+
deltaMinutes: appliedDeltaMinutes,
|
|
219
|
+
appliedDeltaMinutes,
|
|
220
|
+
note: desiredTodaySeconds <= 0
|
|
221
|
+
? "Completion log cleared for today"
|
|
222
|
+
: "Completion log adjusted for today"
|
|
223
|
+
}, {
|
|
224
|
+
actor: activity?.actor ?? null,
|
|
225
|
+
source: activity?.source ?? "ui"
|
|
226
|
+
});
|
|
227
|
+
};
|
|
206
228
|
if (current.status !== "done" &&
|
|
207
229
|
nextStatus === "done" &&
|
|
208
|
-
input.resolutionKind !== "split"
|
|
209
|
-
|
|
230
|
+
input.resolutionKind !== "split" &&
|
|
231
|
+
completionRequirement) {
|
|
210
232
|
if (input.enforceTodayWorkLog === true &&
|
|
211
233
|
completionRequirement.requiresWorkLog &&
|
|
212
234
|
input.completedTodayWorkSeconds === undefined) {
|
|
@@ -215,21 +237,18 @@ function updateTaskRecord(current, input, activity) {
|
|
|
215
237
|
todayCreditedSeconds: completionRequirement.todayCreditedSeconds
|
|
216
238
|
});
|
|
217
239
|
}
|
|
218
|
-
if (
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
entityType: "task",
|
|
222
|
-
entityId: current.id,
|
|
223
|
-
deltaMinutes: appliedDeltaMinutes,
|
|
224
|
-
appliedDeltaMinutes,
|
|
225
|
-
note: "Completion log for today"
|
|
226
|
-
}, {
|
|
227
|
-
actor: activity?.actor ?? null,
|
|
228
|
-
source: activity?.source ?? "ui"
|
|
229
|
-
});
|
|
240
|
+
if (input.completedTodayWorkSeconds !== undefined) {
|
|
241
|
+
const desiredTodaySeconds = Math.max(0, input.completedTodayWorkSeconds);
|
|
242
|
+
applyCompletionWorkLogAdjustment(desiredTodaySeconds, completionRequirement.todayCreditedSeconds);
|
|
230
243
|
}
|
|
231
244
|
}
|
|
232
|
-
|
|
245
|
+
else if (nextStatus === "done" &&
|
|
246
|
+
input.completedTodayWorkSeconds !== undefined &&
|
|
247
|
+
completionRequirement) {
|
|
248
|
+
const desiredTodaySeconds = Math.max(0, input.completedTodayWorkSeconds);
|
|
249
|
+
applyCompletionWorkLogAdjustment(desiredTodaySeconds, completionRequirement.todayCreditedSeconds);
|
|
250
|
+
}
|
|
251
|
+
const completedAt = normalizeCompletedAt(nextStatus, current.completedAt, input.completedAt);
|
|
233
252
|
const updatedAt = new Date().toISOString();
|
|
234
253
|
getDatabase()
|
|
235
254
|
.prepare(`UPDATE tasks
|