@zaclinley/dsh-mailharbor 0.23.0 → 0.24.0
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/CHANGELOG.md +11 -0
- package/README.zh.md +17 -17
- package/lib/client.js +158 -5
- package/lib/client.js.map +3 -3
- package/lib/index.js +100 -3
- package/lib/index.js.map +3 -3
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -2958,6 +2958,7 @@ var ProjectStore = class {
|
|
|
2958
2958
|
status: project.status ?? "active",
|
|
2959
2959
|
notes: Array.isArray(project.notes) ? project.notes : [],
|
|
2960
2960
|
milestones: Array.isArray(project.milestones) ? project.milestones : [],
|
|
2961
|
+
activity: Array.isArray(project.activity) ? project.activity : [],
|
|
2961
2962
|
sessionIds: Array.isArray(project.sessionIds) ? project.sessionIds : project.sessionId === "" ? [] : [project.sessionId]
|
|
2962
2963
|
}))
|
|
2963
2964
|
};
|
|
@@ -3057,6 +3058,47 @@ var ProjectStore = class {
|
|
|
3057
3058
|
this.flush();
|
|
3058
3059
|
return project;
|
|
3059
3060
|
}
|
|
3061
|
+
addMilestone(id, title, due) {
|
|
3062
|
+
const project = this.get(id);
|
|
3063
|
+
if (project === void 0) return void 0;
|
|
3064
|
+
project.milestones.push({
|
|
3065
|
+
id: `ms_${randomUUID2().slice(0, 8)}`,
|
|
3066
|
+
title,
|
|
3067
|
+
due,
|
|
3068
|
+
done: false
|
|
3069
|
+
});
|
|
3070
|
+
project.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
3071
|
+
this.flush();
|
|
3072
|
+
return project;
|
|
3073
|
+
}
|
|
3074
|
+
updateMilestone(id, milestoneId, patch) {
|
|
3075
|
+
const project = this.get(id);
|
|
3076
|
+
const milestone = project?.milestones.find((item) => item.id === milestoneId);
|
|
3077
|
+
if (project === void 0 || milestone === void 0) return void 0;
|
|
3078
|
+
if (patch.title !== void 0) milestone.title = patch.title;
|
|
3079
|
+
if (patch.due !== void 0) milestone.due = patch.due;
|
|
3080
|
+
if (patch.done !== void 0) milestone.done = patch.done;
|
|
3081
|
+
project.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
3082
|
+
this.flush();
|
|
3083
|
+
return project;
|
|
3084
|
+
}
|
|
3085
|
+
removeMilestone(id, milestoneId) {
|
|
3086
|
+
const project = this.get(id);
|
|
3087
|
+
if (project === void 0) return void 0;
|
|
3088
|
+
project.milestones = project.milestones.filter((item) => item.id !== milestoneId);
|
|
3089
|
+
project.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
3090
|
+
this.flush();
|
|
3091
|
+
return project;
|
|
3092
|
+
}
|
|
3093
|
+
addActivity(id, text2, at = (/* @__PURE__ */ new Date()).toISOString()) {
|
|
3094
|
+
const project = this.get(id);
|
|
3095
|
+
if (project === void 0) return void 0;
|
|
3096
|
+
project.activity.unshift({ id: `act_${randomUUID2().slice(0, 8)}`, at, text: text2 });
|
|
3097
|
+
if (project.activity.length > 100) project.activity.length = 100;
|
|
3098
|
+
project.updatedAt = at;
|
|
3099
|
+
this.flush();
|
|
3100
|
+
return project;
|
|
3101
|
+
}
|
|
3060
3102
|
remove(id) {
|
|
3061
3103
|
const data = this.load();
|
|
3062
3104
|
const index = data.projects.findIndex((project) => project.id === id);
|
|
@@ -3124,6 +3166,7 @@ async function createProject(options) {
|
|
|
3124
3166
|
status: "active",
|
|
3125
3167
|
notes: [],
|
|
3126
3168
|
milestones: [],
|
|
3169
|
+
activity: [],
|
|
3127
3170
|
path,
|
|
3128
3171
|
workspaceId,
|
|
3129
3172
|
sessionId,
|
|
@@ -3185,7 +3228,7 @@ ${conversation.trim()}
|
|
|
3185
3228
|
}
|
|
3186
3229
|
|
|
3187
3230
|
// src/host/version.ts
|
|
3188
|
-
var VERSION = "0.
|
|
3231
|
+
var VERSION = "0.24.0";
|
|
3189
3232
|
|
|
3190
3233
|
// src/host/api.ts
|
|
3191
3234
|
init_smtp();
|
|
@@ -4168,7 +4211,56 @@ function buildRouter(runtime) {
|
|
|
4168
4211
|
}
|
|
4169
4212
|
const project = runtime.projects().update(String(params.id ?? ""), patch);
|
|
4170
4213
|
if (project === void 0) throw new HttpError(404, "\u9879\u76EE\u4E0D\u5B58\u5728");
|
|
4171
|
-
|
|
4214
|
+
if (typeof patch.status === "string") {
|
|
4215
|
+
const labels = {
|
|
4216
|
+
active: "\u8FDB\u884C\u4E2D",
|
|
4217
|
+
paused: "\u6682\u505C",
|
|
4218
|
+
done: "\u5DF2\u5B8C\u6210",
|
|
4219
|
+
archived: "\u5DF2\u5F52\u6863"
|
|
4220
|
+
};
|
|
4221
|
+
runtime.projects().addActivity(project.id, `\u9879\u76EE\u72B6\u6001\u6539\u4E3A\u300C${labels[patch.status] ?? patch.status}\u300D`);
|
|
4222
|
+
}
|
|
4223
|
+
return { project: projectView(runtime.projects().get(project.id) ?? project) };
|
|
4224
|
+
});
|
|
4225
|
+
router.post("/projects/:id/milestones", async ({ params, body }) => {
|
|
4226
|
+
const payload = await body();
|
|
4227
|
+
const project = runtime.projects().get(String(params.id ?? ""));
|
|
4228
|
+
if (project === void 0) throw new HttpError(404, "\u9879\u76EE\u4E0D\u5B58\u5728");
|
|
4229
|
+
const title = String(payload.title ?? "").trim();
|
|
4230
|
+
if (title === "") throw new HttpError(400, "\u91CC\u7A0B\u7891\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");
|
|
4231
|
+
const updated = runtime.projects().addMilestone(project.id, title, typeof payload.due === "string" ? payload.due : "");
|
|
4232
|
+
if (updated === void 0) throw new HttpError(404, "\u9879\u76EE\u4E0D\u5B58\u5728");
|
|
4233
|
+
runtime.projects().addActivity(project.id, `\u65B0\u589E\u91CC\u7A0B\u7891\u300C${title}\u300D`);
|
|
4234
|
+
return { project: projectView(runtime.projects().get(project.id) ?? updated) };
|
|
4235
|
+
});
|
|
4236
|
+
router.patch("/projects/:id/milestones/:milestoneId", async ({ params, body }) => {
|
|
4237
|
+
const payload = await body();
|
|
4238
|
+
const project = runtime.projects().get(String(params.id ?? ""));
|
|
4239
|
+
if (project === void 0) throw new HttpError(404, "\u9879\u76EE\u4E0D\u5B58\u5728");
|
|
4240
|
+
const milestone = project.milestones.find((item) => item.id === String(params.milestoneId ?? ""));
|
|
4241
|
+
if (milestone === void 0) throw new HttpError(404, "\u91CC\u7A0B\u7891\u4E0D\u5B58\u5728");
|
|
4242
|
+
const patch = {};
|
|
4243
|
+
if (typeof payload.title === "string") patch.title = payload.title.trim();
|
|
4244
|
+
if (typeof payload.due === "string") patch.due = payload.due;
|
|
4245
|
+
if (typeof payload.done === "boolean") patch.done = payload.done;
|
|
4246
|
+
const updated = runtime.projects().updateMilestone(project.id, milestone.id, patch);
|
|
4247
|
+
if (updated === void 0) throw new HttpError(404, "\u91CC\u7A0B\u7891\u4E0D\u5B58\u5728");
|
|
4248
|
+
if (patch.done !== void 0) {
|
|
4249
|
+
runtime.projects().addActivity(
|
|
4250
|
+
project.id,
|
|
4251
|
+
`\u91CC\u7A0B\u7891\u300C${patch.title ?? milestone.title}\u300D${patch.done ? "\u5DF2\u5B8C\u6210" : "\u91CD\u65B0\u6253\u5F00"}`
|
|
4252
|
+
);
|
|
4253
|
+
}
|
|
4254
|
+
return { project: projectView(runtime.projects().get(project.id) ?? updated) };
|
|
4255
|
+
});
|
|
4256
|
+
router.delete("/projects/:id/milestones/:milestoneId", ({ params }) => {
|
|
4257
|
+
const project = runtime.projects().get(String(params.id ?? ""));
|
|
4258
|
+
if (project === void 0) throw new HttpError(404, "\u9879\u76EE\u4E0D\u5B58\u5728");
|
|
4259
|
+
const milestone = project.milestones.find((item) => item.id === String(params.milestoneId ?? ""));
|
|
4260
|
+
const updated = runtime.projects().removeMilestone(project.id, String(params.milestoneId ?? ""));
|
|
4261
|
+
if (updated === void 0) throw new HttpError(404, "\u91CC\u7A0B\u7891\u4E0D\u5B58\u5728");
|
|
4262
|
+
runtime.projects().addActivity(project.id, `\u5220\u9664\u91CC\u7A0B\u7891\u300C${milestone?.title ?? ""}\u300D`);
|
|
4263
|
+
return { project: projectView(runtime.projects().get(project.id) ?? updated) };
|
|
4172
4264
|
});
|
|
4173
4265
|
router.post("/projects/:id/notes", async ({ params, body }) => {
|
|
4174
4266
|
const payload = await body();
|
|
@@ -4178,7 +4270,10 @@ function buildRouter(runtime) {
|
|
|
4178
4270
|
if (text2 === "") throw new HttpError(400, "\u8BB0\u5F55\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A");
|
|
4179
4271
|
const createdAt = typeof payload.createdAt === "string" && payload.createdAt !== "" ? payload.createdAt : (/* @__PURE__ */ new Date()).toISOString();
|
|
4180
4272
|
const updated = runtime.projects().addNote(project.id, text2, createdAt);
|
|
4181
|
-
|
|
4273
|
+
runtime.projects().addActivity(project.id, "\u65B0\u589E\u4E00\u6761\u9879\u76EE\u8BB0\u5F55");
|
|
4274
|
+
return {
|
|
4275
|
+
project: updated === void 0 ? null : projectView(runtime.projects().get(project.id) ?? updated)
|
|
4276
|
+
};
|
|
4182
4277
|
});
|
|
4183
4278
|
router.patch("/projects/:id/notes/:noteId", async ({ params, body }) => {
|
|
4184
4279
|
const payload = await body();
|
|
@@ -4222,6 +4317,7 @@ ${note.body}`,
|
|
|
4222
4317
|
runtime.projects().linkNoteTasks(project.id, note.id, [task.id]);
|
|
4223
4318
|
created.push(taskView(task));
|
|
4224
4319
|
}
|
|
4320
|
+
runtime.projects().addActivity(project.id, `\u5C06 ${String(created.length)} \u6761\u8BB0\u5F55\u8F6C\u4E3A\u4EFB\u52A1`);
|
|
4225
4321
|
return {
|
|
4226
4322
|
tasks: created,
|
|
4227
4323
|
project: projectView(runtime.projects().get(project.id) ?? project)
|
|
@@ -4499,6 +4595,7 @@ function projectView(project) {
|
|
|
4499
4595
|
status: project.status,
|
|
4500
4596
|
notes: project.notes.map((note) => ({ ...note, taskIds: [...note.taskIds] })),
|
|
4501
4597
|
milestones: project.milestones.map((milestone) => ({ ...milestone })),
|
|
4598
|
+
activity: project.activity.map((event) => ({ ...event })),
|
|
4502
4599
|
path: project.path,
|
|
4503
4600
|
workspaceId: project.workspaceId,
|
|
4504
4601
|
sessionId: project.sessionId,
|