@ai-support-agent/cli 0.1.35 → 0.2.0-beta.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 (91) hide show
  1. package/dist/agent-config-sync.d.ts.map +1 -1
  2. package/dist/agent-config-sync.js +9 -1
  3. package/dist/agent-config-sync.js.map +1 -1
  4. package/dist/agent-transport.d.ts.map +1 -1
  5. package/dist/agent-transport.js +1 -0
  6. package/dist/agent-transport.js.map +1 -1
  7. package/dist/api-client.d.ts +6 -1
  8. package/dist/api-client.d.ts.map +1 -1
  9. package/dist/api-client.js +9 -0
  10. package/dist/api-client.js.map +1 -1
  11. package/dist/chat-mode-detector.d.ts +2 -1
  12. package/dist/chat-mode-detector.d.ts.map +1 -1
  13. package/dist/chat-mode-detector.js +21 -4
  14. package/dist/chat-mode-detector.js.map +1 -1
  15. package/dist/cli/ecs-publish-command.d.ts +49 -0
  16. package/dist/cli/ecs-publish-command.d.ts.map +1 -0
  17. package/dist/cli/ecs-publish-command.js +214 -0
  18. package/dist/cli/ecs-publish-command.js.map +1 -0
  19. package/dist/commands/chat-executor.d.ts +1 -0
  20. package/dist/commands/chat-executor.d.ts.map +1 -1
  21. package/dist/commands/chat-executor.js +40 -19
  22. package/dist/commands/chat-executor.js.map +1 -1
  23. package/dist/commands/codex-command.d.ts +7 -0
  24. package/dist/commands/codex-command.d.ts.map +1 -0
  25. package/dist/commands/codex-command.js +34 -0
  26. package/dist/commands/codex-command.js.map +1 -0
  27. package/dist/commands/codex-runner.d.ts +37 -0
  28. package/dist/commands/codex-runner.d.ts.map +1 -0
  29. package/dist/commands/codex-runner.js +264 -0
  30. package/dist/commands/codex-runner.js.map +1 -0
  31. package/dist/commands/index.d.ts +1 -0
  32. package/dist/commands/index.d.ts.map +1 -1
  33. package/dist/commands/index.js +84 -3
  34. package/dist/commands/index.js.map +1 -1
  35. package/dist/constants.d.ts +32 -0
  36. package/dist/constants.d.ts.map +1 -1
  37. package/dist/constants.js +40 -3
  38. package/dist/constants.js.map +1 -1
  39. package/dist/ecs/aws-arn.d.ts +30 -0
  40. package/dist/ecs/aws-arn.d.ts.map +1 -0
  41. package/dist/ecs/aws-arn.js +36 -0
  42. package/dist/ecs/aws-arn.js.map +1 -0
  43. package/dist/ecs/ecr-publisher.d.ts +49 -0
  44. package/dist/ecs/ecr-publisher.d.ts.map +1 -0
  45. package/dist/ecs/ecr-publisher.js +118 -0
  46. package/dist/ecs/ecr-publisher.js.map +1 -0
  47. package/dist/ecs/ecs-launcher.d.ts +25 -0
  48. package/dist/ecs/ecs-launcher.d.ts.map +1 -0
  49. package/dist/ecs/ecs-launcher.js +157 -0
  50. package/dist/ecs/ecs-launcher.js.map +1 -0
  51. package/dist/ecs/launcher-capability.d.ts +26 -0
  52. package/dist/ecs/launcher-capability.d.ts.map +1 -0
  53. package/dist/ecs/launcher-capability.js +86 -0
  54. package/dist/ecs/launcher-capability.js.map +1 -0
  55. package/dist/ecs/task-definition-registrar.d.ts +39 -0
  56. package/dist/ecs/task-definition-registrar.d.ts.map +1 -0
  57. package/dist/ecs/task-definition-registrar.js +80 -0
  58. package/dist/ecs/task-definition-registrar.js.map +1 -0
  59. package/dist/index.js +17 -1
  60. package/dist/index.js.map +1 -1
  61. package/dist/locales/en.json +18 -0
  62. package/dist/locales/ja.json +18 -0
  63. package/dist/oneshot-runner.d.ts +38 -0
  64. package/dist/oneshot-runner.d.ts.map +1 -0
  65. package/dist/oneshot-runner.js +166 -0
  66. package/dist/oneshot-runner.js.map +1 -0
  67. package/dist/project-agent.d.ts.map +1 -1
  68. package/dist/project-agent.js +13 -1
  69. package/dist/project-agent.js.map +1 -1
  70. package/dist/types/chat.d.ts +1 -0
  71. package/dist/types/chat.d.ts.map +1 -1
  72. package/dist/types/command.d.ts +10 -1
  73. package/dist/types/command.d.ts.map +1 -1
  74. package/dist/types/command.js.map +1 -1
  75. package/dist/types/config.d.ts +15 -1
  76. package/dist/types/config.d.ts.map +1 -1
  77. package/dist/types/ecs.d.ts +71 -0
  78. package/dist/types/ecs.d.ts.map +1 -0
  79. package/dist/types/ecs.js +12 -0
  80. package/dist/types/ecs.js.map +1 -0
  81. package/dist/types/index.d.ts +1 -0
  82. package/dist/types/index.d.ts.map +1 -1
  83. package/dist/types/index.js +1 -0
  84. package/dist/types/index.js.map +1 -1
  85. package/dist/types/project.d.ts +7 -0
  86. package/dist/types/project.d.ts.map +1 -1
  87. package/dist/types/server.d.ts +7 -1
  88. package/dist/types/server.d.ts.map +1 -1
  89. package/docker/Dockerfile +1 -1
  90. package/docker/entrypoint.sh +9 -0
  91. package/package.json +7 -1
