@action-llama/action-llama 0.1.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 (153) hide show
  1. package/README.md +448 -0
  2. package/dist/agents/container-entry.d.ts +2 -0
  3. package/dist/agents/container-entry.d.ts.map +1 -0
  4. package/dist/agents/container-entry.js +173 -0
  5. package/dist/agents/container-entry.js.map +1 -0
  6. package/dist/agents/container-runner.d.ts +20 -0
  7. package/dist/agents/container-runner.d.ts.map +1 -0
  8. package/dist/agents/container-runner.js +208 -0
  9. package/dist/agents/container-runner.js.map +1 -0
  10. package/dist/agents/definitions/dev/AGENTS.md +44 -0
  11. package/dist/agents/definitions/dev/config-definition.json +39 -0
  12. package/dist/agents/definitions/devops/AGENTS.md +33 -0
  13. package/dist/agents/definitions/devops/config-definition.json +37 -0
  14. package/dist/agents/definitions/loader.d.ts +18 -0
  15. package/dist/agents/definitions/loader.d.ts.map +1 -0
  16. package/dist/agents/definitions/loader.js +59 -0
  17. package/dist/agents/definitions/loader.js.map +1 -0
  18. package/dist/agents/definitions/reviewer/AGENTS.md +37 -0
  19. package/dist/agents/definitions/reviewer/config-definition.json +24 -0
  20. package/dist/agents/definitions/schema.d.ts +38 -0
  21. package/dist/agents/definitions/schema.d.ts.map +1 -0
  22. package/dist/agents/definitions/schema.js +97 -0
  23. package/dist/agents/definitions/schema.js.map +1 -0
  24. package/dist/agents/prompt.d.ts +6 -0
  25. package/dist/agents/prompt.d.ts.map +1 -0
  26. package/dist/agents/prompt.js +42 -0
  27. package/dist/agents/prompt.js.map +1 -0
  28. package/dist/agents/runner.d.ts +14 -0
  29. package/dist/agents/runner.d.ts.map +1 -0
  30. package/dist/agents/runner.js +148 -0
  31. package/dist/agents/runner.js.map +1 -0
  32. package/dist/broker/index.d.ts +16 -0
  33. package/dist/broker/index.d.ts.map +1 -0
  34. package/dist/broker/index.js +53 -0
  35. package/dist/broker/index.js.map +1 -0
  36. package/dist/broker/router.d.ts +13 -0
  37. package/dist/broker/router.d.ts.map +1 -0
  38. package/dist/broker/router.js +71 -0
  39. package/dist/broker/router.js.map +1 -0
  40. package/dist/broker/routes/shutdown.d.ts +4 -0
  41. package/dist/broker/routes/shutdown.d.ts.map +1 -0
  42. package/dist/broker/routes/shutdown.js +37 -0
  43. package/dist/broker/routes/shutdown.js.map +1 -0
  44. package/dist/broker/routes/webhooks.d.ts +5 -0
  45. package/dist/broker/routes/webhooks.d.ts.map +1 -0
  46. package/dist/broker/routes/webhooks.js +50 -0
  47. package/dist/broker/routes/webhooks.js.map +1 -0
  48. package/dist/cli/commands/agent/add.d.ts +5 -0
  49. package/dist/cli/commands/agent/add.d.ts.map +1 -0
  50. package/dist/cli/commands/agent/add.js +86 -0
  51. package/dist/cli/commands/agent/add.js.map +1 -0
  52. package/dist/cli/commands/init.d.ts +2 -0
  53. package/dist/cli/commands/init.d.ts.map +1 -0
  54. package/dist/cli/commands/init.js +75 -0
  55. package/dist/cli/commands/init.js.map +1 -0
  56. package/dist/cli/commands/logs.d.ts +7 -0
  57. package/dist/cli/commands/logs.d.ts.map +1 -0
  58. package/dist/cli/commands/logs.js +121 -0
  59. package/dist/cli/commands/logs.js.map +1 -0
  60. package/dist/cli/commands/start.d.ts +5 -0
  61. package/dist/cli/commands/start.d.ts.map +1 -0
  62. package/dist/cli/commands/start.js +44 -0
  63. package/dist/cli/commands/start.js.map +1 -0
  64. package/dist/cli/commands/status.d.ts +4 -0
  65. package/dist/cli/commands/status.d.ts.map +1 -0
  66. package/dist/cli/commands/status.js +52 -0
  67. package/dist/cli/commands/status.js.map +1 -0
  68. package/dist/cli/main.d.ts +3 -0
  69. package/dist/cli/main.d.ts.map +1 -0
  70. package/dist/cli/main.js +75 -0
  71. package/dist/cli/main.js.map +1 -0
  72. package/dist/docker/container.d.ts +19 -0
  73. package/dist/docker/container.d.ts.map +1 -0
  74. package/dist/docker/container.js +73 -0
  75. package/dist/docker/container.js.map +1 -0
  76. package/dist/docker/image.d.ts +4 -0
  77. package/dist/docker/image.d.ts.map +1 -0
  78. package/dist/docker/image.js +38 -0
  79. package/dist/docker/image.js.map +1 -0
  80. package/dist/docker/network.d.ts +5 -0
  81. package/dist/docker/network.d.ts.map +1 -0
  82. package/dist/docker/network.js +23 -0
  83. package/dist/docker/network.js.map +1 -0
  84. package/dist/scheduler/event-queue.d.ts +12 -0
  85. package/dist/scheduler/event-queue.d.ts.map +1 -0
  86. package/dist/scheduler/event-queue.js +12 -0
  87. package/dist/scheduler/event-queue.js.map +1 -0
  88. package/dist/scheduler/index.d.ts +19 -0
  89. package/dist/scheduler/index.d.ts.map +1 -0
  90. package/dist/scheduler/index.js +192 -0
  91. package/dist/scheduler/index.js.map +1 -0
  92. package/dist/scheduler/types.d.ts +14 -0
  93. package/dist/scheduler/types.d.ts.map +1 -0
  94. package/dist/scheduler/types.js +2 -0
  95. package/dist/scheduler/types.js.map +1 -0
  96. package/dist/setup/prompts.d.ts +52 -0
  97. package/dist/setup/prompts.d.ts.map +1 -0
  98. package/dist/setup/prompts.js +656 -0
  99. package/dist/setup/prompts.js.map +1 -0
  100. package/dist/setup/scaffold.d.ts +11 -0
  101. package/dist/setup/scaffold.d.ts.map +1 -0
  102. package/dist/setup/scaffold.js +70 -0
  103. package/dist/setup/scaffold.js.map +1 -0
  104. package/dist/setup/validators.d.ts +23 -0
  105. package/dist/setup/validators.d.ts.map +1 -0
  106. package/dist/setup/validators.js +61 -0
  107. package/dist/setup/validators.js.map +1 -0
  108. package/dist/shared/config.d.ts +40 -0
  109. package/dist/shared/config.d.ts.map +1 -0
  110. package/dist/shared/config.js +46 -0
  111. package/dist/shared/config.js.map +1 -0
  112. package/dist/shared/credentials.d.ts +4 -0
  113. package/dist/shared/credentials.d.ts.map +1 -0
  114. package/dist/shared/credentials.js +21 -0
  115. package/dist/shared/credentials.js.map +1 -0
  116. package/dist/shared/git.d.ts +3 -0
  117. package/dist/shared/git.d.ts.map +1 -0
  118. package/dist/shared/git.js +24 -0
  119. package/dist/shared/git.js.map +1 -0
  120. package/dist/shared/logger.d.ts +6 -0
  121. package/dist/shared/logger.d.ts.map +1 -0
  122. package/dist/shared/logger.js +47 -0
  123. package/dist/shared/logger.js.map +1 -0
  124. package/dist/shared/paths.d.ts +8 -0
  125. package/dist/shared/paths.d.ts.map +1 -0
  126. package/dist/shared/paths.js +20 -0
  127. package/dist/shared/paths.js.map +1 -0
  128. package/dist/tui/App.d.ts +5 -0
  129. package/dist/tui/App.d.ts.map +1 -0
  130. package/dist/tui/App.js +85 -0
  131. package/dist/tui/App.js.map +1 -0
  132. package/dist/tui/render.d.ts +5 -0
  133. package/dist/tui/render.d.ts.map +1 -0
  134. package/dist/tui/render.js +9 -0
  135. package/dist/tui/render.js.map +1 -0
  136. package/dist/tui/status-tracker.d.ts +39 -0
  137. package/dist/tui/status-tracker.d.ts.map +1 -0
  138. package/dist/tui/status-tracker.js +73 -0
  139. package/dist/tui/status-tracker.js.map +1 -0
  140. package/dist/webhooks/providers/github.d.ts +9 -0
  141. package/dist/webhooks/providers/github.d.ts.map +1 -0
  142. package/dist/webhooks/providers/github.js +169 -0
  143. package/dist/webhooks/providers/github.js.map +1 -0
  144. package/dist/webhooks/registry.d.ts +13 -0
  145. package/dist/webhooks/registry.d.ts.map +1 -0
  146. package/dist/webhooks/registry.js +82 -0
  147. package/dist/webhooks/registry.js.map +1 -0
  148. package/dist/webhooks/types.d.ts +49 -0
  149. package/dist/webhooks/types.d.ts.map +1 -0
  150. package/dist/webhooks/types.js +2 -0
  151. package/dist/webhooks/types.js.map +1 -0
  152. package/docker/Dockerfile +29 -0
  153. package/package.json +67 -0
