jinn-cli 0.3.0 → 0.4.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/dist/src/cli/chrome-allow.d.ts.map +1 -1
- package/dist/src/cli/chrome-allow.js +14 -5
- package/dist/src/cli/chrome-allow.js.map +1 -1
- package/dist/src/cli/list.js +1 -1
- package/dist/src/cli/list.js.map +1 -1
- package/dist/src/cli/nuke.js +2 -2
- package/dist/src/cli/nuke.js.map +1 -1
- package/dist/src/cli/setup.d.ts.map +1 -1
- package/dist/src/cli/setup.js +2 -1
- package/dist/src/cli/setup.js.map +1 -1
- package/dist/src/connectors/slack/index.d.ts +9 -1
- package/dist/src/connectors/slack/index.d.ts.map +1 -1
- package/dist/src/connectors/slack/index.js +172 -8
- package/dist/src/connectors/slack/index.js.map +1 -1
- package/dist/src/connectors/slack/threads.d.ts +1 -4
- package/dist/src/connectors/slack/threads.d.ts.map +1 -1
- package/dist/src/connectors/slack/threads.js +17 -7
- package/dist/src/connectors/slack/threads.js.map +1 -1
- package/dist/src/connectors/slack/threads.test.js +42 -8
- package/dist/src/connectors/slack/threads.test.js.map +1 -1
- package/dist/src/cron/runner.d.ts.map +1 -1
- package/dist/src/cron/runner.js +16 -5
- package/dist/src/cron/runner.js.map +1 -1
- package/dist/src/engines/claude.d.ts.map +1 -1
- package/dist/src/engines/claude.js +19 -4
- package/dist/src/engines/claude.js.map +1 -1
- package/dist/src/gateway/api.d.ts.map +1 -1
- package/dist/src/gateway/api.js +214 -3
- package/dist/src/gateway/api.js.map +1 -1
- package/dist/src/gateway/files.d.ts +6 -0
- package/dist/src/gateway/files.d.ts.map +1 -0
- package/dist/src/gateway/files.js +430 -0
- package/dist/src/gateway/files.js.map +1 -0
- package/dist/src/gateway/lifecycle.d.ts.map +1 -1
- package/dist/src/gateway/lifecycle.js +16 -6
- package/dist/src/gateway/lifecycle.js.map +1 -1
- package/dist/src/gateway/org.d.ts.map +1 -1
- package/dist/src/gateway/org.js +1 -0
- package/dist/src/gateway/org.js.map +1 -1
- package/dist/src/gateway/server.d.ts.map +1 -1
- package/dist/src/gateway/server.js +42 -1
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/gateway/watcher.d.ts.map +1 -1
- package/dist/src/gateway/watcher.js +9 -2
- package/dist/src/gateway/watcher.js.map +1 -1
- package/dist/src/mcp/gateway-server.d.ts +13 -0
- package/dist/src/mcp/gateway-server.d.ts.map +1 -0
- package/dist/src/mcp/gateway-server.js +375 -0
- package/dist/src/mcp/gateway-server.js.map +1 -0
- package/dist/src/mcp/resolver.d.ts +19 -0
- package/dist/src/mcp/resolver.d.ts.map +1 -0
- package/dist/src/mcp/resolver.js +153 -0
- package/dist/src/mcp/resolver.js.map +1 -0
- package/dist/src/sessions/context.d.ts +1 -0
- package/dist/src/sessions/context.d.ts.map +1 -1
- package/dist/src/sessions/context.js +34 -3
- package/dist/src/sessions/context.js.map +1 -1
- package/dist/src/sessions/limits.d.ts +7 -0
- package/dist/src/sessions/limits.d.ts.map +1 -0
- package/dist/src/sessions/limits.js +42 -0
- package/dist/src/sessions/limits.js.map +1 -0
- package/dist/src/sessions/manager.d.ts +3 -1
- package/dist/src/sessions/manager.d.ts.map +1 -1
- package/dist/src/sessions/manager.js +38 -17
- package/dist/src/sessions/manager.js.map +1 -1
- package/dist/src/sessions/registry.d.ts +24 -0
- package/dist/src/sessions/registry.d.ts.map +1 -1
- package/dist/src/sessions/registry.js +76 -5
- package/dist/src/sessions/registry.js.map +1 -1
- package/dist/src/shared/effort.d.ts +17 -0
- package/dist/src/shared/effort.d.ts.map +1 -0
- package/dist/src/shared/effort.js +44 -0
- package/dist/src/shared/effort.js.map +1 -0
- package/dist/src/shared/paths.d.ts +3 -0
- package/dist/src/shared/paths.d.ts.map +1 -1
- package/dist/src/shared/paths.js +3 -0
- package/dist/src/shared/paths.js.map +1 -1
- package/dist/src/shared/types.d.ts +61 -1
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/stt/stt.d.ts +24 -0
- package/dist/src/stt/stt.d.ts.map +1 -0
- package/dist/src/stt/stt.js +203 -0
- package/dist/src/stt/stt.js.map +1 -0
- package/dist/web/404.html +1 -1
- package/dist/web/_next/static/chunks/{704-af2893821e1d18dc.js → 704-ca24be493a922639.js} +1 -1
- package/dist/web/_next/static/chunks/{73-c226535579393e21.js → 73-2d6e730cea0fe6c8.js} +1 -1
- package/dist/web/_next/static/chunks/app/_not-found/{page-bb075b0779827928.js → page-7d43a486b7014af3.js} +1 -1
- package/dist/web/_next/static/chunks/app/chat/page-2f3c561ed768ed58.js +1 -0
- package/dist/web/_next/static/chunks/app/costs/{page-d6c03718defdb599.js → page-13a6f2c65a827f8a.js} +1 -1
- package/dist/web/_next/static/chunks/app/cron/{page-4c563eef2b6231fe.js → page-0ee07a679c7b79aa.js} +1 -1
- package/dist/web/_next/static/chunks/app/kanban/{page-55a73165a36f4077.js → page-a7facadd4194faae.js} +1 -1
- package/dist/web/_next/static/chunks/app/layout-fd975d16033dab25.js +1 -0
- package/dist/web/_next/static/chunks/app/logs/page-6de6b16523e85193.js +1 -0
- package/dist/web/_next/static/chunks/app/org/{page-d5cd8d9b7864737b.js → page-cd9d362e77f4799e.js} +1 -1
- package/dist/web/_next/static/chunks/app/{page-b81992940fd1dbc6.js → page-b98417ed4f4d45a0.js} +1 -1
- package/dist/web/_next/static/chunks/app/sessions/{page-c83c890177c18258.js → page-9f83fa32b654db3b.js} +1 -1
- package/dist/web/_next/static/chunks/app/settings/page-34c9276e2a012445.js +1 -0
- package/dist/web/_next/static/chunks/app/skills/page-18cf3b7bb9a7339c.js +1 -0
- package/dist/web/_next/static/chunks/main-app-0c65af8a0fd99888.js +1 -0
- package/dist/web/_next/static/css/24da9dfc818cea32.css +1 -0
- package/dist/web/chat.html +1 -1
- package/dist/web/chat.txt +5 -5
- package/dist/web/costs.html +2 -2
- package/dist/web/costs.txt +5 -5
- package/dist/web/cron.html +1 -1
- package/dist/web/cron.txt +5 -5
- package/dist/web/index.html +1 -1
- package/dist/web/index.txt +5 -5
- package/dist/web/kanban.html +1 -1
- package/dist/web/kanban.txt +5 -5
- package/dist/web/logs.html +2 -2
- package/dist/web/logs.txt +5 -5
- package/dist/web/org.html +1 -1
- package/dist/web/org.txt +5 -5
- package/dist/web/sessions.html +1 -1
- package/dist/web/sessions.txt +5 -5
- package/dist/web/settings.html +1 -1
- package/dist/web/settings.txt +5 -5
- package/dist/web/skills.html +1 -1
- package/dist/web/skills.txt +5 -5
- package/package.json +3 -1
- package/template/config.default.yaml +32 -0
- package/template/docs/mcp.md +108 -0
- package/dist/web/_next/static/chunks/app/chat/page-6d5bc707a45c92c6.js +0 -1
- package/dist/web/_next/static/chunks/app/layout-5129b67d5f126cf0.js +0 -1
- package/dist/web/_next/static/chunks/app/logs/page-e18889d67e48c9c9.js +0 -1
- package/dist/web/_next/static/chunks/app/settings/page-2583d55551abdf72.js +0 -1
- package/dist/web/_next/static/chunks/app/skills/page-df9465e314561bb5.js +0 -1
- package/dist/web/_next/static/chunks/main-app-437f51faf74fbb3b.js +0 -1
- package/dist/web/_next/static/css/4a6a5bca9238c104.css +0 -1
- /package/dist/web/_next/static/{jt8R5JvUgfB9CMfFwWFr0 → Tn0FXDHalXGkNoojna-vg}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{jt8R5JvUgfB9CMfFwWFr0 → Tn0FXDHalXGkNoojna-vg}/_ssgManifest.js +0 -0
|
@@ -1,22 +1,32 @@
|
|
|
1
|
-
export function deriveSessionKey(event
|
|
1
|
+
export function deriveSessionKey(event) {
|
|
2
2
|
if (event.channel_type === "im") {
|
|
3
3
|
return `slack:dm:${event.user || "unknown"}`;
|
|
4
4
|
}
|
|
5
|
-
|
|
6
|
-
return `slack:${event.channel}`;
|
|
7
|
-
}
|
|
5
|
+
// Thread reply — use thread_ts (which is the root message's ts)
|
|
8
6
|
if (event.thread_ts && event.thread_ts !== event.ts) {
|
|
9
7
|
return `slack:${event.channel}:${event.thread_ts}`;
|
|
10
8
|
}
|
|
11
|
-
|
|
9
|
+
// Root channel message — use ts so thread replies will match
|
|
10
|
+
return `slack:${event.channel}:${event.ts}`;
|
|
12
11
|
}
|
|
13
12
|
export function buildReplyContext(event) {
|
|
13
|
+
// For DMs, don't set thread (DMs don't support threading the same way)
|
|
14
|
+
if (event.channel_type === "im") {
|
|
15
|
+
return {
|
|
16
|
+
channel: event.channel,
|
|
17
|
+
thread: null,
|
|
18
|
+
messageTs: event.ts ?? null,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// For channel messages, always set thread so bot replies in a thread
|
|
22
|
+
// For root messages: thread = ts (starts a thread under the root)
|
|
23
|
+
// For thread replies: thread = thread_ts (continues existing thread)
|
|
14
24
|
const thread = event.thread_ts && event.thread_ts !== event.ts
|
|
15
25
|
? event.thread_ts
|
|
16
|
-
:
|
|
26
|
+
: event.ts ?? null;
|
|
17
27
|
return {
|
|
18
28
|
channel: event.channel,
|
|
19
|
-
thread
|
|
29
|
+
thread,
|
|
20
30
|
messageTs: event.ts ?? null,
|
|
21
31
|
};
|
|
22
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../../src/connectors/slack/threads.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../../src/connectors/slack/threads.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,YAAY,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;IAC/C,CAAC;IAED,gEAAgE;IAChE,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;QACpD,OAAO,SAAS,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;IACrD,CAAC;IAED,6DAA6D;IAC7D,OAAO,SAAS,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA4B;IAC5D,uEAAuE;IACvE,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI;SAC5B,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,kEAAkE;IAClE,qEAAqE;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE;QAC5D,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC;IAErB,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM;QACN,SAAS,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAsB,EAAE,UAAkB;IAC1E,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IACtB,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC;AAClC,CAAC"}
|
|
@@ -10,23 +10,45 @@ test("deriveSessionKey keeps DM sessions per user", () => {
|
|
|
10
10
|
});
|
|
11
11
|
assert.equal(key, "slack:dm:U123");
|
|
12
12
|
});
|
|
13
|
-
test("deriveSessionKey
|
|
14
|
-
const
|
|
13
|
+
test("deriveSessionKey uses ts for channel root messages", () => {
|
|
14
|
+
const key = deriveSessionKey({
|
|
15
|
+
channel: "C123",
|
|
16
|
+
user: "U123",
|
|
17
|
+
ts: "1700000000.000100",
|
|
18
|
+
});
|
|
19
|
+
assert.equal(key, "slack:C123:1700000000.000100");
|
|
20
|
+
});
|
|
21
|
+
test("deriveSessionKey uses thread_ts for thread replies (matches root)", () => {
|
|
22
|
+
const key = deriveSessionKey({
|
|
15
23
|
channel: "C123",
|
|
16
24
|
user: "U123",
|
|
17
25
|
ts: "1700000100.000200",
|
|
18
26
|
thread_ts: "1700000000.000100",
|
|
19
27
|
});
|
|
20
|
-
|
|
28
|
+
assert.equal(key, "slack:C123:1700000000.000100");
|
|
29
|
+
});
|
|
30
|
+
test("deriveSessionKey treats same-ts thread_ts as root message", () => {
|
|
31
|
+
const key = deriveSessionKey({
|
|
21
32
|
channel: "C123",
|
|
22
33
|
user: "U123",
|
|
23
|
-
ts: "
|
|
34
|
+
ts: "1700000000.000100",
|
|
24
35
|
thread_ts: "1700000000.000100",
|
|
25
|
-
}
|
|
26
|
-
assert.equal(
|
|
27
|
-
|
|
36
|
+
});
|
|
37
|
+
assert.equal(key, "slack:C123:1700000000.000100");
|
|
38
|
+
});
|
|
39
|
+
test("buildReplyContext sets thread for channel root messages", () => {
|
|
40
|
+
const context = buildReplyContext({
|
|
41
|
+
channel: "C123",
|
|
42
|
+
ts: "1700000000.000100",
|
|
43
|
+
channel_type: "channel",
|
|
44
|
+
});
|
|
45
|
+
assert.deepEqual(context, {
|
|
46
|
+
channel: "C123",
|
|
47
|
+
thread: "1700000000.000100",
|
|
48
|
+
messageTs: "1700000000.000100",
|
|
49
|
+
});
|
|
28
50
|
});
|
|
29
|
-
test("buildReplyContext
|
|
51
|
+
test("buildReplyContext sets thread_ts for thread replies", () => {
|
|
30
52
|
const context = buildReplyContext({
|
|
31
53
|
channel: "C123",
|
|
32
54
|
ts: "1700000100.000200",
|
|
@@ -38,6 +60,18 @@ test("buildReplyContext keeps the original message id for replies", () => {
|
|
|
38
60
|
messageTs: "1700000100.000200",
|
|
39
61
|
});
|
|
40
62
|
});
|
|
63
|
+
test("buildReplyContext does NOT set thread for DMs", () => {
|
|
64
|
+
const context = buildReplyContext({
|
|
65
|
+
channel: "D123",
|
|
66
|
+
ts: "1700000000.000100",
|
|
67
|
+
channel_type: "im",
|
|
68
|
+
});
|
|
69
|
+
assert.deepEqual(context, {
|
|
70
|
+
channel: "D123",
|
|
71
|
+
thread: null,
|
|
72
|
+
messageTs: "1700000000.000100",
|
|
73
|
+
});
|
|
74
|
+
});
|
|
41
75
|
test("isOldSlackMessage compares against boot time", () => {
|
|
42
76
|
assert.equal(isOldSlackMessage("1700000000.000100", 1700000001000), true);
|
|
43
77
|
assert.equal(isOldSlackMessage("1700000002.000100", 1700000001000), false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.test.js","sourceRoot":"","sources":["../../../../src/connectors/slack/threads.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtF,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,GAAG,GAAG,gBAAgB,CAAC;QAC3B,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,IAAI;QAClB,EAAE,EAAE,mBAAmB;KACxB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"threads.test.js","sourceRoot":"","sources":["../../../../src/connectors/slack/threads.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/cron/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/cron/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAgGf"}
|
package/dist/src/cron/runner.js
CHANGED
|
@@ -8,8 +8,7 @@ export async function runCronJob(job, sessionManager, config, connectors) {
|
|
|
8
8
|
const delivery = job.delivery || config.cron?.defaultDelivery;
|
|
9
9
|
const cooSlug = config.portal?.portalName?.toLowerCase() || "jinn";
|
|
10
10
|
if (delivery && job.employee && job.employee !== cooSlug) {
|
|
11
|
-
logger.
|
|
12
|
-
`Recommended pattern: target "${cooSlug}" and let the COO delegate to "${job.employee}" via a child session for output review/filtering.`);
|
|
11
|
+
logger.debug(`Cron job "${job.name}" targets employee "${job.employee}" directly (skipping COO delegation).`);
|
|
13
12
|
}
|
|
14
13
|
let employee;
|
|
15
14
|
if (job.employee) {
|
|
@@ -20,7 +19,7 @@ export async function runCronJob(job, sessionManager, config, connectors) {
|
|
|
20
19
|
const startedAt = new Date().toISOString();
|
|
21
20
|
const sessionKey = `cron:${job.id}:${Date.now()}`;
|
|
22
21
|
try {
|
|
23
|
-
await sessionManager.route({
|
|
22
|
+
const routeResult = await sessionManager.route({
|
|
24
23
|
connector: connector.name,
|
|
25
24
|
source: "cron",
|
|
26
25
|
sessionKey,
|
|
@@ -47,13 +46,14 @@ export async function runCronJob(job, sessionManager, config, connectors) {
|
|
|
47
46
|
},
|
|
48
47
|
}, connector, {
|
|
49
48
|
employee,
|
|
50
|
-
engine: job.engine || config.engines.default,
|
|
51
|
-
model: job.model || config.engines[(job.engine || config.engines.default)]?.model,
|
|
49
|
+
engine: job.engine || employee?.engine || config.engines.default,
|
|
50
|
+
model: job.model || employee?.model || config.engines[(job.engine || config.engines.default)]?.model,
|
|
52
51
|
title: job.name,
|
|
53
52
|
});
|
|
54
53
|
appendRunLog(job.id, {
|
|
55
54
|
timestamp: startedAt,
|
|
56
55
|
sessionKey,
|
|
56
|
+
sessionId: routeResult?.sessionId ?? null,
|
|
57
57
|
status: "success",
|
|
58
58
|
durationMs: Date.now() - startTime,
|
|
59
59
|
error: null,
|
|
@@ -72,6 +72,17 @@ export async function runCronJob(job, sessionManager, config, connectors) {
|
|
|
72
72
|
resultPreview: null,
|
|
73
73
|
});
|
|
74
74
|
logger.error(`Cron job "${job.name}" failed: ${message}`);
|
|
75
|
+
// Send alert if configured
|
|
76
|
+
const alertConnector = config.cron?.alertConnector;
|
|
77
|
+
const alertChannel = config.cron?.alertChannel;
|
|
78
|
+
if (alertConnector && alertChannel) {
|
|
79
|
+
const alertTarget = connectors.get(alertConnector);
|
|
80
|
+
if (alertTarget) {
|
|
81
|
+
await alertTarget.sendMessage({ channel: alertChannel }, `⚠️ Cron job "${job.name}" failed:\n${message.slice(0, 500)}`).catch((alertErr) => {
|
|
82
|
+
logger.error(`Failed to send cron alert: ${alertErr instanceof Error ? alertErr.message : alertErr}`);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
75
86
|
}
|
|
76
87
|
}
|
|
77
88
|
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/cron/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAY,EACZ,cAA8B,EAC9B,MAAkB,EAClB,UAAkC;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC;IACnE,IAAI,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/cron/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/engines/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAC;AAQxG,qBAAa,YAAa,YAAW,mBAAmB;IACtD,IAAI,EAAG,QAAQ,CAAU;IACzB,OAAO,CAAC,aAAa,CAAkC;IAEvD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,SAAgB,GAAG,IAAI;IAcrD,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK7B,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/engines/claude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAC;AAQxG,qBAAa,YAAa,YAAW,mBAAmB;IACtD,IAAI,EAAG,QAAQ,CAAU;IACzB,OAAO,CAAC,aAAa,CAAkC;IAEvD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,SAAgB,GAAG,IAAI;IAcrD,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK7B,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA+KrD,OAAO,CAAC,iBAAiB;IA+DzB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,aAAa;CAYtB"}
|
|
@@ -27,7 +27,7 @@ export class ClaudeEngine {
|
|
|
27
27
|
}
|
|
28
28
|
async run(opts) {
|
|
29
29
|
const streaming = !!opts.onStream;
|
|
30
|
-
const args = ["-p", "--output-format", streaming ? "stream-json" : "json", "--verbose", "--dangerously-skip-permissions"];
|
|
30
|
+
const args = ["-p", "--output-format", streaming ? "stream-json" : "json", "--verbose", "--dangerously-skip-permissions", "--chrome"];
|
|
31
31
|
if (streaming)
|
|
32
32
|
args.push("--include-partial-messages");
|
|
33
33
|
if (opts.resumeSessionId)
|
|
@@ -38,13 +38,17 @@ export class ClaudeEngine {
|
|
|
38
38
|
args.push("--effort", opts.effortLevel);
|
|
39
39
|
if (opts.systemPrompt)
|
|
40
40
|
args.push("--append-system-prompt", opts.systemPrompt);
|
|
41
|
-
if (opts.cliFlags?.length)
|
|
42
|
-
args.push(...opts.cliFlags);
|
|
43
41
|
let prompt = opts.prompt;
|
|
44
42
|
if (opts.attachments?.length) {
|
|
45
43
|
prompt += "\n\nAttached files:\n" + opts.attachments.map((a) => `- ${a}`).join("\n");
|
|
46
44
|
}
|
|
45
|
+
// Prompt MUST come before --mcp-config because --mcp-config is variadic
|
|
46
|
+
// and would consume the prompt as another config path
|
|
47
47
|
args.push(prompt);
|
|
48
|
+
if (opts.mcpConfigPath)
|
|
49
|
+
args.push("--mcp-config", opts.mcpConfigPath);
|
|
50
|
+
if (opts.cliFlags?.length)
|
|
51
|
+
args.push(...opts.cliFlags);
|
|
48
52
|
const bin = opts.bin || "claude";
|
|
49
53
|
logger.info(`Claude engine (one-shot) starting: ${bin} -p --output-format ${streaming ? "stream-json" : "json"} --model ${opts.model || "default"} (resume: ${opts.resumeSessionId || "none"})`);
|
|
50
54
|
const cleanEnv = this.buildCleanEnv();
|
|
@@ -135,7 +139,18 @@ export class ClaudeEngine {
|
|
|
135
139
|
return;
|
|
136
140
|
}
|
|
137
141
|
try {
|
|
138
|
-
const
|
|
142
|
+
const parsed = JSON.parse(stdout);
|
|
143
|
+
// Claude --output-format json returns an array of events.
|
|
144
|
+
// The last element with type "result" has the final output.
|
|
145
|
+
let result;
|
|
146
|
+
if (Array.isArray(parsed)) {
|
|
147
|
+
const resultEvent = [...parsed].reverse().find((e) => e.type === "result");
|
|
148
|
+
result = resultEvent || parsed[parsed.length - 1] || {};
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
result = parsed;
|
|
152
|
+
}
|
|
153
|
+
logger.info(`Claude result: session_id=${result.session_id || "none"}, result_length=${(result.result || "").length}, cost=$${result.total_cost_usd || 0}`);
|
|
139
154
|
resolve({
|
|
140
155
|
sessionId: result.session_id,
|
|
141
156
|
result: result.result,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/engines/claude.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/engines/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/gateway/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,IAAI,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/gateway/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,IAAI,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKhF,OAAO,KAAK,EAAmB,UAAU,EAAW,MAAM,oBAAoB,CAAC;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA8B7D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,UAAU,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,oBAAoB,EAAE,SAAS,CAAC,CAAC;CACjE;AA0GD,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CAyxBf"}
|
package/dist/src/gateway/api.js
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
1
2
|
import fs from "node:fs";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import yaml from "js-yaml";
|
|
4
5
|
import { isInterruptibleEngine } from "../shared/types.js";
|
|
5
6
|
import { buildContext } from "../sessions/context.js";
|
|
6
|
-
import { listSessions, getSession, createSession, updateSession, deleteSession, insertMessage, getMessages, } from "../sessions/registry.js";
|
|
7
|
-
import { CONFIG_PATH, CRON_RUNS, ORG_DIR, SKILLS_DIR, LOGS_DIR, } from "../shared/paths.js";
|
|
7
|
+
import { listSessions, getSession, createSession, updateSession, deleteSession, deleteSessions, insertMessage, getMessages, } from "../sessions/registry.js";
|
|
8
|
+
import { CONFIG_PATH, CRON_RUNS, ORG_DIR, SKILLS_DIR, LOGS_DIR, TMP_DIR, } from "../shared/paths.js";
|
|
8
9
|
import { logger } from "../shared/logger.js";
|
|
10
|
+
import { getSttStatus, downloadModel, transcribe as sttTranscribe, resolveLanguages, WHISPER_LANGUAGES } from "../stt/stt.js";
|
|
9
11
|
import { JINN_HOME } from "../shared/paths.js";
|
|
12
|
+
import { resolveEffort } from "../shared/effort.js";
|
|
10
13
|
import { loadJobs, saveJobs } from "../cron/jobs.js";
|
|
11
14
|
import { reloadScheduler } from "../cron/scheduler.js";
|
|
15
|
+
import { runCronJob } from "../cron/runner.js";
|
|
16
|
+
import { handleFilesRequest } from "./files.js";
|
|
12
17
|
function dispatchWebSessionRun(session, prompt, engine, config, context, opts) {
|
|
13
18
|
const run = async () => {
|
|
14
19
|
await context.sessionManager.getQueue().enqueue(session.sessionKey || session.sourceRef, async () => {
|
|
@@ -47,6 +52,14 @@ function readBody(req) {
|
|
|
47
52
|
req.on("error", reject);
|
|
48
53
|
});
|
|
49
54
|
}
|
|
55
|
+
function readBodyRaw(req) {
|
|
56
|
+
return new Promise((resolve, reject) => {
|
|
57
|
+
const chunks = [];
|
|
58
|
+
req.on("data", (chunk) => chunks.push(chunk));
|
|
59
|
+
req.on("end", () => resolve(Buffer.concat(chunks)));
|
|
60
|
+
req.on("error", reject);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
50
63
|
function json(res, data, status = 200) {
|
|
51
64
|
res.writeHead(status, { "Content-Type": "application/json" });
|
|
52
65
|
res.end(JSON.stringify(data));
|
|
@@ -152,6 +165,29 @@ export async function handleApiRequest(req, res, context) {
|
|
|
152
165
|
context.emit("session:deleted", { sessionId: params.id });
|
|
153
166
|
return json(res, { status: "deleted" });
|
|
154
167
|
}
|
|
168
|
+
// POST /api/sessions/bulk-delete
|
|
169
|
+
if (method === "POST" && pathname === "/api/sessions/bulk-delete") {
|
|
170
|
+
const body = JSON.parse(await readBody(req));
|
|
171
|
+
const ids = body.ids;
|
|
172
|
+
if (!Array.isArray(ids) || ids.length === 0)
|
|
173
|
+
return badRequest(res, "ids array is required");
|
|
174
|
+
// Kill any live engine processes before deleting
|
|
175
|
+
for (const id of ids) {
|
|
176
|
+
const session = getSession(id);
|
|
177
|
+
if (!session)
|
|
178
|
+
continue;
|
|
179
|
+
const engine = context.sessionManager.getEngine(session.engine);
|
|
180
|
+
if (engine && isInterruptibleEngine(engine) && engine.isAlive(id)) {
|
|
181
|
+
engine.kill(id);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const count = deleteSessions(ids);
|
|
185
|
+
for (const id of ids) {
|
|
186
|
+
context.emit("session:deleted", { sessionId: id });
|
|
187
|
+
}
|
|
188
|
+
logger.info(`Bulk deleted ${count} sessions`);
|
|
189
|
+
return json(res, { status: "deleted", count });
|
|
190
|
+
}
|
|
155
191
|
// GET /api/sessions/:id/children
|
|
156
192
|
params = matchRoute("/api/sessions/:id/children", pathname);
|
|
157
193
|
if (method === "GET" && params) {
|
|
@@ -199,6 +235,7 @@ export async function handleApiRequest(req, res, context) {
|
|
|
199
235
|
replyContext: { source: "web" },
|
|
200
236
|
employee: body.employee,
|
|
201
237
|
parentSessionId: body.parentSessionId,
|
|
238
|
+
effortLevel: body.effortLevel,
|
|
202
239
|
prompt,
|
|
203
240
|
portalName: config.portal?.portalName,
|
|
204
241
|
});
|
|
@@ -250,7 +287,22 @@ export async function handleApiRequest(req, res, context) {
|
|
|
250
287
|
// GET /api/cron
|
|
251
288
|
if (method === "GET" && pathname === "/api/cron") {
|
|
252
289
|
const jobs = loadJobs();
|
|
253
|
-
|
|
290
|
+
// Enrich with last run status
|
|
291
|
+
const enriched = jobs.map((job) => {
|
|
292
|
+
const runFile = path.join(CRON_RUNS, `${job.id}.jsonl`);
|
|
293
|
+
let lastRun = null;
|
|
294
|
+
if (fs.existsSync(runFile)) {
|
|
295
|
+
const lines = fs.readFileSync(runFile, "utf-8").trim().split("\n").filter(Boolean);
|
|
296
|
+
if (lines.length > 0) {
|
|
297
|
+
try {
|
|
298
|
+
lastRun = JSON.parse(lines[lines.length - 1]);
|
|
299
|
+
}
|
|
300
|
+
catch { }
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return { ...job, lastRun };
|
|
304
|
+
});
|
|
305
|
+
return json(res, enriched);
|
|
254
306
|
}
|
|
255
307
|
// GET /api/cron/:id/runs
|
|
256
308
|
params = matchRoute("/api/cron/:id/runs", pathname);
|
|
@@ -266,6 +318,27 @@ export async function handleApiRequest(req, res, context) {
|
|
|
266
318
|
.map((l) => JSON.parse(l));
|
|
267
319
|
return json(res, lines);
|
|
268
320
|
}
|
|
321
|
+
// POST /api/cron — create new cron job
|
|
322
|
+
if (method === "POST" && pathname === "/api/cron") {
|
|
323
|
+
const body = JSON.parse(await readBody(req));
|
|
324
|
+
const jobs = loadJobs();
|
|
325
|
+
const newJob = {
|
|
326
|
+
id: body.id || crypto.randomUUID(),
|
|
327
|
+
name: body.name || "untitled",
|
|
328
|
+
enabled: body.enabled ?? true,
|
|
329
|
+
schedule: body.schedule || "0 * * * *",
|
|
330
|
+
timezone: body.timezone,
|
|
331
|
+
engine: body.engine,
|
|
332
|
+
model: body.model,
|
|
333
|
+
employee: body.employee,
|
|
334
|
+
prompt: body.prompt || "",
|
|
335
|
+
delivery: body.delivery,
|
|
336
|
+
};
|
|
337
|
+
jobs.push(newJob);
|
|
338
|
+
saveJobs(jobs);
|
|
339
|
+
reloadScheduler(jobs);
|
|
340
|
+
return json(res, newJob, 201);
|
|
341
|
+
}
|
|
269
342
|
// PUT /api/cron/:id
|
|
270
343
|
params = matchRoute("/api/cron/:id", pathname);
|
|
271
344
|
if (method === "PUT" && params) {
|
|
@@ -279,6 +352,36 @@ export async function handleApiRequest(req, res, context) {
|
|
|
279
352
|
reloadScheduler(jobs);
|
|
280
353
|
return json(res, jobs[idx]);
|
|
281
354
|
}
|
|
355
|
+
// DELETE /api/cron/:id
|
|
356
|
+
params = matchRoute("/api/cron/:id", pathname);
|
|
357
|
+
if (method === "DELETE" && params) {
|
|
358
|
+
const jobs = loadJobs();
|
|
359
|
+
const idx = jobs.findIndex((j) => j.id === params.id);
|
|
360
|
+
if (idx === -1)
|
|
361
|
+
return notFound(res);
|
|
362
|
+
const removed = jobs.splice(idx, 1)[0];
|
|
363
|
+
saveJobs(jobs);
|
|
364
|
+
reloadScheduler(jobs);
|
|
365
|
+
return json(res, { deleted: removed.id, name: removed.name });
|
|
366
|
+
}
|
|
367
|
+
// POST /api/cron/:id/trigger — manually run a cron job now
|
|
368
|
+
params = matchRoute("/api/cron/:id/trigger", pathname);
|
|
369
|
+
if (method === "POST" && params) {
|
|
370
|
+
const jobs = loadJobs();
|
|
371
|
+
const job = jobs.find((j) => j.id === params.id);
|
|
372
|
+
if (!job)
|
|
373
|
+
return notFound(res);
|
|
374
|
+
logger.info(`Manual trigger for cron job "${job.name}" (${job.id})`);
|
|
375
|
+
// Fire and forget — respond immediately, run in background
|
|
376
|
+
runCronJob(job, context.sessionManager, context.getConfig(), context.connectors).catch((err) => logger.error(`Manual cron trigger failed for "${job.name}": ${err}`));
|
|
377
|
+
return json(res, {
|
|
378
|
+
triggered: true,
|
|
379
|
+
jobId: job.id,
|
|
380
|
+
name: job.name,
|
|
381
|
+
employee: job.employee,
|
|
382
|
+
message: `Cron job "${job.name}" triggered manually`,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
282
385
|
// GET /api/org
|
|
283
386
|
if (method === "GET" && pathname === "/api/org") {
|
|
284
387
|
if (!fs.existsSync(ORG_DIR))
|
|
@@ -632,6 +735,112 @@ export async function handleApiRequest(req, res, context) {
|
|
|
632
735
|
context.emit("config:updated", { portal: updated.portal });
|
|
633
736
|
return json(res, { status: "ok", portal: updated.portal });
|
|
634
737
|
}
|
|
738
|
+
// ── STT (Speech-to-Text) ──────────────────────────────────
|
|
739
|
+
if (method === "GET" && pathname === "/api/stt/status") {
|
|
740
|
+
const config = context.getConfig();
|
|
741
|
+
const languages = resolveLanguages(config.stt);
|
|
742
|
+
const status = getSttStatus(config.stt?.model, languages);
|
|
743
|
+
return json(res, status);
|
|
744
|
+
}
|
|
745
|
+
if (method === "POST" && pathname === "/api/stt/download") {
|
|
746
|
+
const config = context.getConfig();
|
|
747
|
+
const model = config.stt?.model || "small";
|
|
748
|
+
downloadModel(model, (progress) => {
|
|
749
|
+
context.emit("stt:download:progress", { progress });
|
|
750
|
+
}).then(() => {
|
|
751
|
+
// Update config to mark STT as enabled
|
|
752
|
+
try {
|
|
753
|
+
const raw = fs.readFileSync(CONFIG_PATH, "utf-8");
|
|
754
|
+
const cfg = yaml.load(raw);
|
|
755
|
+
if (!cfg.stt || typeof cfg.stt !== "object")
|
|
756
|
+
cfg.stt = {};
|
|
757
|
+
const sttCfg = cfg.stt;
|
|
758
|
+
sttCfg.enabled = true;
|
|
759
|
+
sttCfg.model = model;
|
|
760
|
+
if (!sttCfg.languages)
|
|
761
|
+
sttCfg.languages = ["en"];
|
|
762
|
+
fs.writeFileSync(CONFIG_PATH, yaml.dump(cfg, { lineWidth: -1 }));
|
|
763
|
+
}
|
|
764
|
+
catch (err) {
|
|
765
|
+
logger.error(`Failed to update config after STT download: ${err}`);
|
|
766
|
+
}
|
|
767
|
+
context.emit("stt:download:complete", { model });
|
|
768
|
+
}).catch((err) => {
|
|
769
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
770
|
+
logger.error(`STT download failed: ${msg}`);
|
|
771
|
+
context.emit("stt:download:error", { error: msg });
|
|
772
|
+
});
|
|
773
|
+
return json(res, { status: "downloading", model });
|
|
774
|
+
}
|
|
775
|
+
if (method === "POST" && pathname === "/api/stt/transcribe") {
|
|
776
|
+
const config = context.getConfig();
|
|
777
|
+
const model = config.stt?.model || "small";
|
|
778
|
+
const languages = resolveLanguages(config.stt);
|
|
779
|
+
// Accept language from query param, fall back to first configured language
|
|
780
|
+
const requestedLang = url.searchParams.get("language");
|
|
781
|
+
const language = requestedLang && languages.includes(requestedLang) ? requestedLang : languages[0];
|
|
782
|
+
const audioBuffer = await readBodyRaw(req);
|
|
783
|
+
if (audioBuffer.length === 0)
|
|
784
|
+
return badRequest(res, "No audio data");
|
|
785
|
+
if (audioBuffer.length > 100 * 1024 * 1024)
|
|
786
|
+
return badRequest(res, "Audio too large (100MB max)");
|
|
787
|
+
const contentType = req.headers["content-type"] || "audio/webm";
|
|
788
|
+
const ext = contentType.includes("wav") ? ".wav"
|
|
789
|
+
: contentType.includes("mp4") || contentType.includes("m4a") ? ".m4a"
|
|
790
|
+
: contentType.includes("ogg") ? ".ogg"
|
|
791
|
+
: ".webm";
|
|
792
|
+
const tmpFile = path.join(TMP_DIR, `stt-${crypto.randomUUID()}${ext}`);
|
|
793
|
+
fs.mkdirSync(TMP_DIR, { recursive: true });
|
|
794
|
+
fs.writeFileSync(tmpFile, audioBuffer);
|
|
795
|
+
try {
|
|
796
|
+
const text = await sttTranscribe(tmpFile, model, language);
|
|
797
|
+
return json(res, { text });
|
|
798
|
+
}
|
|
799
|
+
catch (err) {
|
|
800
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
801
|
+
logger.error(`STT transcription failed: ${msg}`);
|
|
802
|
+
return serverError(res, `Transcription failed: ${msg}`);
|
|
803
|
+
}
|
|
804
|
+
finally {
|
|
805
|
+
try {
|
|
806
|
+
fs.unlinkSync(tmpFile);
|
|
807
|
+
}
|
|
808
|
+
catch { }
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
if (method === "PUT" && pathname === "/api/stt/config") {
|
|
812
|
+
const body = JSON.parse(await readBody(req));
|
|
813
|
+
const langs = body.languages;
|
|
814
|
+
if (!Array.isArray(langs) || langs.length === 0) {
|
|
815
|
+
return badRequest(res, "languages must be a non-empty array");
|
|
816
|
+
}
|
|
817
|
+
const invalid = langs.filter((l) => typeof l !== "string" || !WHISPER_LANGUAGES[l]);
|
|
818
|
+
if (invalid.length > 0) {
|
|
819
|
+
return badRequest(res, `Invalid language codes: ${invalid.join(", ")}`);
|
|
820
|
+
}
|
|
821
|
+
try {
|
|
822
|
+
const raw = fs.readFileSync(CONFIG_PATH, "utf-8");
|
|
823
|
+
const cfg = yaml.load(raw);
|
|
824
|
+
if (!cfg.stt || typeof cfg.stt !== "object")
|
|
825
|
+
cfg.stt = {};
|
|
826
|
+
const sttCfg = cfg.stt;
|
|
827
|
+
sttCfg.languages = langs;
|
|
828
|
+
// Remove deprecated language field if present
|
|
829
|
+
delete sttCfg.language;
|
|
830
|
+
fs.writeFileSync(CONFIG_PATH, yaml.dump(cfg, { lineWidth: -1 }));
|
|
831
|
+
return json(res, { status: "ok", languages: langs });
|
|
832
|
+
}
|
|
833
|
+
catch (err) {
|
|
834
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
835
|
+
return serverError(res, `Failed to update STT config: ${msg}`);
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
// /api/files — file upload/download/management
|
|
839
|
+
if (pathname.startsWith("/api/files")) {
|
|
840
|
+
const handled = await handleFilesRequest(req, res, pathname, method, context);
|
|
841
|
+
if (handled)
|
|
842
|
+
return;
|
|
843
|
+
}
|
|
635
844
|
return notFound(res);
|
|
636
845
|
}
|
|
637
846
|
catch (err) {
|
|
@@ -762,6 +971,7 @@ async function runWebSession(session, prompt, engine, config, context) {
|
|
|
762
971
|
const engineConfig = currentSession.engine === "codex"
|
|
763
972
|
? config.engines.codex
|
|
764
973
|
: config.engines.claude;
|
|
974
|
+
const effortLevel = resolveEffort(engineConfig, currentSession, employee);
|
|
765
975
|
let lastHeartbeatAt = 0;
|
|
766
976
|
const runHeartbeat = setInterval(() => {
|
|
767
977
|
updateSession(currentSession.id, {
|
|
@@ -776,6 +986,7 @@ async function runWebSession(session, prompt, engine, config, context) {
|
|
|
776
986
|
cwd: JINN_HOME,
|
|
777
987
|
bin: engineConfig.bin,
|
|
778
988
|
model: currentSession.model ?? engineConfig.model,
|
|
989
|
+
effortLevel,
|
|
779
990
|
cliFlags: employee?.cliFlags,
|
|
780
991
|
sessionId: currentSession.id,
|
|
781
992
|
onStream: (delta) => {
|