package/dist/constants.js CHANGED
@@ -33,9 +33,9 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.LOG_RESULT_LIMIT = exports.LOG_PAYLOAD_LIMIT = exports.LOG_MESSAGE_LIMIT = exports.CHAT_MAX_ATTEMPTS = exports.CHAT_RETRY_DELAY_MS = exports.DEFAULT_APPSYNC_TIMEOUT_MS = exports.CLAUDE_DETECT_TIMEOUT_MS = exports.CHAT_SIGKILL_DELAY = exports.CHAT_TOOL_EXECUTION_TIMEOUT = exports.CHAT_TIMEOUT = exports.DEFAULT_MAX_TOKENS = exports.ANTHROPIC_API_URL = exports.ANTHROPIC_API_VERSION = exports.DEFAULT_CLAUDE_MODEL = exports.DEFAULT_ANTHROPIC_MODEL = exports.NPM_COMMAND = exports.NPM_INSTALL_TIMEOUT = exports.UPDATE_CHECK_INITIAL_DELAY = exports.UPDATE_CHECK_INTERVAL = exports.ALERT_STALE_PROCESSING_MINUTES = exports.ALERT_STALE_RECOVERY_INTERVAL_MS = exports.PROJECT_CODE_ENV_DEFAULT = exports.PROJECT_CODE_CLI_DIRECT = exports.PROJECT_CODE_DEFAULT = exports.DEFAULT_API_URL = exports.DEFAULT_LOGIN_URL = exports.LOCALHOST_ADDRESS = exports.HIDDEN_ENTRIES = exports.MAX_DIR_ENTRIES = exports.MAX_INTERVAL = exports.MIN_INTERVAL = exports.MAX_PROCESS_LIST_SIZE = exports.PROCESS_LIST_TIMEOUT = exports.MAX_FILE_WRITE_SIZE = exports.MAX_FILE_READ_SIZE = exports.MAX_CMD_TIMEOUT = exports.CMD_DEFAULT_TIMEOUT = exports.DB_CONNECT_TIMEOUT_MS = exports.API_REQUEST_TIMEOUT = exports.API_BASE_DELAY_MS = exports.API_MAX_RETRIES = exports.MAX_AUTH_BODY_SIZE = exports.MAX_OUTPUT_SIZE = exports.AGENT_VERSION = exports.AUTH_TIMEOUT = exports.DEFAULT_HEARTBEAT_INTERVAL = exports.DEFAULT_POLL_INTERVAL = exports.CONFIG_FILE = exports.CONFIG_DIR = exports.ENV_VARS = void 0;
37
- exports.DOCKER_LOG_FLUSH_INTERVAL_MS = exports.DOCKER_MAX_LOG_CHUNK_BYTES = exports.DOCKER_MAX_SESSION_LOG_BYTES = exports.REGISTER_AUTH_ERROR_DELAY_MS = exports.REGISTER_RETRY_MAX_DELAY_MS = exports.REGISTER_RETRY_BASE_DELAY_MS = exports.WS_PONG_MAX_MISSED = exports.WS_HEARTBEAT_INTERVAL_MS = exports.WS_RECONNECT_MAX_DELAY_MS = exports.APPSYNC_RECONNECT_BASE_DELAY_MS = exports.APPSYNC_MAX_RECONNECT_RETRIES = exports.DEFAULT_WS_RECONNECT_BASE_DELAY_MS = exports.INFINITE_RECONNECT_RETRIES = exports.TOKEN_WATCH_INTERVAL_MS = exports.CHILD_PROCESS_STOP_TIMEOUT_MS = exports.CHILD_PROCESS_RESTART_DELAY_MS = exports.CHILD_PROCESS_MAX_RESTARTS = exports.SSH_NO_HOST_CHECK_FLAGS = exports.GIT_CHECKOUT_TIMEOUT = exports.GIT_FETCH_TIMEOUT = exports.GIT_CLONE_TIMEOUT = exports.ANTHROPIC_CONTENT_TYPE = exports.SSE_EVENT = exports.SSE_DONE = exports.SSE_PREFIX = exports.INITIAL_CONFIG_SYNC_RETRY_DELAY_MS = exports.INITIAL_CONFIG_SYNC_MAX_RETRIES = exports.CONFIG_SYNC_DEBOUNCE_MS = exports.API_ENDPOINTS = exports.ERR_SYNC_REPOSITORY_REQUIRES_CALLBACK = exports.ERR_UPDATE_REQUIRES_CALLBACK = exports.ERR_REBOOT_REQUIRES_CALLBACK = exports.ERR_CONFIG_SYNC_REQUIRES_CALLBACK = exports.ERR_SETUP_REQUIRES_CALLBACK = exports.ERR_E2E_TEST_REQUIRES_CLIENT = exports.ERR_CHAT_REQUIRES_CLIENT = exports.ERR_CLAUDE_CLI_NOT_FOUND = exports.ERR_AUTH_SERVER_START_FAILED = exports.ERR_ANTHROPIC_API_KEY_NOT_SET = exports.ERR_INVALID_PID = exports.ERR_NO_FILE_PATH_SPECIFIED = exports.ERR_NO_CONTENT_SPECIFIED = exports.ERR_NO_COMMAND_SPECIFIED = exports.ERR_MESSAGE_REQUIRED = exports.ERR_AGENT_ID_REQUIRED = exports.CONVERSATION_BINARY_DOWNLOAD_TIMEOUT_MS = exports.CONVERSATION_FILE_DOWNLOAD_TIMEOUT_MS = exports.BROWSER_PROXY_REQUEST_TIMEOUT_MS = exports.CHUNK_LOG_LIMIT = exports.LOG_DEBUG_LIMIT = void 0;
38
- exports.CLI_FLAG_NO_AUTO_UPDATE = exports.CLI_FLAG_NO_DOCKERFILE_SYNC = exports.CLI_FLAG_NO_DOCKER = exports.CLI_FLAG_VERBOSE = exports.NOTIFICATION_ACTION = exports.DELAYED_RESTART_MS = exports.BUSY_QUERY_TIMEOUT_MS = exports.UPDATE_FORCED_BUSY_WAIT_TIMEOUT_MS = exports.UPDATE_BUSY_POLL_INTERVAL_MS = exports.UPDATE_BUSY_WAIT_TIMEOUT_MS = exports.DOCKER_RESTART_EXIT_CODE = exports.DOCKER_UPDATE_EXIT_CODE = exports.DOCKER_MARKER_REGISTERED_AGENT_ID = exports.DOCKER_MARKER_CUSTOMIZATION_HASH = exports.DOCKER_MARKER_REBUILD_NEEDED = exports.DOCKER_MARKER_BUILT_HASH = exports.DOCKER_BUILD_ERROR_MAX_BYTES = void 0;
36
+ exports.LOG_PAYLOAD_LIMIT = exports.LOG_MESSAGE_LIMIT = exports.CHAT_MAX_ATTEMPTS = exports.CHAT_RETRY_DELAY_MS = exports.DEFAULT_APPSYNC_TIMEOUT_MS = exports.CODEX_DETECT_TIMEOUT_MS = exports.CLAUDE_DETECT_TIMEOUT_MS = exports.CHAT_SIGKILL_DELAY = exports.CHAT_TOOL_EXECUTION_TIMEOUT = exports.CHAT_TIMEOUT = exports.DEFAULT_MAX_TOKENS = exports.ANTHROPIC_API_URL = exports.ANTHROPIC_API_VERSION = exports.DEFAULT_CLAUDE_MODEL = exports.DEFAULT_ANTHROPIC_MODEL = exports.NPM_COMMAND = exports.NPM_INSTALL_TIMEOUT = exports.UPDATE_CHECK_INITIAL_DELAY = exports.UPDATE_CHECK_INTERVAL = exports.ALERT_STALE_PROCESSING_MINUTES = exports.ALERT_STALE_RECOVERY_INTERVAL_MS = exports.PROJECT_CODE_ENV_DEFAULT = exports.PROJECT_CODE_CLI_DIRECT = exports.PROJECT_CODE_DEFAULT = exports.DEFAULT_API_URL = exports.DEFAULT_LOGIN_URL = exports.LOCALHOST_ADDRESS = exports.HIDDEN_ENTRIES = exports.MAX_DIR_ENTRIES = exports.MAX_INTERVAL = exports.MIN_INTERVAL = exports.MAX_PROCESS_LIST_SIZE = exports.PROCESS_LIST_TIMEOUT = exports.MAX_FILE_WRITE_SIZE = exports.MAX_FILE_READ_SIZE = exports.MAX_CMD_TIMEOUT = exports.CMD_DEFAULT_TIMEOUT = exports.DB_CONNECT_TIMEOUT_MS = exports.API_REQUEST_TIMEOUT = exports.API_BASE_DELAY_MS = exports.API_MAX_RETRIES = exports.MAX_AUTH_BODY_SIZE = exports.MAX_OUTPUT_SIZE = exports.AGENT_VERSION = exports.AUTH_TIMEOUT = exports.DEFAULT_HEARTBEAT_INTERVAL = exports.DEFAULT_POLL_INTERVAL = exports.CONFIG_FILE = exports.CONFIG_DIR = exports.ENV_VARS = void 0;
37
+ exports.DEFAULT_WS_RECONNECT_BASE_DELAY_MS = exports.INFINITE_RECONNECT_RETRIES = exports.TOKEN_WATCH_INTERVAL_MS = exports.CHILD_PROCESS_STOP_TIMEOUT_MS = exports.CHILD_PROCESS_RESTART_DELAY_MS = exports.CHILD_PROCESS_MAX_RESTARTS = exports.SSH_NO_HOST_CHECK_FLAGS = exports.GIT_CHECKOUT_TIMEOUT = exports.GIT_FETCH_TIMEOUT = exports.GIT_CLONE_TIMEOUT = exports.ANTHROPIC_CONTENT_TYPE = exports.SSE_EVENT = exports.SSE_DONE = exports.SSE_PREFIX = exports.INITIAL_CONFIG_SYNC_RETRY_DELAY_MS = exports.INITIAL_CONFIG_SYNC_MAX_RETRIES = exports.CONFIG_SYNC_DEBOUNCE_MS = exports.ECS_LAUNCHER_DETECT_TIMEOUT_MS = exports.ECS_AGENT_ID_PREFIX = exports.DEFAULT_ECS_LOG_GROUP = exports.DEFAULT_ECS_MEMORY = exports.DEFAULT_ECS_CPU = exports.ECS_TASK_FAMILY_PREFIX = exports.ECS_AGENT_CONTAINER_NAME = exports.AGENT_MODE_ONESHOT = exports.ONESHOT_ENV_VARS = exports.API_ENDPOINTS = exports.ERR_SYNC_REPOSITORY_REQUIRES_CALLBACK = exports.ERR_UPDATE_REQUIRES_CALLBACK = exports.ERR_REBOOT_REQUIRES_CALLBACK = exports.ERR_CONFIG_SYNC_REQUIRES_CALLBACK = exports.ERR_SETUP_REQUIRES_CALLBACK = exports.ERR_E2E_TEST_REQUIRES_CLIENT = exports.ERR_CHAT_REQUIRES_CLIENT = exports.ERR_CODEX_CLI_NOT_FOUND = exports.ERR_CLAUDE_CLI_NOT_FOUND = exports.ERR_AUTH_SERVER_START_FAILED = exports.ERR_ANTHROPIC_API_KEY_NOT_SET = exports.ERR_INVALID_PID = exports.ERR_NO_FILE_PATH_SPECIFIED = exports.ERR_NO_CONTENT_SPECIFIED = exports.ERR_NO_COMMAND_SPECIFIED = exports.ERR_MESSAGE_REQUIRED = exports.ERR_AGENT_ID_REQUIRED = exports.CONVERSATION_BINARY_DOWNLOAD_TIMEOUT_MS = exports.CONVERSATION_FILE_DOWNLOAD_TIMEOUT_MS = exports.BROWSER_PROXY_REQUEST_TIMEOUT_MS = exports.CHUNK_LOG_LIMIT = exports.LOG_DEBUG_LIMIT = exports.LOG_RESULT_LIMIT = void 0;
38
+ exports.CLI_FLAG_NO_AUTO_UPDATE = exports.CLI_FLAG_NO_DOCKERFILE_SYNC = exports.CLI_FLAG_NO_DOCKER = exports.CLI_FLAG_VERBOSE = exports.NOTIFICATION_ACTION = exports.DELAYED_RESTART_MS = exports.BUSY_QUERY_TIMEOUT_MS = exports.UPDATE_FORCED_BUSY_WAIT_TIMEOUT_MS = exports.UPDATE_BUSY_POLL_INTERVAL_MS = exports.UPDATE_BUSY_WAIT_TIMEOUT_MS = exports.DOCKER_RESTART_EXIT_CODE = exports.DOCKER_UPDATE_EXIT_CODE = exports.DOCKER_MARKER_REGISTERED_AGENT_ID = exports.DOCKER_MARKER_CUSTOMIZATION_HASH = exports.DOCKER_MARKER_REBUILD_NEEDED = exports.DOCKER_MARKER_BUILT_HASH = exports.DOCKER_BUILD_ERROR_MAX_BYTES = exports.DOCKER_LOG_FLUSH_INTERVAL_MS = exports.DOCKER_MAX_LOG_CHUNK_BYTES = exports.DOCKER_MAX_SESSION_LOG_BYTES = exports.REGISTER_AUTH_ERROR_DELAY_MS = exports.REGISTER_RETRY_MAX_DELAY_MS = exports.REGISTER_RETRY_BASE_DELAY_MS = exports.WS_PONG_MAX_MISSED = exports.WS_HEARTBEAT_INTERVAL_MS = exports.WS_RECONNECT_MAX_DELAY_MS = exports.APPSYNC_RECONNECT_BASE_DELAY_MS = exports.APPSYNC_MAX_RECONNECT_RETRIES = void 0;
39
39
  const os = __importStar(require("os"));
