@action-llama/action-llama 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -102
  3. package/dist/agents/container-entry.js +123 -17
  4. package/dist/agents/container-entry.js.map +1 -1
  5. package/dist/agents/container-runner.d.ts +10 -4
  6. package/dist/agents/container-runner.d.ts.map +1 -1
  7. package/dist/agents/container-runner.js +83 -105
  8. package/dist/agents/container-runner.js.map +1 -1
  9. package/dist/agents/prompt.d.ts +2 -0
  10. package/dist/agents/prompt.d.ts.map +1 -1
  11. package/dist/agents/prompt.js +12 -4
  12. package/dist/agents/prompt.js.map +1 -1
  13. package/dist/agents/runner.d.ts +10 -1
  14. package/dist/agents/runner.d.ts.map +1 -1
  15. package/dist/agents/runner.js +60 -8
  16. package/dist/agents/runner.js.map +1 -1
  17. package/dist/cli/commands/{setup.d.ts → cloud-setup.d.ts} +1 -1
  18. package/dist/cli/commands/cloud-setup.d.ts.map +1 -0
  19. package/dist/cli/commands/cloud-setup.js +565 -0
  20. package/dist/cli/commands/cloud-setup.js.map +1 -0
  21. package/dist/cli/commands/cloud-teardown.d.ts +6 -0
  22. package/dist/cli/commands/cloud-teardown.d.ts.map +1 -0
  23. package/dist/cli/commands/cloud-teardown.js +152 -0
  24. package/dist/cli/commands/cloud-teardown.js.map +1 -0
  25. package/dist/cli/commands/console.d.ts.map +1 -1
  26. package/dist/cli/commands/console.js +108 -8
  27. package/dist/cli/commands/console.js.map +1 -1
  28. package/dist/cli/commands/creds.d.ts +2 -0
  29. package/dist/cli/commands/creds.d.ts.map +1 -0
  30. package/dist/cli/commands/creds.js +62 -0
  31. package/dist/cli/commands/creds.js.map +1 -0
  32. package/dist/cli/commands/doctor.d.ts +7 -0
  33. package/dist/cli/commands/doctor.d.ts.map +1 -0
  34. package/dist/cli/commands/doctor.js +405 -0
  35. package/dist/cli/commands/doctor.js.map +1 -0
  36. package/dist/cli/commands/logs.d.ts +1 -0
  37. package/dist/cli/commands/logs.d.ts.map +1 -1
  38. package/dist/cli/commands/logs.js +67 -0
  39. package/dist/cli/commands/logs.js.map +1 -1
  40. package/dist/cli/commands/new.d.ts.map +1 -1
  41. package/dist/cli/commands/new.js +9 -2
  42. package/dist/cli/commands/new.js.map +1 -1
  43. package/dist/cli/commands/run.d.ts +6 -0
  44. package/dist/cli/commands/run.d.ts.map +1 -0
  45. package/dist/cli/commands/run.js +121 -0
  46. package/dist/cli/commands/run.js.map +1 -0
  47. package/dist/cli/commands/start.d.ts +2 -1
  48. package/dist/cli/commands/start.d.ts.map +1 -1
  49. package/dist/cli/commands/start.js +41 -14
  50. package/dist/cli/commands/start.js.map +1 -1
  51. package/dist/cli/commands/status.d.ts +1 -0
  52. package/dist/cli/commands/status.d.ts.map +1 -1
  53. package/dist/cli/commands/status.js +39 -2
  54. package/dist/cli/commands/status.js.map +1 -1
  55. package/dist/cli/main.js +57 -16
  56. package/dist/cli/main.js.map +1 -1
  57. package/dist/credentials/builtins/aws.d.ts +4 -0
  58. package/dist/credentials/builtins/aws.d.ts.map +1 -0
  59. package/dist/credentials/builtins/aws.js +33 -0
  60. package/dist/credentials/builtins/aws.js.map +1 -0
  61. package/dist/credentials/builtins/bugsnag-token.d.ts +4 -0
  62. package/dist/credentials/builtins/bugsnag-token.d.ts.map +1 -0
  63. package/dist/credentials/builtins/bugsnag-token.js +18 -0
  64. package/dist/credentials/builtins/bugsnag-token.js.map +1 -0
  65. package/dist/credentials/builtins/github-webhook-secret.d.ts.map +1 -1
  66. package/dist/credentials/builtins/github-webhook-secret.js +2 -1
  67. package/dist/credentials/builtins/github-webhook-secret.js.map +1 -1
  68. package/dist/credentials/builtins/index.d.ts.map +1 -1
  69. package/dist/credentials/builtins/index.js +10 -0
  70. package/dist/credentials/builtins/index.js.map +1 -1
  71. package/dist/credentials/builtins/netlify-token.d.ts +4 -0
  72. package/dist/credentials/builtins/netlify-token.d.ts.map +1 -0
  73. package/dist/credentials/builtins/netlify-token.js +18 -0
  74. package/dist/credentials/builtins/netlify-token.js.map +1 -0
  75. package/dist/credentials/builtins/openai-key.d.ts +4 -0
  76. package/dist/credentials/builtins/openai-key.d.ts.map +1 -0
  77. package/dist/credentials/builtins/openai-key.js +38 -0
  78. package/dist/credentials/builtins/openai-key.js.map +1 -0
  79. package/dist/credentials/builtins/x-twitter-api.d.ts +4 -0
  80. package/dist/credentials/builtins/x-twitter-api.d.ts.map +1 -0
  81. package/dist/credentials/builtins/x-twitter-api.js +28 -0
  82. package/dist/credentials/builtins/x-twitter-api.js.map +1 -0
  83. package/dist/credentials/prompter.d.ts.map +1 -1
  84. package/dist/credentials/prompter.js +8 -5
  85. package/dist/credentials/prompter.js.map +1 -1
  86. package/dist/docker/cloud-run-runtime.d.ts +61 -0
  87. package/dist/docker/cloud-run-runtime.d.ts.map +1 -0
  88. package/dist/docker/cloud-run-runtime.js +510 -0
  89. package/dist/docker/cloud-run-runtime.js.map +1 -0
  90. package/dist/docker/ecs-runtime.d.ts +73 -0
  91. package/dist/docker/ecs-runtime.d.ts.map +1 -0
  92. package/dist/docker/ecs-runtime.js +596 -0
  93. package/dist/docker/ecs-runtime.js.map +1 -0
  94. package/dist/docker/image.d.ts.map +1 -1
  95. package/dist/docker/image.js +3 -2
  96. package/dist/docker/image.js.map +1 -1
  97. package/dist/docker/local-runtime.d.ts +19 -0
  98. package/dist/docker/local-runtime.d.ts.map +1 -0
  99. package/dist/docker/local-runtime.js +209 -0
  100. package/dist/docker/local-runtime.js.map +1 -0
  101. package/dist/docker/network.d.ts +1 -1
  102. package/dist/docker/network.d.ts.map +1 -1
  103. package/dist/docker/network.js +2 -1
  104. package/dist/docker/network.js.map +1 -1
  105. package/dist/docker/runtime.d.ts +90 -0
  106. package/dist/docker/runtime.d.ts.map +1 -0
  107. package/dist/docker/runtime.js +2 -0
  108. package/dist/docker/runtime.js.map +1 -0
  109. package/dist/gateway/index.d.ts +8 -2
  110. package/dist/gateway/index.d.ts.map +1 -1
  111. package/dist/gateway/index.js +16 -8
  112. package/dist/gateway/index.js.map +1 -1
  113. package/dist/gateway/routes/credentials.d.ts +5 -0
  114. package/dist/gateway/routes/credentials.d.ts.map +1 -0
  115. package/dist/gateway/routes/credentials.js +17 -0
  116. package/dist/gateway/routes/credentials.js.map +1 -0
  117. package/dist/gateway/routes/logs.d.ts +5 -0
  118. package/dist/gateway/routes/logs.d.ts.map +1 -0
  119. package/dist/gateway/routes/logs.js +31 -0
  120. package/dist/gateway/routes/logs.js.map +1 -0
  121. package/dist/gateway/routes/shutdown.d.ts +2 -1
  122. package/dist/gateway/routes/shutdown.d.ts.map +1 -1
  123. package/dist/gateway/routes/shutdown.js +7 -16
  124. package/dist/gateway/routes/shutdown.js.map +1 -1
  125. package/dist/gateway/routes/webhooks.d.ts +2 -1
  126. package/dist/gateway/routes/webhooks.d.ts.map +1 -1
  127. package/dist/gateway/routes/webhooks.js +11 -4
  128. package/dist/gateway/routes/webhooks.js.map +1 -1
  129. package/dist/gateway/types.d.ts +6 -0
  130. package/dist/gateway/types.d.ts.map +1 -0
  131. package/dist/gateway/types.js +2 -0
  132. package/dist/gateway/types.js.map +1 -0
  133. package/dist/scheduler/index.d.ts +3 -2
  134. package/dist/scheduler/index.d.ts.map +1 -1
  135. package/dist/scheduler/index.js +286 -67
  136. package/dist/scheduler/index.js.map +1 -1
  137. package/dist/setup/scaffold.d.ts.map +1 -1
  138. package/dist/setup/scaffold.js +110 -50
  139. package/dist/setup/scaffold.js.map +1 -1
  140. package/dist/setup/validators.d.ts +14 -0
  141. package/dist/setup/validators.d.ts.map +1 -1
  142. package/dist/setup/validators.js +53 -0
  143. package/dist/setup/validators.js.map +1 -1
  144. package/dist/shared/asm-backend.d.ts +25 -0
  145. package/dist/shared/asm-backend.d.ts.map +1 -0
  146. package/dist/shared/asm-backend.js +107 -0
  147. package/dist/shared/asm-backend.js.map +1 -0
  148. package/dist/shared/aws-constants.d.ts +55 -0
  149. package/dist/shared/aws-constants.d.ts.map +1 -0
  150. package/dist/shared/aws-constants.js +55 -0
  151. package/dist/shared/aws-constants.js.map +1 -0
  152. package/dist/shared/config.d.ts +25 -5
  153. package/dist/shared/config.d.ts.map +1 -1
  154. package/dist/shared/config.js +15 -22
  155. package/dist/shared/config.js.map +1 -1
  156. package/dist/shared/credential-backend.d.ts +28 -0
  157. package/dist/shared/credential-backend.d.ts.map +1 -0
  158. package/dist/shared/credential-backend.js +2 -0
  159. package/dist/shared/credential-backend.js.map +1 -0
  160. package/dist/shared/credentials.d.ts +42 -4
  161. package/dist/shared/credentials.d.ts.map +1 -1
  162. package/dist/shared/credentials.js +83 -6
  163. package/dist/shared/credentials.js.map +1 -1
  164. package/dist/shared/filesystem-backend.d.ts +18 -0
  165. package/dist/shared/filesystem-backend.d.ts.map +1 -0
  166. package/dist/shared/filesystem-backend.js +86 -0
  167. package/dist/shared/filesystem-backend.js.map +1 -0
  168. package/dist/shared/gsm-backend.d.ts +35 -0
  169. package/dist/shared/gsm-backend.d.ts.map +1 -0
  170. package/dist/shared/gsm-backend.js +208 -0
  171. package/dist/shared/gsm-backend.js.map +1 -0
  172. package/dist/shared/remote.d.ts +11 -0
  173. package/dist/shared/remote.d.ts.map +1 -0
  174. package/dist/shared/remote.js +29 -0
  175. package/dist/shared/remote.js.map +1 -0
  176. package/dist/tui/App.d.ts.map +1 -1
  177. package/dist/tui/App.js +13 -4
  178. package/dist/tui/App.js.map +1 -1
  179. package/dist/tui/status-tracker.d.ts +3 -2
  180. package/dist/tui/status-tracker.d.ts.map +1 -1
  181. package/dist/tui/status-tracker.js.map +1 -1
  182. package/dist/webhooks/definitions/github.js +1 -1
  183. package/dist/webhooks/definitions/github.js.map +1 -1
  184. package/dist/webhooks/definitions/sentry.js +1 -1
  185. package/dist/webhooks/definitions/sentry.js.map +1 -1
  186. package/dist/webhooks/providers/github.d.ts +1 -1
  187. package/dist/webhooks/providers/github.d.ts.map +1 -1
  188. package/dist/webhooks/providers/github.js +13 -9
  189. package/dist/webhooks/providers/github.js.map +1 -1
  190. package/dist/webhooks/providers/sentry.d.ts +1 -1
  191. package/dist/webhooks/providers/sentry.d.ts.map +1 -1
  192. package/dist/webhooks/providers/sentry.js +12 -9
  193. package/dist/webhooks/providers/sentry.js.map +1 -1
  194. package/dist/webhooks/registry.d.ts +1 -1
  195. package/dist/webhooks/registry.d.ts.map +1 -1
  196. package/dist/webhooks/registry.js +20 -13
  197. package/dist/webhooks/registry.js.map +1 -1
  198. package/dist/webhooks/types.d.ts +16 -6
  199. package/dist/webhooks/types.d.ts.map +1 -1
  200. package/docker/Dockerfile +4 -1
  201. package/package.json +10 -1
  202. package/dist/cli/commands/setup.d.ts.map +0 -1
  203. package/dist/cli/commands/setup.js +0 -50
  204. package/dist/cli/commands/setup.js.map +0 -1
  205. package/dist/docker/container.d.ts +0 -19
  206. package/dist/docker/container.d.ts.map +0 -1
  207. package/dist/docker/container.js +0 -73
  208. package/dist/docker/container.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asm-backend.js","sourceRoot":"","sources":["../../src/shared/asm-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Centralized AWS resource naming constants.
