@ai-support-agent/cli 0.3.0 → 0.3.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/ansible/callback_plugins/json.py +146 -0
  2. package/ansible/callback_plugins/tests/test_json_callback.py +171 -0
  3. package/ansible/playbook.yml +52 -0
  4. package/ansible/roles/database/tasks/main.yml +121 -0
  5. package/ansible/roles/dns_tls/tasks/main.yml +75 -0
  6. package/ansible/roles/dns_tls/templates/Caddyfile.j2 +4 -0
  7. package/ansible/roles/docker/tasks/main.yml +51 -0
  8. package/ansible/roles/os_init/tasks/main.yml +61 -0
  9. package/ansible/roles/web_server/tasks/main.yml +47 -0
  10. package/dist/api-client.d.ts +26 -1
  11. package/dist/api-client.d.ts.map +1 -1
  12. package/dist/api-client.js +40 -0
  13. package/dist/api-client.js.map +1 -1
  14. package/dist/commands/chat-executor.js +1 -1
  15. package/dist/commands/chat-executor.js.map +1 -1
  16. package/dist/commands/index.d.ts.map +1 -1
  17. package/dist/commands/index.js +14 -0
  18. package/dist/commands/index.js.map +1 -1
  19. package/dist/constants.d.ts +3 -0
  20. package/dist/constants.d.ts.map +1 -1
  21. package/dist/constants.js +7 -0
  22. package/dist/constants.js.map +1 -1
  23. package/dist/mcp/config-writer.d.ts +24 -1
  24. package/dist/mcp/config-writer.d.ts.map +1 -1
  25. package/dist/mcp/config-writer.js +27 -2
  26. package/dist/mcp/config-writer.js.map +1 -1
  27. package/dist/mcp/server.d.ts.map +1 -1
  28. package/dist/mcp/server.js +4 -0
  29. package/dist/mcp/server.js.map +1 -1
  30. package/dist/mcp/tools/send-slack-file.d.ts +5 -0
  31. package/dist/mcp/tools/send-slack-file.d.ts.map +1 -0
  32. package/dist/mcp/tools/send-slack-file.js +22 -0
  33. package/dist/mcp/tools/send-slack-file.js.map +1 -0
  34. package/dist/mcp/tools/update-system-knowledge.d.ts +29 -0
  35. package/dist/mcp/tools/update-system-knowledge.d.ts.map +1 -0
  36. package/dist/mcp/tools/update-system-knowledge.js +63 -0
  37. package/dist/mcp/tools/update-system-knowledge.js.map +1 -0
  38. package/dist/oneshot-runner.d.ts.map +1 -1
  39. package/dist/oneshot-runner.js +5 -2
  40. package/dist/oneshot-runner.js.map +1 -1
  41. package/dist/server-setup/known-hosts-store.d.ts +16 -0
  42. package/dist/server-setup/known-hosts-store.d.ts.map +1 -0
  43. package/dist/server-setup/known-hosts-store.js +89 -0
  44. package/dist/server-setup/known-hosts-store.js.map +1 -0
  45. package/dist/server-setup/server-setup-runner.d.ts +27 -0
  46. package/dist/server-setup/server-setup-runner.d.ts.map +1 -0
  47. package/dist/server-setup/server-setup-runner.js +576 -0
  48. package/dist/server-setup/server-setup-runner.js.map +1 -0
  49. package/dist/types/command.d.ts +5 -1
  50. package/dist/types/command.d.ts.map +1 -1
  51. package/dist/types/command.js.map +1 -1
  52. package/dist/types/index.d.ts +1 -0
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/dist/types/index.js +1 -0
  55. package/dist/types/index.js.map +1 -1
  56. package/dist/types/server-setup.d.ts +30 -0
  57. package/dist/types/server-setup.d.ts.map +1 -0
  58. package/dist/types/server-setup.js +12 -0
  59. package/dist/types/server-setup.js.map +1 -0
  60. package/dist/types/tool-output.d.ts +71 -0
  61. package/dist/types/tool-output.d.ts.map +1 -1
  62. package/docker/Dockerfile +30 -1
  63. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/mcp/config-writer.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,kCAAkC,CAAA;AAErE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mBAAmB,+BAA+B,CAAA;AAE/D;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,uBAAuB,CAAA;AAE/C;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,gBAAgB,EAAE,EACnC,UAAU,CAAC,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,CAkDR;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CA4BR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,EACtB,QAAQ,GAAE,MAA4B,GACrC,MAAM,CA0BR"}