40
40
  const path_1 = require("path");
41
41
  const utils_1 = require("./utils");
@@ -61,6 +61,9 @@ exports.ENV_VARS = {
61
61
  ALLOW_HTTP: 'AI_SUPPORT_AGENT_ALLOW_HTTP',
62
62
  PROJECT_DIR_MAP: 'AI_SUPPORT_AGENT_PROJECT_DIR_MAP',
63
63
  TERMINAL_GRACE_MS: 'AI_SUPPORT_AGENT_TERMINAL_GRACE_MS',
64
+ // 'true' force-enables the ecs_launch capability (skips AWS credential
65
+ // detection), 'false' force-disables it. Unset = auto-detect.
66
+ ECS_LAUNCHER: 'AI_SUPPORT_AGENT_ECS_LAUNCHER',
64
67
  CLAUDE_CODE_OAUTH_TOKEN: 'CLAUDE_CODE_OAUTH_TOKEN',
65
68
  };
66
69
  exports.CONFIG_DIR = (() => {
@@ -131,6 +134,7 @@ exports.CHAT_TIMEOUT = 300_000;
131
134
  exports.CHAT_TOOL_EXECUTION_TIMEOUT = 1_800_000;
132
135
  exports.CHAT_SIGKILL_DELAY = 5_000;
133
136
  exports.CLAUDE_DETECT_TIMEOUT_MS = 5_000;
137
+ exports.CODEX_DETECT_TIMEOUT_MS = 5_000;
134
138
  exports.DEFAULT_APPSYNC_TIMEOUT_MS = 300_000;
135
139
  exports.CHAT_RETRY_DELAY_MS = 3000;
136
140
  exports.CHAT_MAX_ATTEMPTS = 2;
@@ -158,6 +162,7 @@ exports.ERR_INVALID_PID = 'Invalid PID: must be a positive integer';
158
162
  exports.ERR_ANTHROPIC_API_KEY_NOT_SET = 'ANTHROPIC_API_KEY is not set. API chat mode requires an Anthropic API key.';
159
163
  exports.ERR_AUTH_SERVER_START_FAILED = 'Failed to start auth server';
160
164
  exports.ERR_CLAUDE_CLI_NOT_FOUND = 'claude CLI が見つかりません。Claude Code がインストールされていることを確認してください。';
165
+ exports.ERR_CODEX_CLI_NOT_FOUND = 'codex CLI が見つかりません。Codex CLI がインストールされていることを確認してください。';
161
166
  exports.ERR_CHAT_REQUIRES_CLIENT = 'chat command requires commandId and client';
162
167
  exports.ERR_E2E_TEST_REQUIRES_CLIENT = 'e2e_test command requires commandId and client';
163
168
  exports.ERR_SETUP_REQUIRES_CALLBACK = 'setup command requires onSetup callback';
@@ -200,7 +205,39 @@ exports.API_ENDPOINTS = {
200
205
  // Agent tool 関連エンドポイント(タスク実行画面のエージェントが呼び出す)
201
206
  AGENT_TOOL_SEND_SLACK_MESSAGE: (tenantCode) => `/api/${tenantCode}/agent/tools/send-slack-message`,
202
207
  AGENT_TOOL_TRIGGER_ALARM: (tenantCode) => `/api/${tenantCode}/agent/tools/trigger-alarm`,
208
+ // ECS execution agent registration (ecs publish)
209
+ ECS_AGENTS: (tenantCode) => `/api/${tenantCode}/agent/ecs-agents`,
203
210
  };
211
+ // === ECS execution agent (launcher-agent architecture) ===
212
+ // Environment variables injected into the oneshot container at RunTask time.
213
+ exports.ONESHOT_ENV_VARS = {
214
+ AGENT_MODE: 'AGENT_MODE',
215
+ COMMAND_ID: 'COMMAND_ID',
216
+ AGENT_ID: 'AGENT_ID',
217
+ TENANT_CODE: 'TENANT_CODE',
218
+ PROJECT_CODE: 'PROJECT_CODE',
219
+ API_BASE_URL: 'API_BASE_URL',
220
+ AGENT_ONESHOT_TOKEN: 'AGENT_ONESHOT_TOKEN',
221
+ };
222
+ /** Value of AGENT_MODE that switches the CLI into oneshot (ECS container) mode */
223
+ exports.AGENT_MODE_ONESHOT = 'oneshot';
224
+ /** Fixed container name used in the registered ECS task definition */
225
+ exports.ECS_AGENT_CONTAINER_NAME = 'app';
226
+ /** Task definition family prefix: ai-support-ecs-agent-{tenantCode}-{agentId} */
227
+ exports.ECS_TASK_FAMILY_PREFIX = 'ai-support-ecs-agent';
228
+ /** Default ECS task size (Fargate: 1 vCPU / 2 GB) */
229
+ exports.DEFAULT_ECS_CPU = 1024;
230
+ exports.DEFAULT_ECS_MEMORY = 2048;
231
+ /** Default awslogs log group for ECS execution agents */
232
+ exports.DEFAULT_ECS_LOG_GROUP = '/ai-support-agent/ecs-agent';
233
+ /** ECS agent id prefix (agentId = `ecs-{uuid}`) */
234
+ exports.ECS_AGENT_ID_PREFIX = 'ecs';
235
+ /**
236
+ * Budget for resolving AWS credentials when deciding whether to advertise
237
+ * the ecs_launch capability at registration time. Kept short so registration
238
+ * is not delayed on hosts without any credential source (IMDS probing etc.).
239
+ */
240
+ exports.ECS_LAUNCHER_DETECT_TIMEOUT_MS = 3000;
204
241
  exports.CONFIG_SYNC_DEBOUNCE_MS = 2000;
205
242
  exports.INITIAL_CONFIG_SYNC_MAX_RETRIES = 3;
206
243
  exports.INITIAL_CONFIG_SYNC_RETRY_DELAY_MS = 2000;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Small AWS ARN / ECR URI parsing helpers used by the ECS agent feature.
3
+ *
4
+ * The region for each AWS SDK client is derived deterministically from the
5
+ * resource the caller is operating on (ECR repository URI or ECS cluster ARN)
6
+ * instead of relying on ambient AWS_REGION configuration.
7
+ */
8
+ /**
9
+ * Extract the region from an AWS ARN.
10
+ * Example: arn:aws:ecs:ap-northeast-1:123456789012:cluster/my-cluster -> ap-northeast-1
11
+ * Returns null when the string is not a valid ARN or has no region part.
12
+ */
13
+ export declare function regionFromArn(arn: string): string | null;
14
+ export interface EcrRepositoryUriParts {
15
+ /** Registry host, e.g. 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com */
16
+ registry: string;
17
+ /** AWS account id of the registry */
18
+ accountId: string;
19
+ /** Region parsed from the registry host */
20
+ region: string;
21
+ /** Repository name (path after the registry host) */
22
+ repositoryName: string;
23
+ }
24
+ /**
25
+ * Parse an ECR repository URI of the form
26
+ * `{accountId}.dkr.ecr.{region}.amazonaws.com/{repositoryName}`.
27
+ * Returns null when the URI does not look like an ECR repository URI.
28
+ */
29
+ export declare function parseEcrRepositoryUri(uri: string): EcrRepositoryUriParts | null;
30
+ //# sourceMappingURL=aws-arn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-arn.d.ts","sourceRoot":"","sources":["../../src/ecs/aws-arn.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxD;AAED,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAM/E"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Small AWS ARN / ECR URI parsing helpers used by the ECS agent feature.
4
+ *
5
+ * The region for each AWS SDK client is derived deterministically from the
6
+ * resource the caller is operating on (ECR repository URI or ECS cluster ARN)
7
+ * instead of relying on ambient AWS_REGION configuration.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.regionFromArn = regionFromArn;
11
+ exports.parseEcrRepositoryUri = parseEcrRepositoryUri;
12
+ /**
13
+ * Extract the region from an AWS ARN.
14
+ * Example: arn:aws:ecs:ap-northeast-1:123456789012:cluster/my-cluster -> ap-northeast-1
15
+ * Returns null when the string is not a valid ARN or has no region part.
16
+ */
17
+ function regionFromArn(arn) {
18
+ const parts = arn.split(':');
19
+ if (parts.length < 6 || parts[0] !== 'arn')
20
+ return null;
21
+ return parts[3] || null;
22
+ }
23
+ /**
24
+ * Parse an ECR repository URI of the form
25
+ * `{accountId}.dkr.ecr.{region}.amazonaws.com/{repositoryName}`.
26
+ * Returns null when the URI does not look like an ECR repository URI.
27
+ */
28
+ function parseEcrRepositoryUri(uri) {
29
+ const match = /^(\d{12})\.dkr\.ecr\.([a-z0-9-]+)\.amazonaws\.com(?:\.cn)?\/([a-z0-9][a-z0-9._/-]*)$/.exec(uri);
30
+ if (!match)
31
+ return null;
32
+ const [, accountId, region, repositoryName] = match;
33
+ const registry = uri.slice(0, uri.indexOf('/'));
34
+ return { registry, accountId, region, repositoryName };
35
+ }
36
+ //# sourceMappingURL=aws-arn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-arn.js","sourceRoot":"","sources":["../../src/ecs/aws-arn.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAOH,sCAIC;AAkBD,sDAMC;AAjCD;;;;GAIG;AACH,SAAgB,aAAa,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AACzB,CAAC;AAaD;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,MAAM,KAAK,GAAG,sFAAsF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9G,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,GAAG,KAAK,CAAA;IACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;AACxD,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * ECR image publisher for `ecs publish`.
3
+ *
4
+ * Logs in to ECR with the local AWS credentials (GetAuthorizationToken),
5
+ * builds/tags/pushes the image with the docker CLI, and resolves the pushed
6
+ * image digest via DescribeImages so the task definition can pin the image
7
+ * by digest. The registry password is always passed over stdin
8
+ * (`--password-stdin`), never on the command line.
9
+ */
10
+ import { ECRClient } from '@aws-sdk/client-ecr';
11
+ export interface PublishImageOptions {
12
+ /** ECR repository URI (push destination) */
13
+ repositoryUri: string;
14
+ /** Image tag to push */
15
+ tag: string;
16
+ /** Dockerfile used for the build (docker default when omitted) */
17
+ dockerfile?: string;
18
+ /** Pre-built local image to push (skips the build step) */
19
+ image?: string;
20
+ /** Build context directory (default: current directory) */
21
+ contextDir?: string;
22
+ }
23
+ export interface PublishedImage {
24
+ /** Digest-pinned image URI (`<repositoryUri>@sha256:...`) */
25
+ imageUri: string;
26
+ imageTag: string;
27
+ imageDigest: string;
28
+ }
29
+ /**
30
+ * Run a docker CLI command. Output is streamed to the terminal.
31
+ * When `input` is provided it is written to the child's stdin (used for
32
+ * `docker login --password-stdin` so the password never appears in argv).
33
+ */
34
+ export declare function runDocker(args: string[], input?: string): Promise<void>;
35
+ /**
36
+ * Log in the local docker CLI to the ECR registry using GetAuthorizationToken.
37
+ * The decoded password is piped to `docker login --password-stdin`.
38
+ */
39
+ export declare function loginToEcr(client: ECRClient, registry: string): Promise<void>;
40
+ /**
41
+ * Resolve the digest of a pushed image tag via DescribeImages.
42
+ */
43
+ export declare function getImageDigest(client: ECRClient, repositoryName: string, tag: string): Promise<string>;
44
+ /**
45
+ * Build (unless a local image is given), tag, and push the image to ECR,
46
+ * then return the digest-pinned image URI.
47
+ */
48
+ export declare function publishImage(options: PublishImageOptions): Promise<PublishedImage>;
49
+ //# sourceMappingURL=ecr-publisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecr-publisher.d.ts","sourceRoot":"","sources":["../../src/ecs/ecr-publisher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAyB,SAAS,EAAgC,MAAM,qBAAqB,CAAA;AAOpG,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvE;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BxF"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ /**
3
+ * ECR image publisher for `ecs publish`.
4
+ *
5
+ * Logs in to ECR with the local AWS credentials (GetAuthorizationToken),
6
+ * builds/tags/pushes the image with the docker CLI, and resolves the pushed
7
+ * image digest via DescribeImages so the task definition can pin the image
8
+ * by digest. The registry password is always passed over stdin
9
+ * (`--password-stdin`), never on the command line.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.runDocker = runDocker;
13
+ exports.loginToEcr = loginToEcr;
14
+ exports.getImageDigest = getImageDigest;
15
+ exports.publishImage = publishImage;
16
+ const child_process_1 = require("child_process");
17
+ const client_ecr_1 = require("@aws-sdk/client-ecr");
18
+ const aws_arn_1 = require("./aws-arn");
19
+ const docker_utils_1 = require("../docker/docker-utils");
20
+ const logger_1 = require("../logger");
21
+ const utils_1 = require("../utils");
22
+ /**
23
+ * Run a docker CLI command. Output is streamed to the terminal.
24
+ * When `input` is provided it is written to the child's stdin (used for
25
+ * `docker login --password-stdin` so the password never appears in argv).
26
+ */
27
+ function runDocker(args, input) {
28
+ return new Promise((resolve, reject) => {
29
+ const proc = (0, child_process_1.spawn)((0, docker_utils_1.getDockerPath)(), args, {
30
+ stdio: [input === undefined ? 'ignore' : 'pipe', 'inherit', 'inherit'],
31
+ });
32
+ if (input !== undefined && proc.stdin) {
33
+ // If the child dies between spawn and write (e.g. `docker login` fails
34
+ // instantly), writing to its stdin raises EPIPE. Swallow it here and let
35
+ // the 'close'/'error' handlers report the real exit code instead of
36
+ // surfacing an uncaught EPIPE.
37
+ proc.stdin.on('error', () => { });
38
+ proc.stdin.write(input);
39
+ proc.stdin.end();
40
+ }
41
+ proc.on('error', (err) => reject((0, utils_1.toError)(err)));
42
+ proc.on('close', (code) => {
43
+ if (code === 0)
44
+ resolve();
45
+ else
46
+ reject(new Error(`docker ${args[0]} exited with code ${code}`));
47
+ });
48
+ });
49
+ }
50
+ /**
51
+ * Log in the local docker CLI to the ECR registry using GetAuthorizationToken.
52
+ * The decoded password is piped to `docker login --password-stdin`.
53
+ */
54
+ async function loginToEcr(client, registry) {
55
+ logger_1.logger.info(`[ecs] Logging in to ECR registry: ${registry}`);
56
+ const response = await client.send(new client_ecr_1.GetAuthorizationTokenCommand({}));
57
+ const token = response.authorizationData?.[0]?.authorizationToken;
58
+ if (!token) {
59
+ throw new Error('ECR GetAuthorizationToken returned no authorization data');
60
+ }
61
+ const decoded = Buffer.from(token, 'base64').toString('utf-8');
62
+ const separator = decoded.indexOf(':');
63
+ if (separator < 0) {
64
+ throw new Error('ECR authorization token has an unexpected format');
65
+ }
66
+ const username = decoded.slice(0, separator);
67
+ const password = decoded.slice(separator + 1);
68
+ await runDocker(['login', '--username', username, '--password-stdin', registry], password);
69
+ logger_1.logger.success(`[ecs] Logged in to ${registry}`);
70
+ }
71
+ /**
72
+ * Resolve the digest of a pushed image tag via DescribeImages.
73
+ */
74
+ async function getImageDigest(client, repositoryName, tag) {
75
+ const response = await client.send(new client_ecr_1.DescribeImagesCommand({
76
+ repositoryName,
77
+ imageIds: [{ imageTag: tag }],
78
+ }));
79
+ const digest = response.imageDetails?.[0]?.imageDigest;
80
+ if (!digest) {
81
+ throw new Error(`Could not resolve image digest for ${repositoryName}:${tag}`);
82
+ }
83
+ return digest;
84
+ }
85
+ /**
86
+ * Build (unless a local image is given), tag, and push the image to ECR,
87
+ * then return the digest-pinned image URI.
88
+ */
89
+ async function publishImage(options) {
90
+ const parts = (0, aws_arn_1.parseEcrRepositoryUri)(options.repositoryUri);
91
+ if (!parts) {
92
+ throw new Error(`Invalid ECR repository URI: ${options.repositoryUri}`);
93
+ }
94
+ const client = new client_ecr_1.ECRClient({ region: parts.region });
95
+ await loginToEcr(client, parts.registry);
96
+ const remoteRef = `${options.repositoryUri}:${options.tag}`;
97
+ if (options.image) {
98
+ logger_1.logger.info(`[ecs] Using local image ${options.image} (build skipped)`);
99
+ await runDocker(['tag', options.image, remoteRef]);
100
+ }
101
+ else {
102
+ const contextDir = options.contextDir ?? '.';
103
+ const buildArgs = ['build', '-t', remoteRef];
104
+ if (options.dockerfile) {
105
+ buildArgs.push('-f', options.dockerfile);
106
+ }
107
+ buildArgs.push(contextDir);
108
+ logger_1.logger.info(`[ecs] Building image ${remoteRef}`);
109
+ await runDocker(buildArgs);
110
+ }
111
+ logger_1.logger.info(`[ecs] Pushing ${remoteRef}`);
112
+ await runDocker(['push', remoteRef]);
113
+ const imageDigest = await getImageDigest(client, parts.repositoryName, options.tag);
114
+ const imageUri = `${options.repositoryUri}@${imageDigest}`;
115
+ logger_1.logger.success(`[ecs] Pushed image: ${imageUri}`);
116
+ return { imageUri, imageTag: options.tag, imageDigest };
117
+ }
118
+ //# sourceMappingURL=ecr-publisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecr-publisher.js","sourceRoot":"","sources":["../../src/ecs/ecr-publisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Launcher-side handlers for the `ecs_launch` / `ecs_stop` commands.
3
+ *
4
+ * A resident agent with local AWS credentials acts as the "launcher": it
5
+ * receives `ecs_launch` via the normal dispatch path (AppSync) and starts a
6
+ * oneshot ECS task with RunTask, injecting the per-run environment
7
+ * (COMMAND_ID, oneshot token, ...) through containerOverrides.
8
+ *
9
+ * SECURITY: the containerEnv payload contains AGENT_ONESHOT_TOKEN. Its
10
+ * values must never be logged — only log resource identifiers.
11
+ */
12
+ import { type CommandResult } from '../types';
13
+ /**
14
+ * Handle the `ecs_launch` command: RunTask (FARGATE, awsvpc) with the
15
+ * payload's containerEnv injected via containerOverrides.
16
+ * Returns `{ taskArn }` on success, or a failed result carrying RunTask
17
+ * `failures` details so the API can mark the work command/task as failed.
18
+ */
19
+ export declare function ecsLaunch(p: Record<string, unknown>): Promise<CommandResult>;
20
+ /**
21
+ * Handle the `ecs_stop` command: best-effort StopTask (used by the API's
22
+ * timeout sweep to reclaim timed-out oneshot containers).
23
+ */
24
+ export declare function ecsStop(p: Record<string, unknown>): Promise<CommandResult>;
25
+ //# sourceMappingURL=ecs-launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecs-launcher.d.ts","sourceRoot":"","sources":["../../src/ecs/ecs-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,EAAE,KAAK,aAAa,EAA8B,MAAM,UAAU,CAAA;AAkDzE;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAyDlF;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CA6BhF"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * Launcher-side handlers for the `ecs_launch` / `ecs_stop` commands.
4
+ *
5
+ * A resident agent with local AWS credentials acts as the "launcher": it
6
+ * receives `ecs_launch` via the normal dispatch path (AppSync) and starts a
7
+ * oneshot ECS task with RunTask, injecting the per-run environment
8
+ * (COMMAND_ID, oneshot token, ...) through containerOverrides.
9
+ *
10
+ * SECURITY: the containerEnv payload contains AGENT_ONESHOT_TOKEN. Its
11
+ * values must never be logged — only log resource identifiers.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ecsLaunch = ecsLaunch;
15
+ exports.ecsStop = ecsStop;
16
+ const client_ecs_1 = require("@aws-sdk/client-ecs");
17
+ const aws_arn_1 = require("./aws-arn");
18
+ const constants_1 = require("../constants");
19
+ const logger_1 = require("../logger");
20
+ const types_1 = require("../types");
21
+ const utils_1 = require("../utils");
22
+ function parseStringArray(value) {
23
+ if (!Array.isArray(value) || value.length === 0)
24
+ return null;
25
+ if (!value.every((v) => typeof v === 'string' && v.length > 0))
26
+ return null;
27
+ return value;
28
+ }
29
+ function validateLaunchPayload(p) {
30
+ const taskDefinitionArn = typeof p.taskDefinitionArn === 'string' && p.taskDefinitionArn ? p.taskDefinitionArn : null;
31
+ if (!taskDefinitionArn)
32
+ return 'taskDefinitionArn is required for ecs_launch';
33
+ const clusterArn = typeof p.clusterArn === 'string' && p.clusterArn ? p.clusterArn : null;
34
+ if (!clusterArn)
35
+ return 'clusterArn is required for ecs_launch';
36
+ const subnetIds = parseStringArray(p.subnetIds);
37
+ if (!subnetIds)
38
+ return 'subnetIds (non-empty string array) is required for ecs_launch';
39
+ const securityGroupIds = parseStringArray(p.securityGroupIds);
40
+ if (!securityGroupIds)
41
+ return 'securityGroupIds (non-empty string array) is required for ecs_launch';
42
+ const rawEnv = p.containerEnv;
43
+ if (typeof rawEnv !== 'object' || rawEnv === null || Array.isArray(rawEnv)) {
44
+ return 'containerEnv (object) is required for ecs_launch';
45
+ }
46
+ const containerEnv = {};
47
+ for (const [key, value] of Object.entries(rawEnv)) {
48
+ if (typeof value !== 'string') {
49
+ return `containerEnv.${key} must be a string`;
50
+ }
51
+ containerEnv[key] = value;
52
+ }
53
+ return {
54
+ taskDefinitionArn,
55
+ clusterArn,
56
+ subnetIds,
57
+ securityGroupIds,
58
+ assignPublicIp: p.assignPublicIp === true,
59
+ containerEnv,
60
+ };
61
+ }
62
+ /**
63
+ * Handle the `ecs_launch` command: RunTask (FARGATE, awsvpc) with the
64
+ * payload's containerEnv injected via containerOverrides.
65
+ * Returns `{ taskArn }` on success, or a failed result carrying RunTask
66
+ * `failures` details so the API can mark the work command/task as failed.
67
+ */
68
+ async function ecsLaunch(p) {
69
+ const validated = validateLaunchPayload(p);
70
+ if (typeof validated === 'string') {
71
+ return (0, types_1.errorResult)(validated);
72
+ }
73
+ const region = (0, aws_arn_1.regionFromArn)(validated.clusterArn);
74
+ if (!region) {
75
+ return (0, types_1.errorResult)(`Could not determine region from clusterArn: ${validated.clusterArn}`);
76
+ }
77
+ // Do NOT log containerEnv — it carries AGENT_ONESHOT_TOKEN.
78
+ logger_1.logger.info(`[ecs] RunTask: taskDefinition=${validated.taskDefinitionArn} cluster=${validated.clusterArn}`);
79
+ try {
80
+ const client = new client_ecs_1.ECSClient({ region });
81
+ const response = await client.send(new client_ecs_1.RunTaskCommand({
82
+ cluster: validated.clusterArn,
83
+ taskDefinition: validated.taskDefinitionArn,
84
+ launchType: 'FARGATE',
85
+ count: 1,
86
+ networkConfiguration: {
87
+ awsvpcConfiguration: {
88
+ subnets: validated.subnetIds,
89
+ securityGroups: validated.securityGroupIds,
90
+ assignPublicIp: validated.assignPublicIp ? 'ENABLED' : 'DISABLED',
91
+ },
92
+ },
93
+ overrides: {
94
+ containerOverrides: [
95
+ {
96
+ name: constants_1.ECS_AGENT_CONTAINER_NAME,
97
+ environment: Object.entries(validated.containerEnv).map(([name, value]) => ({ name, value })),
98
+ },
99
+ ],
100
+ },
101
+ }));
102
+ if (response.failures && response.failures.length > 0) {
103
+ const reasons = response.failures
104
+ .map((f) => `${f.reason ?? 'unknown'}${f.detail ? ` (${f.detail})` : ''}`)
105
+ .join('; ');
106
+ logger_1.logger.error(`[ecs] RunTask failed: ${reasons}`);
107
+ return (0, types_1.errorResult)(`ECS RunTask failed: ${reasons}`, { failures: response.failures });
108
+ }
109
+ const taskArn = response.tasks?.[0]?.taskArn;
110
+ if (!taskArn) {
111
+ return (0, types_1.errorResult)('ECS RunTask returned no task');
112
+ }
113
+ logger_1.logger.success(`[ecs] Task started: ${taskArn}`);
114
+ return (0, types_1.successResult)({ taskArn });
115
+ }
116
+ catch (error) {
117
+ const message = (0, utils_1.getErrorMessage)(error);
118
+ logger_1.logger.error(`[ecs] RunTask error: ${message}`);
119
+ return (0, types_1.errorResult)(`ECS RunTask error: ${message}`);
120
+ }
121
+ }
122
+ /**
123
+ * Handle the `ecs_stop` command: best-effort StopTask (used by the API's
124
+ * timeout sweep to reclaim timed-out oneshot containers).
125
+ */
126
+ async function ecsStop(p) {
127
+ const clusterArn = typeof p.clusterArn === 'string' && p.clusterArn ? p.clusterArn : null;
128
+ if (!clusterArn)
129
+ return (0, types_1.errorResult)('clusterArn is required for ecs_stop');
130
+ const taskArn = typeof p.taskArn === 'string' && p.taskArn ? p.taskArn : null;
131
+ if (!taskArn)
132
+ return (0, types_1.errorResult)('taskArn is required for ecs_stop');
133
+ const region = (0, aws_arn_1.regionFromArn)(clusterArn);
134
+ if (!region) {
135
+ return (0, types_1.errorResult)(`Could not determine region from clusterArn: ${clusterArn}`);
136
+ }
137
+ logger_1.logger.info(`[ecs] StopTask: ${taskArn}`);
138
+ try {
139
+ const client = new client_ecs_1.ECSClient({ region });
140
+ const response = await client.send(new client_ecs_1.StopTaskCommand({
141
+ cluster: clusterArn,
142
+ task: taskArn,
143
+ reason: 'Stopped by ai-support-agent launcher (timeout or cancel)',
144
+ }));
145
+ return (0, types_1.successResult)({
146
+ stopped: true,
147
+ taskArn,
148
+ lastStatus: response.task?.lastStatus,
149
+ });
150
+ }
151
+ catch (error) {
152
+ const message = (0, utils_1.getErrorMessage)(error);
153
+ logger_1.logger.warn(`[ecs] StopTask failed (best-effort): ${message}`);
154
+ return (0, types_1.errorResult)(`ECS StopTask failed: ${message}`, { stopped: false, taskArn });
155
+ }
156
+ }
157
+ //# sourceMappingURL=ecs-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecs-launcher.js","sourceRoot":"","sources":["../../src/ecs/ecs-launcher.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AA+DH,8BAyDC;AAMD,0BA6BC;AAzJD,oDAAgF;AAEhF,uCAAyC;AACzC,4CAAuD;AACvD,sCAAkC;AAClC,oCAAyE;AACzE,oCAA0C;AAW1C,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC5D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3E,OAAO,KAAiB,CAAA;AAC1B,CAAC;AAED,SAAS,qBAAqB,CAAC,CAA0B;IACvD,MAAM,iBAAiB,GAAG,OAAO,CAAC,CAAC,iBAAiB,KAAK,QAAQ,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAA;IACrH,IAAI,CAAC,iBAAiB;QAAE,OAAO,8CAA8C,CAAA;IAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;IACzF,IAAI,CAAC,UAAU;QAAE,OAAO,uCAAuC,CAAA;IAC/D,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,SAAS;QAAE,OAAO,+DAA+D,CAAA;IACtF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAC7D,IAAI,CAAC,gBAAgB;QAAE,OAAO,sEAAsE,CAAA;IAEpG,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAA;IAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,kDAAkD,CAAA;IAC3D,CAAC;IACD,MAAM,YAAY,GAA2B,EAAE,CAAA;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;QAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,gBAAgB,GAAG,mBAAmB,CAAA;QAC/C,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAC3B,CAAC;IAED,OAAO;QACL,iBAAiB;QACjB,UAAU;QACV,SAAS;QACT,gBAAgB;QAChB,cAAc,EAAE,CAAC,CAAC,cAAc,KAAK,IAAI;QACzC,YAAY;KACb,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,SAAS,CAAC,CAA0B;IACxD,MAAM,SAAS,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC1C,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAA,mBAAW,EAAC,SAAS,CAAC,CAAA;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAA,mBAAW,EAAC,+CAA+C,SAAS,CAAC,UAAU,EAAE,CAAC,CAAA;IAC3F,CAAC;IAED,4DAA4D;IAC5D,eAAM,CAAC,IAAI,CAAC,iCAAiC,SAAS,CAAC,iBAAiB,YAAY,SAAS,CAAC,UAAU,EAAE,CAAC,CAAA;IAE3G,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,2BAAc,CAAC;YACpD,OAAO,EAAE,SAAS,CAAC,UAAU;YAC7B,cAAc,EAAE,SAAS,CAAC,iBAAiB;YAC3C,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,CAAC;YACR,oBAAoB,EAAE;gBACpB,mBAAmB,EAAE;oBACnB,OAAO,EAAE,SAAS,CAAC,SAAS;oBAC5B,cAAc,EAAE,SAAS,CAAC,gBAAgB;oBAC1C,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;iBAClE;aACF;YACD,SAAS,EAAE;gBACT,kBAAkB,EAAE;oBAClB;wBACE,IAAI,EAAE,oCAAwB;wBAC9B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;qBAC9F;iBACF;aACF;SACF,CAAC,CAAC,CAAA;QAEH,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ;iBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;iBACzE,IAAI,CAAC,IAAI,CAAC,CAAA;YACb,eAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAA;YAChD,OAAO,IAAA,mBAAW,EAAC,uBAAuB,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvF,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAA,mBAAW,EAAC,8BAA8B,CAAC,CAAA;QACpD,CAAC;QACD,eAAM,CAAC,OAAO,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAA;QAChD,OAAO,IAAA,qBAAa,EAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC,KAAK,CAAC,CAAA;QACtC,eAAM,CAAC,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAA;QAC/C,OAAO,IAAA,mBAAW,EAAC,sBAAsB,OAAO,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,OAAO,CAAC,CAA0B;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;IACzF,IAAI,CAAC,UAAU;QAAE,OAAO,IAAA,mBAAW,EAAC,qCAAqC,CAAC,CAAA;IAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7E,IAAI,CAAC,OAAO;QAAE,OAAO,IAAA,mBAAW,EAAC,kCAAkC,CAAC,CAAA;IAEpE,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,UAAU,CAAC,CAAA;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAA,mBAAW,EAAC,+CAA+C,UAAU,EAAE,CAAC,CAAA;IACjF,CAAC;IAED,eAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,4BAAe,CAAC;YACrD,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,0DAA0D;SACnE,CAAC,CAAC,CAAA;QACH,OAAO,IAAA,qBAAa,EAAC;YACnB,OAAO,EAAE,IAAI;YACb,OAAO;YACP,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU;SACtC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC,KAAK,CAAC,CAAA;QACtC,eAAM,CAAC,IAAI,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAA;QAC9D,OAAO,IAAA,mBAAW,EAAC,wBAAwB,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IACpF,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ecs_launch capability detection.
3
+ *
4
+ * A resident agent should only advertise the `ecs_launch` capability when it
5
+ * can actually perform ECS RunTask/StopTask — i.e. when AWS credentials are
6
+ * resolvable through the default provider chain (env vars, shared
7
+ * config/credentials files, SSO cache, IMDS/ECS metadata, ...). Advertising
8
+ * it unconditionally would let the API's automatic launcher selection pick an
9
+ * agent that cannot launch anything, making ECS dispatch fail unpredictably.
10
+ *
11
+ * Override (checked before detection):
12
+ * AI_SUPPORT_AGENT_ECS_LAUNCHER=true force-enable, skip detection
13
+ * AI_SUPPORT_AGENT_ECS_LAUNCHER=false force-disable, skip detection
14
+ *
15
+ * The detection result is cached for the process lifetime so the register
16
+ * retry loop does not re-probe the credential chain (IMDS/STS) on every
17
+ * attempt.
18
+ */
19
+ /** Reset the positive-detection cache (tests only). */
20
+ export declare function resetEcsLauncherCapabilityCache(): void;
21
+ /**
22
+ * Decide whether this agent should advertise the `ecs_launch` capability.
23
+ * Returns true when credentials are resolvable or force-enabled via env.
24
+ */
25
+ export declare function detectEcsLauncherCapability(env?: NodeJS.ProcessEnv, timeoutMs?: number): Promise<boolean>;
26
+ //# sourceMappingURL=launcher-capability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher-capability.d.ts","sourceRoot":"","sources":["../../src/ecs/launcher-capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAeH,uDAAuD;AACvD,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAuBD;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,GAAE,MAAuC,GACjD,OAAO,CAAC,OAAO,CAAC,CAyBlB"}