jinn-cli 0.3.0 → 0.3.1

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.
Files changed (133) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bin/jimmy.js +0 -0
  3. package/dist/src/cli/chrome-allow.d.ts.map +1 -1
  4. package/dist/src/cli/chrome-allow.js +14 -5
  5. package/dist/src/cli/chrome-allow.js.map +1 -1
  6. package/dist/src/cli/list.js +1 -1
  7. package/dist/src/cli/list.js.map +1 -1
  8. package/dist/src/cli/nuke.js +2 -2
  9. package/dist/src/cli/nuke.js.map +1 -1
  10. package/dist/src/cli/setup.d.ts.map +1 -1
  11. package/dist/src/cli/setup.js +2 -1
  12. package/dist/src/cli/setup.js.map +1 -1
  13. package/dist/src/connectors/slack/index.d.ts +9 -1
  14. package/dist/src/connectors/slack/index.d.ts.map +1 -1
  15. package/dist/src/connectors/slack/index.js +172 -8
  16. package/dist/src/connectors/slack/index.js.map +1 -1
  17. package/dist/src/connectors/slack/threads.d.ts +1 -4
  18. package/dist/src/connectors/slack/threads.d.ts.map +1 -1
  19. package/dist/src/connectors/slack/threads.js +17 -7
  20. package/dist/src/connectors/slack/threads.js.map +1 -1
  21. package/dist/src/connectors/slack/threads.test.js +42 -8
  22. package/dist/src/connectors/slack/threads.test.js.map +1 -1
  23. package/dist/src/cron/runner.d.ts.map +1 -1
  24. package/dist/src/cron/runner.js +16 -5
  25. package/dist/src/cron/runner.js.map +1 -1
  26. package/dist/src/engines/claude.d.ts.map +1 -1
  27. package/dist/src/engines/claude.js +19 -4
  28. package/dist/src/engines/claude.js.map +1 -1
  29. package/dist/src/gateway/api.d.ts.map +1 -1
  30. package/dist/src/gateway/api.js +207 -3
  31. package/dist/src/gateway/api.js.map +1 -1
  32. package/dist/src/gateway/lifecycle.d.ts.map +1 -1
  33. package/dist/src/gateway/lifecycle.js +16 -6
  34. package/dist/src/gateway/lifecycle.js.map +1 -1
  35. package/dist/src/gateway/org.d.ts.map +1 -1
  36. package/dist/src/gateway/org.js +1 -0
  37. package/dist/src/gateway/org.js.map +1 -1
  38. package/dist/src/gateway/server.d.ts.map +1 -1
  39. package/dist/src/gateway/server.js +40 -1
  40. package/dist/src/gateway/server.js.map +1 -1
  41. package/dist/src/gateway/watcher.d.ts.map +1 -1
  42. package/dist/src/gateway/watcher.js +9 -2
  43. package/dist/src/gateway/watcher.js.map +1 -1
  44. package/dist/src/mcp/gateway-server.d.ts +13 -0
  45. package/dist/src/mcp/gateway-server.d.ts.map +1 -0
  46. package/dist/src/mcp/gateway-server.js +375 -0
  47. package/dist/src/mcp/gateway-server.js.map +1 -0
  48. package/dist/src/mcp/resolver.d.ts +19 -0
  49. package/dist/src/mcp/resolver.d.ts.map +1 -0
  50. package/dist/src/mcp/resolver.js +153 -0
  51. package/dist/src/mcp/resolver.js.map +1 -0
  52. package/dist/src/sessions/context.d.ts +1 -0
  53. package/dist/src/sessions/context.d.ts.map +1 -1
  54. package/dist/src/sessions/context.js +34 -3
  55. package/dist/src/sessions/context.js.map +1 -1
  56. package/dist/src/sessions/limits.d.ts +7 -0
  57. package/dist/src/sessions/limits.d.ts.map +1 -0
  58. package/dist/src/sessions/limits.js +42 -0
  59. package/dist/src/sessions/limits.js.map +1 -0
  60. package/dist/src/sessions/manager.d.ts +3 -1
  61. package/dist/src/sessions/manager.d.ts.map +1 -1
  62. package/dist/src/sessions/manager.js +38 -17
  63. package/dist/src/sessions/manager.js.map +1 -1
  64. package/dist/src/sessions/registry.d.ts +6 -0
  65. package/dist/src/sessions/registry.d.ts.map +1 -1
  66. package/dist/src/sessions/registry.js +34 -5
  67. package/dist/src/sessions/registry.js.map +1 -1
  68. package/dist/src/shared/effort.d.ts +17 -0
  69. package/dist/src/shared/effort.d.ts.map +1 -0
  70. package/dist/src/shared/effort.js +44 -0
  71. package/dist/src/shared/effort.js.map +1 -0
  72. package/dist/src/shared/paths.d.ts +2 -0
  73. package/dist/src/shared/paths.d.ts.map +1 -1
  74. package/dist/src/shared/paths.js +2 -0
  75. package/dist/src/shared/paths.js.map +1 -1
  76. package/dist/src/shared/types.d.ts +57 -1
  77. package/dist/src/shared/types.d.ts.map +1 -1
  78. package/dist/src/stt/stt.d.ts +24 -0
  79. package/dist/src/stt/stt.d.ts.map +1 -0
  80. package/dist/src/stt/stt.js +203 -0
  81. package/dist/src/stt/stt.js.map +1 -0
  82. package/dist/web/404.html +1 -1
  83. package/dist/web/_next/static/chunks/198-3e82ded4f04a0aae.js +1 -0
  84. package/dist/web/_next/static/chunks/{704-af2893821e1d18dc.js → 704-ca24be493a922639.js} +1 -1
  85. package/dist/web/_next/static/chunks/{73-c226535579393e21.js → 73-2d6e730cea0fe6c8.js} +1 -1
  86. package/dist/web/_next/static/chunks/app/_not-found/{page-bb075b0779827928.js → page-7d43a486b7014af3.js} +1 -1
  87. package/dist/web/_next/static/chunks/app/chat/page-2f3c561ed768ed58.js +1 -0
  88. package/dist/web/_next/static/chunks/app/costs/{page-d6c03718defdb599.js → page-13a6f2c65a827f8a.js} +1 -1
  89. package/dist/web/_next/static/chunks/app/cron/{page-4c563eef2b6231fe.js → page-0ee07a679c7b79aa.js} +1 -1
  90. package/dist/web/_next/static/chunks/app/kanban/{page-55a73165a36f4077.js → page-a7facadd4194faae.js} +1 -1
  91. package/dist/web/_next/static/chunks/app/layout-fd975d16033dab25.js +1 -0
  92. package/dist/web/_next/static/chunks/app/logs/page-6de6b16523e85193.js +1 -0
  93. package/dist/web/_next/static/chunks/app/org/{page-d5cd8d9b7864737b.js → page-cd9d362e77f4799e.js} +1 -1
  94. package/dist/web/_next/static/chunks/app/{page-b81992940fd1dbc6.js → page-b98417ed4f4d45a0.js} +1 -1
  95. package/dist/web/_next/static/chunks/app/sessions/page-7148306182017841.js +1 -0
  96. package/dist/web/_next/static/chunks/app/settings/page-34c9276e2a012445.js +1 -0
  97. package/dist/web/_next/static/chunks/app/skills/page-18cf3b7bb9a7339c.js +1 -0
  98. package/dist/web/_next/static/chunks/main-app-0c65af8a0fd99888.js +1 -0
  99. package/dist/web/_next/static/css/24da9dfc818cea32.css +1 -0
  100. package/dist/web/chat.html +1 -1
  101. package/dist/web/chat.txt +5 -5
  102. package/dist/web/costs.html +2 -2
  103. package/dist/web/costs.txt +5 -5
  104. package/dist/web/cron.html +1 -1
  105. package/dist/web/cron.txt +5 -5
  106. package/dist/web/index.html +1 -1
  107. package/dist/web/index.txt +5 -5
  108. package/dist/web/kanban.html +1 -1
  109. package/dist/web/kanban.txt +5 -5
  110. package/dist/web/logs.html +2 -2
  111. package/dist/web/logs.txt +5 -5
  112. package/dist/web/org.html +1 -1
  113. package/dist/web/org.txt +5 -5
  114. package/dist/web/sessions.html +1 -1
  115. package/dist/web/sessions.txt +5 -5
  116. package/dist/web/settings.html +1 -1
  117. package/dist/web/settings.txt +5 -5
  118. package/dist/web/skills.html +1 -1
  119. package/dist/web/skills.txt +5 -5
  120. package/package.json +9 -9
  121. package/template/config.default.yaml +32 -0
  122. package/template/docs/mcp.md +108 -0
  123. package/dist/web/_next/static/chunks/198-fd91406a158c5c25.js +0 -1
  124. package/dist/web/_next/static/chunks/app/chat/page-6d5bc707a45c92c6.js +0 -1
  125. package/dist/web/_next/static/chunks/app/layout-5129b67d5f126cf0.js +0 -1
  126. package/dist/web/_next/static/chunks/app/logs/page-e18889d67e48c9c9.js +0 -1
  127. package/dist/web/_next/static/chunks/app/sessions/page-c83c890177c18258.js +0 -1
  128. package/dist/web/_next/static/chunks/app/settings/page-2583d55551abdf72.js +0 -1
  129. package/dist/web/_next/static/chunks/app/skills/page-df9465e314561bb5.js +0 -1
  130. package/dist/web/_next/static/chunks/main-app-437f51faf74fbb3b.js +0 -1
  131. package/dist/web/_next/static/css/4a6a5bca9238c104.css +0 -1
  132. /package/dist/web/_next/static/{jt8R5JvUgfB9CMfFwWFr0 → Zn588p2VvgjCSLr44R__1}/_buildManifest.js +0 -0
  133. /package/dist/web/_next/static/{jt8R5JvUgfB9CMfFwWFr0 → Zn588p2VvgjCSLr44R__1}/_ssgManifest.js +0 -0
