@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.
- package/dist/agent-config-sync.d.ts.map +1 -1
- package/dist/agent-config-sync.js +9 -1
- package/dist/agent-config-sync.js.map +1 -1
- package/dist/agent-transport.d.ts.map +1 -1
- package/dist/agent-transport.js +1 -0
- package/dist/agent-transport.js.map +1 -1
- package/dist/api-client.d.ts +6 -1
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +9 -0
- package/dist/api-client.js.map +1 -1
- package/dist/chat-mode-detector.d.ts +2 -1
- package/dist/chat-mode-detector.d.ts.map +1 -1
- package/dist/chat-mode-detector.js +21 -4
- package/dist/chat-mode-detector.js.map +1 -1
- package/dist/cli/ecs-publish-command.d.ts +49 -0
- package/dist/cli/ecs-publish-command.d.ts.map +1 -0
- package/dist/cli/ecs-publish-command.js +214 -0
- package/dist/cli/ecs-publish-command.js.map +1 -0
- package/dist/commands/chat-executor.d.ts +1 -0
- package/dist/commands/chat-executor.d.ts.map +1 -1
- package/dist/commands/chat-executor.js +40 -19
- package/dist/commands/chat-executor.js.map +1 -1
- package/dist/commands/codex-command.d.ts +7 -0
- package/dist/commands/codex-command.d.ts.map +1 -0
- package/dist/commands/codex-command.js +34 -0
- package/dist/commands/codex-command.js.map +1 -0
- package/dist/commands/codex-runner.d.ts +37 -0
- package/dist/commands/codex-runner.d.ts.map +1 -0
- package/dist/commands/codex-runner.js +264 -0
- package/dist/commands/codex-runner.js.map +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +84 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/constants.d.ts +32 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +40 -3
- package/dist/constants.js.map +1 -1
- package/dist/ecs/aws-arn.d.ts +30 -0
- package/dist/ecs/aws-arn.d.ts.map +1 -0
- package/dist/ecs/aws-arn.js +36 -0
- package/dist/ecs/aws-arn.js.map +1 -0
- package/dist/ecs/ecr-publisher.d.ts +49 -0
- package/dist/ecs/ecr-publisher.d.ts.map +1 -0
- package/dist/ecs/ecr-publisher.js +118 -0
- package/dist/ecs/ecr-publisher.js.map +1 -0
- package/dist/ecs/ecs-launcher.d.ts +25 -0
- package/dist/ecs/ecs-launcher.d.ts.map +1 -0
- package/dist/ecs/ecs-launcher.js +157 -0
- package/dist/ecs/ecs-launcher.js.map +1 -0
- package/dist/ecs/launcher-capability.d.ts +26 -0
- package/dist/ecs/launcher-capability.d.ts.map +1 -0
- package/dist/ecs/launcher-capability.js +86 -0
- package/dist/ecs/launcher-capability.js.map +1 -0
- package/dist/ecs/task-definition-registrar.d.ts +39 -0
- package/dist/ecs/task-definition-registrar.d.ts.map +1 -0
- package/dist/ecs/task-definition-registrar.js +80 -0
- package/dist/ecs/task-definition-registrar.js.map +1 -0
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/locales/en.json +18 -0
- package/dist/locales/ja.json +18 -0
- package/dist/oneshot-runner.d.ts +38 -0
- package/dist/oneshot-runner.d.ts.map +1 -0
- package/dist/oneshot-runner.js +166 -0
- package/dist/oneshot-runner.js.map +1 -0
- package/dist/project-agent.d.ts.map +1 -1
- package/dist/project-agent.js +13 -1
- package/dist/project-agent.js.map +1 -1
- package/dist/types/chat.d.ts +1 -0
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/command.d.ts +10 -1
- package/dist/types/command.d.ts.map +1 -1
- package/dist/types/command.js.map +1 -1
- package/dist/types/config.d.ts +15 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/ecs.d.ts +71 -0
- package/dist/types/ecs.d.ts.map +1 -0
- package/dist/types/ecs.js +12 -0
- package/dist/types/ecs.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/project.d.ts +7 -0
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/server.d.ts +7 -1
- package/dist/types/server.d.ts.map +1 -1
- package/docker/Dockerfile +1 -1
- package/docker/entrypoint.sh +9 -0
- 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.
|
|
37
|
-
exports.
|
|
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;
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AACxB,+BAAoC;AAEpC,mCAAsC;AAEtC,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,oBAAY,EAAuB,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAA;QACrF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,4EAA4E;AAC5E,4EAA4E;AAC/D,QAAA,QAAQ,GAAG;IACtB,KAAK,EAAE,wBAAwB;IAC/B,OAAO,EAAE,0BAA0B;IACnC,WAAW,EAAE,8BAA8B;IAC3C,YAAY,EAAE,+BAA+B;IAC7C,UAAU,EAAE,6BAA6B;IACzC,SAAS,EAAE,4BAA4B;IACvC,UAAU,EAAE,6BAA6B;IACzC,eAAe,EAAE,kCAAkC;IACnD,iBAAiB,EAAE,oCAAoC;IACvD,uBAAuB,EAAE,yBAAyB;CAC1C,CAAA;AAEG,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAQ,CAAC,UAAU,CAAC,CAAA;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO,mBAAmB,CAAA;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3D,OAAO,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAA;AAC1B,CAAC,CAAC,EAAE,CAAA;AAES,QAAA,WAAW,GAAG,aAAa,CAAA;AAC3B,QAAA,qBAAqB,GAAG,IAAI,CAAA;AAC5B,QAAA,0BAA0B,GAAG,KAAK,CAAA;AAClC,QAAA,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,YAAY;AACzC,QAAA,aAAa,GAAG,iBAAiB,EAAE,CAAA;AACnC,QAAA,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,QAAQ;AAC3C,QAAA,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,QAAQ;AAEpD,uBAAuB;AACV,QAAA,eAAe,GAAG,CAAC,CAAA;AACnB,QAAA,iBAAiB,GAAG,IAAI,CAAA;AACxB,QAAA,mBAAmB,GAAG,MAAM,CAAA;AAEzC,0FAA0F;AAC7E,QAAA,qBAAqB,GAAG,MAAM,CAAA;AAE3C,6BAA6B;AAChB,QAAA,mBAAmB,GAAG,MAAM,CAAA;AAC5B,QAAA,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,aAAa;AAC9C,QAAA,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,QAAQ;AAC9C,QAAA,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,QAAQ;AAC/C,QAAA,oBAAoB,GAAG,MAAM,CAAA;AAC7B,QAAA,qBAAqB,GAAG,MAAM,CAAA,CAAC,QAAQ;AAEpD,kBAAkB;AACL,QAAA,YAAY,GAAG,IAAI,CAAA;AACnB,QAAA,YAAY,GAAG,OAAO,CAAA,CAAC,YAAY;AAEhD,0BAA0B;AACb,QAAA,eAAe,GAAG,IAAI,CAAA;AAEnC,+CAA+C;AAClC,QAAA,cAAc,GAAG,CAAC,SAAS,CAAC,CAAA;AAEzC,gFAAgF;AACnE,QAAA,iBAAiB,GAAG,WAAW,CAAA;AAE5C,iCAAiC;AACpB,QAAA,iBAAiB,GAAG,8BAA8B,CAAA;AAE/D,+BAA+B;AAClB,QAAA,eAAe,GAAG,kCAAkC,CAAA;AAEjE,wBAAwB;AACX,QAAA,oBAAoB,GAAG,SAAS,CAAA;AAChC,QAAA,uBAAuB,GAAG,YAAY,CAAA;AACtC,QAAA,wBAAwB,GAAG,aAAa,CAAA;AAErD,6CAA6C;AAC7C,iDAAiD;AACjD,sDAAsD;AACzC,QAAA,gCAAgC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,SAAS;AAC3D,QAAA,8BAA8B,GAAG,EAAE,CAAA,CAAC,6BAA6B;AAE9E,wBAAwB;AACX,QAAA,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,SAAS;AAChD,QAAA,0BAA0B,GAAG,MAAM,CAAA,CAAC,aAAa;AACjD,QAAA,mBAAmB,GAAG,OAAO,CAAA,CAAC,YAAY;AAEvD,4EAA4E;AAC/D,QAAA,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;AAE3E,gBAAgB;AACH,QAAA,uBAAuB,GAAG,4BAA4B,CAAA;AACnE,oDAAoD;AACpD,yCAAyC;AAC5B,QAAA,oBAAoB,GAAG,mBAAmB,CAAA;AAC1C,QAAA,qBAAqB,GAAG,YAAY,CAAA;AACpC,QAAA,iBAAiB,GAAG,uCAAuC,CAAA;AAC3D,QAAA,kBAAkB,GAAG,IAAI,CAAA;AAEtC,gBAAgB;AACH,QAAA,YAAY,GAAG,OAAO,CAAA;AACtB,QAAA,2BAA2B,GAAG,SAAS,CAAA;AACvC,QAAA,kBAAkB,GAAG,KAAK,CAAA;AAC1B,QAAA,wBAAwB,GAAG,KAAK,CAAA;AAChC,QAAA,0BAA0B,GAAG,OAAO,CAAA;AACpC,QAAA,mBAAmB,GAAG,IAAI,CAAA;AAC1B,QAAA,iBAAiB,GAAG,CAAC,CAAA;AAElC,iBAAiB;AACJ,QAAA,iBAAiB,GAAG,GAAG,CAAA;AACvB,QAAA,iBAAiB,GAAG,GAAG,CAAA;AACvB,QAAA,gBAAgB,GAAG,GAAG,CAAA;AACtB,QAAA,eAAe,GAAG,GAAG,CAAA;AACrB,QAAA,eAAe,GAAG,GAAG,CAAA;AAElC,gBAAgB;AAChB,kDAAkD;AACrC,QAAA,gCAAgC,GAAG,MAAM,CAAA;AAEtD,kEAAkE;AAClE,oDAAoD;AACvC,QAAA,qCAAqC,GAAG,MAAM,CAAA;AAC3D,mGAAmG;AACtF,QAAA,uCAAuC,GAAG,MAAM,CAAA;AAE7D,iBAAiB;AACJ,QAAA,qBAAqB,GAAG,sCAAsC,CAAA;AAC9D,QAAA,oBAAoB,GAAG,qBAAqB,CAAA;AAC5C,QAAA,wBAAwB,GAAG,sBAAsB,CAAA;AACjD,QAAA,wBAAwB,GAAG,sBAAsB,CAAA;AACjD,QAAA,0BAA0B,GAAG,wBAAwB,CAAA;AACrD,QAAA,eAAe,GAAG,yCAAyC,CAAA;AAC3D,QAAA,6BAA6B,GAAG,4EAA4E,CAAA;AAC5G,QAAA,4BAA4B,GAAG,6BAA6B,CAAA;AAC5D,QAAA,wBAAwB,GAAG,0DAA0D,CAAA;AACrF,QAAA,wBAAwB,GAAG,4CAA4C,CAAA;AACvE,QAAA,4BAA4B,GAAG,gDAAgD,CAAA;AAC/E,QAAA,2BAA2B,GAAG,yCAAyC,CAAA;AACvE,QAAA,iCAAiC,GAAG,oDAAoD,CAAA;AACxF,QAAA,4BAA4B,GAAG,2CAA2C,CAAA;AAC1E,QAAA,4BAA4B,GAAG,2CAA2C,CAAA;AAC1E,QAAA,qCAAqC,GAAG,4DAA4D,CAAA;AAEjH,qBAAqB;AACR,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,iBAAiB;IACrE,SAAS,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,kBAAkB;IACvE,gBAAgB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,yBAAyB;IACrF,OAAO,EAAE,CAAC,UAAkB,EAAE,SAAiB,EAAE,EAAE,CAAC,QAAQ,UAAU,mBAAmB,SAAS,EAAE;IACpG,cAAc,EAAE,CAAC,UAAkB,EAAE,SAAiB,EAAE,EAAE,CAAC,QAAQ,UAAU,mBAAmB,SAAS,SAAS;IAClH,cAAc,EAAE,CAAC,UAAkB,EAAE,SAAiB,EAAE,EAAE,CAAC,QAAQ,UAAU,mBAAmB,SAAS,SAAS;IAClH,OAAO,EAAE,oBAAoB;IAC7B,iBAAiB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,0BAA0B;IACvF,MAAM,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,eAAe;IACjE,eAAe,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,wBAAwB;IACnF,cAAc,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,uBAAuB;IACjF,gBAAgB,EAAE,CAAC,UAAkB,EAAE,YAAoB,EAAE,EAAE,CAAC,QAAQ,UAAU,2BAA2B,YAAY,EAAE;IAC3H,cAAc,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,uBAAuB;IACjF,eAAe,EAAE,CAAC,UAAkB,EAAE,MAAc,EAAE,EAAE,CAAC,QAAQ,UAAU,0BAA0B,MAAM,EAAE;IAC7G,mBAAmB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,4BAA4B;IAC3F,iBAAiB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,0BAA0B;IACvF,gBAAgB,EAAE,CAAC,UAAkB,EAAE,WAAmB,EAAE,EAAE,CAAC,QAAQ,UAAU,aAAa,WAAW,yBAAyB;IAClI,kBAAkB,EAAE,CAAC,UAAkB,EAAE,WAAmB,EAAE,EAAE,CAAC,QAAQ,UAAU,aAAa,WAAW,2BAA2B;IACtI,oBAAoB,EAAE,CAAC,UAAkB,EAAE,YAAoB,EAAE,WAAmB,EAAE,EAAE,CACtF,QAAQ,UAAU,8BAA8B,WAAW,SAAS;IACtE,mBAAmB,EAAE,CAAC,UAAkB,EAAE,YAAoB,EAAE,WAAmB,EAAE,EAAE,CACrF,QAAQ,UAAU,8BAA8B,WAAW,QAAQ;IACrE,oBAAoB,EAAE,CAAC,UAAkB,EAAE,YAAoB,EAAE,WAAmB,EAAE,EAAE,CACtF,QAAQ,UAAU,8BAA8B,WAAW,SAAS;IACtE,SAAS,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,mBAAmB;IACxE,WAAW,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,qBAAqB;IAC5E,kBAAkB;IAClB,MAAM,EAAE,CAAC,UAAkB,EAAE,WAAmB,EAAE,EAAE,CAClD,QAAQ,UAAU,aAAa,WAAW,SAAS;IACrD,KAAK,EAAE,CAAC,UAAkB,EAAE,WAAmB,EAAE,WAAmB,EAAE,EAAE,CACtE,QAAQ,UAAU,aAAa,WAAW,WAAW,WAAW,EAAE;IACpE,YAAY,EAAE,CAAC,UAAkB,EAAE,WAAmB,EAAE,WAAmB,EAAE,EAAE,CAC7E,QAAQ,UAAU,aAAa,WAAW,WAAW,WAAW,SAAS;IAC3E,kBAAkB,EAAE,CAAC,UAAkB,EAAE,WAAmB,EAAE,EAAE,CAC9D,QAAQ,UAAU,aAAa,WAAW,sBAAsB;IAClE,mBAAmB,EAAE,CAAC,UAAkB,EAAE,WAAmB,EAAE,WAAmB,EAAE,EAAE,CACpF,QAAQ,UAAU,aAAa,WAAW,WAAW,WAAW,gBAAgB;IAClF,MAAM,EAAE,CAAC,UAAkB,EAAE,WAAmB,EAAE,EAAE,CAClD,QAAQ,UAAU,aAAa,WAAW,SAAS;IACrD,4CAA4C;IAC5C,6BAA6B,EAAE,CAAC,UAAkB,EAAE,EAAE,CACpD,QAAQ,UAAU,iCAAiC;IACrD,wBAAwB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAC/C,QAAQ,UAAU,4BAA4B;
|
|
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":"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"}
|
|
@@ -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"}
|