jinn-cli 0.1.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.
Files changed (227) hide show
  1. package/dist/bin/jimmy.d.ts +3 -0
  2. package/dist/bin/jimmy.d.ts.map +1 -0
  3. package/dist/bin/jimmy.js +148 -0
  4. package/dist/bin/jimmy.js.map +1 -0
  5. package/dist/src/cli/chrome-allow.d.ts +5 -0
  6. package/dist/src/cli/chrome-allow.d.ts.map +1 -0
  7. package/dist/src/cli/chrome-allow.js +241 -0
  8. package/dist/src/cli/chrome-allow.js.map +1 -0
  9. package/dist/src/cli/create.d.ts +2 -0
  10. package/dist/src/cli/create.d.ts.map +1 -0
  11. package/dist/src/cli/create.js +72 -0
  12. package/dist/src/cli/create.js.map +1 -0
  13. package/dist/src/cli/instances.d.ts +14 -0
  14. package/dist/src/cli/instances.d.ts.map +1 -0
  15. package/dist/src/cli/instances.js +43 -0
  16. package/dist/src/cli/instances.js.map +1 -0
  17. package/dist/src/cli/list.d.ts +2 -0
  18. package/dist/src/cli/list.d.ts.map +1 -0
  19. package/dist/src/cli/list.js +38 -0
  20. package/dist/src/cli/list.js.map +1 -0
  21. package/dist/src/cli/migrate.d.ts +5 -0
  22. package/dist/src/cli/migrate.d.ts.map +1 -0
  23. package/dist/src/cli/migrate.js +203 -0
  24. package/dist/src/cli/migrate.js.map +1 -0
  25. package/dist/src/cli/nuke.d.ts +2 -0
  26. package/dist/src/cli/nuke.d.ts.map +1 -0
  27. package/dist/src/cli/nuke.js +91 -0
  28. package/dist/src/cli/nuke.js.map +1 -0
  29. package/dist/src/cli/remove.d.ts +4 -0
  30. package/dist/src/cli/remove.d.ts.map +1 -0
  31. package/dist/src/cli/remove.js +47 -0
  32. package/dist/src/cli/remove.js.map +1 -0
  33. package/dist/src/cli/setup.d.ts +4 -0
  34. package/dist/src/cli/setup.d.ts.map +1 -0
  35. package/dist/src/cli/setup.js +483 -0
  36. package/dist/src/cli/setup.js.map +1 -0
  37. package/dist/src/cli/skills.d.ts +28 -0
  38. package/dist/src/cli/skills.d.ts.map +1 -0
  39. package/dist/src/cli/skills.js +284 -0
  40. package/dist/src/cli/skills.js.map +1 -0
  41. package/dist/src/cli/start.d.ts +5 -0
  42. package/dist/src/cli/start.d.ts.map +1 -0
  43. package/dist/src/cli/start.js +34 -0
  44. package/dist/src/cli/start.js.map +1 -0
  45. package/dist/src/cli/status.d.ts +2 -0
  46. package/dist/src/cli/status.d.ts.map +1 -0
  47. package/dist/src/cli/status.js +60 -0
  48. package/dist/src/cli/status.js.map +1 -0
  49. package/dist/src/cli/stop.d.ts +2 -0
  50. package/dist/src/cli/stop.d.ts.map +1 -0
  51. package/dist/src/cli/stop.js +11 -0
  52. package/dist/src/cli/stop.js.map +1 -0
  53. package/dist/src/connectors/slack/format.d.ts +10 -0
  54. package/dist/src/connectors/slack/format.d.ts.map +1 -0
  55. package/dist/src/connectors/slack/format.js +55 -0
  56. package/dist/src/connectors/slack/format.js.map +1 -0
  57. package/dist/src/connectors/slack/index.d.ts +18 -0
  58. package/dist/src/connectors/slack/index.d.ts.map +1 -0
  59. package/dist/src/connectors/slack/index.js +122 -0
  60. package/dist/src/connectors/slack/index.js.map +1 -0
  61. package/dist/src/connectors/slack/threads.d.ts +2 -0
  62. package/dist/src/connectors/slack/threads.d.ts.map +1 -0
  63. package/dist/src/connectors/slack/threads.js +10 -0
  64. package/dist/src/connectors/slack/threads.js.map +1 -0
  65. package/dist/src/cron/jobs.d.ts +5 -0
  66. package/dist/src/cron/jobs.d.ts.map +1 -0
  67. package/dist/src/cron/jobs.js +23 -0
  68. package/dist/src/cron/jobs.js.map +1 -0
  69. package/dist/src/cron/runner.d.ts +3 -0
  70. package/dist/src/cron/runner.d.ts.map +1 -0
  71. package/dist/src/cron/runner.js +118 -0
  72. package/dist/src/cron/runner.js.map +1 -0
  73. package/dist/src/cron/scheduler.d.ts +5 -0
  74. package/dist/src/cron/scheduler.d.ts.map +1 -0
  75. package/dist/src/cron/scheduler.js +39 -0
  76. package/dist/src/cron/scheduler.js.map +1 -0
  77. package/dist/src/engines/claude.d.ts +14 -0
  78. package/dist/src/engines/claude.d.ts.map +1 -0
  79. package/dist/src/engines/claude.js +264 -0
  80. package/dist/src/engines/claude.js.map +1 -0
  81. package/dist/src/engines/codex.d.ts +15 -0
  82. package/dist/src/engines/codex.d.ts.map +1 -0
  83. package/dist/src/engines/codex.js +346 -0
  84. package/dist/src/engines/codex.js.map +1 -0
  85. package/dist/src/gateway/api.d.ts +13 -0
  86. package/dist/src/gateway/api.d.ts.map +1 -0
  87. package/dist/src/gateway/api.js +819 -0
  88. package/dist/src/gateway/api.js.map +1 -0
  89. package/dist/src/gateway/daemon-entry.d.ts +2 -0
  90. package/dist/src/gateway/daemon-entry.d.ts.map +1 -0
  91. package/dist/src/gateway/daemon-entry.js +12 -0
  92. package/dist/src/gateway/daemon-entry.js.map +1 -0
  93. package/dist/src/gateway/lifecycle.d.ts +10 -0
  94. package/dist/src/gateway/lifecycle.d.ts.map +1 -0
  95. package/dist/src/gateway/lifecycle.js +124 -0
  96. package/dist/src/gateway/lifecycle.js.map +1 -0
  97. package/dist/src/gateway/org.d.ts +10 -0
  98. package/dist/src/gateway/org.d.ts.map +1 -0
  99. package/dist/src/gateway/org.js +71 -0
  100. package/dist/src/gateway/org.js.map +1 -0
  101. package/dist/src/gateway/server.d.ts +4 -0
  102. package/dist/src/gateway/server.d.ts.map +1 -0
  103. package/dist/src/gateway/server.js +301 -0
  104. package/dist/src/gateway/server.js.map +1 -0
  105. package/dist/src/gateway/watcher.d.ts +14 -0
  106. package/dist/src/gateway/watcher.d.ts.map +1 -0
  107. package/dist/src/gateway/watcher.js +104 -0
  108. package/dist/src/gateway/watcher.js.map +1 -0
  109. package/dist/src/index.d.ts +5 -0
  110. package/dist/src/index.d.ts.map +1 -0
  111. package/dist/src/index.js +4 -0
  112. package/dist/src/index.js.map +1 -0
  113. package/dist/src/sessions/context.d.ts +20 -0
  114. package/dist/src/sessions/context.d.ts.map +1 -0
  115. package/dist/src/sessions/context.js +532 -0
  116. package/dist/src/sessions/context.js.map +1 -0
  117. package/dist/src/sessions/manager.d.ts +38 -0
  118. package/dist/src/sessions/manager.d.ts.map +1 -0
  119. package/dist/src/sessions/manager.js +208 -0
  120. package/dist/src/sessions/manager.js.map +1 -0
  121. package/dist/src/sessions/queue.d.ts +14 -0
  122. package/dist/src/sessions/queue.d.ts.map +1 -0
  123. package/dist/src/sessions/queue.js +42 -0
  124. package/dist/src/sessions/queue.js.map +1 -0
  125. package/dist/src/sessions/registry.d.ts +46 -0
  126. package/dist/src/sessions/registry.d.ts.map +1 -0
  127. package/dist/src/sessions/registry.js +193 -0
  128. package/dist/src/sessions/registry.js.map +1 -0
  129. package/dist/src/shared/config.d.ts +3 -0
  130. package/dist/src/shared/config.d.ts.map +1 -0
  131. package/dist/src/shared/config.js +11 -0
  132. package/dist/src/shared/config.js.map +1 -0
  133. package/dist/src/shared/logger.d.ts +12 -0
  134. package/dist/src/shared/logger.d.ts.map +1 -0
  135. package/dist/src/shared/logger.js +35 -0
  136. package/dist/src/shared/logger.js.map +1 -0
  137. package/dist/src/shared/paths.d.ts +19 -0
  138. package/dist/src/shared/paths.d.ts.map +1 -0
  139. package/dist/src/shared/paths.js +31 -0
  140. package/dist/src/shared/paths.js.map +1 -0
  141. package/dist/src/shared/types.d.ts +166 -0
  142. package/dist/src/shared/types.d.ts.map +1 -0
  143. package/dist/src/shared/types.js +4 -0
  144. package/dist/src/shared/types.js.map +1 -0
  145. package/dist/src/shared/version.d.ts +15 -0
  146. package/dist/src/shared/version.d.ts.map +1 -0
  147. package/dist/src/shared/version.js +56 -0
  148. package/dist/src/shared/version.js.map +1 -0
  149. package/dist/web/404.html +1 -0
  150. package/dist/web/_next/static/chunks/198-fd91406a158c5c25.js +1 -0
  151. package/dist/web/_next/static/chunks/517.62389e8d3c929c43.js +1 -0
  152. package/dist/web/_next/static/chunks/534-17c49c944e0d0fe1.js +1 -0
  153. package/dist/web/_next/static/chunks/573-070537ec2452d03e.js +1 -0
  154. package/dist/web/_next/static/chunks/590-2c34156c7417317e.js +1 -0
  155. package/dist/web/_next/static/chunks/704-af2893821e1d18dc.js +1 -0
  156. package/dist/web/_next/static/chunks/7273c211.06e3b6021d90b73f.js +1 -0
  157. package/dist/web/_next/static/chunks/73-c226535579393e21.js +1 -0
  158. package/dist/web/_next/static/chunks/743-5bb03adbb0e4ddec.js +1 -0
  159. package/dist/web/_next/static/chunks/874.97d5a27895061057.js +1 -0
  160. package/dist/web/_next/static/chunks/8e6518bb-c26e82767f1faf66.js +1 -0
  161. package/dist/web/_next/static/chunks/app/_not-found/page-bb075b0779827928.js +1 -0
  162. package/dist/web/_next/static/chunks/app/chat/page-6d5bc707a45c92c6.js +1 -0
  163. package/dist/web/_next/static/chunks/app/costs/page-d6c03718defdb599.js +1 -0
  164. package/dist/web/_next/static/chunks/app/cron/page-4c563eef2b6231fe.js +1 -0
  165. package/dist/web/_next/static/chunks/app/kanban/page-55a73165a36f4077.js +1 -0
  166. package/dist/web/_next/static/chunks/app/layout-5129b67d5f126cf0.js +1 -0
  167. package/dist/web/_next/static/chunks/app/logs/page-e18889d67e48c9c9.js +1 -0
  168. package/dist/web/_next/static/chunks/app/org/page-d5cd8d9b7864737b.js +1 -0
  169. package/dist/web/_next/static/chunks/app/page-b81992940fd1dbc6.js +1 -0
  170. package/dist/web/_next/static/chunks/app/sessions/page-2eef6ac7882a28ba.js +1 -0
  171. package/dist/web/_next/static/chunks/app/settings/page-4fb01b9b09500170.js +1 -0
  172. package/dist/web/_next/static/chunks/app/skills/page-df9465e314561bb5.js +1 -0
  173. package/dist/web/_next/static/chunks/framework-077b27ad7787463c.js +1 -0
  174. package/dist/web/_next/static/chunks/main-app-437f51faf74fbb3b.js +1 -0
  175. package/dist/web/_next/static/chunks/main-f1c74cefd4965abf.js +1 -0
  176. package/dist/web/_next/static/chunks/pages/_app-77a85fe7d6bca671.js +1 -0
  177. package/dist/web/_next/static/chunks/pages/_error-68febf4b34900064.js +1 -0
  178. package/dist/web/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  179. package/dist/web/_next/static/chunks/webpack-0f39b7e91dce9791.js +1 -0
  180. package/dist/web/_next/static/css/4a6a5bca9238c104.css +1 -0
  181. package/dist/web/_next/static/vLvOwhC8JocJzSHTHKKOv/_buildManifest.js +1 -0
  182. package/dist/web/_next/static/vLvOwhC8JocJzSHTHKKOv/_ssgManifest.js +1 -0
  183. package/dist/web/chat.html +1 -0
  184. package/dist/web/chat.txt +20 -0
  185. package/dist/web/costs.html +16 -0
  186. package/dist/web/costs.txt +20 -0
  187. package/dist/web/cron.html +1 -0
  188. package/dist/web/cron.txt +20 -0
  189. package/dist/web/index.html +1 -0
  190. package/dist/web/index.txt +20 -0
  191. package/dist/web/kanban.html +1 -0
  192. package/dist/web/kanban.txt +20 -0
  193. package/dist/web/logs.html +7 -0
  194. package/dist/web/logs.txt +20 -0
  195. package/dist/web/org.html +1 -0
  196. package/dist/web/org.txt +20 -0
  197. package/dist/web/sessions.html +1 -0
  198. package/dist/web/sessions.txt +20 -0
  199. package/dist/web/settings.html +1 -0
  200. package/dist/web/settings.txt +20 -0
  201. package/dist/web/skills.html +1 -0
  202. package/dist/web/skills.txt +20 -0
  203. package/package.json +43 -0
  204. package/template/AGENTS.md +167 -0
  205. package/template/CLAUDE.md +106 -0
  206. package/template/config.default.yaml +27 -0
  207. package/template/docs/architecture.md +74 -0
  208. package/template/docs/connectors.md +72 -0
  209. package/template/docs/cron.md +137 -0
  210. package/template/docs/org.md +105 -0
  211. package/template/docs/overview.md +39 -0
  212. package/template/docs/self-modification.md +65 -0
  213. package/template/docs/skills.md +58 -0
  214. package/template/knowledge/.gitkeep +0 -0
  215. package/template/migrations/.gitkeep +0 -0
  216. package/template/migrations/0.1.0/MIGRATION.md +25 -0
  217. package/template/skills/cron-manager/SKILL.md +127 -0
  218. package/template/skills/find-and-install/SKILL.md +92 -0
  219. package/template/skills/management/SKILL.md +203 -0
  220. package/template/skills/migrate/SKILL.md +154 -0
  221. package/template/skills/new/SKILL.md +19 -0
  222. package/template/skills/onboarding/SKILL.md +106 -0
  223. package/template/skills/self-heal/SKILL.md +114 -0
  224. package/template/skills/skill-creator/SKILL.md +112 -0
  225. package/template/skills/status/SKILL.md +19 -0
  226. package/template/skills/sync/SKILL.md +67 -0
  227. package/template/skills.json +3 -0