1
+ {"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/mcp/config-writer.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,kCAAkC,CAAA;AAErE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mBAAmB,+BAA+B,CAAA;AAE/D;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,uBAAuB,CAAA;AAE/C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,wBAAwB,0CAA0C,CAAA;AAE/E;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,wCAAwC,CAAA;AAE3E;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,gBAAgB,EAAE,EACnC,UAAU,CAAC,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,CAkDR;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CA8BR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,EACtB,QAAQ,GAAE,MAA4B,GACrC,MAAM,CA0BR"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TASK_ID_ENV = exports.CONVERSATION_ID_ENV = exports.BROWSER_LOCAL_PORT_ENV = void 0;
3
+ exports.KNOWLEDGE_AGENT_ID_ENV = exports.KNOWLEDGE_COMMAND_ID_ENV = exports.TASK_ID_ENV = exports.CONVERSATION_ID_ENV = exports.BROWSER_LOCAL_PORT_ENV = void 0;
4
4
  exports.getMcpConfigPath = getMcpConfigPath;
5
5
  exports.buildMcpConfig = buildMcpConfig;
6
6
  exports.writeMcpConfig = writeMcpConfig;
@@ -72,6 +72,29 @@ exports.CONVERSATION_ID_ENV = 'AI_SUPPORT_CONVERSATION_ID';
72
72
  * 必要がある。
73
73
  */
74
74
  exports.TASK_ID_ENV = 'AI_SUPPORT_TASK_ID';
75
+ /**
76
+ * このナレッジ登録依頼の元になったチャットコマンドのID の環境変数名。
77
+ *
78
+ * `update_system_knowledge` MCPツールが子プロセス側で
79
+ * `process.env[KNOWLEDGE_COMMAND_ID_ENV]` として読み取り、ナレッジ登録/改訂API
80
+ * (`POST /api/:tenantCode/agent/knowledge`)へ `commandId` として渡す。api側はこの
81
+ * `commandId` を使って `AgentCommandQueueService.getCommand(commandId, agentId, tenantCode)`
82
+ * によりコマンド生成時に刻印された本物の `knowledgeCanPublish`/`knowledgeRequesterUserId`
83
+ * を引き当てる(クライアント自己申告の値は信用しない)。LLM/モデルがツール呼び出し引数として
84
+ * 自由に指定できる値ではないため、ツールのスキーマには含めず、`CONVERSATION_ID_ENV`/
85
+ * `TASK_ID_ENV` と同じ理由(`StdioClientTransport` が呼び出し元プロセスの任意の環境変数を
86
+ * MCPサーバー子プロセスへ自動継承しない)により、per-command ファイルの `env` に明示的に
87
+ * 埋め込む必要がある。値は `writeCommandMcpConfig` の `commandId` 引数(呼び出し元が既に
88
+ * 持っている値)をそのまま使うため、常に埋め込まれる。
89
+ */
90
+ exports.KNOWLEDGE_COMMAND_ID_ENV = 'AI_SUPPORT_AGENT_KNOWLEDGE_COMMAND_ID';
91
+ /**
92
+ * エージェント自身の agentId の環境変数名。`KNOWLEDGE_COMMAND_ID_ENV` と組み合わせて
93
+ * api側が `AgentCommandQueueService.getCommand(commandId, agentId, tenantCode)` で
94
+ * コマンドレコードを引き当てるために使う。`KNOWLEDGE_COMMAND_ID_ENV` と同じ理由・同じ経路で
95
+ * per-command ファイルの `env` に埋め込む必要がある。
96
+ */
97
+ exports.KNOWLEDGE_AGENT_ID_ENV = 'AI_SUPPORT_AGENT_KNOWLEDGE_AGENT_ID';
75
98
  /**
76
99
  * MCP 設定ファイルを書き出す
77
100
  *
@@ -159,7 +182,7 @@ function sanitizeCommandIdForFilename(commandId) {
159
182
  * (claude/codex CLI)の任意の環境変数は自動継承されないため(`CONVERSATION_ID_ENV`
160
183
  * の定義コメント参照)。
161
184
  */
162
- function writeCommandMcpConfig(baseConfigPath, commandId, conversationId, taskId) {
185
+ function writeCommandMcpConfig(baseConfigPath, commandId, conversationId, taskId, agentId) {
163
186
  const raw = (0, fs_1.readFileSync)(baseConfigPath, 'utf-8');
164
187
  const config = JSON.parse(raw);
165
188
  const server = config.mcpServers?.['ai-support-agent'];
@@ -168,6 +191,8 @@ function writeCommandMcpConfig(baseConfigPath, commandId, conversationId, taskId
168
191
  ...(server.env ?? {}),
169
192
  [exports.CONVERSATION_ID_ENV]: conversationId,
170
193
  ...(taskId && { [exports.TASK_ID_ENV]: taskId }),
194
+ [exports.KNOWLEDGE_COMMAND_ID_ENV]: commandId,
195
+ ...(agentId && { [exports.KNOWLEDGE_AGENT_ID_ENV]: agentId }),
171
196
  };
172
197
  }
173
198
  const dir = (0, path_1.dirname)(baseConfigPath);
@@ -1 +1 @@
1
- {"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/mcp/config-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/mcp/config-writer.ts"],"names":[],"mappings":";;;AAeA,4CAEC;AAOD,wCAoBC;AAqED,wCA2DC;AAiDD,sDAoCC;AAgBD,sEA6BC;AA9SD,mCAAmC;AACnC,2BAA0F;AAC1F,+BAAoC;AAEpC,sCAAkC;AAClC,oCAA0C;AAO1C;;GAEG;AACH,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,OAAO,IAAA,WAAI,EAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAC5B,MAAc,EACd,WAAmB,EACnB,aAAqB,EACrB,UAAkB;IAElB,OAAO;QACL,UAAU,EAAE;YACV,kBAAkB,EAAE;gBAClB,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,aAAa,CAAC;gBACrB,GAAG,EAAE;oBACH,wBAAwB,EAAE,MAAM;oBAChC,sBAAsB,EAAE,2BAA2B;oBACnD,6BAA6B,EAAE,WAAW;oBAC1C,4BAA4B,EAAE,UAAU;iBACzC;aACF;SACF;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACU,QAAA,sBAAsB,GAAG,+BAA+B,CAAA;AAErE;;;;;;;;;;;;;;;;;GAiBG;AACU,QAAA,mBAAmB,GAAG,4BAA4B,CAAA;AAE/D;;;;;;;;;GASG;AACU,QAAA,WAAW,GAAG,oBAAoB,CAAA;AAE/C;;;;;;;;;;;;;;GAcG;AACU,QAAA,wBAAwB,GAAG,uCAAuC,CAAA;AAE/E;;;;;GAKG;AACU,QAAA,sBAAsB,GAAG,qCAAqC,CAAA;AAE3E;;;;GAIG;AACH,SAAgB,cAAc,CAC5B,UAAkB,EAClB,MAAc,EACd,KAAa,EACb,WAAmB,EACnB,aAAqB,EACrB,cAAmC,EACnC,UAAmB,EACnB,gBAAyB;IAEzB,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,UAAU,CAAC,CAAA;IAE/B,IAAA,cAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAEhD,iFAAiF;IACjF,MAAM,kBAAkB,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1C,CAAC,CAAC,EAAE,CAAA;IAEJ,wCAAwC;IACxC,MAAM,MAAM,GAA4B;QACtC,UAAU,EAAE;YACV,kBAAkB,EAAE;gBAClB,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,aAAa,CAAC;gBACrB,GAAG,EAAE;oBACH,wBAAwB,EAAE,MAAM;oBAChC,sBAAsB,EAAE,KAAK;oBAC7B,6BAA6B,EAAE,WAAW;oBAC1C,4BAA4B,EAAE,kBAAkB;oBAChD,GAAG,CAAC,gBAAgB,IAAI;wBACtB,CAAC,8BAAsB,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;qBACnD,CAAC;iBACH;aACF;YACD,6BAA6B;YAC7B,GAAG,CAAC,cAAc,EAAE,MAAM;gBACxB,CAAC,CAAC;oBACE,OAAO,EAAE;wBACP,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,CAAC,oBAAoB,CAAC;wBAC5B,GAAG,EAAE;4BACH,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM;4BACxC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM;yBAC1C;qBACF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CAAA;IAED,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACzD,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AAYD;;;GAGG;AACH,SAAS,4BAA4B,CAAC,SAAiB;IACrD,OAAO,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,SAAgB,qBAAqB,CACnC,cAAsB,EACtB,SAAiB,EACjB,cAAsB,EACtB,MAAe,EACf,OAAgB;IAEhB,MAAM,GAAG,GAAG,IAAA,iBAAY,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAA;IAE/C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAAC,CAAA;IACtD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,GAAG;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACrB,CAAC,2BAAmB,CAAC,EAAE,cAAc;YACrC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,mBAAW,CAAC,EAAE,MAAM,EAAE,CAAC;YACxC,CAAC,gCAAwB,CAAC,EAAE,SAAS;YACrC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,8BAAsB,CAAC,EAAE,OAAO,EAAE,CAAC;SACtD,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,cAAc,CAAC,CAAA;IACnC,MAAM,iBAAiB,GAAG,IAAA,WAAI,EAC5B,GAAG,EACH,UAAU,4BAA4B,CAAC,SAAS,CAAC,IAAI,IAAA,mBAAU,GAAE,OAAO,CACzE,CAAA;IAED,IAAA,kBAAa,EAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAChE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,OAAO;QACjB,2CAA2C;QAC3C,8BAA8B;QAC9B,IAAI,EAAE,IAAI;KACX,CAAC,CAAA;IAEF,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,6BAA6B,CAC3C,cAAsB,EACtB,WAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAEtC,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,cAAc,CAAC,CAAA;IACnC,IAAI,OAAiB,CAAA;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAA,gBAAW,EAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAQ;QACpE,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAA,aAAQ,EAAC,QAAQ,CAAC,CAAA;YAC/B,IAAI,QAAQ,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ;gBAAE,SAAQ;YAC3D,IAAA,WAAM,EAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACjC,OAAO,EAAE,CAAA;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,mCAAmC;YACnC,eAAM,CAAC,IAAI,CAAC,gEAAgE,IAAI,KAAK,IAAA,uBAAe,EAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAChH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAIzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAY/E;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAwBnI;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBpD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAIzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAc/E;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CA0BnI;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBpD"}
@@ -16,9 +16,11 @@ const file_upload_1 = require("./tools/file-upload");
16
16
  const project_info_1 = require("./tools/project-info");
17
17
  const read_conversation_file_1 = require("./tools/read-conversation-file");
18
18
  const read_slack_thread_1 = require("./tools/read-slack-thread");
19
+ const send_slack_file_1 = require("./tools/send-slack-file");
19
20
  const send_slack_message_1 = require("./tools/send-slack-message");
20
21
  const trigger_alarm_1 = require("./tools/trigger-alarm");
21
22
  const trigger_e2e_test_1 = require("./tools/trigger-e2e-test");
23
+ const update_system_knowledge_1 = require("./tools/update-system-knowledge");
22
24
  /**
23
25
  * MCP サーバーを作成する
24
26
  */
@@ -34,9 +36,11 @@ function createMcpServer(apiClient, projectCode, browserSessionManager) {
34
36
  (0, project_info_1.registerProjectInfoTool)(server, apiClient, projectCode);
35
37
  (0, read_conversation_file_1.registerReadConversationFileTool)(server, apiClient);
36
38
  (0, send_slack_message_1.registerSendSlackMessageTool)(server, apiClient);
39
+ (0, send_slack_file_1.registerSendSlackFileTool)(server, apiClient);
37
40
  (0, trigger_alarm_1.registerTriggerAlarmTool)(server, apiClient);
38
41
  (0, read_slack_thread_1.registerReadSlackThreadTool)(server, apiClient);
39
42
  (0, trigger_e2e_test_1.registerTriggerE2eTestTool)(server, apiClient);
43
+ (0, update_system_knowledge_1.registerUpdateSystemKnowledgeTool)(server, apiClient);
40
44
  // browser_navigate/browser_click等とreport_test_stepが同じBrowserSessionManagerを
41
45
  // 参照するように、ここで一つだけ生成して両方に渡す(渡さないと、report_test_step が
42
46
  // アクティブなセッションを解決できず、常に白紙のスクリーンショットを撮ってしまう)。
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";;AAsBA,0CAwBC;AAKD,wCAsBC;AAzED,oEAAmE;AACnE,wEAAgF;AAEhF,8CAAyC;AACzC,4CAAuC;AACvC,6CAAsD;AACtD,yDAA+D;AAC/D,qFAA+E;AAC/E,qDAA6D;AAC7D,+CAAsD;AACtD,mDAA0D;AAC1D,qDAA4D;AAC5D,uDAA8D;AAC9D,2EAAiF;AACjF,iEAAuE;AACvE,mEAAyE;AACzE,yDAAgE;AAChE,+DAAqE;AAErE;;GAEG;AACH,SAAgB,eAAe,CAAC,SAAoB,EAAE,WAAmB,EAAE,qBAA6C;IACtH,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,IAAA,8BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACtC,IAAA,kCAAqB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACxC,IAAA,qCAAuB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC1C,IAAA,oCAAsB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACzC,IAAA,sCAAuB,EAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;IACvD,IAAA,yDAAgC,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACnD,IAAA,iDAA4B,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC/C,IAAA,wCAAwB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC3C,IAAA,+CAA2B,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC9C,IAAA,6CAA0B,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC7C,4EAA4E;IAC5E,oDAAoD;IACpD,4CAA4C;IAC5C,MAAM,OAAO,GAAG,qBAAqB,IAAI,IAAI,+CAAqB,EAAE,CAAA;IACpE,MAAM,cAAc,GAAG,IAAA,8BAAoB,EAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACvE,IAAA,uCAAuB,EAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IAEnE,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAQ,CAAC,OAAO,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAQ,CAAC,KAAK,CAAC,CAAA;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAQ,CAAC,YAAY,CAAC,CAAA;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAQ,CAAC,WAAW,CAAC,CAAA;IAEpD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,oBAAQ,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,oBAAQ,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,oBAAQ,CAAC,YAAY,CAAC,CAAA;QACrD,MAAM,IAAI,KAAK,CAAC,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,sBAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC9C,IAAI,UAAU,EAAE,CAAC;QACf,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC;IACD,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AAED,yBAAyB;AACzB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAA;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ApiClient } from '../../api-client';
3
+ /** send_slack_file ツールを MCP サーバーに登録する */
4
+ export declare function registerSendSlackFileTool(server: McpServer, apiClient: ApiClient): void;
5
+ //# sourceMappingURL=send-slack-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-slack-file.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/send-slack-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAG5C,yCAAyC;AACzC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAmBvF"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSendSlackFileTool = registerSendSlackFileTool;
4
+ const zod_1 = require("zod");
5
+ const mcp_response_1 = require("./mcp-response");
6
+ /** send_slack_file ツールを MCP サーバーに登録する */
7
+ function registerSendSlackFileTool(server, apiClient) {
8
+ server.tool('send_slack_file', 'Send a file (e.g. CSV or other text files) as a real attachment to Slack.', {
9
+ channel: zod_1.z.string().describe('Target Slack channel name or ID'),
10
+ fileName: zod_1.z.string().describe('File name including extension (e.g. cost.csv)'),
11
+ content: zod_1.z.string().describe('File content (text/CSV string)'),
12
+ threadTs: zod_1.z.string().optional().describe('Thread timestamp to reply in a thread'),
13
+ }, async (args) => (0, mcp_response_1.withMcpErrorHandling)(async () => {
14
+ const callId = (0, mcp_response_1.newIdempotencyKey)();
15
+ const result = await apiClient.sendSlackFile(args.channel, args.fileName, args.content, args.threadTs, callId);
16
+ if (!result.success) {
17
+ return (0, mcp_response_1.mcpErrorResponse)(result.error?.message ?? 'Failed to send Slack file');
18
+ }
19
+ return (0, mcp_response_1.mcpJsonResponse)(result.data);
20
+ }));
21
+ }
22
+ //# sourceMappingURL=send-slack-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-slack-file.js","sourceRoot":"","sources":["../../../src/mcp/tools/send-slack-file.ts"],"names":[],"mappings":";;AAOA,8DAmBC;AAzBD,6BAAuB;AAGvB,iDAA2G;AAE3G,yCAAyC;AACzC,SAAgB,yBAAyB,CAAC,MAAiB,EAAE,SAAoB;IAC/E,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2EAA2E,EAC3E;QACE,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC/D,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC9E,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC9D,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KAClF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mCAAoB,EAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,IAAA,gCAAiB,GAAE,CAAA;QAClC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC9G,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,IAAA,+BAAgB,EAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,2BAA2B,CAAC,CAAA;QAC/E,CAAC;QACD,OAAO,IAAA,8BAAe,EAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ApiClient } from '../../api-client';
3
+ /**
4
+ * update_system_knowledge ツールを MCP サーバーに登録する
5
+ *
6
+ * システムのナレッジベース(api側DB)へ実際に登録・改訂する唯一の手段。ローカルファイルへの
7
+ * 書き込みはナレッジ登録にはならないため、モデルが「ナレッジに反映して」という依頼をローカル
8
+ * ファイル書き込みだけで済ませてしまわないよう、description で明示的に誘導する。
9
+ *
10
+ * 依頼者の実際の権限(`knowledgeCanPublish`/`knowledgeRequesterUserId`)は、このツールの
11
+ * 呼び出し元では判定しない。旧設計ではリクエストボディの `canPublishHint` フィールドを
12
+ * クライアント自己申告のまま信用しており、有効なagentサービストークンさえあればこれを
13
+ * `true` に指定して承認ワークフローを完全にバイパスできてしまうCRITICALな脆弱性があった。
14
+ * 現在は `commandId`(このナレッジ登録依頼の元になったチャットコマンドのID)と
15
+ * `agentId`(エージェント自身のID)だけを渡し、api側で
16
+ * `AgentCommandQueueService.getCommand(commandId, agentId, tenantCode)` により、コマンド
17
+ * 生成時に刻印された本物の権限判定結果をサーバー側で引き当てる。省略時・レコード未検出時は
18
+ * 安全側のdraftになる。`commandId`/`agentId` は
19
+ * `AI_SUPPORT_AGENT_KNOWLEDGE_COMMAND_ID`/`AI_SUPPORT_AGENT_KNOWLEDGE_AGENT_ID` 環境変数
20
+ * (config-writer.ts の per-command MCP 設定経由でこの MCP サーバー子プロセスへ明示的に
21
+ * 渡される)から読み取る。LLM/モデルが自分で決めてよい値ではないため、ツールのスキーマ
22
+ * (引数)には一切含めない。
23
+ *
24
+ * `callId` は呼び出しごとに生成する冪等性キー(`newIdempotencyKey()`。send_slack_message や
25
+ * trigger_alarm と同じパターン)で、リトライ全体で同じ値を使うことで新規作成時の重複登録を
26
+ * api側で防ぐ。
27
+ */
28
+ export declare function registerUpdateSystemKnowledgeTool(server: McpServer, apiClient: ApiClient): void;
29
+ //# sourceMappingURL=update-system-knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-system-knowledge.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/update-system-knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAI5C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAqC/F"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerUpdateSystemKnowledgeTool = registerUpdateSystemKnowledgeTool;
4
+ const zod_1 = require("zod");
5
+ const config_writer_1 = require("../config-writer");
6
+ const mcp_response_1 = require("./mcp-response");
7
+ /**
8
+ * update_system_knowledge ツールを MCP サーバーに登録する
9
+ *
10
+ * システムのナレッジベース(api側DB)へ実際に登録・改訂する唯一の手段。ローカルファイルへの
11
+ * 書き込みはナレッジ登録にはならないため、モデルが「ナレッジに反映して」という依頼をローカル
12
+ * ファイル書き込みだけで済ませてしまわないよう、description で明示的に誘導する。
13
+ *
14
+ * 依頼者の実際の権限(`knowledgeCanPublish`/`knowledgeRequesterUserId`)は、このツールの
15
+ * 呼び出し元では判定しない。旧設計ではリクエストボディの `canPublishHint` フィールドを
16
+ * クライアント自己申告のまま信用しており、有効なagentサービストークンさえあればこれを
17
+ * `true` に指定して承認ワークフローを完全にバイパスできてしまうCRITICALな脆弱性があった。
18
+ * 現在は `commandId`(このナレッジ登録依頼の元になったチャットコマンドのID)と
19
+ * `agentId`(エージェント自身のID)だけを渡し、api側で
20
+ * `AgentCommandQueueService.getCommand(commandId, agentId, tenantCode)` により、コマンド
21
+ * 生成時に刻印された本物の権限判定結果をサーバー側で引き当てる。省略時・レコード未検出時は
22
+ * 安全側のdraftになる。`commandId`/`agentId` は
23
+ * `AI_SUPPORT_AGENT_KNOWLEDGE_COMMAND_ID`/`AI_SUPPORT_AGENT_KNOWLEDGE_AGENT_ID` 環境変数
24
+ * (config-writer.ts の per-command MCP 設定経由でこの MCP サーバー子プロセスへ明示的に
25
+ * 渡される)から読み取る。LLM/モデルが自分で決めてよい値ではないため、ツールのスキーマ
26
+ * (引数)には一切含めない。
27
+ *
28
+ * `callId` は呼び出しごとに生成する冪等性キー(`newIdempotencyKey()`。send_slack_message や
29
+ * trigger_alarm と同じパターン)で、リトライ全体で同じ値を使うことで新規作成時の重複登録を
30
+ * api側で防ぐ。
31
+ */
32
+ function registerUpdateSystemKnowledgeTool(server, apiClient) {
33
+ server.tool('update_system_knowledge', 'Register or revise an entry in the system knowledge base (persisted in the backend database). '
34
+ + 'You MUST use this tool whenever a user asks you to add or update the knowledge base — '
35
+ + 'writing to a local file is NOT knowledge base registration and does not satisfy that request. '
36
+ + 'Pass `id` to revise an existing entry, or omit it to create a new one. '
37
+ + 'Whether the entry is published immediately or saved as a draft pending approval is determined '
38
+ + 'server-side based on the requester\'s actual permissions — this tool does not accept a publish flag.', {
39
+ id: zod_1.z.string().optional().describe('Existing knowledge entry ID to revise. Omit to create a new entry.'),
40
+ title: zod_1.z.string().describe('Title (1-200 characters)'),
41
+ content: zod_1.z.string().describe('Content in Markdown'),
42
+ category: zod_1.z.string().describe('Category (max 50 characters)'),
43
+ tags: zod_1.z.array(zod_1.z.string()).optional().describe('Tags'),
44
+ sourceIssue: zod_1.z.string().optional().describe('Related issue reference (max 50 characters)'),
45
+ }, async (args) => (0, mcp_response_1.withMcpErrorHandling)(async () => {
46
+ const commandId = process.env[config_writer_1.KNOWLEDGE_COMMAND_ID_ENV] || undefined;
47
+ const agentId = process.env[config_writer_1.KNOWLEDGE_AGENT_ID_ENV] || undefined;
48
+ const callId = (0, mcp_response_1.newIdempotencyKey)();
49
+ const result = await apiClient.updateSystemKnowledge({
50
+ id: args.id,
51
+ title: args.title,
52
+ content: args.content,
53
+ category: args.category,
54
+ tags: args.tags,
55
+ sourceIssue: args.sourceIssue,
56
+ commandId,
57
+ agentId,
58
+ callId,
59
+ });
60
+ return (0, mcp_response_1.mcpJsonResponse)(result);
61
+ }));
62
+ }
63
+ //# sourceMappingURL=update-system-knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-system-knowledge.js","sourceRoot":"","sources":["../../../src/mcp/tools/update-system-knowledge.ts"],"names":[],"mappings":";;AAgCA,8EAqCC;AApED,6BAAuB;AAGvB,oDAAmF;AACnF,iDAAyF;AAEzF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,iCAAiC,CAAC,MAAiB,EAAE,SAAoB;IACvF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,gGAAgG;UAC5F,wFAAwF;UACxF,gGAAgG;UAChG,yEAAyE;UACzE,gGAAgG;UAChG,sGAAsG,EAC1G;QACE,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;QACxG,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACtD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACnD,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC7D,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;KAC3F,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mCAAoB,EAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,wCAAwB,CAAC,IAAI,SAAS,CAAA;QACpE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,sCAAsB,CAAC,IAAI,SAAS,CAAA;QAChE,MAAM,MAAM,GAAG,IAAA,gCAAiB,GAAE,CAAA;QAElC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,qBAAqB,CAAC;YACnD,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS;YACT,OAAO;YACP,MAAM;SACP,CAAC,CAAA;QAEF,OAAO,IAAA,8BAAe,EAAC,MAAM,CAAC,CAAA;IAChC,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"oneshot-runner.d.ts","sourceRoot":"","sources":["../src/oneshot-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqCH,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,CAa/E;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkFtF;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,GAAE,MAAM,OAAO,CAAC,MAAM,CAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CASjG"}
1
+ {"version":3,"file":"oneshot-runner.d.ts","sourceRoot":"","sources":["../src/oneshot-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwCH,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,CAa/E;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkFtF;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,GAAE,MAAM,OAAO,CAAC,MAAM,CAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CASjG"}
@@ -21,8 +21,10 @@ const logger_1 = require("./logger");
21
21
  const types_1 = require("./types");
22
22
  const utils_1 = require("./utils");
23
23
  /**
24
- * Command types the ECS oneshot runner is allowed to execute (Phase 1).
25
- * The API only dispatches `execute_command` to ECS execution agents, but the
24
+ * Command types the ECS oneshot runner is allowed to execute (Phase 1:
25
+ * `execute_command`; Phase 3: `server_setup_exec` for the ECS dispatch mode
26
+ * of the server setup feature — see admin-docs `docs/features/server-setup.md`).
27
+ * The API only dispatches these types to ECS execution agents, but the
26
28
  * runner enforces the same allowlist defensively: a mis-dispatched `chat` /
27
29
  * `e2e_test` / `file_*` would otherwise run with a near-empty execution
28
30
  * context (no projectDir/mcpConfigPath/serverConfig/browser callbacks) and
@@ -30,6 +32,7 @@ const utils_1 = require("./utils");
30
32
  */
31
33
  const ONESHOT_SUPPORTED_COMMAND_TYPES = new Set([
32
34
  'execute_command',
35
+ 'server_setup_exec',
33
36
  ]);
34
37
  /**
35
38
  * Working directory for `execute_command` in the container. The ECS image
@@ -1 +1 @@
1
- {"version":3,"file":"oneshot-runner.js","sourceRoot":"","sources":["../src/oneshot-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oneshot-runner.js","sourceRoot":"","sources":["../src/oneshot-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** Directory (under the persistent config dir) holding one known_hosts file per (tenantCode, sshHostId) pair. */
2
+ export declare function knownHostsDir(): string;
3
+ /**
4
+ * Resolve (and ensure exists) the persistent known_hosts file path for a
5
+ * given tenant/host pair.
6
+ *
7
+ * Creates an empty file (mode 0600 — not secret, but kept restrictive like
8
+ * the rest of this directory's contents) the first time a given tenant/host
9
+ * pair is seen; that first run is TOFU's legitimate "trust on first use".
10
+ * Every subsequent run against the same host reuses (and lets `ssh` append
11
+ * to) the same file, so a later host-key change is detected — via ssh's own
12
+ * `StrictHostKeyChecking=accept-new` behavior — rather than silently
13
+ * accepted.
14
+ */
15
+ export declare function resolveKnownHostsPath(tenantCode: string, sshHostId: string): string;
16
+ //# sourceMappingURL=known-hosts-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"known-hosts-store.d.ts","sourceRoot":"","sources":["../../src/server-setup/known-hosts-store.ts"],"names":[],"mappings":"AA2BA,iHAAiH;AACjH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUnF"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.knownHostsDir = knownHostsDir;
37
+ exports.resolveKnownHostsPath = resolveKnownHostsPath;
38
+ /**
39
+ * Persistent, per-SSH-host known_hosts file for `server_setup_exec`'s TOFU
40
+ * (Trust On First Use) host key checking.
41
+ *
42
+ * Unlike the SSH private key (fetched Just-In-Time and always removed with
43
+ * the rest of the per-run temp directory — see `server-setup-runner.ts`), a
44
+ * known_hosts entry is NOT secret: it only records the target host's public
45
+ * key fingerprint. Volatilizing it alongside the private key on every run
46
+ * defeats TOFU's entire purpose: `StrictHostKeyChecking=accept-new` only
47
+ * rejects a *changed* host key on a *later* connection if there is a
48
+ * *previously recorded* one to compare against. Starting from an empty file
49
+ * on every run means every run looks like a "first use", so a later
50
+ * DNS/route hijack presenting a different host key is silently accepted
51
+ * instead of rejected.
52
+ *
53
+ * This file is stored under the agent CLI's persistent config directory
54
+ * (`getConfigDir()`, e.g. `~/.ai-support-agent`), namespaced by tenantCode
55
+ * and sshHostId so distinct tenants/hosts never share (or clobber) each
56
+ * other's recorded host keys, and reused across every run against the same
57
+ * host.
58
+ */
59
+ const fs = __importStar(require("fs"));
60
+ const path = __importStar(require("path"));
61
+ const config_manager_1 = require("../config-manager");
62
+ const utils_1 = require("../utils");
63
+ /** Directory (under the persistent config dir) holding one known_hosts file per (tenantCode, sshHostId) pair. */
64
+ function knownHostsDir() {
65
+ return path.join((0, config_manager_1.getConfigDir)(), 'server-setup', 'known-hosts');
66
+ }
67
+ /**
68
+ * Resolve (and ensure exists) the persistent known_hosts file path for a
69
+ * given tenant/host pair.
70
+ *
71
+ * Creates an empty file (mode 0600 — not secret, but kept restrictive like
72
+ * the rest of this directory's contents) the first time a given tenant/host
73
+ * pair is seen; that first run is TOFU's legitimate "trust on first use".
74
+ * Every subsequent run against the same host reuses (and lets `ssh` append
75
+ * to) the same file, so a later host-key change is detected — via ssh's own
76
+ * `StrictHostKeyChecking=accept-new` behavior — rather than silently
77
+ * accepted.
78
+ */
79
+ function resolveKnownHostsPath(tenantCode, sshHostId) {
80
+ const dir = knownHostsDir();
81
+ (0, utils_1.ensureDir)(dir, 0o700);
82
+ const fileName = `${(0, utils_1.sanitizeNameSegment)(tenantCode)}__${(0, utils_1.sanitizeNameSegment)(sshHostId)}`;
83
+ const filePath = path.join(dir, fileName);
84
+ if (!fs.existsSync(filePath)) {
85
+ fs.writeFileSync(filePath, '', { mode: 0o600 });
86
+ }
87
+ return filePath;
88
+ }
89
+ //# sourceMappingURL=known-hosts-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"known-hosts-store.js","sourceRoot":"","sources":["../../src/server-setup/known-hosts-store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,sCAEC;AAcD,sDAUC;AAtDD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uCAAwB;AACxB,2CAA4B;AAE5B,sDAAgD;AAChD,oCAAyD;AAEzD,iHAAiH;AACjH,SAAgB,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,6BAAY,GAAE,EAAE,cAAc,EAAE,aAAa,CAAC,CAAA;AACjE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,qBAAqB,CAAC,UAAkB,EAAE,SAAiB;IACzE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAA;IAC3B,IAAA,iBAAS,EAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAErB,MAAM,QAAQ,GAAG,GAAG,IAAA,2BAAmB,EAAC,UAAU,CAAC,KAAK,IAAA,2BAAmB,EAAC,SAAS,CAAC,EAAE,CAAA;IACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Runner for the `server_setup_exec` command.
3
+ *
4
+ * Fetches the target host's SSH private key Just-In-Time from the API,
5
+ * writes it to a process-local temp directory, runs the bundled Ansible
6
+ * playbook (`ansible/playbook.yml`) against it, and — critically — always
7
+ * removes the temp directory (private key included) afterwards, whether the
8
+ * run succeeded or failed. See admin-docs `docs/features/server-setup.md`
9
+ * ("秘密鍵の受け渡し設計") for the full design and its security rationale.
10
+ *
11
+ * SECURITY: the SSH private key must never be logged, and the temp
12
+ * directory holding it must never survive past this function's execution.
13
+ */
14
+ import { type CommandResult, type ServerSetupExecPayload } from '../types';
15
+ import type { ApiClient } from '../api-client';
16
+ export interface RunServerSetupContext {
17
+ commandId: string;
18
+ client: ApiClient;
19
+ agentId?: string;
20
+ }
21
+ /**
22
+ * Execute a `server_setup_exec` command: fetch the SSH credential, run the
23
+ * bundled playbook, and report per-step results. The temp directory holding
24
+ * the private key is always removed, on every exit path.
25
+ */
26
+ export declare function runServerSetup(payload: ServerSetupExecPayload, ctx: RunServerSetupContext): Promise<CommandResult>;
27
+ //# sourceMappingURL=server-setup-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-setup-runner.d.ts","sourceRoot":"","sources":["../../src/server-setup/server-setup-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,EAAE,KAAK,aAAa,EAAe,KAAK,sBAAsB,EAAwF,MAAM,UAAU,CAAA;AAK7K,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAoH9C,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA8VD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,sBAAsB,EAC/B,GAAG,EAAE,qBAAqB,GACzB,OAAO,CAAC,aAAa,CAAC,CAkKxB"}