3
+ *
4
+ * Every AWS resource name that Action Llama creates or references
5
+ * should be derived from this file to prevent inconsistencies.
6
+ */
7
+ export declare const AWS_CONSTANTS: {
8
+ /** Default prefix for Secrets Manager secret names */
9
+ DEFAULT_SECRET_PREFIX: string;
10
+ /** CloudWatch log group for ECS tasks */
11
+ LOG_GROUP: string;
12
+ /** ECS `startedBy` tag for filtering our tasks */
13
+ STARTED_BY: string;
14
+ /** ECS task family / Cloud Run job name for an agent */
15
+ agentFamily: (agentName: string) => string;
16
+ /** Strip the `al-` prefix to recover the agent name */
17
+ agentNameFromFamily: (family: string) => string;
18
+ /** Per-agent IAM task role name */
19
+ taskRoleName: (agentName: string) => string;
20
+ /** Per-agent GCP service account name */
21
+ serviceAccountName: (agentName: string) => string;
22
+ /** Per-agent GCP service account email */
23
+ serviceAccountEmail: (agentName: string, gcpProject: string) => string;
24
+ /** CodeBuild project name for image builds */
25
+ CODEBUILD_PROJECT: string;
26
+ /** CodeBuild IAM role name */
27
+ CODEBUILD_ROLE: string;
28
+ /** ECS execution role name (default) */
29
+ EXECUTION_ROLE: string;
30
+ /** ECS default task role name */
31
+ DEFAULT_TASK_ROLE: string;
32
+ /** Default ECR repository name */
33
+ DEFAULT_ECR_REPO: string;
34
+ /** Default ECS cluster name */
35
+ DEFAULT_CLUSTER: string;
36
+ /** S3 bucket name for CodeBuild source */
37
+ buildBucket: (accountId: string, region: string) => string;
38
+ /** S3 key prefix for build artifacts */
39
+ BUILD_S3_PREFIX: string;
40
+ /** Docker container name for a local agent run */
41
+ containerName: (agentName: string, runId: string) => string;
42
+ /** Docker container name filter prefix */
43
+ CONTAINER_FILTER: string;
44
+ /** Docker network name */
45
+ NETWORK_NAME: string;
46
+ /** Default base Docker image */
47
+ DEFAULT_IMAGE: string;
48
+ /** Agent-specific Docker image tag */
49
+ agentImage: (agentName: string) => string;
50
+ /** Temp directory prefix for credential staging */
51
+ CREDS_TEMP_PREFIX: string;
52
+ /** Default GCP Cloud Run service account */
53
+ defaultGcpRunner: (gcpProject: string) => string;
54
+ };
55
+ //# sourceMappingURL=aws-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-constants.d.ts","sourceRoot":"","sources":["../../src/shared/aws-constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa;IACxB,sDAAsD;;IAGtD,yCAAyC;;IAGzC,kDAAkD;;IAGlD,wDAAwD;6BAC/B,MAAM;IAE/B,uDAAuD;kCACzB,MAAM;IAEpC,mCAAmC;8BACT,MAAM;IAEhC,yCAAyC;oCACT,MAAM;IAEtC,0CAA0C;qCACT,MAAM,cAAc,MAAM;IAG3D,8CAA8C;;IAG9C,8BAA8B;;IAG9B,wCAAwC;;IAGxC,iCAAiC;;IAGjC,kCAAkC;;IAGlC,+BAA+B;;IAG/B,0CAA0C;6BACjB,MAAM,UAAU,MAAM;IAE/C,wCAAwC;;IAGxC,kDAAkD;+BACvB,MAAM,SAAS,MAAM;IAEhD,0CAA0C;;IAG1C,0BAA0B;;IAG1B,gCAAgC;;IAGhC,sCAAsC;4BACd,MAAM;IAE9B,mDAAmD;;IAGnD,4CAA4C;mCACb,MAAM;CAC0B,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Centralized AWS resource naming constants.
3
+ *
4
+ * Every AWS resource name that Action Llama creates or references
5
+ * should be derived from this file to prevent inconsistencies.
6
+ */
7
+ export const AWS_CONSTANTS = {
8
+ /** Default prefix for Secrets Manager secret names */
9
+ DEFAULT_SECRET_PREFIX: "action-llama",
10
+ /** CloudWatch log group for ECS tasks */
11
+ LOG_GROUP: "/ecs/action-llama",
12
+ /** ECS `startedBy` tag for filtering our tasks */
13
+ STARTED_BY: "action-llama",
14
+ /** ECS task family / Cloud Run job name for an agent */
15
+ agentFamily: (agentName) => `al-${agentName}`,
16
+ /** Strip the `al-` prefix to recover the agent name */
17
+ agentNameFromFamily: (family) => family.startsWith("al-") ? family.slice(3) : family,
18
+ /** Per-agent IAM task role name */
19
+ taskRoleName: (agentName) => `al-${agentName}-task-role`,
20
+ /** Per-agent GCP service account name */
21
+ serviceAccountName: (agentName) => `al-${agentName}`,
22
+ /** Per-agent GCP service account email */
23
+ serviceAccountEmail: (agentName, gcpProject) => `al-${agentName}@${gcpProject}.iam.gserviceaccount.com`,
24
+ /** CodeBuild project name for image builds */
25
+ CODEBUILD_PROJECT: "al-image-builder",
26
+ /** CodeBuild IAM role name */
27
+ CODEBUILD_ROLE: "al-codebuild-role",
28
+ /** ECS execution role name (default) */
29
+ EXECUTION_ROLE: "al-ecs-execution-role",
30
+ /** ECS default task role name */
31
+ DEFAULT_TASK_ROLE: "al-default-task-role",
32
+ /** Default ECR repository name */
33
+ DEFAULT_ECR_REPO: "al-images",
34
+ /** Default ECS cluster name */
35
+ DEFAULT_CLUSTER: "al-cluster",
36
+ /** S3 bucket name for CodeBuild source */
37
+ buildBucket: (accountId, region) => `al-builds-${accountId}-${region}`,
38
+ /** S3 key prefix for build artifacts */
39
+ BUILD_S3_PREFIX: "al-builds",
40
+ /** Docker container name for a local agent run */
41
+ containerName: (agentName, runId) => `al-${agentName}-${runId}`,
42
+ /** Docker container name filter prefix */
43
+ CONTAINER_FILTER: "al-",
44
+ /** Docker network name */
45
+ NETWORK_NAME: "al-net",
46
+ /** Default base Docker image */
47
+ DEFAULT_IMAGE: "al-agent:latest",
48
+ /** Agent-specific Docker image tag */
49
+ agentImage: (agentName) => `al-${agentName}:latest`,
50
+ /** Temp directory prefix for credential staging */
51
+ CREDS_TEMP_PREFIX: "al-creds-",
52
+ /** Default GCP Cloud Run service account */
53
+ defaultGcpRunner: (gcpProject) => `al-runner@${gcpProject}.iam.gserviceaccount.com`,
54
+ };
55
+ //# sourceMappingURL=aws-constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-constants.js","sourceRoot":"","sources":["../../src/shared/aws-constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,sDAAsD;IACtD,qBAAqB,EAAE,cAAc;IAErC,yCAAyC;IACzC,SAAS,EAAE,mBAAmB;IAE9B,kDAAkD;IAClD,UAAU,EAAE,cAAc;IAE1B,wDAAwD;IACxD,WAAW,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,MAAM,SAAS,EAAE;IAErD,uDAAuD;IACvD,mBAAmB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;IAE5F,mCAAmC;IACnC,YAAY,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,MAAM,SAAS,YAAY;IAEhE,yCAAyC;IACzC,kBAAkB,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,MAAM,SAAS,EAAE;IAE5D,0CAA0C;IAC1C,mBAAmB,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAE,EAAE,CAC7D,MAAM,SAAS,IAAI,UAAU,0BAA0B;IAEzD,8CAA8C;IAC9C,iBAAiB,EAAE,kBAAkB;IAErC,8BAA8B;IAC9B,cAAc,EAAE,mBAAmB;IAEnC,wCAAwC;IACxC,cAAc,EAAE,uBAAuB;IAEvC,iCAAiC;IACjC,iBAAiB,EAAE,sBAAsB;IAEzC,kCAAkC;IAClC,gBAAgB,EAAE,WAAW;IAE7B,+BAA+B;IAC/B,eAAe,EAAE,YAAY;IAE7B,0CAA0C;IAC1C,WAAW,EAAE,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE,CAAC,aAAa,SAAS,IAAI,MAAM,EAAE;IAEtF,wCAAwC;IACxC,eAAe,EAAE,WAAW;IAE5B,kDAAkD;IAClD,aAAa,EAAE,CAAC,SAAiB,EAAE,KAAa,EAAE,EAAE,CAAC,MAAM,SAAS,IAAI,KAAK,EAAE;IAE/E,0CAA0C;IAC1C,gBAAgB,EAAE,KAAK;IAEvB,0BAA0B;IAC1B,YAAY,EAAE,QAAQ;IAEtB,gCAAgC;IAChC,aAAa,EAAE,iBAAiB;IAEhC,sCAAsC;IACtC,UAAU,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,MAAM,SAAS,SAAS;IAE3D,mDAAmD;IACnD,iBAAiB,EAAE,WAAW;IAE9B,4CAA4C;IAC5C,gBAAgB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,aAAa,UAAU,0BAA0B;CAC5B,CAAC"}
@@ -1,17 +1,34 @@
1
- import type { WebhookTriggerConfig } from "../webhooks/types.js";
1
+ import type { WebhookTrigger } from "../webhooks/types.js";
2
2
  export interface ModelConfig {
3
3
  provider: string;
4
4
  model: string;
5
5
  thinkingLevel: "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
6
6
  authType: "api_key" | "oauth_token" | "pi_auth";
7
7
  }
