jowork 0.3.3 → 0.3.5
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/dist/{chunk-RT242G6H.js → chunk-OOZVBO2V.js} +4 -4
- package/dist/{chunk-HENAABEL.js → chunk-PUUHYDI7.js} +1 -1
- package/dist/{chunk-USSUIN3A.js → chunk-TGVQ63F4.js} +4 -4
- package/dist/{chunk-Z6XBOSF4.js → chunk-V3KWJ43Y.js} +2 -96
- package/dist/{chunk-RO3KK5RC.js → chunk-VWT2U6NB.js} +0 -26
- package/dist/{chunk-63AMINQC.js → chunk-XT5LUO65.js} +1 -1
- package/dist/cli.js +10 -19
- package/dist/{feishu-GOYQF2LE.js → feishu-GWZDJMWA.js} +2 -2
- package/dist/{github-PQKAYTLO.js → github-WIGZNLKW.js} +2 -2
- package/dist/{server-YXI4Z4MY.js → server-V3WMAKJQ.js} +4 -4
- package/dist/{setup-CQ5L3SHD.js → setup-XMJ3EQ6E.js} +1 -1
- package/dist/{sync-KUJT3PN5.js → sync-7Z4SQJKG.js} +5 -5
- package/dist/transport.js +1 -1
- package/package.json +1 -1
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
linkAllUnprocessed,
|
|
3
3
|
syncGitLab,
|
|
4
4
|
syncLinear
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PUUHYDI7.js";
|
|
6
6
|
import {
|
|
7
7
|
syncGitHub
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-XT5LUO65.js";
|
|
9
9
|
import {
|
|
10
10
|
GitManager
|
|
11
11
|
} from "./chunk-EYP6WMFF.js";
|
|
@@ -26,11 +26,11 @@ import {
|
|
|
26
26
|
syncFeishuDocs,
|
|
27
27
|
syncFeishuLinks,
|
|
28
28
|
syncFeishuMeetings
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-V3KWJ43Y.js";
|
|
30
30
|
import {
|
|
31
31
|
formatAnalytics,
|
|
32
32
|
formatMessages
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-VWT2U6NB.js";
|
|
34
34
|
import {
|
|
35
35
|
logError,
|
|
36
36
|
logInfo
|
|
@@ -349,7 +349,7 @@ function createJoWorkMcpServer(opts) {
|
|
|
349
349
|
try {
|
|
350
350
|
switch (src) {
|
|
351
351
|
case "feishu": {
|
|
352
|
-
const { syncFeishu } = await import("./feishu-
|
|
352
|
+
const { syncFeishu } = await import("./feishu-GWZDJMWA.js");
|
|
353
353
|
const { SyncContext } = await import("./context-ZNI3WOB7.js");
|
|
354
354
|
const feishuCtx = new SyncContext(sqlite, { info: () => {
|
|
355
355
|
}, warn: () => {
|
|
@@ -359,7 +359,7 @@ function createJoWorkMcpServer(opts) {
|
|
|
359
359
|
break;
|
|
360
360
|
}
|
|
361
361
|
case "github": {
|
|
362
|
-
const { syncGitHub } = await import("./github-
|
|
362
|
+
const { syncGitHub } = await import("./github-WIGZNLKW.js");
|
|
363
363
|
const { SyncContext } = await import("./context-ZNI3WOB7.js");
|
|
364
364
|
const ghCtx = new SyncContext(sqlite, { info: () => {
|
|
365
365
|
}, warn: () => {
|
|
@@ -1089,7 +1089,7 @@ ${hot.summary}
|
|
|
1089
1089
|
try {
|
|
1090
1090
|
switch (src) {
|
|
1091
1091
|
case "feishu": {
|
|
1092
|
-
const { syncFeishu } = await import("./feishu-
|
|
1092
|
+
const { syncFeishu } = await import("./feishu-GWZDJMWA.js");
|
|
1093
1093
|
const { SyncContext } = await import("./context-ZNI3WOB7.js");
|
|
1094
1094
|
const feishuCtx = new SyncContext(sqlite, { info: () => {
|
|
1095
1095
|
}, warn: () => {
|
|
@@ -1100,7 +1100,7 @@ ${hot.summary}
|
|
|
1100
1100
|
break;
|
|
1101
1101
|
}
|
|
1102
1102
|
case "github": {
|
|
1103
|
-
const { syncGitHub } = await import("./github-
|
|
1103
|
+
const { syncGitHub } = await import("./github-WIGZNLKW.js");
|
|
1104
1104
|
const { SyncContext } = await import("./context-ZNI3WOB7.js");
|
|
1105
1105
|
const ghCtx = new SyncContext(sqlite, { info: () => {
|
|
1106
1106
|
}, warn: () => {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
formatApproval,
|
|
3
2
|
formatCalendarEvent,
|
|
4
3
|
formatDocument
|
|
5
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-VWT2U6NB.js";
|
|
6
5
|
import {
|
|
7
6
|
logError,
|
|
8
7
|
logInfo
|
|
@@ -231,100 +230,7 @@ async function syncFeishuApprovals(ctx, data, logger = defaultLogger) {
|
|
|
231
230
|
if (!appId || !appSecret) throw new Error("Missing Feishu credentials");
|
|
232
231
|
const token = await getFeishuToken(appId, appSecret);
|
|
233
232
|
let approvals = 0, newObjects = 0;
|
|
234
|
-
|
|
235
|
-
const defRes = await fetch("https://open.feishu.cn/open-apis/approval/v4/approvals?page_size=50", {
|
|
236
|
-
headers: { Authorization: `Bearer ${token}` }
|
|
237
|
-
});
|
|
238
|
-
if (!defRes.ok) {
|
|
239
|
-
if (defRes.status === 403 || defRes.status === 400) {
|
|
240
|
-
logger.warn("Approval sync requires approval:approval:readonly scope. Add it at https://open.feishu.cn/app \u2192 Permissions");
|
|
241
|
-
} else {
|
|
242
|
-
logger.warn(`Approval API error: HTTP ${defRes.status}`);
|
|
243
|
-
}
|
|
244
|
-
return { approvals, newObjects };
|
|
245
|
-
}
|
|
246
|
-
const defData = await defRes.json();
|
|
247
|
-
if (defData.code !== 0 || !defData.data?.items?.length) {
|
|
248
|
-
if (defData.code === 99991400 || defData.code === 99991002) {
|
|
249
|
-
logger.warn("Approval sync requires approval:approval:readonly scope. Add it at https://open.feishu.cn/app \u2192 Permissions");
|
|
250
|
-
}
|
|
251
|
-
return { approvals, newObjects };
|
|
252
|
-
}
|
|
253
|
-
const allInstances = [];
|
|
254
|
-
for (const def of defData.data.items) {
|
|
255
|
-
const res = await fetch("https://open.feishu.cn/open-apis/approval/v4/instances", {
|
|
256
|
-
method: "POST",
|
|
257
|
-
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
|
|
258
|
-
body: JSON.stringify({ approval_code: def.approval_code, page_size: 50 })
|
|
259
|
-
});
|
|
260
|
-
if (!res.ok) continue;
|
|
261
|
-
const resData2 = await res.json();
|
|
262
|
-
if (resData2.code !== 0) continue;
|
|
263
|
-
for (const inst of resData2.data.items ?? []) {
|
|
264
|
-
allInstances.push({ ...inst, approval_name: def.approval_name });
|
|
265
|
-
}
|
|
266
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
267
|
-
}
|
|
268
|
-
const resData = { code: 0, data: { items: allInstances } };
|
|
269
|
-
if (resData.code !== 0 || !resData.data?.items) {
|
|
270
|
-
logger.warn(`Approval list returned code ${resData.code}`);
|
|
271
|
-
return { approvals, newObjects };
|
|
272
|
-
}
|
|
273
|
-
const items = [];
|
|
274
|
-
for (const approval of resData.data.items) {
|
|
275
|
-
const uri = `feishu://approval/${approval.instance_id}`;
|
|
276
|
-
const summary = `${approval.approval_name} [${approval.status}]`;
|
|
277
|
-
let formText = "";
|
|
278
|
-
try {
|
|
279
|
-
const formData = JSON.parse(approval.form || "[]");
|
|
280
|
-
formText = Array.isArray(formData) ? formData.map((f) => `${f.name}: ${f.value}`).join("\n") : JSON.stringify(formData);
|
|
281
|
-
} catch {
|
|
282
|
-
formText = approval.form || "";
|
|
283
|
-
}
|
|
284
|
-
const body = [
|
|
285
|
-
`Approval: ${approval.approval_name}`,
|
|
286
|
-
`Status: ${approval.status}`,
|
|
287
|
-
`Submitted: ${approval.start_time}`,
|
|
288
|
-
`Completed: ${approval.end_time || "pending"}`,
|
|
289
|
-
"",
|
|
290
|
-
formText
|
|
291
|
-
].join("\n");
|
|
292
|
-
const startTime = approval.start_time ? new Date(approval.start_time).getTime() : Date.now();
|
|
293
|
-
let formFields = [];
|
|
294
|
-
try {
|
|
295
|
-
const fd = JSON.parse(approval.form || "[]");
|
|
296
|
-
if (Array.isArray(fd)) formFields = fd;
|
|
297
|
-
} catch {
|
|
298
|
-
}
|
|
299
|
-
const fileContent = formatApproval({
|
|
300
|
-
source: "feishu",
|
|
301
|
-
name: approval.approval_name,
|
|
302
|
-
status: approval.status,
|
|
303
|
-
submitter: approval.user_id || "unknown",
|
|
304
|
-
fields: formFields,
|
|
305
|
-
uri
|
|
306
|
-
});
|
|
307
|
-
items.push({
|
|
308
|
-
source: "feishu",
|
|
309
|
-
sourceType: "approval",
|
|
310
|
-
uri,
|
|
311
|
-
title: approval.approval_name,
|
|
312
|
-
summary,
|
|
313
|
-
tags: ["feishu", "approval", approval.status],
|
|
314
|
-
content: body,
|
|
315
|
-
contentType: "text/plain",
|
|
316
|
-
createdAt: startTime,
|
|
317
|
-
fileContent
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
const result = ctx.batchUpsert(items);
|
|
321
|
-
approvals += result.inserted;
|
|
322
|
-
newObjects += result.inserted;
|
|
323
|
-
} catch (err) {
|
|
324
|
-
logger.error(`Approval sync error: ${err}`);
|
|
325
|
-
}
|
|
326
|
-
logger.info("Approval sync complete", { approvals, newObjects });
|
|
327
|
-
return { approvals, newObjects };
|
|
233
|
+
return { approvals: 0, newObjects: 0 };
|
|
328
234
|
}
|
|
329
235
|
async function syncFeishuDocs(ctx, data, logger = defaultLogger) {
|
|
330
236
|
const { appId, appSecret } = data;
|
|
@@ -77,31 +77,6 @@ function formatCalendarEvent(opts) {
|
|
|
77
77
|
""
|
|
78
78
|
].join("\n");
|
|
79
79
|
}
|
|
80
|
-
function formatApproval(opts) {
|
|
81
|
-
const fieldRows = opts.fields.map((f) => `| ${f.name} | ${f.value} |`).join("\n");
|
|
82
|
-
const table = opts.fields.length > 0 ? `| Field | Value |
|
|
83
|
-
|-------|-------|
|
|
84
|
-
${fieldRows}
|
|
85
|
-
` : "";
|
|
86
|
-
return [
|
|
87
|
-
"---",
|
|
88
|
-
`source: ${opts.source}`,
|
|
89
|
-
`type: approval`,
|
|
90
|
-
`name: ${opts.name}`,
|
|
91
|
-
`status: ${opts.status}`,
|
|
92
|
-
`submitter: ${opts.submitter}`,
|
|
93
|
-
`uri: ${opts.uri}`,
|
|
94
|
-
"---",
|
|
95
|
-
"",
|
|
96
|
-
`# ${opts.name}`,
|
|
97
|
-
"",
|
|
98
|
-
`**Status:** ${opts.status}`,
|
|
99
|
-
`**Submitter:** ${opts.submitter}`,
|
|
100
|
-
"",
|
|
101
|
-
table,
|
|
102
|
-
""
|
|
103
|
-
].join("\n");
|
|
104
|
-
}
|
|
105
80
|
function formatDocument(opts) {
|
|
106
81
|
return [
|
|
107
82
|
"---",
|
|
@@ -126,7 +101,6 @@ export {
|
|
|
126
101
|
formatIssue,
|
|
127
102
|
formatPullRequest,
|
|
128
103
|
formatCalendarEvent,
|
|
129
|
-
formatApproval,
|
|
130
104
|
formatDocument,
|
|
131
105
|
formatAnalytics
|
|
132
106
|
};
|
package/dist/cli.js
CHANGED
|
@@ -5,15 +5,15 @@ import {
|
|
|
5
5
|
syncCommand,
|
|
6
6
|
syncFirebase,
|
|
7
7
|
syncPostHog
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-OOZVBO2V.js";
|
|
9
9
|
import {
|
|
10
10
|
linkAllUnprocessed,
|
|
11
11
|
syncGitLab,
|
|
12
12
|
syncLinear
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-PUUHYDI7.js";
|
|
14
14
|
import {
|
|
15
15
|
syncGitHub
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-XT5LUO65.js";
|
|
17
17
|
import {
|
|
18
18
|
GitManager
|
|
19
19
|
} from "./chunk-EYP6WMFF.js";
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
import {
|
|
24
24
|
PLUGIN_REGISTRY,
|
|
25
25
|
createJoWorkMcpServer
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-TGVQ63F4.js";
|
|
27
27
|
import {
|
|
28
28
|
GoalManager
|
|
29
29
|
} from "./chunk-VX662YLA.js";
|
|
@@ -53,8 +53,8 @@ import {
|
|
|
53
53
|
syncFeishuDocs,
|
|
54
54
|
syncFeishuLinks,
|
|
55
55
|
syncFeishuMeetings
|
|
56
|
-
} from "./chunk-
|
|
57
|
-
import "./chunk-
|
|
56
|
+
} from "./chunk-V3KWJ43Y.js";
|
|
57
|
+
import "./chunk-VWT2U6NB.js";
|
|
58
58
|
import {
|
|
59
59
|
logError,
|
|
60
60
|
logInfo
|
|
@@ -102,7 +102,7 @@ function initCommand(program2) {
|
|
|
102
102
|
default: true
|
|
103
103
|
}]);
|
|
104
104
|
if (continueSetup) {
|
|
105
|
-
const { runSetupWizard } = await import("./setup-
|
|
105
|
+
const { runSetupWizard } = await import("./setup-XMJ3EQ6E.js");
|
|
106
106
|
await runSetupWizard();
|
|
107
107
|
} else {
|
|
108
108
|
console.log("");
|
|
@@ -2102,7 +2102,7 @@ function dashboardCommand(program2) {
|
|
|
2102
2102
|
console.error("Error: JoWork not initialized. Run `jowork init` first.");
|
|
2103
2103
|
process.exit(1);
|
|
2104
2104
|
}
|
|
2105
|
-
const { startDashboard } = await import("./server-
|
|
2105
|
+
const { startDashboard } = await import("./server-V3WMAKJQ.js");
|
|
2106
2106
|
const port = opts.port ? parseInt(opts.port, 10) : void 0;
|
|
2107
2107
|
const dashboard = await startDashboard({ port });
|
|
2108
2108
|
const url = `http://127.0.0.1:${dashboard.port}`;
|
|
@@ -2791,18 +2791,9 @@ function isInstalled(packageName) {
|
|
|
2791
2791
|
}
|
|
2792
2792
|
|
|
2793
2793
|
// src/cli.ts
|
|
2794
|
-
import { createRequire } from "module";
|
|
2795
2794
|
process.env["I18NEXT_DISABLE_BANNER"] = "1";
|
|
2796
2795
|
var program = new Command();
|
|
2797
|
-
|
|
2798
|
-
var PKG_VERSION = (() => {
|
|
2799
|
-
try {
|
|
2800
|
-
return __require("../package.json").version;
|
|
2801
|
-
} catch {
|
|
2802
|
-
return "0.3.0";
|
|
2803
|
-
}
|
|
2804
|
-
})();
|
|
2805
|
-
program.name("jowork").description("AI Agent Infrastructure \u2014 let AI agents truly understand your work").version(PKG_VERSION);
|
|
2796
|
+
program.name("jowork").description("AI Agent Infrastructure \u2014 let AI agents truly understand your work").version("0.3.5");
|
|
2806
2797
|
initCommand(program);
|
|
2807
2798
|
serveCommand(program);
|
|
2808
2799
|
registerCommand(program);
|
|
@@ -2829,7 +2820,7 @@ program.action(async () => {
|
|
|
2829
2820
|
const config = readConfig2();
|
|
2830
2821
|
if (!config.initialized || !existsSync18(dbPath2())) {
|
|
2831
2822
|
if (process.stdin.isTTY) {
|
|
2832
|
-
const { runSetupWizard } = await import("./setup-
|
|
2823
|
+
const { runSetupWizard } = await import("./setup-XMJ3EQ6E.js");
|
|
2833
2824
|
await runSetupWizard();
|
|
2834
2825
|
} else {
|
|
2835
2826
|
console.log("JoWork is not initialized. Run `jowork init` in an interactive terminal.");
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
syncGitHub
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XT5LUO65.js";
|
|
4
4
|
import "./chunk-EYP6WMFF.js";
|
|
5
5
|
import "./chunk-4PIT2GZ4.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-VWT2U6NB.js";
|
|
7
7
|
import "./chunk-MYDK7MWB.js";
|
|
8
8
|
import "./chunk-UJ4KEHGZ.js";
|
|
9
9
|
export {
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
linkAllUnprocessed,
|
|
3
3
|
syncGitLab,
|
|
4
4
|
syncLinear
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PUUHYDI7.js";
|
|
6
6
|
import {
|
|
7
7
|
syncGitHub
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-XT5LUO65.js";
|
|
9
9
|
import "./chunk-EYP6WMFF.js";
|
|
10
10
|
import {
|
|
11
11
|
DbManager
|
|
@@ -27,8 +27,8 @@ import {
|
|
|
27
27
|
syncFeishuApprovals,
|
|
28
28
|
syncFeishuDocs,
|
|
29
29
|
syncFeishuMeetings
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-V3KWJ43Y.js";
|
|
31
|
+
import "./chunk-VWT2U6NB.js";
|
|
32
32
|
import {
|
|
33
33
|
logError,
|
|
34
34
|
logInfo
|
|
@@ -212,7 +212,7 @@ async function runSetupWizard() {
|
|
|
212
212
|
console.log("");
|
|
213
213
|
console.log(zh ? ` \u6B63\u5728\u540C\u6B65 ${connectedSources.length} \u4E2A\u6570\u636E\u6E90...` : ` Syncing ${connectedSources.length} source${connectedSources.length > 1 ? "s" : ""}...`);
|
|
214
214
|
console.log("");
|
|
215
|
-
const { runSync } = await import("./sync-
|
|
215
|
+
const { runSync } = await import("./sync-7Z4SQJKG.js");
|
|
216
216
|
try {
|
|
217
217
|
await runSync(connectedSources);
|
|
218
218
|
} catch {
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runSync,
|
|
3
3
|
syncCommand
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-OOZVBO2V.js";
|
|
5
|
+
import "./chunk-PUUHYDI7.js";
|
|
6
|
+
import "./chunk-XT5LUO65.js";
|
|
7
7
|
import "./chunk-EYP6WMFF.js";
|
|
8
8
|
import "./chunk-74AHY7X6.js";
|
|
9
9
|
import "./chunk-54SD5GBF.js";
|
|
10
10
|
import "./chunk-FX6Z3QHV.js";
|
|
11
11
|
import "./chunk-4PIT2GZ4.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-V3KWJ43Y.js";
|
|
13
|
+
import "./chunk-VWT2U6NB.js";
|
|
14
14
|
import "./chunk-MYDK7MWB.js";
|
|
15
15
|
import "./chunk-OXWWOKC7.js";
|
|
16
16
|
import "./chunk-TFMF3EXE.js";
|
package/dist/transport.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jowork",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"description": "AI Agent Infrastructure — let AI agents truly understand your work. Connect data sources, give agents awareness and goals. Local-first, one command.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0",
|