@@ -0,0 +1,122 @@
1
+ import { App } from "@slack/bolt";
2
+ import { deriveSourceRef } from "./threads.js";
3
+ import { formatResponse, downloadAttachment } from "./format.js";
4
+ import { TMP_DIR } from "../../shared/paths.js";
5
+ import { logger } from "../../shared/logger.js";
6
+ export class SlackConnector {
7
+ name = "slack";
8
+ app;
9
+ handler = null;
10
+ constructor(config) {
11
+ this.app = new App({
12
+ token: config.botToken,
13
+ appToken: config.appToken,
14
+ socketMode: true,
15
+ });
16
+ }
17
+ async start() {
18
+ this.app.message(async ({ event }) => {
19
+ // Skip bot's own messages
20
+ if (event.bot_id)
21
+ return;
22
+ if (!this.handler)
23
+ return;
24
+ const sourceRef = deriveSourceRef(event);
25
+ // Download attachments if present
26
+ const attachments = [];
27
+ if (event.files) {
28
+ for (const file of event.files) {
29
+ try {
30
+ const localPath = await downloadAttachment(file.url_private, this.app.client.token, TMP_DIR);
31
+ attachments.push({
32
+ name: file.name,
33
+ url: file.url_private,
34
+ mimeType: file.mimetype,
35
+ localPath,
36
+ });
37
+ }
38
+ catch (err) {
39
+ logger.warn(`Failed to download attachment: ${err}`);
40
+ }
41
+ }
42
+ }
43
+ const msg = {
44
+ source: "slack",
45
+ channel: event.channel,
46
+ thread: event.thread_ts,
47
+ user: event.user,
48
+ userId: event.user,
49
+ text: event.text || "",
50
+ attachments,
51
+ raw: event,
52
+ };
53
+ this.handler(msg);
54
+ });
55
+ await this.app.start();
56
+ logger.info("Slack connector started (socket mode)");
57
+ }
58
+ async stop() {
59
+ await this.app.stop();
60
+ logger.info("Slack connector stopped");
61
+ }
62
+ async sendMessage(target, text) {
63
+ if (!text || !text.trim())
64
+ return undefined;
65
+ const chunks = formatResponse(text);
66
+ let lastTs;
67
+ for (const chunk of chunks) {
68
+ if (!chunk.trim())
69
+ continue;
70
+ const res = await this.app.client.chat.postMessage({
71
+ channel: target.channel,
72
+ thread_ts: target.thread,
73
+ text: chunk,
74
+ });
75
+ lastTs = res.ts;
76
+ }
77
+ return lastTs;
78
+ }
79
+ async addReaction(target, emoji) {
80
+ if (!target.messageTs)
81
+ return;
82
+ try {
83
+ await this.app.client.reactions.add({
84
+ channel: target.channel,
85
+ timestamp: target.messageTs,
86
+ name: emoji,
87
+ });
88
+ }
89
+ catch (err) {
90
+ logger.warn(`Failed to add reaction: ${err}`);
91
+ }
92
+ }
93
+ async removeReaction(target, emoji) {
94
+ if (!target.messageTs)
95
+ return;
96
+ try {
97
+ await this.app.client.reactions.remove({
98
+ channel: target.channel,
99
+ timestamp: target.messageTs,
100
+ name: emoji,
101
+ });
102
+ }
103
+ catch (err) {
104
+ logger.warn(`Failed to remove reaction: ${err}`);
105
+ }
106
+ }
107
+ async editMessage(target, text) {
108
+ if (!target.messageTs)
109
+ return;
110
+ if (!text || !text.trim())
111
+ return;
112
+ await this.app.client.chat.update({
113
+ channel: target.channel,
114
+ ts: target.messageTs,
115
+ text,
116
+ });
117
+ }
118
+ onMessage(handler) {
119
+ this.handler = handler;
120
+ }
121
+ }
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connectors/slack/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function deriveSourceRef(event: any): string;
2
+ //# sourceMappingURL=threads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../../src/connectors/slack/threads.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAQlD"}
@@ -0,0 +1,10 @@
1
+ export function deriveSourceRef(event) {
2
+ if (event.channel_type === "im") {
3
+ return `slack:dm:${event.user}`;
4
+ }
5
+ if (event.thread_ts && event.thread_ts !== event.ts) {
6
+ return `slack:${event.channel}:${event.thread_ts}`;
7
+ }
8
+ return `slack:${event.channel}`;
9
+ }
10
+ //# sourceMappingURL=threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../../src/connectors/slack/threads.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,KAAU;IACxC,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IACD,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;IACD,OAAO,SAAS,KAAK,CAAC,OAAO,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CronJob } from "../shared/types.js";
2
+ export declare function loadJobs(): CronJob[];
3
+ export declare function saveJobs(jobs: CronJob[]): void;
4
+ export declare function appendRunLog(jobId: string, entry: object): void;
5
+ //# sourceMappingURL=jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/cron/jobs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD,wBAAgB,QAAQ,IAAI,OAAO,EAAE,CAOpC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAI9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/D"}
@@ -0,0 +1,23 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { CRON_JOBS, CRON_RUNS } from "../shared/paths.js";
4
+ export function loadJobs() {
5
+ try {
6
+ const raw = fs.readFileSync(CRON_JOBS, "utf-8");
7
+ return JSON.parse(raw);
8
+ }
9
+ catch {
10
+ return [];
11
+ }
12
+ }
13
+ export function saveJobs(jobs) {
14
+ const dir = path.dirname(CRON_JOBS);
15
+ fs.mkdirSync(dir, { recursive: true });
16
+ fs.writeFileSync(CRON_JOBS, JSON.stringify(jobs, null, 2) + "\n", "utf-8");
17
+ }
18
+ export function appendRunLog(jobId, entry) {
19
+ fs.mkdirSync(CRON_RUNS, { recursive: true });
20
+ const logPath = path.join(CRON_RUNS, `${jobId}.jsonl`);
21
+ fs.appendFileSync(logPath, JSON.stringify(entry) + "\n", "utf-8");
22
+ }
23
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/cron/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAe;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,KAAa;IACvD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;IACvD,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CronJob, Engine, JinnConfig, Connector } from "../shared/types.js";
2
+ export declare function runCronJob(job: CronJob, engines: Map<string, Engine>, config: JinnConfig, connectors: Map<string, Connector>): Promise<void>;
3
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/cron/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQjF,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAmIf"}
@@ -0,0 +1,118 @@
1
+ import { buildContext } from "../sessions/context.js";
2
+ import { createSession, updateSession, insertMessage } from "../sessions/registry.js";
3
+ import { JINN_HOME } from "../shared/paths.js";
4
+ import { logger } from "../shared/logger.js";
5
+ import { appendRunLog } from "./jobs.js";
6
+ import { scanOrg, findEmployee } from "../gateway/org.js";
7
+ export async function runCronJob(job, engines, config, connectors) {
8
+ const startTime = Date.now();
9
+ logger.info(`Cron job "${job.name}" (${job.id}) starting`);
10
+ // 1. Determine engine + model
11
+ const engineName = job.engine || config.engines.default;
12
+ const engine = engines.get(engineName);
13
+ if (!engine) {
14
+ logger.error(`Engine "${engineName}" not found for cron job "${job.name}"`);
15
+ return;
16
+ }
17
+ const model = job.model || config.engines[engineName]?.model;
18
+ // 2. Warn if a non-COO employee has delivery configured (anti-pattern)
19
+ const delivery = job.delivery || config.cron?.defaultDelivery;
20
+ const cooSlug = config.portal?.portalName?.toLowerCase() || "jinn";
21
+ if (delivery && job.employee && job.employee !== cooSlug) {
22
+ logger.warn(`Cron job "${job.name}" targets employee "${job.employee}" with delivery to ${delivery.connector}:${delivery.channel}. ` +
23
+ `Recommended pattern: target "${cooSlug}" and let the COO delegate to "${job.employee}" via a child session for output review/filtering.`);
24
+ }
25
+ // 3. Resolve employee
26
+ let employee;
27
+ if (job.employee) {
28
+ const orgRegistry = scanOrg();
29
+ employee = findEmployee(job.employee, orgRegistry);
30
+ }
31
+ // 4. Create a proper session in the DB
32
+ const sourceRef = `cron:${job.id}`;
33
+ const session = createSession({
34
+ engine: engineName,
35
+ source: "cron",
36
+ sourceRef,
37
+ employee: employee?.name,
38
+ model,
39
+ title: job.name,
40
+ prompt: job.prompt,
41
+ portalName: config.portal?.portalName,
42
+ });
43
+ insertMessage(session.id, "user", job.prompt);
44
+ // 5. Build context
45
+ const ctx = buildContext({
46
+ source: "cron",
47
+ channel: job.id,
48
+ user: "system",
49
+ employee,
50
+ config,
51
+ connectors: Array.from(connectors.keys()),
52
+ sessionId: session.id,
53
+ });
54
+ updateSession(session.id, {
55
+ status: "running",
56
+ lastActivity: new Date().toISOString(),
57
+ });
58
+ // 6. Run engine (fresh session, no resume)
59
+ try {
60
+ const result = await engine.run({
61
+ prompt: job.prompt,
62
+ systemPrompt: ctx,
63
+ cwd: JINN_HOME,
64
+ model,
65
+ });
66
+ const durationMs = Date.now() - startTime;
67
+ const responseText = result.result?.trim()
68
+ ? result.result
69
+ : result.error || "(No response from engine)";
70
+ // Persist assistant response
71
+ insertMessage(session.id, "assistant", responseText);
72
+ // Update session with engine session id
73
+ updateSession(session.id, {
74
+ engineSessionId: result.sessionId,
75
+ status: result.error ? "error" : "idle",
76
+ lastActivity: new Date().toISOString(),
77
+ lastError: result.error ?? null,
78
+ });
79
+ // 7. If delivery configured (job-level or default), send result to connector
80
+ if (delivery && result.result) {
81
+ const connector = connectors.get(delivery.connector);
82
+ if (connector) {
83
+ await connector.sendMessage({ channel: delivery.channel }, result.result);
84
+ }
85
+ else {
86
+ logger.warn(`Delivery connector "${delivery.connector}" not found`);
87
+ }
88
+ }
89
+ // 8. Log run
90
+ appendRunLog(job.id, {
91
+ timestamp: new Date().toISOString(),
92
+ sessionId: session.id,
93
+ status: result.error ? "error" : "success",
94
+ durationMs,
95
+ error: result.error || null,
96
+ resultPreview: result.result?.slice(0, 500) || null,
97
+ });
98
+ logger.info(`Cron job "${job.name}" completed in ${durationMs}ms`);
99
+ }
100
+ catch (err) {
101
+ const durationMs = Date.now() - startTime;
102
+ updateSession(session.id, {
103
+ status: "error",
104
+ lastActivity: new Date().toISOString(),
105
+ lastError: err.message,
106
+ });
107
+ appendRunLog(job.id, {
108
+ timestamp: new Date().toISOString(),
109
+ sessionId: session.id,
110
+ status: "error",
111
+ durationMs,
112
+ error: err.message,
113
+ resultPreview: null,
114
+ });
115
+ logger.error(`Cron job "${job.name}" failed: ${err.message}`);
116
+ }
117
+ }
118
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/cron/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CronJob, Engine, JinnConfig, Connector } from "../shared/types.js";
2
+ export declare function startScheduler(jobs: CronJob[], engines: Map<string, Engine>, config: JinnConfig, connectors: Map<string, Connector>): void;
3
+ export declare function reloadScheduler(jobs: CronJob[]): void;
4
+ export declare function stopScheduler(): void;
5
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/cron/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,UAAU,EACV,SAAS,EACV,MAAM,oBAAoB,CAAC;AAS5B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GACjC,IAAI,CAKN;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAGrD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
@@ -0,0 +1,39 @@
1
+ import cron from "node-cron";
2
+ import { runCronJob } from "./runner.js";
3
+ import { logger } from "../shared/logger.js";
4
+ let tasks = [];
5
+ let currentEngines;
6
+ let currentConfig;
7
+ let currentConnectors;
8
+ export function startScheduler(jobs, engines, config, connectors) {
9
+ currentEngines = engines;
10
+ currentConfig = config;
11
+ currentConnectors = connectors;
12
+ scheduleJobs(jobs);
13
+ }
14
+ export function reloadScheduler(jobs) {
15
+ stopScheduler();
16
+ scheduleJobs(jobs);
17
+ }
18
+ export function stopScheduler() {
19
+ for (const task of tasks) {
20
+ task.stop();
21
+ }
22
+ tasks = [];
23
+ }
24
+ function scheduleJobs(jobs) {
25
+ for (const job of jobs) {
26
+ if (!job.enabled)
27
+ continue;
28
+ if (!cron.validate(job.schedule)) {
29
+ logger.warn(`Invalid cron schedule for job "${job.name}": ${job.schedule}`);
30
+ continue;
31
+ }
32
+ const task = cron.schedule(job.schedule, () => {
33
+ runCronJob(job, currentEngines, currentConfig, currentConnectors);
34
+ }, { timezone: job.timezone });
35
+ tasks.push(task);
36
+ logger.info(`Scheduled cron job "${job.name}" (${job.schedule})`);
37
+ }
38
+ }
39
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/cron/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,IAAI,KAAK,GAAyB,EAAE,CAAC;AACrC,IAAI,cAAmC,CAAC;AACxC,IAAI,aAAyB,CAAC;AAC9B,IAAI,iBAAyC,CAAC;AAE9C,MAAM,UAAU,cAAc,CAC5B,IAAe,EACf,OAA4B,EAC5B,MAAkB,EAClB,UAAkC;IAElC,cAAc,GAAG,OAAO,CAAC;IACzB,aAAa,GAAG,MAAM,CAAC;IACvB,iBAAiB,GAAG,UAAU,CAAC;IAC/B,YAAY,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAe;IAC7C,aAAa,EAAE,CAAC;IAChB,YAAY,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IACD,KAAK,GAAG,EAAE,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,IAAe;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,SAAS;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CACT,kCAAkC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,QAAQ,EAAE,CAC/D,CAAC;YACF,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,GAAG,CAAC,QAAQ,EACZ,GAAG,EAAE;YACH,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;QACpE,CAAC,EACD,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAC3B,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { InterruptibleEngine, EngineRunOpts, EngineResult } from "../shared/types.js";
2
+ export declare class ClaudeEngine implements InterruptibleEngine {
3
+ name: "claude";
4
+ private liveProcesses;
5
+ kill(sessionId: string, reason?: string): void;
6
+ killAll(): void;
7
+ isAlive(sessionId: string): boolean;
8
+ run(opts: EngineRunOpts): Promise<EngineResult>;
9
+ private processStreamLine;
10
+ private extractResult;
11
+ private buildCleanEnv;
12
+ private signalProcess;
13
+ }
14
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +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"}