8
- export interface DockerConfig {
8
+ export interface LocalConfig {
9
9
  enabled: boolean;
10
10
  image?: string;
11
11
  memory?: string;
12
12
  cpus?: number;
13
13
  timeout?: number;
14
14
  }
15
+ export interface CloudConfig {
16
+ provider: "cloud-run" | "ecs";
17
+ gcpProject?: string;
18
+ region?: string;
19
+ artifactRegistry?: string;
20
+ serviceAccount?: string;
21
+ secretPrefix?: string;
22
+ awsRegion?: string;
23
+ ecsCluster?: string;
24
+ ecrRepository?: string;
25
+ executionRoleArn?: string;
26
+ taskRoleArn?: string;
27
+ subnets?: string[];
28
+ securityGroups?: string[];
29
+ awsSecretPrefix?: string;
30
+ buildBucket?: string;
31
+ }
15
32
  export interface GatewayConfig {
16
33
  port?: number;
17
34
  }
@@ -19,17 +36,20 @@ export interface WebhooksGlobalConfig {
19
36
  secretCredentials?: Record<string, string>;
20
37
  }
21
38
  export interface GlobalConfig {
22
- docker?: DockerConfig;
39
+ model?: ModelConfig;
40
+ local?: LocalConfig;
41
+ cloud?: CloudConfig;
23
42
  gateway?: GatewayConfig;
24
43
  webhooks?: WebhooksGlobalConfig;
44
+ maxReruns?: number;
45
+ maxTriggerDepth?: number;
25
46
  }
26
47
  export interface AgentConfig {
27
48
  name: string;
28
49
  credentials: string[];
29
50
  model: ModelConfig;
30
51
  schedule?: string;
31
- repos: string[];
32
- webhooks?: WebhookTriggerConfig;
52
+ webhooks?: WebhookTrigger[];
33
53
  params?: Record<string, unknown>;
34
54
  }
35
55
  export declare function loadGlobalConfig(projectPath: string): GlobalConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACvE,QAAQ,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAID,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAalE;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAoBnF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAM7D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB5D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACvE,QAAQ,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,WAAW,GAAG,KAAK,CAAC;IAE9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAID,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAOlE;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAqBnF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAM7D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB5D"}
@@ -3,40 +3,33 @@ import { resolve } from "path";
3
3
  import { parse as parseTOML } from "smol-toml";
4
4
  // --- Loaders ---
5
5
  export function loadGlobalConfig(projectPath) {
6
- const configPath = resolve(projectPath, "config.json");
6
+ const configPath = resolve(projectPath, "config.toml");
7
7
  if (!existsSync(configPath)) {
8
8
  return {};
9
9
  }
10
10
  const raw = readFileSync(configPath, "utf-8");
11
- const parsed = JSON.parse(raw);
12
- // Backward compat: read old "broker" field if "gateway" is missing
13
- if (!parsed.gateway && parsed.broker) {
14
- parsed.gateway = parsed.broker;
15
- delete parsed.broker;
16
- }
17
- return parsed;
11
+ return parseTOML(raw);
18
12
  }
19
13
  export function loadAgentConfig(projectPath, agentName) {
20
14
  const agentDir = resolve(projectPath, agentName);
21
15
  const tomlPath = resolve(agentDir, "agent-config.toml");
22
- const jsonPath = resolve(agentDir, "config.json");
23
- let parsed;
24
- if (existsSync(tomlPath)) {
25
- const raw = readFileSync(tomlPath, "utf-8");
26
- parsed = parseTOML(raw);
27
- }
28
- else if (existsSync(jsonPath)) {
29
- const raw = readFileSync(jsonPath, "utf-8");
30
- parsed = JSON.parse(raw);
31
- }
32
- else {
33
- throw new Error(`Agent config not found at ${tomlPath} or ${jsonPath}.`);
16
+ if (!existsSync(tomlPath)) {
17
+ throw new Error(`Agent config not found at ${tomlPath}.`);
34
18
  }
19
+ const raw = readFileSync(tomlPath, "utf-8");
20
+ const parsed = parseTOML(raw);
35
21
  parsed.name = agentName;
22
+ // Fall back to global [model] if agent doesn't define its own
23
+ if (!parsed.model) {
24
+ const global = loadGlobalConfig(projectPath);
25
+ if (global.model) {
26
+ parsed.model = global.model;
27
+ }
28
+ }
36
29
  return parsed;
37
30
  }
38
31
  export function validateAgentConfig(config) {
39
- if (!config.schedule && !config.webhooks) {
32
+ if (!config.schedule && (!config.webhooks || config.webhooks.length === 0)) {
40
33
  throw new Error(`Agent "${config.name}" must have a schedule, webhooks, or both.`);
41
34
  }
42
35
  }
@@ -53,7 +46,7 @@ export function discoverAgents(projectPath) {
53
46
  const entryPath = resolve(projectPath, entry);
54
47
  if (!statSync(entryPath).isDirectory())
55
48
  continue;
56
- if (existsSync(resolve(entryPath, "agent-config.toml")) || existsSync(resolve(entryPath, "config.json"))) {
49
+ if (existsSync(resolve(entryPath, "agent-config.toml"))) {
57
50
  agents.push(entry);
58
51
  }
59
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAqE/C,kBAAkB;AAElB,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC,GAAG,CAA4B,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,SAAiB;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAExD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAA2B,CAAC;IACxD,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;IAExB,8DAA8D;IAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CACb,UAAU,MAAM,CAAC,IAAI,4CAA4C,CAClE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QAClC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YAAE,SAAS;QACjD,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Abstract credential backend interface.
3
+ * Implementations provide read/write/list/exists for credential storage.
4
+ * The filesystem backend wraps the existing ~/.action-llama-credentials/ layout.
5
+ * Remote backends (e.g. Google Secret Manager) implement the same interface.
6
+ */
7
+ export interface CredentialBackend {
8
+ /** Read a single credential field. Returns undefined if not found. */
9
+ read(type: string, instance: string, field: string): Promise<string | undefined>;
10
+ /** Write a single credential field. */
11
+ write(type: string, instance: string, field: string, value: string): Promise<void>;
12
+ /** List all credential entries (type/instance/field triples). */
13
+ list(): Promise<CredentialEntry[]>;
14
+ /** Check if a credential instance exists (has at least one field). */
15
+ exists(type: string, instance: string): Promise<boolean>;
16
+ /** Read all fields for a credential instance. Returns undefined if instance doesn't exist. */
17
+ readAll(type: string, instance: string): Promise<Record<string, string> | undefined>;
18
+ /** Write all fields for a credential instance. */
19
+ writeAll(type: string, instance: string, fields: Record<string, string>): Promise<void>;
20
+ /** List all instances of a credential type. */
21
+ listInstances(type: string): Promise<string[]>;
22
+ }
23
+ export interface CredentialEntry {
24
+ type: string;
25
+ instance: string;
26
+ field: string;
27
+ }
28
+ //# sourceMappingURL=credential-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-backend.d.ts","sourceRoot":"","sources":["../../src/shared/credential-backend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEjF,uCAAuC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnF,iEAAiE;IACjE,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAEnC,sEAAsE;IACtE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzD,8FAA8F;IAC9F,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC;IAErF,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExF,+CAA+C;IAC/C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=credential-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-backend.js","sourceRoot":"","sources":["../../src/shared/credential-backend.ts"],"names":[],"mappings":""}
@@ -1,3 +1,16 @@
1
+ import type { CredentialBackend } from "./credential-backend.js";
2
+ /**
3
+ * Get the current default credential backend.
4
+ */
5
+ export declare function getDefaultBackend(): CredentialBackend;
6
+ /**
7
+ * Set the default credential backend (e.g. when using --remote).
8
+ */
9
+ export declare function setDefaultBackend(backend: CredentialBackend): void;
10
+ /**
11
+ * Reset the default backend to the local filesystem.
12
+ */
13
+ export declare function resetDefaultBackend(): void;
1
14
  /**
2
15
  * Parse a credential reference "type:instance" into its parts.
3
16
  * If no instance is specified, defaults to "default".
@@ -11,28 +24,53 @@ export declare function parseCredentialRef(ref: string): {
11
24
  */
12
25
  export declare function credentialDir(type: string, instance: string): string;
13
26
  /**
14
- * Load a single field from a credential instance.
27
+ * Load a single field from a credential instance (sync, local filesystem).
15
28
  */
16
29
  export declare function loadCredentialField(type: string, instance: string, field: string): string | undefined;
17
30
  /**
18
- * Load all fields from a credential instance.
31
+ * Load all fields from a credential instance (sync, local filesystem).
19
32
  * Returns undefined if the instance directory does not exist.
20
33
  */
21
34
  export declare function loadCredentialFields(type: string, instance: string): Record<string, string> | undefined;
22
35
  /**
23
- * Write a single field to a credential instance.
36
+ * Write a single field to a credential instance (sync, local filesystem).
24
37
  */
25
38
  export declare function writeCredentialField(type: string, instance: string, field: string, value: string): void;
26
39
  /**
27
- * Write all fields to a credential instance.
40
+ * Write all fields to a credential instance (sync, local filesystem).
28
41
  */
29
42
  export declare function writeCredentialFields(type: string, instance: string, fields: Record<string, string>): void;
30
43
  /**
31
44
  * Check if a credential instance exists (has at least one field file).
32
45
  */
33
46
  export declare function credentialExists(type: string, instance: string): boolean;
47
+ /**
48
+ * List all instances of a credential type.
49
+ * Returns an array of instance names (subdirectory names).
50
+ */
51
+ export declare function listCredentialInstances(type: string): string[];
34
52
  /**
35
53
  * Require that a credential instance exists. Throws if missing.
36
54
  */
37
55
  export declare function requireCredentialRef(ref: string): void;
56
+ /**
57
+ * Load a credential field via the default backend (async).
58
+ */
59
+ export declare function backendLoadField(type: string, instance: string, field: string): Promise<string | undefined>;
60
+ /**
61
+ * Load all fields for a credential instance via the default backend (async).
62
+ */
63
+ export declare function backendLoadFields(type: string, instance: string): Promise<Record<string, string> | undefined>;
64
+ /**
65
+ * Check if a credential instance exists via the default backend (async).
66
+ */
67
+ export declare function backendCredentialExists(type: string, instance: string): Promise<boolean>;
68
+ /**
69
+ * List instances of a credential type via the default backend (async).
70
+ */
71
+ export declare function backendListInstances(type: string): Promise<string[]>;
72
+ /**
73
+ * Require that a credential instance exists via the default backend (async).
74
+ */
75
+ export declare function backendRequireCredentialRef(ref: string): Promise<void>;
38
76
  //# sourceMappingURL=credentials.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/shared/credentials.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAIlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAUvG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIvG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAI1G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIxE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOtD"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/shared/credentials.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjE;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAErD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAIlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpE;AAKD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAUvG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIvG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAI1G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIxE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAU9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOtD;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEjH;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAEnH;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9F;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE1E;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5E"}
@@ -1,6 +1,27 @@
1
- import { readFileSync, existsSync, writeFileSync, mkdirSync, readdirSync } from "fs";
1
+ import { readFileSync, existsSync, writeFileSync, mkdirSync, readdirSync, statSync } from "fs";
2
2
  import { resolve } from "path";
3
3
  import { CREDENTIALS_DIR } from "./paths.js";
4
+ import { FilesystemBackend } from "./filesystem-backend.js";
5
+ // Default backend instance (local filesystem)
6
+ let _defaultBackend = new FilesystemBackend();
7
+ /**
8
+ * Get the current default credential backend.
9
+ */
10
+ export function getDefaultBackend() {
11
+ return _defaultBackend;
12
+ }
13
+ /**
14
+ * Set the default credential backend (e.g. when using --remote).
15
+ */
16
+ export function setDefaultBackend(backend) {
17
+ _defaultBackend = backend;
18
+ }
19
+ /**
20
+ * Reset the default backend to the local filesystem.
21
+ */
22
+ export function resetDefaultBackend() {
23
+ _defaultBackend = new FilesystemBackend();
24
+ }
4
25
  /**
5
26
  * Parse a credential reference "type:instance" into its parts.
6
27
  * If no instance is specified, defaults to "default".
@@ -17,8 +38,10 @@ export function parseCredentialRef(ref) {
17
38
  export function credentialDir(type, instance) {
18
39
  return resolve(CREDENTIALS_DIR, type, instance);
19
40
  }
41
+ // --- Synchronous filesystem functions (preserved for backward compatibility) ---
42
+ // These operate directly on the local filesystem regardless of the default backend.
20
43
  /**
21
- * Load a single field from a credential instance.
44
+ * Load a single field from a credential instance (sync, local filesystem).
22
45
  */
23
46
  export function loadCredentialField(type, instance, field) {
24
47
  const filepath = resolve(credentialDir(type, instance), field);
@@ -27,7 +50,7 @@ export function loadCredentialField(type, instance, field) {
27
50
  return readFileSync(filepath, "utf-8").trim();
28
51
  }
29
52
  /**
30
- * Load all fields from a credential instance.
53
+ * Load all fields from a credential instance (sync, local filesystem).
31
54
  * Returns undefined if the instance directory does not exist.
32
55
  */
33
56
  export function loadCredentialFields(type, instance) {
@@ -42,7 +65,7 @@ export function loadCredentialFields(type, instance) {
42
65
  return Object.keys(result).length > 0 ? result : undefined;
43
66
  }
44
67
  /**
45
- * Write a single field to a credential instance.
68
+ * Write a single field to a credential instance (sync, local filesystem).
46
69
  */
47
70
  export function writeCredentialField(type, instance, field, value) {
48
71
  const dir = credentialDir(type, instance);
@@ -50,7 +73,7 @@ export function writeCredentialField(type, instance, field, value) {
50
73
  writeFileSync(resolve(dir, field), value + "\n", { mode: 0o600 });
51
74
  }
52
75
  /**
53
- * Write all fields to a credential instance.
76
+ * Write all fields to a credential instance (sync, local filesystem).
54
77
  */
55
78
  export function writeCredentialFields(type, instance, fields) {
56
79
  for (const [field, value] of Object.entries(fields)) {
@@ -66,13 +89,67 @@ export function credentialExists(type, instance) {
66
89
  return false;
67
90
  return readdirSync(dir).length > 0;
68
91
  }
92
+ /**
93
+ * List all instances of a credential type.
94
+ * Returns an array of instance names (subdirectory names).
95
+ */
96
+ export function listCredentialInstances(type) {
97
+ const dir = resolve(CREDENTIALS_DIR, type);
98
+ if (!existsSync(dir))
99
+ return [];
100
+ return readdirSync(dir).filter((entry) => {
101
+ try {
102
+ return statSync(resolve(dir, entry)).isDirectory();
103
+ }
104
+ catch {
105
+ return false;
106
+ }
107
+ });
108
+ }
69
109
  /**
70
110
  * Require that a credential instance exists. Throws if missing.
71
111
  */
72
112
  export function requireCredentialRef(ref) {
73
113
  const { type, instance } = parseCredentialRef(ref);
74
114
  if (!credentialExists(type, instance)) {
75
- throw new Error(`Credential "${ref}" not found at ${credentialDir(type, instance)}. Run 'al setup' to configure it.`);
115
+ throw new Error(`Credential "${ref}" not found at ${credentialDir(type, instance)}. Run 'al doctor' to configure it.`);
116
+ }
117
+ }
118
+ // --- Async backend-aware functions ---
119
+ // These delegate to the default backend (local filesystem or remote).
120
+ // Use these in code paths that support --remote.
121
+ /**
122
+ * Load a credential field via the default backend (async).
123
+ */
124
+ export async function backendLoadField(type, instance, field) {
125
+ return _defaultBackend.read(type, instance, field);
126
+ }
127
+ /**
128
+ * Load all fields for a credential instance via the default backend (async).
129
+ */
130
+ export async function backendLoadFields(type, instance) {
131
+ return _defaultBackend.readAll(type, instance);
132
+ }
133
+ /**
134
+ * Check if a credential instance exists via the default backend (async).
135
+ */
136
+ export async function backendCredentialExists(type, instance) {
137
+ return _defaultBackend.exists(type, instance);
138
+ }
139
+ /**
140
+ * List instances of a credential type via the default backend (async).
141
+ */
142
+ export async function backendListInstances(type) {
143
+ return _defaultBackend.listInstances(type);
144
+ }
145
+ /**
146
+ * Require that a credential instance exists via the default backend (async).
147
+ */
148
+ export async function backendRequireCredentialRef(ref) {
149
+ const { type, instance } = parseCredentialRef(ref);
150
+ const exists = await _defaultBackend.exists(type, instance);
151
+ if (!exists) {
152
+ throw new Error(`Credential "${ref}" not found. Run 'al doctor' to configure it.`);
76
153
  }
77
154
  }
78
155
  //# sourceMappingURL=credentials.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/shared/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/shared/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { CredentialBackend, CredentialEntry } from "./credential-backend.js";
2
+ /**
3
+ * Filesystem credential backend.
4
+ * Stores credentials at ~/.action-llama-credentials/<type>/<instance>/<field>.
5
+ * This is the default local-first backend.
6
+ */
7
+ export declare class FilesystemBackend implements CredentialBackend {
8
+ private baseDir;
9
+ constructor(baseDir?: string);
10
+ read(type: string, instance: string, field: string): Promise<string | undefined>;
11
+ write(type: string, instance: string, field: string, value: string): Promise<void>;
12
+ list(): Promise<CredentialEntry[]>;
13
+ exists(type: string, instance: string): Promise<boolean>;
14
+ readAll(type: string, instance: string): Promise<Record<string, string> | undefined>;
15
+ writeAll(type: string, instance: string, fields: Record<string, string>): Promise<void>;
16
+ listInstances(type: string): Promise<string[]>;
17
+ }
18
+ //# sourceMappingURL=filesystem-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-backend.d.ts","sourceRoot":"","sources":["../../src/shared/filesystem-backend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAElF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,iBAAiB;IACzD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAItB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAMhF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlF,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAuBlC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMxD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAapF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAKrD"}