@@ -0,0 +1,19 @@
1
+ export interface ContainerOptions {
2
+ image: string;
3
+ agentName: string;
4
+ agentConfig: string;
5
+ shutdownSecret: string;
6
+ brokerUrl: string;
7
+ prompt: string;
8
+ credentialsStagingDir: string;
9
+ memory?: string;
10
+ cpus?: number;
11
+ timeout?: number;
12
+ }
13
+ export declare function launchContainer(opts: ContainerOptions): string;
14
+ export declare function waitForContainer(containerName: string, timeoutSeconds?: number): {
15
+ exitCode: number;
16
+ };
17
+ export declare function getContainerLogs(containerName: string): string;
18
+ export declare function removeContainer(containerName: string): void;
19
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/docker/container.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CA+B9D;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAerG;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAM3D"}
@@ -0,0 +1,73 @@
1
+ import { execFileSync } from "child_process";
2
+ import { randomUUID } from "crypto";
3
+ import { NETWORK_NAME } from "./network.js";
4
+ function docker(...args) {
5
+ return execFileSync("docker", args, {
6
+ encoding: "utf-8",
7
+ timeout: 30000,
8
+ }).trim();
9
+ }
10
+ export function launchContainer(opts) {
11
+ const runId = randomUUID().slice(0, 8);
12
+ const containerName = `al-${opts.agentName}-${runId}`;
13
+ const memory = opts.memory || "4g";
14
+ const cpus = opts.cpus || 2;
15
+ const args = [
16
+ "run", "-d",
17
+ "--name", containerName,
18
+ "--network", NETWORK_NAME,
19
+ "--user", "1000:1000",
20
+ "--read-only",
21
+ "--tmpfs", "/tmp:rw,nosuid,uid=1000,gid=1000,size=512m",
22
+ "--tmpfs", "/workspace:rw,exec,nosuid,uid=1000,gid=1000,size=2g",
23
+ "--tmpfs", "/home/node:rw,nosuid,uid=1000,gid=1000,size=64m",
24
+ "--cap-drop", "ALL",
25
+ "--security-opt", "no-new-privileges:true",
26
+ "--pids-limit", "256",
27
+ "--memory", memory,
28
+ "--cpus", String(cpus),
29
+ "-v", `${opts.credentialsStagingDir}:/credentials:ro`,
30
+ "-e", `BROKER_URL=${opts.brokerUrl}`,
31
+ "-e", `SHUTDOWN_SECRET=${opts.shutdownSecret}`,
32
+ "-e", `AGENT_CONFIG=${opts.agentConfig}`,
33
+ "-e", `PROMPT=${opts.prompt}`,
34
+ opts.image,
35
+ ];
36
+ docker(...args);
37
+ return containerName;
38
+ }
39
+ export function waitForContainer(containerName, timeoutSeconds) {
40
+ const timeout = timeoutSeconds || 3600;
41
+ try {
42
+ const result = execFileSync("docker", ["wait", containerName], {
43
+ encoding: "utf-8",
44
+ timeout: timeout * 1000,
45
+ }).trim();
46
+ return { exitCode: parseInt(result, 10) };
47
+ }
48
+ catch (err) {
49
+ // Timeout — kill the container
50
+ try {
51
+ docker("kill", containerName);
52
+ }
53
+ catch { /* already dead */ }
54
+ throw new Error(`Container ${containerName} timed out after ${timeout}s`);
55
+ }
56
+ }
57
+ export function getContainerLogs(containerName) {
58
+ try {
59
+ return docker("logs", containerName);
60
+ }
61
+ catch {
62
+ return "";
63
+ }
64
+ }
65
+ export function removeContainer(containerName) {
66
+ try {
67
+ docker("rm", "-f", containerName);
68
+ }
69
+ catch {
70
+ // Container may already be removed
71
+ }
72
+ }
73
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/docker/container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function imageExists(image?: string): boolean;
2
+ export declare function buildImage(image?: string): void;
3
+ export declare function ensureImage(image?: string): void;
4
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/docker/image.ts"],"names":[],"mappings":"AAmBA,wBAAgB,WAAW,CAAC,KAAK,GAAE,MAAsB,GAAG,OAAO,CAOlE;AAED,wBAAgB,UAAU,CAAC,KAAK,GAAE,MAAsB,GAAG,IAAI,CAO9D;AAED,wBAAgB,WAAW,CAAC,KAAK,GAAE,MAAsB,GAAG,IAAI,CAI/D"}
@@ -0,0 +1,38 @@
1
+ import { execFileSync } from "child_process";
2
+ import { resolve, dirname } from "path";
3
+ import { fileURLToPath } from "url";
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = dirname(__filename);
6
+ const PROJECT_ROOT = resolve(__dirname, "..", "..");
7
+ const DEFAULT_IMAGE = "al-agent:latest";
8
+ function docker(args, opts) {
9
+ return execFileSync("docker", args, {
10
+ encoding: "utf-8",
11
+ stdio: opts?.quiet ? ["pipe", "pipe", "pipe"] : ["pipe", "pipe", "inherit"],
12
+ timeout: 300000, // 5 min for builds
13
+ cwd: PROJECT_ROOT,
14
+ }).trim();
15
+ }
16
+ export function imageExists(image = DEFAULT_IMAGE) {
17
+ try {
18
+ docker(["image", "inspect", image], { quiet: true });
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ export function buildImage(image = DEFAULT_IMAGE) {
26
+ docker([
27
+ "build",
28
+ "-t", image,
29
+ "-f", "docker/Dockerfile",
30
+ ".",
31
+ ]);
32
+ }
33
+ export function ensureImage(image = DEFAULT_IMAGE) {
34
+ if (!imageExists(image)) {
35
+ buildImage(image);
36
+ }
37
+ }
38
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/docker/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEpD,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,SAAS,MAAM,CAAC,IAAc,EAAE,IAA0B;IACxD,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE;QAClC,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;QAC3E,OAAO,EAAE,MAAM,EAAE,mBAAmB;QACpC,GAAG,EAAE,YAAY;KAClB,CAAC,CAAC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,aAAa;IACvD,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,aAAa;IACtD,MAAM,CAAC;QACL,OAAO;QACP,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,mBAAmB;QACzB,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,aAAa;IACvD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const NETWORK_NAME = "al-net";
2
+ export declare function ensureNetwork(): void;
3
+ export declare function removeNetwork(): void;
4
+ export { NETWORK_NAME };
5
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/docker/network.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,YAAY,WAAW,CAAC;AAM9B,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { execFileSync } from "child_process";
2
+ const NETWORK_NAME = "al-net";
3
+ function docker(...args) {
4
+ return execFileSync("docker", args, { encoding: "utf-8", timeout: 30000 }).trim();
5
+ }
6
+ export function ensureNetwork() {
7
+ try {
8
+ docker("network", "inspect", NETWORK_NAME);
9
+ }
10
+ catch {
11
+ docker("network", "create", NETWORK_NAME);
12
+ }
13
+ }
14
+ export function removeNetwork() {
15
+ try {
16
+ docker("network", "rm", NETWORK_NAME);
17
+ }
18
+ catch {
19
+ // Network may not exist or have active containers
20
+ }
21
+ }
22
+ export { NETWORK_NAME };
23
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/docker/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B,SAAS,MAAM,CAAC,GAAG,IAAc;IAC/B,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface QueuedEvent {
2
+ agentType: string;
3
+ text: string;
4
+ timestamp: string;
5
+ }
6
+ export type EventListener = (event: QueuedEvent) => void;
7
+ export declare class EventQueue {
8
+ private listeners;
9
+ onEvent(listener: EventListener): void;
10
+ push(event: QueuedEvent): void;
11
+ }
12
+ //# sourceMappingURL=event-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-queue.d.ts","sourceRoot":"","sources":["../../src/scheduler/event-queue.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAEzD,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAItC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;CAK/B"}
@@ -0,0 +1,12 @@
1
+ export class EventQueue {
2
+ listeners = [];
3
+ onEvent(listener) {
4
+ this.listeners.push(listener);
5
+ }
6
+ push(event) {
7
+ for (const listener of this.listeners) {
8
+ listener(event);
9
+ }
10
+ }
11
+ }
12
+ //# sourceMappingURL=event-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-queue.js","sourceRoot":"","sources":["../../src/scheduler/event-queue.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,UAAU;IACb,SAAS,GAAoB,EAAE,CAAC;IAExC,OAAO,CAAC,QAAuB;QAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { Cron } from "croner";
2
+ import type { GlobalConfig } from "../shared/config.js";
3
+ import type { StatusTracker } from "../tui/status-tracker.js";
4
+ import { WebhookRegistry } from "../webhooks/registry.js";
5
+ import type { BrokerServer } from "../broker/index.js";
6
+ interface RunnerLike {
7
+ isRunning: boolean;
8
+ run(prompt: string): Promise<void>;
9
+ }
10
+ export declare function startScheduler(projectPath: string, globalConfigOverride?: GlobalConfig, statusTracker?: StatusTracker): Promise<{
11
+ cronJobs: Cron<undefined>[];
12
+ runners: Record<string, RunnerLike>;
13
+ broker: BrokerServer | undefined;
14
+ webhookRegistry: WebhookRegistry | undefined;
15
+ webhookUrls: string[];
16
+ statusTracker: StatusTracker | undefined;
17
+ }>;
18
+ export {};
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AAKrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,UAAU,UAAU;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,aAAa;;;;;;;GAqO3H"}
@@ -0,0 +1,192 @@
1
+ import { Cron } from "croner";
2
+ import { mkdirSync } from "fs";
3
+ import { loadGlobalConfig, loadAgentConfig, discoverAgents, validateAgentConfig } from "../shared/config.js";
4
+ import { requireCredential, loadCredential } from "../shared/credentials.js";
5
+ import { createLogger, createFileOnlyLogger } from "../shared/logger.js";
6
+ import { agentDir } from "../shared/paths.js";
7
+ import { AgentRunner } from "../agents/runner.js";
8
+ import { buildScheduledPrompt, buildWebhookPrompt } from "../agents/prompt.js";
9
+ import { WebhookRegistry } from "../webhooks/registry.js";
10
+ import { GitHubWebhookProvider } from "../webhooks/providers/github.js";
11
+ export async function startScheduler(projectPath, globalConfigOverride, statusTracker) {
12
+ const mkLogger = statusTracker ? createFileOnlyLogger : createLogger;
13
+ const logger = mkLogger(projectPath, "scheduler");
14
+ logger.info("Starting scheduler...");
15
+ const globalConfig = globalConfigOverride || loadGlobalConfig(projectPath);
16
+ // Discover all agents in the project
17
+ const agentNames = discoverAgents(projectPath);
18
+ if (agentNames.length === 0) {
19
+ throw new Error("No agents found. Run 'al init' to create a project with agents.");
20
+ }
21
+ const agentConfigs = agentNames.map((name) => loadAgentConfig(projectPath, name));
22
+ // Validate each agent has schedule, webhooks, or both
23
+ for (const config of agentConfigs) {
24
+ validateAgentConfig(config);
25
+ }
26
+ // Validate credentials exist for each agent
27
+ const allCredentials = new Set(agentConfigs.flatMap((a) => a.credentials));
28
+ for (const cred of allCredentials) {
29
+ requireCredential(cred);
30
+ }
31
+ const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
32
+ const dockerEnabled = globalConfig.docker?.enabled === true;
33
+ const anyWebhooks = agentConfigs.some((a) => a.webhooks?.filters?.length);
34
+ // Set up webhook registry if any agents use webhooks
35
+ let webhookRegistry;
36
+ let webhookSecrets = {};
37
+ if (anyWebhooks) {
38
+ webhookRegistry = new WebhookRegistry(logger);
39
+ // Register GitHub provider
40
+ webhookRegistry.registerProvider(new GitHubWebhookProvider());
41
+ // Load GitHub webhook secret from credentials (if configured)
42
+ const secretCredName = globalConfig.webhooks?.githubSecretCredential || "github-webhook-secret";
43
+ const githubSecret = loadCredential(secretCredName);
44
+ if (githubSecret) {
45
+ webhookSecrets.github = githubSecret;
46
+ }
47
+ }
48
+ let broker;
49
+ if (dockerEnabled) {
50
+ logger.info("Docker mode enabled — initializing docker infrastructure");
51
+ // 1. Verify Docker is available and running
52
+ const { execFileSync } = await import("child_process");
53
+ try {
54
+ execFileSync("docker", ["info"], { stdio: "pipe", timeout: 10000 });
55
+ }
56
+ catch {
57
+ throw new Error("Docker is not running. Start Docker Desktop (or the Docker daemon) and try again, " +
58
+ "or use --dangerous-no-docker to run without container isolation.");
59
+ }
60
+ // 2. Ensure Docker network exists
61
+ logger.info("Ensuring Docker network...");
62
+ const { ensureNetwork } = await import("../docker/network.js");
63
+ ensureNetwork();
64
+ // 3. Ensure Docker image is built (may take a while on first run)
65
+ const image = globalConfig.docker?.image || "al-agent:latest";
66
+ logger.info({ image }, "Ensuring Docker image (this may take a few minutes on first run)...");
67
+ const { ensureImage } = await import("../docker/image.js");
68
+ ensureImage(image);
69
+ logger.info("Docker infrastructure ready");
70
+ // 4. Start broker (with webhook registry if configured)
71
+ const { startBroker } = await import("../broker/index.js");
72
+ const brokerPort = globalConfig.broker?.port || 8080;
73
+ broker = await startBroker({
74
+ port: brokerPort,
75
+ logger: mkLogger(projectPath, "broker"),
76
+ webhookRegistry,
77
+ webhookSecrets,
78
+ });
79
+ }
80
+ else if (anyWebhooks) {
81
+ // Start broker even without docker when webhooks are configured
82
+ logger.info("Starting broker for webhook support (no docker)");
83
+ const { startBroker } = await import("../broker/index.js");
84
+ const brokerPort = globalConfig.broker?.port || 8080;
85
+ broker = await startBroker({
86
+ port: brokerPort,
87
+ logger: mkLogger(projectPath, "broker"),
88
+ webhookRegistry,
89
+ webhookSecrets,
90
+ });
91
+ }
92
+ // Create runners for each agent
93
+ const runners = {};
94
+ if (dockerEnabled && broker) {
95
+ const { ContainerAgentRunner } = await import("../agents/container-runner.js");
96
+ const brokerPort = globalConfig.broker?.port || 8080;
97
+ const brokerUrl = `http://host.docker.internal:${brokerPort}`;
98
+ for (const agentConfig of agentConfigs) {
99
+ statusTracker?.registerAgent(agentConfig.name);
100
+ runners[agentConfig.name] = new ContainerAgentRunner(globalConfig, agentConfig, mkLogger(projectPath, agentConfig.name), broker.registerContainer, brokerUrl, projectPath, statusTracker);
101
+ }
102
+ }
103
+ else {
104
+ for (const agentConfig of agentConfigs) {
105
+ mkdirSync(agentDir(projectPath, agentConfig.name), { recursive: true });
106
+ statusTracker?.registerAgent(agentConfig.name);
107
+ runners[agentConfig.name] = new AgentRunner(agentConfig, mkLogger(projectPath, agentConfig.name), projectPath, statusTracker);
108
+ }
109
+ }
110
+ // Set up webhook bindings
111
+ if (webhookRegistry) {
112
+ for (const agentConfig of agentConfigs) {
113
+ if (!agentConfig.webhooks?.filters?.length)
114
+ continue;
115
+ const runner = runners[agentConfig.name];
116
+ for (const filter of agentConfig.webhooks.filters) {
117
+ webhookRegistry.addBinding({
118
+ agentName: agentConfig.name,
119
+ filter,
120
+ trigger: (context) => {
121
+ if (runner.isRunning) {
122
+ logger.warn(`${agentConfig.name} is busy, skipping webhook trigger`);
123
+ return;
124
+ }
125
+ logger.info({ agent: agentConfig.name, event: context.event, action: context.action }, "webhook triggering agent");
126
+ const prompt = buildWebhookPrompt(agentConfig, context);
127
+ runner.run(prompt).catch((err) => {
128
+ logger.error({ err }, `${agentConfig.name} webhook run failed`);
129
+ });
130
+ },
131
+ });
132
+ }
133
+ }
134
+ }
135
+ // Set up cron jobs (only for agents with a schedule)
136
+ const cronJobs = [];
137
+ for (const agentConfig of agentConfigs) {
138
+ if (!agentConfig.schedule)
139
+ continue;
140
+ const runner = runners[agentConfig.name];
141
+ const job = new Cron(agentConfig.schedule, { timezone }, async () => {
142
+ if (runner.isRunning) {
143
+ logger.warn(`${agentConfig.name} is busy, skipping scheduled run`);
144
+ return;
145
+ }
146
+ logger.info(`Triggering ${agentConfig.name}: ${agentConfig.prompt}`);
147
+ await runner.run(buildScheduledPrompt(agentConfig));
148
+ });
149
+ cronJobs.push(job);
150
+ const nextRun = job.nextRun();
151
+ if (nextRun) {
152
+ statusTracker?.setNextRunAt(agentConfig.name, nextRun);
153
+ }
154
+ logger.info(`Scheduled ${agentConfig.name}: "${agentConfig.schedule}" (${timezone})`);
155
+ }
156
+ const webhookUrls = [];
157
+ if (anyWebhooks && broker) {
158
+ const brokerPort = globalConfig.broker?.port || 8080;
159
+ const sources = new Set(agentConfigs.flatMap((a) => a.webhooks?.filters?.map((f) => f.source) || []));
160
+ for (const source of sources) {
161
+ webhookUrls.push(`http://localhost:${brokerPort}/webhooks/${source}`);
162
+ }
163
+ }
164
+ logger.info(`Scheduler running with ${cronJobs.length} scheduled jobs`);
165
+ // Fire initial run for scheduled agents
166
+ for (const agentConfig of agentConfigs) {
167
+ if (!agentConfig.schedule)
168
+ continue;
169
+ const runner = runners[agentConfig.name];
170
+ logger.info(`Initial run for ${agentConfig.name}`);
171
+ runner.run(buildScheduledPrompt(agentConfig)).catch((err) => {
172
+ logger.error({ err }, `Initial ${agentConfig.name} run failed`);
173
+ });
174
+ }
175
+ // Graceful shutdown
176
+ const shutdown = async () => {
177
+ logger.info("Shutting down scheduler...");
178
+ for (const job of cronJobs) {
179
+ job.stop();
180
+ }
181
+ if (broker) {
182
+ await broker.close();
183
+ logger.info("Broker server stopped");
184
+ }
185
+ logger.info("All cron jobs stopped");
186
+ process.exit(0);
187
+ };
188
+ process.on("SIGINT", shutdown);
189
+ process.on("SIGTERM", shutdown);
190
+ return { cronJobs, runners, broker, webhookRegistry, webhookUrls, statusTracker };
191
+ }
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface PeriodicEvent {
2
+ type: "periodic";
3
+ agentType: string;
4
+ text: string;
5
+ schedule: string;
6
+ timezone: string;
7
+ }
8
+ export interface WebhookEvent {
9
+ type: "webhook";
10
+ agentType: string;
11
+ text: string;
12
+ source: string;
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scheduler/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scheduler/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import type { GlobalConfig, ModelConfig } from "../shared/config.js";
2
+ import type { ScaffoldAgent } from "./scaffold.js";
3
+ import type { AgentDefinition } from "../agents/definitions/schema.js";
4
+ interface ConfigureAgentContext {
5
+ availableRepos: Array<{
6
+ owner: string;
7
+ repo: string;
8
+ fullName: string;
9
+ }>;
10
+ githubUser: string;
11
+ modelConfig: ModelConfig;
12
+ existingAgentNames?: string[];
13
+ }
14
+ interface ConfigureAgentResult {
15
+ agent: ScaffoldAgent;
16
+ secrets: {
17
+ sentryToken?: string;
18
+ githubWebhookSecret?: string;
19
+ };
20
+ usesWebhooks: boolean;
21
+ }
22
+ export declare function configureAgent(definition: AgentDefinition, context: ConfigureAgentContext): Promise<ConfigureAgentResult>;
23
+ export declare function runSetup(): Promise<{
24
+ globalConfig: GlobalConfig;
25
+ agents: ScaffoldAgent[];
26
+ secrets: {
27
+ githubToken: string;
28
+ sentryToken?: string;
29
+ anthropicKey?: string;
30
+ sshKey?: string;
31
+ githubWebhookSecret?: string;
32
+ };
33
+ }>;
34
+ export declare function runAddAgent(opts: {
35
+ definition: AgentDefinition;
36
+ availableRepos: Array<{
37
+ owner: string;
38
+ repo: string;
39
+ fullName: string;
40
+ }>;
41
+ githubUser: string;
42
+ modelConfig: ModelConfig;
43
+ existingAgentNames: string[];
44
+ }): Promise<{
45
+ agent: ScaffoldAgent;
46
+ secrets: {
47
+ sentryToken?: string;
48
+ githubWebhookSecret?: string;
49
+ };
50
+ }>;
51
+ export {};
52
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/setup/prompts.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAe,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,UAAU,qBAAqB;IAC7B,cAAc,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,UAAU,oBAAoB;IAC5B,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,wBAAsB,cAAc,CAClC,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA6I/B;AAsGD,wBAAsB,QAAQ,IAAI,OAAO,CAAC;IACxC,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH,CAAC,CA8RD;AAkHD,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,UAAU,EAAE,eAAe,CAAC;IAC5B,cAAc,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,OAAO,CAAC;IACV,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH,CAAC,CAcD"}