@@ -1,22 +1,32 @@
1
- export function deriveSessionKey(event, opts = {}) {
1
+ export function deriveSessionKey(event) {
2
2
  if (event.channel_type === "im") {
3
3
  return `slack:dm:${event.user || "unknown"}`;
4
4
  }
5
- if (opts.shareSessionInChannel) {
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
- return `slack:${event.channel}`;
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
- : undefined;
26
+ : event.ts ?? null;
17
27
  return {
18
28
  channel: event.channel,
19
- thread: thread ?? null,
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":"AAcA,MAAM,UAAU,gBAAgB,CAC9B,KAA4B,EAC5B,OAA2B,EAAE;IAE7B,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,YAAY,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,OAAO,SAAS,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,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,OAAO,SAAS,KAAK,CAAC,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA4B;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE;QAC5D,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,MAAM,IAAI,IAAI;QACtB,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"}
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 isolates thread replies unless channel sharing is enabled", () => {
14
- const threaded = deriveSessionKey({
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
- const shared = deriveSessionKey({
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: "1700000100.000200",
34
+ ts: "1700000000.000100",
24
35
  thread_ts: "1700000000.000100",
25
- }, { shareSessionInChannel: true });
26
- assert.equal(threaded, "slack:C123:1700000000.000100");
27
- assert.equal(shared, "slack:C123");
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 keeps the original message id for replies", () => {
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;IAEH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4EAA4E,EAAE,GAAG,EAAE;IACtF,MAAM,QAAQ,GAAG,gBAAgB,CAAC;QAChC,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,mBAAmB;QACvB,SAAS,EAAE,mBAAmB;KAC/B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,gBAAgB,CAC7B;QACE,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,mBAAmB;QACvB,SAAS,EAAE,mBAAmB;KAC/B,EACD,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAChC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;IACvE,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAChC,OAAO,EAAE,MAAM;QACf,EAAE,EAAE,mBAAmB;QACvB,SAAS,EAAE,mBAAmB;KAC/B,CAAC,CAAC;IAEH,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;QACxB,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,mBAAmB;KAC/B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACxD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7E,CAAC,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,CAiFf"}
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"}
@@ -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.warn(`Cron job "${job.name}" targets employee "${job.employee}" with delivery to ${delivery.connector}:${delivery.channel}. ` +
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":"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"}
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;IAkKrD,OAAO,CAAC,iBAAiB;IA+DzB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,aAAa;CAYtB"}
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 result = JSON.parse(stdout);
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":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAO7C,MAAM,OAAO,YAAY;IACvB,IAAI,GAAG,QAAiB,CAAC;IACjB,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEvD,IAAI,CAAC,SAAiB,EAAE,MAAM,GAAG,aAAa;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,OAAO;QACL,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAmB;QAC3B,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,gCAAgC,CAAC,CAAC;QAE1H,IAAI,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAChG,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC;QACjC,MAAM,CAAC,IAAI,CACT,sCAAsC,GAAG,uBAAuB,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC,KAAK,IAAI,SAAS,aAAa,IAAI,CAAC,eAAe,IAAI,MAAM,GAAG,CACpL,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAEtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;gBAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;aACvC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE;oBACrC,IAAI;oBACJ,iBAAiB,EAAE,IAAI;iBACxB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,aAAa,GAAmC,IAAI,CAAC;YACzD,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,MAAM,GAAG,KAAK,CAAC;YAEnB,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,IAAI,OAAO,GAAG,EAAE,CAAC;gBAEjB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;oBACnC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC;oBAChB,OAAO,IAAI,KAAK,CAAC;oBACjB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;oBAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;wBACjE,IAAI,CAAC,MAAM;4BAAE,SAAS;wBAEtB,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BAC/B,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC;4BAC3B,SAAS;wBACX,CAAC;wBAED,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;4BACnC,MAAM,GAAG,IAAI,CAAC;4BACd,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACvB,SAAS;wBACX,CAAC;wBAED,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;4BACjC,MAAM,GAAG,KAAK,CAAC;4BACf,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACvB,SAAS;wBACX,CAAC;wBAED,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;oBACnC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACzB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;gBACnC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC;gBAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5D,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBAEf,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS;oBACtC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,IAAI,IAAI;oBACnE,CAAC,CAAC,IAAI,CAAC;gBACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,6CAA6C,IAAI,EAAE,CAAC,CAAC;gBAEjE,IAAI,iBAAiB,EAAE,CAAC;oBACtB,OAAO,CAAC;wBACN,SAAS,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE;wBACrC,MAAM,EAAE,EAAE;wBACV,KAAK,EAAE,iBAAiB;qBACzB,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;wBAC/B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;wBACjE,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAClC,OAAO,CAAC;4BACN,SAAS,EAAE,MAAM,CAAC,UAAU;4BAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,IAAI,EAAE,MAAM,CAAC,cAAc;4BAC3B,UAAU,EAAE,MAAM,CAAC,WAAW;4BAC9B,QAAQ,EAAE,MAAM,CAAC,SAAS;yBAC3B,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,CAAC,KAAK,CAAC,kCAAkC,GAAG,aAAa,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;wBACvF,OAAO,CAAC;4BACN,SAAS,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE;4BACrC,MAAM,EAAE,MAAM,IAAI,sBAAsB;4BACxC,KAAK,EAAE,kCAAkC,GAAG,EAAE;yBAC/C,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,2BAA2B,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrB,OAAO,CAAC;oBACN,SAAS,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE;oBACrC,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,MAAM;iBACd,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvB,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5C,CAAC;gBACD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CACvB,IAAY,EACZ,SAAiB,EACjB,MAAe;QAOf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,wBAAwB,SAAS,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,GAA4B,CAAC;QACjC,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAA4C,CAAC;YAC/D,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAE3C,IAAI,SAAS,KAAK,qBAAqB,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,KAAK,CAAC,aAAoD,CAAC;gBACzE,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;oBACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;oBACtC,OAAO;wBACL,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;qBAC5E,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,SAAS,KAAK,qBAAqB,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,KAA4C,CAAC;gBACjE,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBACxB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;oBACtC,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;oBACnE,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,SAAS,KAAK,oBAAoB,IAAI,MAAM,EAAE,CAAC;gBACxD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;YAC7E,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,MAA+B,EAAE,iBAA0B;QAC/E,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,iBAAiB,IAAI,EAAE,CAAC;YAC/D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,IAAI,EAAE,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YACnF,UAAU,EAAE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YACnF,QAAQ,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SAC9E,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC;gBAAE,SAAS;YACjE,IAAI,CAAC,KAAK,SAAS;gBAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,aAAa,CAAC,IAAkB,EAAE,MAAsB;QAC9D,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO;QACnC,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;CACF"}
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;AAIhF,OAAO,KAAK,EAAU,UAAU,EAAW,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAwB7D,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;AAiGD,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CAglBf"}
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;AA6B7D,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,CAmxBf"}
@@ -1,14 +1,18 @@
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";
12
16
  function dispatchWebSessionRun(session, prompt, engine, config, context, opts) {
13
17
  const run = async () => {
14
18
  await context.sessionManager.getQueue().enqueue(session.sessionKey || session.sourceRef, async () => {
@@ -47,6 +51,14 @@ function readBody(req) {
47
51
  req.on("error", reject);
48
52
  });
49
53
  }
54
+ function readBodyRaw(req) {
55
+ return new Promise((resolve, reject) => {
56
+ const chunks = [];
57
+ req.on("data", (chunk) => chunks.push(chunk));
58
+ req.on("end", () => resolve(Buffer.concat(chunks)));
59
+ req.on("error", reject);
60
+ });
61
+ }
50
62
  function json(res, data, status = 200) {
51
63
  res.writeHead(status, { "Content-Type": "application/json" });
52
64
  res.end(JSON.stringify(data));
@@ -152,6 +164,29 @@ export async function handleApiRequest(req, res, context) {
152
164
  context.emit("session:deleted", { sessionId: params.id });
153
165
  return json(res, { status: "deleted" });
154
166
  }
167
+ // POST /api/sessions/bulk-delete
168
+ if (method === "POST" && pathname === "/api/sessions/bulk-delete") {
169
+ const body = JSON.parse(await readBody(req));
170
+ const ids = body.ids;
171
+ if (!Array.isArray(ids) || ids.length === 0)
172
+ return badRequest(res, "ids array is required");
173
+ // Kill any live engine processes before deleting
174
+ for (const id of ids) {
175
+ const session = getSession(id);
176
+ if (!session)
177
+ continue;
178
+ const engine = context.sessionManager.getEngine(session.engine);
179
+ if (engine && isInterruptibleEngine(engine) && engine.isAlive(id)) {
180
+ engine.kill(id);
181
+ }
182
+ }
183
+ const count = deleteSessions(ids);
184
+ for (const id of ids) {
185
+ context.emit("session:deleted", { sessionId: id });
186
+ }
187
+ logger.info(`Bulk deleted ${count} sessions`);
188
+ return json(res, { status: "deleted", count });
189
+ }
155
190
  // GET /api/sessions/:id/children
156
191
  params = matchRoute("/api/sessions/:id/children", pathname);
157
192
  if (method === "GET" && params) {
@@ -199,6 +234,7 @@ export async function handleApiRequest(req, res, context) {
199
234
  replyContext: { source: "web" },
200
235
  employee: body.employee,
201
236
  parentSessionId: body.parentSessionId,
237
+ effortLevel: body.effortLevel,
202
238
  prompt,
203
239
  portalName: config.portal?.portalName,
204
240
  });
@@ -250,7 +286,22 @@ export async function handleApiRequest(req, res, context) {
250
286
  // GET /api/cron
251
287
  if (method === "GET" && pathname === "/api/cron") {
252
288
  const jobs = loadJobs();
253
- return json(res, jobs);
289
+ // Enrich with last run status
290
+ const enriched = jobs.map((job) => {
291
+ const runFile = path.join(CRON_RUNS, `${job.id}.jsonl`);
292
+ let lastRun = null;
293
+ if (fs.existsSync(runFile)) {
294
+ const lines = fs.readFileSync(runFile, "utf-8").trim().split("\n").filter(Boolean);
295
+ if (lines.length > 0) {
296
+ try {
297
+ lastRun = JSON.parse(lines[lines.length - 1]);
298
+ }
299
+ catch { }
300
+ }
301
+ }
302
+ return { ...job, lastRun };
303
+ });
304
+ return json(res, enriched);
254
305
  }
255
306
  // GET /api/cron/:id/runs
256
307
  params = matchRoute("/api/cron/:id/runs", pathname);
@@ -266,6 +317,27 @@ export async function handleApiRequest(req, res, context) {
266
317
  .map((l) => JSON.parse(l));
267
318
  return json(res, lines);
268
319
  }
320
+ // POST /api/cron — create new cron job
321
+ if (method === "POST" && pathname === "/api/cron") {
322
+ const body = JSON.parse(await readBody(req));
323
+ const jobs = loadJobs();
324
+ const newJob = {
325
+ id: body.id || crypto.randomUUID(),
326
+ name: body.name || "untitled",
327
+ enabled: body.enabled ?? true,
328
+ schedule: body.schedule || "0 * * * *",
329
+ timezone: body.timezone,
330
+ engine: body.engine,
331
+ model: body.model,
332
+ employee: body.employee,
333
+ prompt: body.prompt || "",
334
+ delivery: body.delivery,
335
+ };
336
+ jobs.push(newJob);
337
+ saveJobs(jobs);
338
+ reloadScheduler(jobs);
339
+ return json(res, newJob, 201);
340
+ }
269
341
  // PUT /api/cron/:id
270
342
  params = matchRoute("/api/cron/:id", pathname);
271
343
  if (method === "PUT" && params) {
@@ -279,6 +351,36 @@ export async function handleApiRequest(req, res, context) {
279
351
  reloadScheduler(jobs);
280
352
  return json(res, jobs[idx]);
281
353
  }
354
+ // DELETE /api/cron/:id
355
+ params = matchRoute("/api/cron/:id", pathname);
356
+ if (method === "DELETE" && params) {
357
+ const jobs = loadJobs();
358
+ const idx = jobs.findIndex((j) => j.id === params.id);
359
+ if (idx === -1)
360
+ return notFound(res);
361
+ const removed = jobs.splice(idx, 1)[0];
362
+ saveJobs(jobs);
363
+ reloadScheduler(jobs);
364
+ return json(res, { deleted: removed.id, name: removed.name });
365
+ }
366
+ // POST /api/cron/:id/trigger — manually run a cron job now
367
+ params = matchRoute("/api/cron/:id/trigger", pathname);
368
+ if (method === "POST" && params) {
369
+ const jobs = loadJobs();
370
+ const job = jobs.find((j) => j.id === params.id);
371
+ if (!job)
372
+ return notFound(res);
373
+ logger.info(`Manual trigger for cron job "${job.name}" (${job.id})`);
374
+ // Fire and forget — respond immediately, run in background
375
+ runCronJob(job, context.sessionManager, context.getConfig(), context.connectors).catch((err) => logger.error(`Manual cron trigger failed for "${job.name}": ${err}`));
376
+ return json(res, {
377
+ triggered: true,
378
+ jobId: job.id,
379
+ name: job.name,
380
+ employee: job.employee,
381
+ message: `Cron job "${job.name}" triggered manually`,
382
+ });
383
+ }
282
384
  // GET /api/org
283
385
  if (method === "GET" && pathname === "/api/org") {
284
386
  if (!fs.existsSync(ORG_DIR))
@@ -632,6 +734,106 @@ export async function handleApiRequest(req, res, context) {
632
734
  context.emit("config:updated", { portal: updated.portal });
633
735
  return json(res, { status: "ok", portal: updated.portal });
634
736
  }
737
+ // ── STT (Speech-to-Text) ──────────────────────────────────
738
+ if (method === "GET" && pathname === "/api/stt/status") {
739
+ const config = context.getConfig();
740
+ const languages = resolveLanguages(config.stt);
741
+ const status = getSttStatus(config.stt?.model, languages);
742
+ return json(res, status);
743
+ }
744
+ if (method === "POST" && pathname === "/api/stt/download") {
745
+ const config = context.getConfig();
746
+ const model = config.stt?.model || "small";
747
+ downloadModel(model, (progress) => {
748
+ context.emit("stt:download:progress", { progress });
749
+ }).then(() => {
750
+ // Update config to mark STT as enabled
751
+ try {
752
+ const raw = fs.readFileSync(CONFIG_PATH, "utf-8");
753
+ const cfg = yaml.load(raw);
754
+ if (!cfg.stt || typeof cfg.stt !== "object")
755
+ cfg.stt = {};
756
+ const sttCfg = cfg.stt;
757
+ sttCfg.enabled = true;
758
+ sttCfg.model = model;
759
+ if (!sttCfg.languages)
760
+ sttCfg.languages = ["en"];
761
+ fs.writeFileSync(CONFIG_PATH, yaml.dump(cfg, { lineWidth: -1 }));
762
+ }
763
+ catch (err) {
764
+ logger.error(`Failed to update config after STT download: ${err}`);
765
+ }
766
+ context.emit("stt:download:complete", { model });
767
+ }).catch((err) => {
768
+ const msg = err instanceof Error ? err.message : String(err);
769
+ logger.error(`STT download failed: ${msg}`);
770
+ context.emit("stt:download:error", { error: msg });
771
+ });
772
+ return json(res, { status: "downloading", model });
773
+ }
774
+ if (method === "POST" && pathname === "/api/stt/transcribe") {
775
+ const config = context.getConfig();
776
+ const model = config.stt?.model || "small";
777
+ const languages = resolveLanguages(config.stt);
778
+ // Accept language from query param, fall back to first configured language
779
+ const requestedLang = url.searchParams.get("language");
780
+ const language = requestedLang && languages.includes(requestedLang) ? requestedLang : languages[0];
781
+ const audioBuffer = await readBodyRaw(req);
782
+ if (audioBuffer.length === 0)
783
+ return badRequest(res, "No audio data");
784
+ if (audioBuffer.length > 100 * 1024 * 1024)
785
+ return badRequest(res, "Audio too large (100MB max)");
786
+ const contentType = req.headers["content-type"] || "audio/webm";
787
+ const ext = contentType.includes("wav") ? ".wav"
788
+ : contentType.includes("mp4") || contentType.includes("m4a") ? ".m4a"
789
+ : contentType.includes("ogg") ? ".ogg"
790
+ : ".webm";
791
+ const tmpFile = path.join(TMP_DIR, `stt-${crypto.randomUUID()}${ext}`);
792
+ fs.mkdirSync(TMP_DIR, { recursive: true });
793
+ fs.writeFileSync(tmpFile, audioBuffer);
794
+ try {
795
+ const text = await sttTranscribe(tmpFile, model, language);
796
+ return json(res, { text });
797
+ }
798
+ catch (err) {
799
+ const msg = err instanceof Error ? err.message : String(err);
800
+ logger.error(`STT transcription failed: ${msg}`);
801
+ return serverError(res, `Transcription failed: ${msg}`);
802
+ }
803
+ finally {
804
+ try {
805
+ fs.unlinkSync(tmpFile);
806
+ }
807
+ catch { }
808
+ }
809
+ }
810
+ if (method === "PUT" && pathname === "/api/stt/config") {
811
+ const body = JSON.parse(await readBody(req));
812
+ const langs = body.languages;
813
+ if (!Array.isArray(langs) || langs.length === 0) {
814
+ return badRequest(res, "languages must be a non-empty array");
815
+ }
816
+ const invalid = langs.filter((l) => typeof l !== "string" || !WHISPER_LANGUAGES[l]);
817
+ if (invalid.length > 0) {
818
+ return badRequest(res, `Invalid language codes: ${invalid.join(", ")}`);
819
+ }
820
+ try {
821
+ const raw = fs.readFileSync(CONFIG_PATH, "utf-8");
822
+ const cfg = yaml.load(raw);
823
+ if (!cfg.stt || typeof cfg.stt !== "object")
824
+ cfg.stt = {};
825
+ const sttCfg = cfg.stt;
826
+ sttCfg.languages = langs;
827
+ // Remove deprecated language field if present
828
+ delete sttCfg.language;
829
+ fs.writeFileSync(CONFIG_PATH, yaml.dump(cfg, { lineWidth: -1 }));
830
+ return json(res, { status: "ok", languages: langs });
831
+ }
832
+ catch (err) {
833
+ const msg = err instanceof Error ? err.message : String(err);
834
+ return serverError(res, `Failed to update STT config: ${msg}`);
835
+ }
836
+ }
635
837
  return notFound(res);
636
838
  }
637
839
  catch (err) {
@@ -762,6 +964,7 @@ async function runWebSession(session, prompt, engine, config, context) {
762
964
  const engineConfig = currentSession.engine === "codex"
763
965
  ? config.engines.codex
764
966
  : config.engines.claude;
967
+ const effortLevel = resolveEffort(engineConfig, currentSession, employee);
765
968
  let lastHeartbeatAt = 0;
766
969
  const runHeartbeat = setInterval(() => {
767
970
  updateSession(currentSession.id, {
@@ -776,6 +979,7 @@ async function runWebSession(session, prompt, engine, config, context) {
776
979
  cwd: JINN_HOME,
777
980
  bin: engineConfig.bin,
778
981
  model: currentSession.model ?? engineConfig.model,
982
+ effortLevel,
779
983
  cliFlags: employee?.cliFlags,
780
984
  sessionId: currentSession.id,
781
985
  onStream: (delta) => {