@ai-support-agent/cli 0.0.4-beta.1 → 0.0.4-beta.10
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-runner.d.ts +1 -0
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +5 -5
- package/dist/agent-runner.js.map +1 -1
- package/dist/api-client.d.ts +4 -2
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +19 -3
- package/dist/api-client.js.map +1 -1
- package/dist/appsync-subscriber.d.ts.map +1 -1
- package/dist/appsync-subscriber.js +8 -2
- package/dist/appsync-subscriber.js.map +1 -1
- package/dist/auth-server.js +1 -1
- package/dist/auth-server.js.map +1 -1
- package/dist/aws-credential-builder.d.ts +19 -0
- package/dist/aws-credential-builder.d.ts.map +1 -0
- package/dist/aws-credential-builder.js +116 -0
- package/dist/aws-credential-builder.js.map +1 -0
- package/dist/aws-profile.d.ts +38 -0
- package/dist/aws-profile.d.ts.map +1 -0
- package/dist/aws-profile.js +162 -0
- package/dist/aws-profile.js.map +1 -0
- package/dist/chat-mode-detector.d.ts.map +1 -1
- package/dist/chat-mode-detector.js +2 -2
- package/dist/chat-mode-detector.js.map +1 -1
- package/dist/commands/api-chat-executor.d.ts.map +1 -1
- package/dist/commands/api-chat-executor.js +40 -15
- package/dist/commands/api-chat-executor.js.map +1 -1
- package/dist/commands/chat-executor.d.ts +3 -2
- package/dist/commands/chat-executor.d.ts.map +1 -1
- package/dist/commands/chat-executor.js +91 -91
- package/dist/commands/chat-executor.js.map +1 -1
- package/dist/commands/claude-code-runner.d.ts +24 -0
- package/dist/commands/claude-code-runner.d.ts.map +1 -0
- package/dist/commands/claude-code-runner.js +126 -0
- package/dist/commands/claude-code-runner.js.map +1 -0
- package/dist/commands/file-executor.js +1 -1
- package/dist/commands/file-executor.js.map +1 -1
- package/dist/commands/index.d.ts +5 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +16 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/process-executor.js +1 -1
- package/dist/commands/process-executor.js.map +1 -1
- package/dist/commands/set-project-dir.d.ts +3 -0
- package/dist/commands/set-project-dir.d.ts.map +1 -0
- package/dist/commands/set-project-dir.js +42 -0
- package/dist/commands/set-project-dir.js.map +1 -0
- package/dist/commands/shared-chat-utils.d.ts.map +1 -1
- package/dist/commands/shared-chat-utils.js +2 -1
- package/dist/commands/shared-chat-utils.js.map +1 -1
- package/dist/commands/shell-executor.js +1 -1
- package/dist/commands/shell-executor.js.map +1 -1
- package/dist/config-manager.d.ts +8 -0
- package/dist/config-manager.d.ts.map +1 -1
- package/dist/config-manager.js +23 -0
- package/dist/config-manager.js.map +1 -1
- package/dist/constants.d.ts +28 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +36 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/locales/en.json +13 -1
- package/dist/locales/ja.json +13 -1
- package/dist/locales/locales/en.json +13 -1
- package/dist/locales/locales/ja.json +13 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +8 -1
- package/dist/logger.js.map +1 -1
- package/dist/project-agent.d.ts +12 -1
- package/dist/project-agent.d.ts.map +1 -1
- package/dist/project-agent.js +138 -72
- package/dist/project-agent.js.map +1 -1
- package/dist/project-config-sync.d.ts +18 -0
- package/dist/project-config-sync.d.ts.map +1 -0
- package/dist/project-config-sync.js +126 -0
- package/dist/project-config-sync.js.map +1 -0
- package/dist/project-dir.d.ts +38 -0
- package/dist/project-dir.d.ts.map +1 -0
- package/dist/project-dir.js +147 -0
- package/dist/project-dir.js.map +1 -0
- package/dist/retry-strategy.d.ts +6 -0
- package/dist/retry-strategy.d.ts.map +1 -1
- package/dist/retry-strategy.js +10 -2
- package/dist/retry-strategy.js.map +1 -1
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +2 -1
- package/dist/security.js.map +1 -1
- package/dist/types.d.ts +76 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +6 -0
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/constants.js
CHANGED
|
@@ -33,7 +33,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
36
|
+
exports.ERR_CONFIG_SYNC_REQUIRES_CALLBACK = exports.ERR_SETUP_REQUIRES_CALLBACK = 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.CHUNK_LOG_LIMIT = exports.LOG_DEBUG_LIMIT = exports.LOG_RESULT_LIMIT = exports.LOG_PAYLOAD_LIMIT = exports.LOG_MESSAGE_LIMIT = exports.DEFAULT_APPSYNC_TIMEOUT_MS = exports.CLAUDE_DETECT_TIMEOUT_MS = exports.CHAT_SIGKILL_DELAY = exports.CHAT_TIMEOUT = exports.DEFAULT_MAX_TOKENS = exports.ANTHROPIC_API_URL = exports.ANTHROPIC_API_VERSION = exports.DEFAULT_ANTHROPIC_MODEL = exports.NPM_INSTALL_TIMEOUT = exports.UPDATE_CHECK_INITIAL_DELAY = exports.UPDATE_CHECK_INTERVAL = exports.PROJECT_CODE_ENV_DEFAULT = exports.PROJECT_CODE_CLI_DIRECT = exports.PROJECT_CODE_DEFAULT = exports.MAX_DIR_ENTRIES = exports.MAX_INTERVAL = exports.MIN_INTERVAL = exports.PROCESS_LIST_TIMEOUT = exports.MAX_FILE_WRITE_SIZE = exports.MAX_FILE_READ_SIZE = exports.MAX_CMD_TIMEOUT = exports.CMD_DEFAULT_TIMEOUT = 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 = void 0;
|
|
37
|
+
exports.CONFIG_SYNC_DEBOUNCE_MS = exports.API_ENDPOINTS = void 0;
|
|
37
38
|
const fs_1 = require("fs");
|
|
38
39
|
const os = __importStar(require("os"));
|
|
39
40
|
const path_1 = require("path");
|
|
@@ -50,7 +51,8 @@ exports.CONFIG_DIR = (() => {
|
|
|
50
51
|
const envDir = process.env.AI_SUPPORT_AGENT_CONFIG_DIR;
|
|
51
52
|
if (!envDir)
|
|
52
53
|
return '.ai-support-agent';
|
|
53
|
-
|
|
54
|
+
const expanded = envDir.replace(/^~(?=$|\/)/, os.homedir());
|
|
55
|
+
return (0, path_1.resolve)(expanded);
|
|
54
56
|
})();
|
|
55
57
|
exports.CONFIG_FILE = 'config.json';
|
|
56
58
|
exports.DEFAULT_POLL_INTERVAL = 3000;
|
|
@@ -82,6 +84,35 @@ exports.PROJECT_CODE_ENV_DEFAULT = 'env-default';
|
|
|
82
84
|
exports.UPDATE_CHECK_INTERVAL = 60 * 60 * 1000; // 1 hour
|
|
83
85
|
exports.UPDATE_CHECK_INITIAL_DELAY = 30_000; // 30 seconds
|
|
84
86
|
exports.NPM_INSTALL_TIMEOUT = 120_000; // 2 minutes
|
|
87
|
+
// Anthropic API
|
|
88
|
+
exports.DEFAULT_ANTHROPIC_MODEL = 'claude-sonnet-4-6-20250514';
|
|
89
|
+
exports.ANTHROPIC_API_VERSION = '2023-06-01';
|
|
90
|
+
exports.ANTHROPIC_API_URL = 'https://api.anthropic.com/v1/messages';
|
|
91
|
+
exports.DEFAULT_MAX_TOKENS = 4096;
|
|
92
|
+
// Chat executor
|
|
93
|
+
exports.CHAT_TIMEOUT = 120_000;
|
|
94
|
+
exports.CHAT_SIGKILL_DELAY = 5_000;
|
|
95
|
+
exports.CLAUDE_DETECT_TIMEOUT_MS = 5_000;
|
|
96
|
+
exports.DEFAULT_APPSYNC_TIMEOUT_MS = 300_000;
|
|
97
|
+
// Log truncation
|
|
98
|
+
exports.LOG_MESSAGE_LIMIT = 100;
|
|
99
|
+
exports.LOG_PAYLOAD_LIMIT = 500;
|
|
100
|
+
exports.LOG_RESULT_LIMIT = 300;
|
|
101
|
+
exports.LOG_DEBUG_LIMIT = 200;
|
|
102
|
+
exports.CHUNK_LOG_LIMIT = 100;
|
|
103
|
+
// Error messages
|
|
104
|
+
exports.ERR_AGENT_ID_REQUIRED = 'agentId is required for chat command';
|
|
105
|
+
exports.ERR_MESSAGE_REQUIRED = 'message is required';
|
|
106
|
+
exports.ERR_NO_COMMAND_SPECIFIED = 'No command specified';
|
|
107
|
+
exports.ERR_NO_CONTENT_SPECIFIED = 'No content specified';
|
|
108
|
+
exports.ERR_NO_FILE_PATH_SPECIFIED = 'No file path specified';
|
|
109
|
+
exports.ERR_INVALID_PID = 'Invalid PID: must be a positive integer';
|
|
110
|
+
exports.ERR_ANTHROPIC_API_KEY_NOT_SET = 'ANTHROPIC_API_KEY is not set. API chat mode requires an Anthropic API key.';
|
|
111
|
+
exports.ERR_AUTH_SERVER_START_FAILED = 'Failed to start auth server';
|
|
112
|
+
exports.ERR_CLAUDE_CLI_NOT_FOUND = 'claude CLI が見つかりません。Claude Code がインストールされていることを確認してください。';
|
|
113
|
+
exports.ERR_CHAT_REQUIRES_CLIENT = 'chat command requires commandId and client';
|
|
114
|
+
exports.ERR_SETUP_REQUIRES_CALLBACK = 'setup command requires onSetup callback';
|
|
115
|
+
exports.ERR_CONFIG_SYNC_REQUIRES_CALLBACK = 'config_sync command requires onConfigSync callback';
|
|
85
116
|
// API endpoint paths
|
|
86
117
|
exports.API_ENDPOINTS = {
|
|
87
118
|
REGISTER: '/api/agent/register',
|
|
@@ -93,5 +124,8 @@ exports.API_ENDPOINTS = {
|
|
|
93
124
|
VERSION: '/api/agent/version',
|
|
94
125
|
CONNECTION_STATUS: '/api/agent/connection-status',
|
|
95
126
|
CONFIG: '/api/agent/config',
|
|
127
|
+
AWS_CREDENTIALS: '/api/agent/aws-credentials',
|
|
128
|
+
PROJECT_CONFIG: '/api/agent/project-config',
|
|
96
129
|
};
|
|
130
|
+
exports.CONFIG_SYNC_DEBOUNCE_MS = 2000;
|
|
97
131
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,48 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
3
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
37
|
const commander_1 = require("commander");
|
|
5
38
|
const agent_runner_1 = require("./agent-runner");
|
|
6
39
|
const auth_commands_1 = require("./cli/auth-commands");
|
|
7
40
|
const status_command_1 = require("./cli/status-command");
|
|
41
|
+
const set_project_dir_1 = require("./commands/set-project-dir");
|
|
42
|
+
const project_dir_1 = require("./project-dir");
|
|
8
43
|
const validators_1 = require("./cli/validators");
|
|
9
44
|
const constants_1 = require("./constants");
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
10
46
|
const config_manager_1 = require("./config-manager");
|
|
11
47
|
const i18n_1 = require("./i18n");
|
|
12
48
|
const logger_1 = require("./logger");
|
|
@@ -45,6 +81,22 @@ program
|
|
|
45
81
|
.description((0, i18n_1.t)('cmd.removeProject'))
|
|
46
82
|
.argument('<projectCode>', (0, i18n_1.t)('cmd.removeProject.arg'))
|
|
47
83
|
.action((projectCode) => {
|
|
84
|
+
// Clean up .ai-support-agent/ metadata directory if project directory exists
|
|
85
|
+
const config = (0, config_manager_1.loadConfig)();
|
|
86
|
+
const project = config?.projects?.find((p) => p.projectCode === projectCode);
|
|
87
|
+
if (project?.projectDir || config?.defaultProjectDir) {
|
|
88
|
+
try {
|
|
89
|
+
const projectDir = (0, project_dir_1.resolveProjectDir)({ projectCode, token: '', apiUrl: '', projectDir: project?.projectDir }, config?.defaultProjectDir);
|
|
90
|
+
const metadataDir = (0, project_dir_1.getMetadataDir)(projectDir);
|
|
91
|
+
if (fs.existsSync(metadataDir)) {
|
|
92
|
+
fs.rmSync(metadataDir, { recursive: true });
|
|
93
|
+
logger_1.logger.info((0, i18n_1.t)('projectDir.cleaned', { metadataDir }));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Ignore cleanup errors
|
|
98
|
+
}
|
|
99
|
+
}
|
|
48
100
|
const removed = (0, config_manager_1.removeProject)(projectCode);
|
|
49
101
|
if (removed) {
|
|
50
102
|
logger_1.logger.success((0, i18n_1.t)('project.removed', { projectCode }));
|
|
@@ -62,5 +114,6 @@ program
|
|
|
62
114
|
logger_1.logger.success((0, i18n_1.t)('config.languageSet', { lang }));
|
|
63
115
|
});
|
|
64
116
|
(0, status_command_1.registerStatusCommand)(program);
|
|
117
|
+
(0, set_project_dir_1.registerSetProjectDirCommand)(program);
|
|
65
118
|
program.parse();
|
|
66
119
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/locales/en.json
CHANGED
|
@@ -92,5 +92,17 @@
|
|
|
92
92
|
"update.forced": "Forced update required: current version is below minimum ({{minimumVersion}}). Updating to {{version}}...",
|
|
93
93
|
"update.disabled": "disabled",
|
|
94
94
|
"update.enabled": "enabled (auto-restart: {{autoRestart}})",
|
|
95
|
-
"update.checkFailed": "Version check failed: {{message}}"
|
|
95
|
+
"update.checkFailed": "Version check failed: {{message}}",
|
|
96
|
+
|
|
97
|
+
"cmd.setProjectDir": "Set project directory",
|
|
98
|
+
"cmd.setProjectDir.project": "Project code",
|
|
99
|
+
"cmd.setProjectDir.path": "Directory path",
|
|
100
|
+
"cmd.setProjectDir.default": "Default directory template (use {projectCode} placeholder)",
|
|
101
|
+
"projectDir.created": "Created project directory: {{projectDir}}",
|
|
102
|
+
"projectDir.set": "Project \"{{projectCode}}\" directory set to {{projectDir}}",
|
|
103
|
+
"projectDir.defaultSet": "Default project directory template set to \"{{template}}\"",
|
|
104
|
+
"projectDir.noProject": "Project \"{{projectCode}}\" is not registered.",
|
|
105
|
+
"projectDir.initialized": "Project directory initialized: {{projectDir}} ({{projectCode}})",
|
|
106
|
+
"projectDir.usageHint": "Usage: set-project-dir --project <code> --path <path> OR --default <template>",
|
|
107
|
+
"projectDir.cleaned": "Cleaned up metadata directory: {{metadataDir}}"
|
|
96
108
|
}
|
package/dist/locales/ja.json
CHANGED
|
@@ -92,5 +92,17 @@
|
|
|
92
92
|
"update.forced": "強制更新が必要です: 現在のバージョンが最低バージョン ({{minimumVersion}}) を下回っています。{{version}} に更新します...",
|
|
93
93
|
"update.disabled": "無効",
|
|
94
94
|
"update.enabled": "有効 (自動再起動: {{autoRestart}})",
|
|
95
|
-
"update.checkFailed": "バージョンチェックに失敗しました: {{message}}"
|
|
95
|
+
"update.checkFailed": "バージョンチェックに失敗しました: {{message}}",
|
|
96
|
+
|
|
97
|
+
"cmd.setProjectDir": "プロジェクトディレクトリを設定",
|
|
98
|
+
"cmd.setProjectDir.project": "プロジェクトコード",
|
|
99
|
+
"cmd.setProjectDir.path": "ディレクトリパス",
|
|
100
|
+
"cmd.setProjectDir.default": "デフォルトディレクトリテンプレート({projectCode} プレースホルダーを使用)",
|
|
101
|
+
"projectDir.created": "プロジェクトディレクトリを作成しました: {{projectDir}}",
|
|
102
|
+
"projectDir.set": "プロジェクト \"{{projectCode}}\" のディレクトリを {{projectDir}} に設定しました",
|
|
103
|
+
"projectDir.defaultSet": "デフォルトプロジェクトディレクトリテンプレートを \"{{template}}\" に設定しました",
|
|
104
|
+
"projectDir.noProject": "プロジェクト \"{{projectCode}}\" は登録されていません。",
|
|
105
|
+
"projectDir.initialized": "プロジェクトディレクトリを初期化しました: {{projectDir}} ({{projectCode}})",
|
|
106
|
+
"projectDir.usageHint": "使い方: set-project-dir --project <code> --path <path> または --default <template>",
|
|
107
|
+
"projectDir.cleaned": "メタデータディレクトリを削除しました: {{metadataDir}}"
|
|
96
108
|
}
|
|
@@ -92,5 +92,17 @@
|
|
|
92
92
|
"update.forced": "Forced update required: current version is below minimum ({{minimumVersion}}). Updating to {{version}}...",
|
|
93
93
|
"update.disabled": "disabled",
|
|
94
94
|
"update.enabled": "enabled (auto-restart: {{autoRestart}})",
|
|
95
|
-
"update.checkFailed": "Version check failed: {{message}}"
|
|
95
|
+
"update.checkFailed": "Version check failed: {{message}}",
|
|
96
|
+
|
|
97
|
+
"cmd.setProjectDir": "Set project directory",
|
|
98
|
+
"cmd.setProjectDir.project": "Project code",
|
|
99
|
+
"cmd.setProjectDir.path": "Directory path",
|
|
100
|
+
"cmd.setProjectDir.default": "Default directory template (use {projectCode} placeholder)",
|
|
101
|
+
"projectDir.created": "Created project directory: {{projectDir}}",
|
|
102
|
+
"projectDir.set": "Project \"{{projectCode}}\" directory set to {{projectDir}}",
|
|
103
|
+
"projectDir.defaultSet": "Default project directory template set to \"{{template}}\"",
|
|
104
|
+
"projectDir.noProject": "Project \"{{projectCode}}\" is not registered.",
|
|
105
|
+
"projectDir.initialized": "Project directory initialized: {{projectDir}} ({{projectCode}})",
|
|
106
|
+
"projectDir.usageHint": "Usage: set-project-dir --project <code> --path <path> OR --default <template>",
|
|
107
|
+
"projectDir.cleaned": "Cleaned up metadata directory: {{metadataDir}}"
|
|
96
108
|
}
|
|
@@ -92,5 +92,17 @@
|
|
|
92
92
|
"update.forced": "強制更新が必要です: 現在のバージョンが最低バージョン ({{minimumVersion}}) を下回っています。{{version}} に更新します...",
|
|
93
93
|
"update.disabled": "無効",
|
|
94
94
|
"update.enabled": "有効 (自動再起動: {{autoRestart}})",
|
|
95
|
-
"update.checkFailed": "バージョンチェックに失敗しました: {{message}}"
|
|
95
|
+
"update.checkFailed": "バージョンチェックに失敗しました: {{message}}",
|
|
96
|
+
|
|
97
|
+
"cmd.setProjectDir": "プロジェクトディレクトリを設定",
|
|
98
|
+
"cmd.setProjectDir.project": "プロジェクトコード",
|
|
99
|
+
"cmd.setProjectDir.path": "ディレクトリパス",
|
|
100
|
+
"cmd.setProjectDir.default": "デフォルトディレクトリテンプレート({projectCode} プレースホルダーを使用)",
|
|
101
|
+
"projectDir.created": "プロジェクトディレクトリを作成しました: {{projectDir}}",
|
|
102
|
+
"projectDir.set": "プロジェクト \"{{projectCode}}\" のディレクトリを {{projectDir}} に設定しました",
|
|
103
|
+
"projectDir.defaultSet": "デフォルトプロジェクトディレクトリテンプレートを \"{{template}}\" に設定しました",
|
|
104
|
+
"projectDir.noProject": "プロジェクト \"{{projectCode}}\" は登録されていません。",
|
|
105
|
+
"projectDir.initialized": "プロジェクトディレクトリを初期化しました: {{projectDir}} ({{projectCode}})",
|
|
106
|
+
"projectDir.usageHint": "使い方: set-project-dir --project <code> --path <path> または --default <template>",
|
|
107
|
+
"projectDir.cleaned": "メタデータディレクトリを削除しました: {{metadataDir}}"
|
|
96
108
|
}
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,MAAM;wBACG,OAAO,GAAG,IAAI;kBAIpB,MAAM,GAAG,IAAI;kBAIb,MAAM,GAAG,IAAI;mBAIZ,MAAM,GAAG,IAAI;mBAIb,MAAM,GAAG,IAAI;qBAMX,MAAM,GAAG,IAAI;CAG/B,CAAA"}
|
package/dist/logger.js
CHANGED
|
@@ -11,7 +11,14 @@ const COLORS = {
|
|
|
11
11
|
};
|
|
12
12
|
let verboseEnabled = false;
|
|
13
13
|
function timestamp() {
|
|
14
|
-
|
|
14
|
+
const now = new Date();
|
|
15
|
+
const y = now.getFullYear();
|
|
16
|
+
const mo = String(now.getMonth() + 1).padStart(2, '0');
|
|
17
|
+
const d = String(now.getDate()).padStart(2, '0');
|
|
18
|
+
const h = String(now.getHours()).padStart(2, '0');
|
|
19
|
+
const mi = String(now.getMinutes()).padStart(2, '0');
|
|
20
|
+
const s = String(now.getSeconds()).padStart(2, '0');
|
|
21
|
+
return `${y}-${mo}-${d} ${h}:${mi}:${s}`;
|
|
15
22
|
}
|
|
16
23
|
function formatLog(level, color, message) {
|
|
17
24
|
return `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${color}${level}${COLORS.reset} ${message}`;
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAAA,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;CACR,CAAA;AAEV,IAAI,cAAc,GAAG,KAAK,CAAA;AAE1B,SAAS,SAAS;IAChB,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAAA,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;CACR,CAAA;AAEV,IAAI,cAAc,GAAG,KAAK,CAAA;AAE1B,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAChD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnD,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAA;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,KAAa,EAAE,OAAe;IAC9D,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,CAAA;AACnG,CAAC;AAEY,QAAA,MAAM,GAAG;IACpB,UAAU,CAAC,OAAgB;QACzB,cAAc,GAAG,OAAO,CAAA;IAC1B,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,CAAA;IAC3D,CAAC;CACF,CAAA"}
|
package/dist/project-agent.d.ts
CHANGED
|
@@ -18,7 +18,11 @@ export declare class ProjectAgent {
|
|
|
18
18
|
private availableChatModes;
|
|
19
19
|
private activeChatMode;
|
|
20
20
|
private readonly localAgentChatMode;
|
|
21
|
-
|
|
21
|
+
private readonly projectDir;
|
|
22
|
+
private currentConfigHash;
|
|
23
|
+
private configSyncDebounceTimer;
|
|
24
|
+
private projectConfig;
|
|
25
|
+
constructor(project: ProjectRegistration, agentId: string, options: ProjectAgentOptions, tenantCode?: string, localAgentChatMode?: AgentChatMode, defaultProjectDir?: string);
|
|
22
26
|
start(): void;
|
|
23
27
|
stop(): void;
|
|
24
28
|
getClient(): ApiClient;
|
|
@@ -27,6 +31,13 @@ export declare class ProjectAgent {
|
|
|
27
31
|
private startPollingMode;
|
|
28
32
|
private startHeartbeat;
|
|
29
33
|
private handleNotification;
|
|
34
|
+
private handleConfigUpdate;
|
|
35
|
+
private scheduleConfigSync;
|
|
36
|
+
performConfigSync(): Promise<void>;
|
|
37
|
+
performSetup(): Promise<void>;
|
|
38
|
+
private applyProjectConfig;
|
|
39
|
+
private processCommand;
|
|
40
|
+
private refreshChatMode;
|
|
30
41
|
private checkPendingCommands;
|
|
31
42
|
}
|
|
32
43
|
//# sourceMappingURL=project-agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-agent.d.ts","sourceRoot":"","sources":["../src/project-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"project-agent.d.ts","sourceRoot":"","sources":["../src/project-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAWxC,OAAO,KAAK,EAAE,aAAa,EAA4C,mBAAmB,EAAoB,MAAM,SAAS,CAAA;AAG7H,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,qBAAa,YAAY;IAmBrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnB1B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,uBAAuB,CAA6C;IAC5E,OAAO,CAAC,aAAa,CAA+C;gBAGlE,OAAO,EAAE,mBAAmB,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC7C,UAAU,CAAC,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,aAAa,EAClC,iBAAiB,CAAC,EAAE,MAAM;IAU5B,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAOZ,SAAS,IAAI,SAAS;YAIR,gBAAgB;YAoChB,qBAAqB;IAuBnC,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,cAAc;YAoCR,kBAAkB;YA2BlB,kBAAkB;IAQhC,OAAO,CAAC,kBAAkB;IASpB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYlC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC,OAAO,CAAC,kBAAkB;YA8BZ,cAAc;YAuCd,eAAe;YA8Bf,oBAAoB;CAkBnC"}
|
package/dist/project-agent.js
CHANGED
|
@@ -39,8 +39,12 @@ const api_client_1 = require("./api-client");
|
|
|
39
39
|
const appsync_subscriber_1 = require("./appsync-subscriber");
|
|
40
40
|
const chat_mode_detector_1 = require("./chat-mode-detector");
|
|
41
41
|
const commands_1 = require("./commands");
|
|
42
|
+
const constants_1 = require("./constants");
|
|
42
43
|
const i18n_1 = require("./i18n");
|
|
43
44
|
const logger_1 = require("./logger");
|
|
45
|
+
const aws_profile_1 = require("./aws-profile");
|
|
46
|
+
const project_config_sync_1 = require("./project-config-sync");
|
|
47
|
+
const project_dir_1 = require("./project-dir");
|
|
44
48
|
const system_info_1 = require("./system-info");
|
|
45
49
|
const utils_1 = require("./utils");
|
|
46
50
|
class ProjectAgent {
|
|
@@ -57,13 +61,19 @@ class ProjectAgent {
|
|
|
57
61
|
availableChatModes = [];
|
|
58
62
|
activeChatMode = undefined;
|
|
59
63
|
localAgentChatMode;
|
|
60
|
-
|
|
64
|
+
projectDir;
|
|
65
|
+
currentConfigHash = undefined;
|
|
66
|
+
configSyncDebounceTimer = null;
|
|
67
|
+
projectConfig = undefined;
|
|
68
|
+
constructor(project, agentId, options, tenantCode, localAgentChatMode, defaultProjectDir) {
|
|
61
69
|
this.agentId = agentId;
|
|
62
70
|
this.options = options;
|
|
63
71
|
this.client = new api_client_1.ApiClient(project.apiUrl, project.token);
|
|
64
72
|
this.prefix = `[${project.projectCode}]`;
|
|
65
73
|
this.tenantCode = tenantCode ?? project.projectCode;
|
|
66
74
|
this.localAgentChatMode = localAgentChatMode;
|
|
75
|
+
// Always resolve project directory (uses default template if neither is set)
|
|
76
|
+
this.projectDir = (0, project_dir_1.initProjectDir)(project, defaultProjectDir);
|
|
67
77
|
}
|
|
68
78
|
start() {
|
|
69
79
|
this.registerAndStart().catch((error) => {
|
|
@@ -75,6 +85,8 @@ class ProjectAgent {
|
|
|
75
85
|
clearInterval(this.heartbeatTimer);
|
|
76
86
|
if (this.pollTimer)
|
|
77
87
|
clearInterval(this.pollTimer);
|
|
88
|
+
if (this.configSyncDebounceTimer)
|
|
89
|
+
clearTimeout(this.configSyncDebounceTimer);
|
|
78
90
|
if (this.subscriber)
|
|
79
91
|
this.subscriber.disconnect();
|
|
80
92
|
}
|
|
@@ -82,20 +94,7 @@ class ProjectAgent {
|
|
|
82
94
|
return this.client;
|
|
83
95
|
}
|
|
84
96
|
async registerAndStart() {
|
|
85
|
-
|
|
86
|
-
this.availableChatModes = await (0, chat_mode_detector_1.detectAvailableChatModes)();
|
|
87
|
-
logger_1.logger.info(`${this.prefix} Available chat modes: ${JSON.stringify(this.availableChatModes)}`);
|
|
88
|
-
// サーバーからエージェント設定を取得
|
|
89
|
-
try {
|
|
90
|
-
this.serverConfig = await this.client.getConfig();
|
|
91
|
-
logger_1.logger.info(`${this.prefix} Server config loaded: chatMode=${this.serverConfig.chatMode}`);
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
logger_1.logger.warn(`${this.prefix} Failed to load server config, using defaults: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
95
|
-
}
|
|
96
|
-
// アクティブチャットモードを決定
|
|
97
|
-
this.activeChatMode = (0, chat_mode_detector_1.resolveActiveChatMode)(this.availableChatModes, this.localAgentChatMode, this.serverConfig?.defaultAgentChatMode);
|
|
98
|
-
logger_1.logger.info(`${this.prefix} Active chat mode: ${this.activeChatMode ?? 'none'}`);
|
|
97
|
+
await this.refreshChatMode(true);
|
|
99
98
|
let result;
|
|
100
99
|
try {
|
|
101
100
|
result = await this.client.register({
|
|
@@ -115,6 +114,8 @@ class ProjectAgent {
|
|
|
115
114
|
logger_1.logger.error((0, i18n_1.t)('runner.registerFailed', { prefix: this.prefix, message: (0, utils_1.getErrorMessage)(error) }));
|
|
116
115
|
return;
|
|
117
116
|
}
|
|
117
|
+
// Perform initial config sync
|
|
118
|
+
await this.performConfigSync();
|
|
118
119
|
if (result.transportMode === 'realtime' && result.appsyncUrl && result.appsyncApiKey) {
|
|
119
120
|
logger_1.logger.info(`${this.prefix} Starting subscription mode (realtime)`);
|
|
120
121
|
await this.startSubscriptionMode(result);
|
|
@@ -154,37 +155,7 @@ class ProjectAgent {
|
|
|
154
155
|
}
|
|
155
156
|
for (const cmd of pending) {
|
|
156
157
|
logger_1.logger.info((0, i18n_1.t)('runner.commandReceived', { prefix: this.prefix, type: cmd.type, commandId: cmd.commandId }));
|
|
157
|
-
|
|
158
|
-
const detail = await this.client.getCommand(cmd.commandId, this.agentId);
|
|
159
|
-
logger_1.logger.debug(`${this.prefix} Command detail [${cmd.commandId}]: type=${detail.type}, payload=${JSON.stringify(detail.payload).substring(0, 500)}`);
|
|
160
|
-
const result = await (0, commands_1.executeCommand)(detail.type, detail.payload, {
|
|
161
|
-
commandId: cmd.commandId,
|
|
162
|
-
client: this.client,
|
|
163
|
-
serverConfig: this.serverConfig ?? undefined,
|
|
164
|
-
activeChatMode: this.activeChatMode,
|
|
165
|
-
agentId: this.agentId,
|
|
166
|
-
});
|
|
167
|
-
logger_1.logger.debug(`${this.prefix} Command result [${cmd.commandId}]: success=${result.success}, data=${JSON.stringify(result.success ? result.data : result.error).substring(0, 300)}`);
|
|
168
|
-
await this.client.submitResult(cmd.commandId, result, this.agentId);
|
|
169
|
-
logger_1.logger.info((0, i18n_1.t)('runner.commandDone', {
|
|
170
|
-
prefix: this.prefix,
|
|
171
|
-
commandId: cmd.commandId,
|
|
172
|
-
result: result.success ? 'success' : 'failed',
|
|
173
|
-
}));
|
|
174
|
-
}
|
|
175
|
-
catch (error) {
|
|
176
|
-
const message = (0, utils_1.getErrorMessage)(error);
|
|
177
|
-
logger_1.logger.error((0, i18n_1.t)('runner.commandError', { prefix: this.prefix, commandId: cmd.commandId, message }));
|
|
178
|
-
try {
|
|
179
|
-
await this.client.submitResult(cmd.commandId, {
|
|
180
|
-
success: false,
|
|
181
|
-
error: message,
|
|
182
|
-
}, this.agentId);
|
|
183
|
-
}
|
|
184
|
-
catch {
|
|
185
|
-
logger_1.logger.error((0, i18n_1.t)('runner.resultSendFailed', { prefix: this.prefix }));
|
|
186
|
-
}
|
|
187
|
-
}
|
|
158
|
+
await this.processCommand(cmd.commandId);
|
|
188
159
|
}
|
|
189
160
|
}
|
|
190
161
|
catch (error) {
|
|
@@ -201,18 +172,16 @@ class ProjectAgent {
|
|
|
201
172
|
startHeartbeat() {
|
|
202
173
|
const sendHeartbeat = async () => {
|
|
203
174
|
try {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
//
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
175
|
+
await this.refreshChatMode(false);
|
|
176
|
+
const response = await this.client.heartbeat(this.agentId, (0, system_info_1.getSystemInfo)(), undefined, this.availableChatModes, this.activeChatMode, (0, system_info_1.getLocalIpAddress)());
|
|
177
|
+
// Check configHash from heartbeat response (polling fallback)
|
|
178
|
+
if (response && typeof response === 'object' && 'configHash' in response) {
|
|
179
|
+
const heartbeatResponse = response;
|
|
180
|
+
if (heartbeatResponse.configHash && heartbeatResponse.configHash !== this.currentConfigHash) {
|
|
181
|
+
logger_1.logger.info(`${this.prefix} Config hash changed in heartbeat response, syncing...`);
|
|
182
|
+
this.scheduleConfigSync();
|
|
183
|
+
}
|
|
212
184
|
}
|
|
213
|
-
// アクティブチャットモード再計算
|
|
214
|
-
this.activeChatMode = (0, chat_mode_detector_1.resolveActiveChatMode)(this.availableChatModes, this.localAgentChatMode, this.serverConfig?.defaultAgentChatMode);
|
|
215
|
-
await this.client.heartbeat(this.agentId, (0, system_info_1.getSystemInfo)(), undefined, this.availableChatModes, this.activeChatMode);
|
|
216
185
|
logger_1.logger.debug(`${this.prefix} Heartbeat sent (activeChatMode=${this.activeChatMode ?? 'none'})`);
|
|
217
186
|
}
|
|
218
187
|
catch (error) {
|
|
@@ -225,32 +194,105 @@ class ProjectAgent {
|
|
|
225
194
|
void sendHeartbeat();
|
|
226
195
|
}
|
|
227
196
|
async handleNotification(notification) {
|
|
228
|
-
logger_1.logger.debug(`${this.prefix} Notification received: action=${notification.action}, content=${JSON.stringify(notification.content ?? {}).substring(0,
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
197
|
+
logger_1.logger.debug(`${this.prefix} Notification received: action=${notification.action}, content=${JSON.stringify(notification.content ?? {}).substring(0, constants_1.LOG_RESULT_LIMIT)}`);
|
|
198
|
+
switch (notification.action) {
|
|
199
|
+
case 'agent-command': {
|
|
200
|
+
const commandId = notification.content?.commandId;
|
|
201
|
+
if (!commandId) {
|
|
202
|
+
logger_1.logger.warn(`${this.prefix} Notification missing commandId: ${JSON.stringify(notification.content ?? {})}`);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
logger_1.logger.info((0, i18n_1.t)('runner.commandReceived', {
|
|
206
|
+
prefix: this.prefix,
|
|
207
|
+
type: notification.content?.type ?? 'unknown',
|
|
208
|
+
commandId,
|
|
209
|
+
}));
|
|
210
|
+
await this.processCommand(commandId);
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case 'config-update': {
|
|
214
|
+
await this.handleConfigUpdate(notification);
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
default:
|
|
218
|
+
logger_1.logger.debug(`${this.prefix} Ignoring notification with action: ${notification.action}`);
|
|
232
219
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
220
|
+
}
|
|
221
|
+
async handleConfigUpdate(notification) {
|
|
222
|
+
const newHash = notification.content?.configHash;
|
|
223
|
+
if (newHash && newHash !== this.currentConfigHash) {
|
|
224
|
+
logger_1.logger.info(`${this.prefix} Config update detected (hash: ${newHash})`);
|
|
225
|
+
this.scheduleConfigSync();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
scheduleConfigSync() {
|
|
229
|
+
if (this.configSyncDebounceTimer) {
|
|
230
|
+
clearTimeout(this.configSyncDebounceTimer);
|
|
231
|
+
}
|
|
232
|
+
this.configSyncDebounceTimer = setTimeout(() => {
|
|
233
|
+
void this.performConfigSync();
|
|
234
|
+
}, constants_1.CONFIG_SYNC_DEBOUNCE_MS);
|
|
235
|
+
}
|
|
236
|
+
async performConfigSync() {
|
|
237
|
+
const config = await (0, project_config_sync_1.syncProjectConfig)(this.client, this.currentConfigHash, this.projectDir, this.prefix);
|
|
238
|
+
if (config) {
|
|
239
|
+
this.applyProjectConfig(config);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
async performSetup() {
|
|
243
|
+
logger_1.logger.info(`${this.prefix} Starting setup...`);
|
|
244
|
+
// 1. Config sync
|
|
245
|
+
await this.performConfigSync();
|
|
246
|
+
// 2. Download documentation (future: repos clone)
|
|
247
|
+
if (this.projectConfig?.documentation?.sources) {
|
|
248
|
+
logger_1.logger.info(`${this.prefix} Documentation sources found: ${this.projectConfig.documentation.sources.length}`);
|
|
249
|
+
// Documentation download will be implemented in a future phase
|
|
237
250
|
}
|
|
238
|
-
logger_1.logger.info(
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
251
|
+
logger_1.logger.info(`${this.prefix} Setup completed`);
|
|
252
|
+
}
|
|
253
|
+
applyProjectConfig(config) {
|
|
254
|
+
this.currentConfigHash = config.configHash;
|
|
255
|
+
this.projectConfig = config;
|
|
256
|
+
// Update serverConfig from project config
|
|
257
|
+
this.serverConfig = {
|
|
258
|
+
agentEnabled: config.agent.agentEnabled,
|
|
259
|
+
builtinAgentEnabled: config.agent.builtinAgentEnabled,
|
|
260
|
+
builtinFallbackEnabled: config.agent.builtinFallbackEnabled,
|
|
261
|
+
externalAgentEnabled: config.agent.externalAgentEnabled,
|
|
262
|
+
chatMode: 'agent',
|
|
263
|
+
claudeCodeConfig: {
|
|
264
|
+
allowedTools: config.agent.allowedTools,
|
|
265
|
+
addDirs: config.agent.claudeCodeConfig?.additionalDirs,
|
|
266
|
+
systemPrompt: config.agent.claudeCodeConfig?.appendSystemPrompt,
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
// Write AWS config file if project directory and AWS accounts are configured
|
|
270
|
+
if (this.projectDir && config.aws?.accounts?.length) {
|
|
271
|
+
try {
|
|
272
|
+
(0, aws_profile_1.writeAwsConfig)(this.projectDir, config.project.projectCode, config.aws.accounts);
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
logger_1.logger.warn(`${this.prefix} Failed to write AWS config: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
logger_1.logger.info(`${this.prefix} Config applied (hash: ${config.configHash})`);
|
|
279
|
+
}
|
|
280
|
+
async processCommand(commandId) {
|
|
243
281
|
try {
|
|
244
282
|
const detail = await this.client.getCommand(commandId, this.agentId);
|
|
245
|
-
logger_1.logger.debug(`${this.prefix} Command detail [${commandId}]: type=${detail.type}, payload=${JSON.stringify(detail.payload).substring(0,
|
|
283
|
+
logger_1.logger.debug(`${this.prefix} Command detail [${commandId}]: type=${detail.type}, payload=${JSON.stringify(detail.payload).substring(0, constants_1.LOG_PAYLOAD_LIMIT)}`);
|
|
246
284
|
const result = await (0, commands_1.executeCommand)(detail.type, detail.payload, {
|
|
247
285
|
commandId,
|
|
248
286
|
client: this.client,
|
|
249
287
|
serverConfig: this.serverConfig ?? undefined,
|
|
250
288
|
activeChatMode: this.activeChatMode,
|
|
251
289
|
agentId: this.agentId,
|
|
290
|
+
projectDir: this.projectDir,
|
|
291
|
+
projectConfig: this.projectConfig,
|
|
292
|
+
onSetup: () => this.performSetup(),
|
|
293
|
+
onConfigSync: () => this.performConfigSync(),
|
|
252
294
|
});
|
|
253
|
-
logger_1.logger.debug(`${this.prefix} Command result [${commandId}]: success=${result.success}, data=${JSON.stringify(result.success ? result.data : result.error).substring(0,
|
|
295
|
+
logger_1.logger.debug(`${this.prefix} Command result [${commandId}]: success=${result.success}, data=${JSON.stringify(result.success ? result.data : result.error).substring(0, constants_1.LOG_RESULT_LIMIT)}`);
|
|
254
296
|
await this.client.submitResult(commandId, result, this.agentId);
|
|
255
297
|
logger_1.logger.info((0, i18n_1.t)('runner.commandDone', {
|
|
256
298
|
prefix: this.prefix,
|
|
@@ -272,6 +314,30 @@ class ProjectAgent {
|
|
|
272
314
|
}
|
|
273
315
|
}
|
|
274
316
|
}
|
|
317
|
+
async refreshChatMode(verbose) {
|
|
318
|
+
this.availableChatModes = await (0, chat_mode_detector_1.detectAvailableChatModes)();
|
|
319
|
+
if (verbose) {
|
|
320
|
+
logger_1.logger.info(`${this.prefix} Available chat modes: ${JSON.stringify(this.availableChatModes)}`);
|
|
321
|
+
}
|
|
322
|
+
try {
|
|
323
|
+
this.serverConfig = await this.client.getConfig();
|
|
324
|
+
if (verbose) {
|
|
325
|
+
logger_1.logger.info(`${this.prefix} Server config loaded: chatMode=${this.serverConfig.chatMode}`);
|
|
326
|
+
if (this.serverConfig.claudeCodeConfig) {
|
|
327
|
+
logger_1.logger.debug(`${this.prefix} claudeCodeConfig: allowedTools=[${this.serverConfig.claudeCodeConfig.allowedTools?.join(', ') ?? ''}], addDirs=[${this.serverConfig.claudeCodeConfig.addDirs?.join(', ') ?? ''}]`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
if (verbose) {
|
|
333
|
+
logger_1.logger.warn(`${this.prefix} Failed to load server config, using defaults: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
this.activeChatMode = (0, chat_mode_detector_1.resolveActiveChatMode)(this.availableChatModes, this.localAgentChatMode, this.serverConfig?.defaultAgentChatMode);
|
|
337
|
+
if (verbose) {
|
|
338
|
+
logger_1.logger.info(`${this.prefix} Active chat mode: ${this.activeChatMode ?? 'none'}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
275
341
|
async checkPendingCommands() {
|
|
276
342
|
try {
|
|
277
343
|
const pending = await this.client.getPendingCommands(this.agentId);
|