aemeathcli 1.0.10 → 1.0.12
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/LICENSE +21 -0
- package/README.md +66 -54
- package/dist/App-JQ622M66.js +4431 -0
- package/dist/App-JQ622M66.js.map +1 -0
- package/dist/agent-store/architect.md +32 -0
- package/dist/agent-store/debugger.md +32 -0
- package/dist/agent-store/developer.md +29 -0
- package/dist/agent-store/documenter.md +30 -0
- package/dist/agent-store/researcher.md +31 -0
- package/dist/agent-store/reviewer.md +28 -0
- package/dist/agent-store/supervisor.md +37 -0
- package/dist/agent-store/tester.md +30 -0
- package/dist/api-key-fallback-RJLPM3KH.js +11 -0
- package/dist/{api-key-fallback-YQQBOQIL.js.map → api-key-fallback-RJLPM3KH.js.map} +1 -1
- package/dist/auth-status-JQJOKUPF.js +13 -0
- package/dist/auth-status-JQJOKUPF.js.map +1 -0
- package/dist/{chunk-RWCNNAL7.js → chunk-2KMA5RBC.js} +25 -48
- package/dist/chunk-2KMA5RBC.js.map +1 -0
- package/dist/{chunk-CYQNBB25.js → chunk-2Y7TR6BS.js} +28 -5
- package/dist/chunk-2Y7TR6BS.js.map +1 -0
- package/dist/{chunk-DAHGLHNR.js → chunk-2ZYK5IJG.js} +6 -141
- package/dist/chunk-2ZYK5IJG.js.map +1 -0
- package/dist/chunk-36RXCZOV.js +88 -0
- package/dist/chunk-36RXCZOV.js.map +1 -0
- package/dist/{chunk-DMBPX3RG.js → chunk-7EBLXPL4.js} +9 -9
- package/dist/{chunk-DMBPX3RG.js.map → chunk-7EBLXPL4.js.map} +1 -1
- package/dist/chunk-BIMQL4AG.js +186 -0
- package/dist/chunk-BIMQL4AG.js.map +1 -0
- package/dist/{chunk-NBR3GHMT.js → chunk-D275MCIH.js} +39 -7
- package/dist/chunk-D275MCIH.js.map +1 -0
- package/dist/{chunk-Y5XVD2CD.js → chunk-FFS4T7BZ.js} +109 -82
- package/dist/chunk-FFS4T7BZ.js.map +1 -0
- package/dist/{chunk-CARHU3DO.js → chunk-GXAJGP2T.js} +64 -16
- package/dist/chunk-GXAJGP2T.js.map +1 -0
- package/dist/{chunk-I5PZ4JTS.js → chunk-HESQLCLU.js} +4 -4
- package/dist/{chunk-I5PZ4JTS.js.map → chunk-HESQLCLU.js.map} +1 -1
- package/dist/{chunk-JAXXTYID.js → chunk-IR5HLBMH.js} +2 -2
- package/dist/{chunk-JAXXTYID.js.map → chunk-IR5HLBMH.js.map} +1 -1
- package/dist/{chunk-MFBHNWGV.js → chunk-K2FCMRXH.js} +11 -19
- package/dist/chunk-K2FCMRXH.js.map +1 -0
- package/dist/{chunk-H66O5Z2V.js → chunk-KIC7UI5U.js} +41 -6
- package/dist/chunk-KIC7UI5U.js.map +1 -0
- package/dist/{chunk-MXZSI3AY.js → chunk-KMOAJRDE.js} +42 -10
- package/dist/chunk-KMOAJRDE.js.map +1 -0
- package/dist/chunk-LQBALETG.js +71 -0
- package/dist/chunk-LQBALETG.js.map +1 -0
- package/dist/chunk-M3FPQSRU.js +12 -0
- package/dist/chunk-M3FPQSRU.js.map +1 -0
- package/dist/chunk-NQEUK763.js +26 -0
- package/dist/chunk-NQEUK763.js.map +1 -0
- package/dist/chunk-OPWAFS6Y.js +38 -0
- package/dist/chunk-OPWAFS6Y.js.map +1 -0
- package/dist/{chunk-6PDJ45T4.js → chunk-PS4WEFW6.js} +50 -25
- package/dist/chunk-PS4WEFW6.js.map +1 -0
- package/dist/{chunk-HMJRPNPZ.js → chunk-QK7TKNHV.js} +93 -21
- package/dist/chunk-QK7TKNHV.js.map +1 -0
- package/dist/{chunk-LSOYPSAT.js → chunk-RADJSEG5.js} +4 -4
- package/dist/chunk-RADJSEG5.js.map +1 -0
- package/dist/{chunk-4IJD72YB.js → chunk-SNWPI6XJ.js} +7 -7
- package/dist/chunk-SNWPI6XJ.js.map +1 -0
- package/dist/{chunk-TEVZS4FA.js → chunk-UM7MSLOV.js} +16 -9
- package/dist/chunk-UM7MSLOV.js.map +1 -0
- package/dist/chunk-VNZ3YTQD.js +232 -0
- package/dist/chunk-VNZ3YTQD.js.map +1 -0
- package/dist/{chunk-IYW62KKR.js → chunk-WXIN65UG.js} +66 -23
- package/dist/chunk-WXIN65UG.js.map +1 -0
- package/dist/chunk-XEXWX7C7.js +241 -0
- package/dist/chunk-XEXWX7C7.js.map +1 -0
- package/dist/{chunk-CGEV3ARR.js → chunk-YCCYXDW7.js} +3 -3
- package/dist/chunk-YCCYXDW7.js.map +1 -0
- package/dist/chunk-YPQ2MLAV.js +140 -0
- package/dist/chunk-YPQ2MLAV.js.map +1 -0
- package/dist/chunk-ZCOVMVK4.js +26 -0
- package/dist/chunk-ZCOVMVK4.js.map +1 -0
- package/dist/{claude-login-5WELXPKT.js → claude-login-AIFIWTYF.js} +9 -9
- package/dist/{claude-login-5WELXPKT.js.map → claude-login-AIFIWTYF.js.map} +1 -1
- package/dist/cli.js +370 -171
- package/dist/cli.js.map +1 -1
- package/dist/{codex-login-GZIFXUWD.js → codex-login-LW5X7GAM.js} +10 -10
- package/dist/codex-login-LW5X7GAM.js.map +1 -0
- package/dist/config-store-NF56VHFU.js +7 -0
- package/dist/{config-store-W6FBCQAQ.js.map → config-store-NF56VHFU.js.map} +1 -1
- package/dist/conversation-store-7GRDQZD2.js +4 -0
- package/dist/conversation-store-7GRDQZD2.js.map +1 -0
- package/dist/detect-providers-QICJ5U3R.js +4 -0
- package/dist/detect-providers-QICJ5U3R.js.map +1 -0
- package/dist/executor-FTABX2AW.js +4 -0
- package/dist/{executor-6RIKIGXK.js.map → executor-FTABX2AW.js.map} +1 -1
- package/dist/first-run-ADROZVYF.js +230 -0
- package/dist/first-run-ADROZVYF.js.map +1 -0
- package/dist/{gemini-login-AZGL3CE7.js → gemini-login-TST454MX.js} +9 -9
- package/dist/{gemini-login-AZGL3CE7.js.map → gemini-login-TST454MX.js.map} +1 -1
- package/dist/index.d.ts +46 -70
- package/dist/index.js +79 -468
- package/dist/index.js.map +1 -1
- package/dist/input-history-BEICE7PT.js +57 -0
- package/dist/input-history-BEICE7PT.js.map +1 -0
- package/dist/kimi-adapter-7FYOAKOI.js +6 -0
- package/dist/{kimi-adapter-JN4HFFHU.js.map → kimi-adapter-7FYOAKOI.js.map} +1 -1
- package/dist/{kimi-login-6LUWB7P6.js → kimi-login-3IGVOBJI.js} +9 -9
- package/dist/{kimi-login-6LUWB7P6.js.map → kimi-login-3IGVOBJI.js.map} +1 -1
- package/dist/logger-KGHUQ4VE.js +3 -0
- package/dist/logger-KGHUQ4VE.js.map +1 -0
- package/dist/model-discovery-AAJDHRFO.js +6 -0
- package/dist/model-discovery-AAJDHRFO.js.map +1 -0
- package/dist/native-cli-adapters-CLONTZOA.js +8 -0
- package/dist/{native-cli-adapters-OLW3XX57.js.map → native-cli-adapters-CLONTZOA.js.map} +1 -1
- package/dist/ollama-adapter-2N5OQIEV.js +5 -0
- package/dist/{ollama-adapter-OJQ3FKWK.js.map → ollama-adapter-2N5OQIEV.js.map} +1 -1
- package/dist/pathResolver-UVAB2FCW.js +3 -0
- package/dist/pathResolver-UVAB2FCW.js.map +1 -0
- package/dist/profile-loader-EMLV4J7S.js +162 -0
- package/dist/profile-loader-EMLV4J7S.js.map +1 -0
- package/dist/registry-LRURZVUL.js +5 -0
- package/dist/{registry-AZ2LOHHJ.js.map → registry-LRURZVUL.js.map} +1 -1
- package/dist/registry-MVNSXCEF.js +6 -0
- package/dist/{registry-H7B3AHPQ.js.map → registry-MVNSXCEF.js.map} +1 -1
- package/dist/server-manager-THGZBBZB.js +5 -0
- package/dist/{server-manager-PTGBHCLS.js.map → server-manager-THGZBBZB.js.map} +1 -1
- package/dist/session-manager-X3DXT53M.js +12 -0
- package/dist/{session-manager-XOMDMC77.js.map → session-manager-X3DXT53M.js.map} +1 -1
- package/dist/skills/built-in/code-review/SKILL.md +85 -0
- package/dist/skills/built-in/commit/SKILL.md +83 -0
- package/dist/skills/built-in/debug/SKILL.md +119 -0
- package/dist/skills/built-in/plan/SKILL.md +123 -0
- package/dist/skills/built-in/refactor/SKILL.md +132 -0
- package/dist/skills/built-in/test/SKILL.md +128 -0
- package/dist/sqlite-store-7OECRTXM.js +5 -0
- package/dist/sqlite-store-7OECRTXM.js.map +1 -0
- package/dist/team-manager-2VSMALAA.js +11 -0
- package/dist/{team-manager-HC4XGCFY.js.map → team-manager-2VSMALAA.js.map} +1 -1
- package/dist/team-state-HZNVMQHT.js +3 -0
- package/dist/team-state-HZNVMQHT.js.map +1 -0
- package/dist/tmux-manager-57QCUVHU.js +6 -0
- package/dist/{tmux-manager-GPYZ3WQH.js.map → tmux-manager-57QCUVHU.js.map} +1 -1
- package/dist/tools-KWFSYT56.js +6 -0
- package/dist/{tools-TSMXMHIF.js.map → tools-KWFSYT56.js.map} +1 -1
- package/package.json +11 -11
- package/dist/App-FKRSMFMB.js +0 -2789
- package/dist/App-FKRSMFMB.js.map +0 -1
- package/dist/api-key-fallback-YQQBOQIL.js +0 -11
- package/dist/chunk-4IJD72YB.js.map +0 -1
- package/dist/chunk-6PDJ45T4.js.map +0 -1
- package/dist/chunk-CARHU3DO.js.map +0 -1
- package/dist/chunk-CGEV3ARR.js.map +0 -1
- package/dist/chunk-CS5X3BWX.js +0 -27
- package/dist/chunk-CS5X3BWX.js.map +0 -1
- package/dist/chunk-CYQNBB25.js.map +0 -1
- package/dist/chunk-DAHGLHNR.js.map +0 -1
- package/dist/chunk-H66O5Z2V.js.map +0 -1
- package/dist/chunk-HMJRPNPZ.js.map +0 -1
- package/dist/chunk-IYW62KKR.js.map +0 -1
- package/dist/chunk-LSOYPSAT.js.map +0 -1
- package/dist/chunk-MFBHNWGV.js.map +0 -1
- package/dist/chunk-MXZSI3AY.js.map +0 -1
- package/dist/chunk-NBR3GHMT.js.map +0 -1
- package/dist/chunk-RWCNNAL7.js.map +0 -1
- package/dist/chunk-TEVZS4FA.js.map +0 -1
- package/dist/chunk-UY2SYSEZ.js +0 -211
- package/dist/chunk-UY2SYSEZ.js.map +0 -1
- package/dist/chunk-WAHVZH7V.js +0 -260
- package/dist/chunk-WAHVZH7V.js.map +0 -1
- package/dist/chunk-WPP3PEDE.js +0 -234
- package/dist/chunk-WPP3PEDE.js.map +0 -1
- package/dist/chunk-Y5XVD2CD.js.map +0 -1
- package/dist/claude-adapter-QMLFMSP3.js +0 -6
- package/dist/claude-adapter-QMLFMSP3.js.map +0 -1
- package/dist/codex-login-GZIFXUWD.js.map +0 -1
- package/dist/config-store-W6FBCQAQ.js +0 -6
- package/dist/executor-6RIKIGXK.js +0 -4
- package/dist/gemini-adapter-6JIHZ7WI.js +0 -6
- package/dist/gemini-adapter-6JIHZ7WI.js.map +0 -1
- package/dist/kimi-adapter-JN4HFFHU.js +0 -6
- package/dist/native-cli-adapters-OLW3XX57.js +0 -6
- package/dist/ollama-adapter-OJQ3FKWK.js +0 -6
- package/dist/openai-adapter-XU46EN7B.js +0 -6
- package/dist/openai-adapter-XU46EN7B.js.map +0 -1
- package/dist/registry-AZ2LOHHJ.js +0 -6
- package/dist/registry-H7B3AHPQ.js +0 -5
- package/dist/server-manager-PTGBHCLS.js +0 -5
- package/dist/session-manager-XOMDMC77.js +0 -12
- package/dist/team-manager-HC4XGCFY.js +0 -11
- package/dist/tmux-manager-GPYZ3WQH.js +0 -6
- package/dist/tools-TSMXMHIF.js +0 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/migrations/001-initial.ts","../src/storage/sqlite-store.ts"],"names":[],"mappings":"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","file":"chunk-BIMQL4AG.js","sourcesContent":["/**\n * Initial database migration — PRD section 17.1\n * Creates all core tables and indexes for AemeathCLI persistence.\n *\n * SAFETY: All DDL is static SQL. No user input is interpolated.\n */\n\nimport type Database from \"better-sqlite3\";\n\nconst MIGRATION_ID = \"001-initial\";\n\nconst CREATE_CONVERSATIONS = `\nCREATE TABLE IF NOT EXISTS conversations (\n id TEXT PRIMARY KEY,\n project_root TEXT NOT NULL,\n default_model TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now')),\n metadata TEXT DEFAULT '{}'\n)`;\n\nconst CREATE_MESSAGES = `\nCREATE TABLE IF NOT EXISTS messages (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,\n role TEXT NOT NULL,\n model TEXT,\n provider TEXT,\n content TEXT NOT NULL,\n tool_calls TEXT,\n token_usage TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n)`;\n\nconst CREATE_FILE_CONTEXT = `\nCREATE TABLE IF NOT EXISTS file_context (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,\n file_path TEXT NOT NULL,\n content_hash TEXT,\n token_count INTEGER,\n added_at TEXT DEFAULT (datetime('now'))\n)`;\n\nconst CREATE_COST_TRACKING = `\nCREATE TABLE IF NOT EXISTS cost_tracking (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,\n provider TEXT NOT NULL,\n model TEXT NOT NULL,\n role TEXT,\n input_tokens INTEGER,\n output_tokens INTEGER,\n cost_usd REAL,\n created_at TEXT DEFAULT (datetime('now'))\n)`;\n\nconst CREATE_TEAMS = `\nCREATE TABLE IF NOT EXISTS teams (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n status TEXT DEFAULT 'active',\n config TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n)`;\n\nconst CREATE_INDEXES = [\n \"CREATE INDEX IF NOT EXISTS idx_messages_conversation ON messages(conversation_id)\",\n \"CREATE INDEX IF NOT EXISTS idx_cost_conversation ON cost_tracking(conversation_id)\",\n \"CREATE INDEX IF NOT EXISTS idx_cost_provider ON cost_tracking(provider)\",\n \"CREATE INDEX IF NOT EXISTS idx_file_context_conversation ON file_context(conversation_id)\",\n] as const;\n\nconst DROP_INDEXES = [\n \"DROP INDEX IF EXISTS idx_file_context_conversation\",\n \"DROP INDEX IF EXISTS idx_cost_provider\",\n \"DROP INDEX IF EXISTS idx_cost_conversation\",\n \"DROP INDEX IF EXISTS idx_messages_conversation\",\n] as const;\n\nconst DROP_TABLES = [\n \"DROP TABLE IF EXISTS cost_tracking\",\n \"DROP TABLE IF EXISTS file_context\",\n \"DROP TABLE IF EXISTS messages\",\n \"DROP TABLE IF EXISTS teams\",\n \"DROP TABLE IF EXISTS conversations\",\n] as const;\n\nexport function up(db: Database.Database): void {\n db.transaction(() => {\n db.exec(CREATE_CONVERSATIONS);\n db.exec(CREATE_MESSAGES);\n db.exec(CREATE_FILE_CONTEXT);\n db.exec(CREATE_COST_TRACKING);\n db.exec(CREATE_TEAMS);\n\n for (const sql of CREATE_INDEXES) {\n db.exec(sql);\n }\n })();\n}\n\nexport function down(db: Database.Database): void {\n db.transaction(() => {\n for (const sql of DROP_INDEXES) {\n db.exec(sql);\n }\n for (const sql of DROP_TABLES) {\n db.exec(sql);\n }\n })();\n}\n\nexport { MIGRATION_ID };\n","/**\n * SQLite database store — PRD section 17.1\n * Uses better-sqlite3 with WAL mode for concurrent reads.\n * Runs migrations on startup. Provides raw query interface.\n */\n\nimport Database from \"better-sqlite3\";\nimport { chmodSync } from \"node:fs\";\nimport { logger } from \"../utils/logger.js\";\nimport {\n getDatabasePath,\n getDatabaseDir,\n ensureDirectory,\n} from \"../utils/pathResolver.js\";\nimport { up as initialMigrationUp } from \"./migrations/001-initial.js\";\n\nconst MIGRATIONS_TABLE_DDL = `\nCREATE TABLE IF NOT EXISTS _migrations (\n id TEXT PRIMARY KEY,\n applied_at TEXT DEFAULT (datetime('now'))\n)`;\n\ninterface IMigration {\n readonly id: string;\n readonly up: (db: Database.Database) => void;\n}\n\nconst MIGRATIONS: readonly IMigration[] = [\n { id: \"001-initial\", up: initialMigrationUp },\n] as const;\n\nexport class SqliteStore {\n private db: Database.Database | undefined;\n private closed = false;\n\n get database(): Database.Database {\n if (this.closed || !this.db) {\n throw new Error(\"SqliteStore is closed or not initialized\");\n }\n return this.db;\n }\n\n open(dbPath?: string): void {\n if (this.db) {\n return;\n }\n\n const resolvedPath = dbPath ?? getDatabasePath();\n ensureDirectory(getDatabaseDir());\n\n logger.info({ path: resolvedPath }, \"Opening SQLite database\");\n\n this.db = new Database(resolvedPath);\n\n // WAL mode for concurrent reads (PRD section 17.1)\n this.db.pragma(\"journal_mode = WAL\");\n this.db.pragma(\"busy_timeout = 5000\");\n this.db.pragma(\"foreign_keys = ON\");\n this.db.pragma(\"synchronous = NORMAL\");\n\n // Secure file permissions (PRD section 14.1)\n try {\n chmodSync(resolvedPath, 0o600);\n } catch {\n logger.warn(\n { path: resolvedPath },\n \"Could not set database file permissions to 600\",\n );\n }\n\n this.runMigrations();\n this.registerCleanupHandlers();\n }\n\n private runMigrations(): void {\n const db = this.database;\n db.exec(MIGRATIONS_TABLE_DDL);\n\n const appliedStmt = db.prepare(\n \"SELECT id FROM _migrations WHERE id = ?\",\n );\n\n const insertStmt = db.prepare(\n \"INSERT INTO _migrations (id) VALUES (?)\",\n );\n\n for (const migration of MIGRATIONS) {\n const existing = appliedStmt.get(migration.id) as\n | { id: string }\n | undefined;\n\n if (!existing) {\n logger.info({ migrationId: migration.id }, \"Running migration\");\n db.transaction(() => {\n migration.up(db);\n insertStmt.run(migration.id);\n })();\n logger.info({ migrationId: migration.id }, \"Migration applied\");\n }\n }\n }\n\n prepare(sql: string): Database.Statement {\n return this.database.prepare(sql);\n }\n\n run(sql: string, ...params: readonly unknown[]): Database.RunResult {\n return this.database.prepare(sql).run(...params);\n }\n\n get(sql: string, ...params: unknown[]): unknown {\n return this.database.prepare(sql).get(...params);\n }\n\n all(sql: string, ...params: unknown[]): unknown[] {\n return this.database.prepare(sql).all(...params);\n }\n\n transaction<T>(fn: () => T): T {\n return this.database.transaction(fn)();\n }\n\n close(): void {\n if (this.closed || !this.db) {\n return;\n }\n\n logger.info(\"Closing SQLite database\");\n this.closed = true;\n\n try {\n this.db.pragma(\"wal_checkpoint(TRUNCATE)\");\n this.db.close();\n } catch (error: unknown) {\n const message =\n error instanceof Error ? error.message : String(error);\n logger.error({ error: message }, \"Error closing database\");\n }\n\n this.db = undefined;\n }\n\n private registerCleanupHandlers(): void {\n const cleanup = (): void => {\n this.close();\n };\n\n process.on(\"exit\", cleanup);\n process.on(\"SIGINT\", () => {\n cleanup();\n process.exit(130);\n });\n process.on(\"SIGTERM\", () => {\n cleanup();\n process.exit(143);\n });\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { homedir } from 'os';
|
|
2
|
-
import { join } from 'path';
|
|
1
|
+
import { homedir, tmpdir } from 'os';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
3
|
import { existsSync, mkdirSync } from 'fs';
|
|
4
4
|
|
|
5
5
|
// src/utils/pathResolver.ts
|
|
@@ -25,9 +25,15 @@ function getLogDir() {
|
|
|
25
25
|
function getCredentialsPath() {
|
|
26
26
|
return join(getAemeathHome(), "credentials.enc");
|
|
27
27
|
}
|
|
28
|
+
function getMCPConfigPath() {
|
|
29
|
+
return join(getAemeathHome(), "mcp.json");
|
|
30
|
+
}
|
|
28
31
|
function getUserSkillsDir() {
|
|
29
32
|
return join(getAemeathHome(), "skills");
|
|
30
33
|
}
|
|
34
|
+
function getUniversalUserSkillsDir() {
|
|
35
|
+
return join(homedir(), ".agents", "skills");
|
|
36
|
+
}
|
|
31
37
|
function getTeamsDir() {
|
|
32
38
|
return join(getAemeathHome(), "teams");
|
|
33
39
|
}
|
|
@@ -43,9 +49,19 @@ function getProjectConfigPath(projectRoot) {
|
|
|
43
49
|
function getProjectSkillsDir(projectRoot) {
|
|
44
50
|
return join(getProjectConfigDir(projectRoot), "skills");
|
|
45
51
|
}
|
|
52
|
+
function getUniversalProjectSkillsDir(projectRoot) {
|
|
53
|
+
return join(projectRoot, ".agents", "skills");
|
|
54
|
+
}
|
|
55
|
+
function getProjectMCPConfigPath(projectRoot) {
|
|
56
|
+
return join(getProjectConfigDir(projectRoot), "mcp.json");
|
|
57
|
+
}
|
|
58
|
+
function getProjectAgentsPath(projectRoot) {
|
|
59
|
+
return join(getProjectConfigDir(projectRoot), "AGENTS.md");
|
|
60
|
+
}
|
|
46
61
|
function getIPCSocketDir() {
|
|
47
|
-
const
|
|
48
|
-
|
|
62
|
+
const tmp = process.env["TMPDIR"] ?? tmpdir();
|
|
63
|
+
const uid = process.platform === "win32" ? process.env["USERNAME"] ?? "user" : String(process.getuid?.() ?? "user");
|
|
64
|
+
return join(tmp, `aemeathcli-${uid}`);
|
|
49
65
|
}
|
|
50
66
|
function getIPCSocketPath(sessionId) {
|
|
51
67
|
return join(getIPCSocketDir(), `${sessionId}.sock`);
|
|
@@ -66,7 +82,23 @@ function initializeDirectories() {
|
|
|
66
82
|
ensureDirectory(getTeamsDir());
|
|
67
83
|
ensureDirectory(getTasksDir());
|
|
68
84
|
}
|
|
85
|
+
function findProjectRoot(startDir) {
|
|
86
|
+
let currentDir = startDir ?? process.cwd();
|
|
87
|
+
while (currentDir !== dirname(currentDir)) {
|
|
88
|
+
if (existsSync(join(currentDir, ".git"))) {
|
|
89
|
+
return currentDir;
|
|
90
|
+
}
|
|
91
|
+
if (existsSync(join(currentDir, ".aemeathcli"))) {
|
|
92
|
+
return currentDir;
|
|
93
|
+
}
|
|
94
|
+
if (existsSync(join(currentDir, "package.json"))) {
|
|
95
|
+
return currentDir;
|
|
96
|
+
}
|
|
97
|
+
currentDir = dirname(currentDir);
|
|
98
|
+
}
|
|
99
|
+
return process.cwd();
|
|
100
|
+
}
|
|
69
101
|
|
|
70
|
-
export { ensureDirectory, ensureSecureDirectory, getAemeathHome, getConfigPath, getCredentialsPath, getDatabaseDir, getDatabasePath, getIPCSocketDir, getIPCSocketPath, getProjectConfigPath, getProjectSkillsDir, getTasksDir, getTeamsDir, getUserSkillsDir, initializeDirectories };
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
72
|
-
//# sourceMappingURL=chunk-
|
|
102
|
+
export { ensureDirectory, ensureSecureDirectory, findProjectRoot, getAemeathHome, getConfigDir, getConfigPath, getCredentialsPath, getDatabaseDir, getDatabasePath, getIPCSocketDir, getIPCSocketPath, getLogDir, getMCPConfigPath, getProjectAgentsPath, getProjectConfigDir, getProjectConfigPath, getProjectMCPConfigPath, getProjectSkillsDir, getTasksDir, getTeamsDir, getUniversalProjectSkillsDir, getUniversalUserSkillsDir, getUserSkillsDir, initializeDirectories };
|
|
103
|
+
//# sourceMappingURL=chunk-D275MCIH.js.map
|
|
104
|
+
//# sourceMappingURL=chunk-D275MCIH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/pathResolver.ts"],"names":[],"mappings":"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","file":"chunk-D275MCIH.js","sourcesContent":["/**\n * Safe path handling per PRD section 15.7 item 5\n * NO hardcoded paths — use path.join(), os.homedir(), XDG Base Directory\n */\n\nimport { homedir, tmpdir } from \"node:os\";\nimport { join, dirname } from \"node:path\";\nimport { existsSync, mkdirSync } from \"node:fs\";\n\n// ── XDG-inspired directory layout ────────────────────────────────────────\n\nconst AEMEATHCLI_HOME = join(homedir(), \".aemeathcli\");\n\nexport function getAemeathHome(): string {\n return process.env[\"AEMEATHCLI_HOME\"] ?? AEMEATHCLI_HOME;\n}\n\nexport function getConfigDir(): string {\n return getAemeathHome();\n}\n\nexport function getConfigPath(): string {\n return join(getConfigDir(), \"config.json\");\n}\n\nexport function getDatabaseDir(): string {\n return join(getAemeathHome(), \"db\");\n}\n\nexport function getDatabasePath(): string {\n return join(getDatabaseDir(), \"aemeathcli.db\");\n}\n\nexport function getLogDir(): string {\n return join(getAemeathHome(), \"logs\");\n}\n\nexport function getCredentialsPath(): string {\n return join(getAemeathHome(), \"credentials.enc\");\n}\n\nexport function getMCPConfigPath(): string {\n return join(getAemeathHome(), \"mcp.json\");\n}\n\nexport function getUserSkillsDir(): string {\n return join(getAemeathHome(), \"skills\");\n}\n\n/** Universal user-level skills directory: ~/.agents/skills/ */\nexport function getUniversalUserSkillsDir(): string {\n return join(homedir(), \".agents\", \"skills\");\n}\n\nexport function getTeamsDir(): string {\n return join(getAemeathHome(), \"teams\");\n}\n\nexport function getTasksDir(): string {\n return join(getAemeathHome(), \"tasks\");\n}\n\n// ── Project-level paths ──────────────────────────────────────────────────\n\nexport function getProjectConfigDir(projectRoot: string): string {\n return join(projectRoot, \".aemeathcli\");\n}\n\nexport function getProjectConfigPath(projectRoot: string): string {\n return join(getProjectConfigDir(projectRoot), \"config.json\");\n}\n\nexport function getProjectSkillsDir(projectRoot: string): string {\n return join(getProjectConfigDir(projectRoot), \"skills\");\n}\n\n/** Universal project-level skills directory: <projectRoot>/.agents/skills/ */\nexport function getUniversalProjectSkillsDir(projectRoot: string): string {\n return join(projectRoot, \".agents\", \"skills\");\n}\n\nexport function getProjectMCPConfigPath(projectRoot: string): string {\n return join(getProjectConfigDir(projectRoot), \"mcp.json\");\n}\n\nexport function getProjectAgentsPath(projectRoot: string): string {\n return join(getProjectConfigDir(projectRoot), \"AGENTS.md\");\n}\n\n// ── Socket paths (PRD section 14.5) ──────────────────────────────────────\n\nexport function getIPCSocketDir(): string {\n const tmp = process.env[\"TMPDIR\"] ?? tmpdir();\n const uid = process.platform === \"win32\"\n ? (process.env[\"USERNAME\"] ?? \"user\")\n : String(process.getuid?.() ?? \"user\");\n return join(tmp, `aemeathcli-${uid}`);\n}\n\nexport function getIPCSocketPath(sessionId: string): string {\n return join(getIPCSocketDir(), `${sessionId}.sock`);\n}\n\n// ── Directory Initialization ─────────────────────────────────────────────\n\nexport function ensureDirectory(dirPath: string, mode?: number): void {\n if (!existsSync(dirPath)) {\n mkdirSync(dirPath, { recursive: true, mode: mode ?? 0o755 });\n }\n}\n\nexport function ensureSecureDirectory(dirPath: string): void {\n ensureDirectory(dirPath, 0o700);\n}\n\nexport function initializeDirectories(): void {\n ensureSecureDirectory(getAemeathHome());\n ensureDirectory(getDatabaseDir());\n ensureSecureDirectory(getLogDir());\n ensureDirectory(getUserSkillsDir());\n ensureDirectory(getTeamsDir());\n ensureDirectory(getTasksDir());\n}\n\n// ── Project Root Detection ───────────────────────────────────────────────\n\nexport function findProjectRoot(startDir?: string): string {\n let currentDir = startDir ?? process.cwd();\n\n while (currentDir !== dirname(currentDir)) {\n if (existsSync(join(currentDir, \".git\"))) {\n return currentDir;\n }\n if (existsSync(join(currentDir, \".aemeathcli\"))) {\n return currentDir;\n }\n if (existsSync(join(currentDir, \"package.json\"))) {\n return currentDir;\n }\n currentDir = dirname(currentDir);\n }\n\n // Fallback to cwd\n return process.cwd();\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { validatePath, isCommandBlocked, redactSecrets } from './chunk-
|
|
1
|
+
import { validatePath, isPathAllowed, isCommandBlocked, redactSecrets } from './chunk-OPWAFS6Y.js';
|
|
2
2
|
import { FileNotFoundError, ExecutionTimeoutError } from './chunk-ZGOHARPV.js';
|
|
3
|
-
import { logger } from './chunk-
|
|
3
|
+
import { logger } from './chunk-IR5HLBMH.js';
|
|
4
4
|
import { stat, readFile, mkdir, writeFile } from 'fs/promises';
|
|
5
5
|
import { dirname, resolve, extname } from 'path';
|
|
6
6
|
import fg from 'fast-glob';
|
|
@@ -72,7 +72,7 @@ var ToolRegistry = class {
|
|
|
72
72
|
isError: true
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
|
-
if (tool.requiresApproval(context
|
|
75
|
+
if (tool.requiresApproval(context, call.arguments)) {
|
|
76
76
|
return {
|
|
77
77
|
toolCallId: call.id,
|
|
78
78
|
name: call.name,
|
|
@@ -82,7 +82,7 @@ var ToolRegistry = class {
|
|
|
82
82
|
}
|
|
83
83
|
try {
|
|
84
84
|
logger.debug({ toolName: call.name, args: redactToolArgs(call.arguments) }, "Executing tool");
|
|
85
|
-
const result = await tool.execute(call.arguments);
|
|
85
|
+
const result = await tool.execute(call.arguments, context);
|
|
86
86
|
return {
|
|
87
87
|
...result,
|
|
88
88
|
toolCallId: call.id,
|
|
@@ -168,10 +168,6 @@ function formatWithLineNumbers(content, offset, limit) {
|
|
|
168
168
|
return `${lineNum} ${truncated}`;
|
|
169
169
|
}).join("\n");
|
|
170
170
|
}
|
|
171
|
-
var projectRoot = process.cwd();
|
|
172
|
-
function setReadProjectRoot(root) {
|
|
173
|
-
projectRoot = root;
|
|
174
|
-
}
|
|
175
171
|
function createReadTool() {
|
|
176
172
|
return {
|
|
177
173
|
definition: {
|
|
@@ -201,10 +197,10 @@ function createReadTool() {
|
|
|
201
197
|
]
|
|
202
198
|
},
|
|
203
199
|
category: "file",
|
|
204
|
-
requiresApproval: (
|
|
200
|
+
requiresApproval: (_context, _args) => {
|
|
205
201
|
return false;
|
|
206
202
|
},
|
|
207
|
-
execute: async (args) => {
|
|
203
|
+
execute: async (args, context) => {
|
|
208
204
|
const filePath = args["file_path"];
|
|
209
205
|
if (typeof filePath !== "string" || filePath.length === 0) {
|
|
210
206
|
return {
|
|
@@ -214,6 +210,8 @@ function createReadTool() {
|
|
|
214
210
|
isError: true
|
|
215
211
|
};
|
|
216
212
|
}
|
|
213
|
+
const projectRoot = context.projectRoot;
|
|
214
|
+
const allowedPaths = context.allowedPaths;
|
|
217
215
|
let resolvedPath;
|
|
218
216
|
try {
|
|
219
217
|
resolvedPath = validatePath(filePath, projectRoot);
|
|
@@ -221,6 +219,14 @@ function createReadTool() {
|
|
|
221
219
|
const msg = err instanceof Error ? err.message : "Path validation failed";
|
|
222
220
|
return { toolCallId: "", name: "read", content: msg, isError: true };
|
|
223
221
|
}
|
|
222
|
+
if (!isPathAllowed(resolvedPath, allowedPaths, projectRoot)) {
|
|
223
|
+
return {
|
|
224
|
+
toolCallId: "",
|
|
225
|
+
name: "read",
|
|
226
|
+
content: `Access denied: ${resolvedPath} is outside the configured allowed paths.`,
|
|
227
|
+
isError: true
|
|
228
|
+
};
|
|
229
|
+
}
|
|
224
230
|
let fileStat;
|
|
225
231
|
try {
|
|
226
232
|
fileStat = await stat(resolvedPath);
|
|
@@ -300,10 +306,6 @@ function isConfigFile(filePath) {
|
|
|
300
306
|
const base = filePath.split("/").pop() ?? "";
|
|
301
307
|
return CONFIG_EXTENSIONS.has(ext) || SENSITIVE_FILENAMES.has(base);
|
|
302
308
|
}
|
|
303
|
-
var projectRoot2 = process.cwd();
|
|
304
|
-
function setWriteProjectRoot(root) {
|
|
305
|
-
projectRoot2 = root;
|
|
306
|
-
}
|
|
307
309
|
function createWriteTool() {
|
|
308
310
|
return {
|
|
309
311
|
definition: {
|
|
@@ -325,10 +327,10 @@ function createWriteTool() {
|
|
|
325
327
|
]
|
|
326
328
|
},
|
|
327
329
|
category: "file",
|
|
328
|
-
requiresApproval: (
|
|
329
|
-
return
|
|
330
|
+
requiresApproval: (context, _args) => {
|
|
331
|
+
return context.permissionMode === "strict" || context.permissionMode === "standard";
|
|
330
332
|
},
|
|
331
|
-
execute: async (args) => {
|
|
333
|
+
execute: async (args, context) => {
|
|
332
334
|
const filePath = args["file_path"];
|
|
333
335
|
const content = args["content"];
|
|
334
336
|
if (typeof filePath !== "string" || filePath.length === 0) {
|
|
@@ -347,13 +349,23 @@ function createWriteTool() {
|
|
|
347
349
|
isError: true
|
|
348
350
|
};
|
|
349
351
|
}
|
|
352
|
+
const projectRoot = context.projectRoot;
|
|
353
|
+
const allowedPaths = context.allowedPaths;
|
|
350
354
|
let resolvedPath;
|
|
351
355
|
try {
|
|
352
|
-
resolvedPath = validatePath(filePath,
|
|
356
|
+
resolvedPath = validatePath(filePath, projectRoot);
|
|
353
357
|
} catch (err) {
|
|
354
358
|
const msg = err instanceof Error ? err.message : "Path validation failed";
|
|
355
359
|
return { toolCallId: "", name: "write", content: msg, isError: true };
|
|
356
360
|
}
|
|
361
|
+
if (!isPathAllowed(resolvedPath, allowedPaths, projectRoot)) {
|
|
362
|
+
return {
|
|
363
|
+
toolCallId: "",
|
|
364
|
+
name: "write",
|
|
365
|
+
content: `Access denied: ${resolvedPath} is outside the configured allowed paths.`,
|
|
366
|
+
isError: true
|
|
367
|
+
};
|
|
368
|
+
}
|
|
357
369
|
const parentDir = dirname(resolvedPath);
|
|
358
370
|
try {
|
|
359
371
|
await mkdir(parentDir, { recursive: true });
|
|
@@ -399,10 +411,6 @@ function createWriteTool() {
|
|
|
399
411
|
}
|
|
400
412
|
};
|
|
401
413
|
}
|
|
402
|
-
var projectRoot3 = process.cwd();
|
|
403
|
-
function setEditProjectRoot(root) {
|
|
404
|
-
projectRoot3 = root;
|
|
405
|
-
}
|
|
406
414
|
function createEditTool() {
|
|
407
415
|
return {
|
|
408
416
|
definition: {
|
|
@@ -437,10 +445,10 @@ function createEditTool() {
|
|
|
437
445
|
]
|
|
438
446
|
},
|
|
439
447
|
category: "file",
|
|
440
|
-
requiresApproval: (
|
|
441
|
-
return
|
|
448
|
+
requiresApproval: (context, _args) => {
|
|
449
|
+
return context.permissionMode === "strict" || context.permissionMode === "standard";
|
|
442
450
|
},
|
|
443
|
-
execute: async (args) => {
|
|
451
|
+
execute: async (args, context) => {
|
|
444
452
|
const filePath = args["file_path"];
|
|
445
453
|
const oldString = args["old_string"];
|
|
446
454
|
const newString = args["new_string"];
|
|
@@ -477,13 +485,23 @@ function createEditTool() {
|
|
|
477
485
|
isError: true
|
|
478
486
|
};
|
|
479
487
|
}
|
|
488
|
+
const projectRoot = context.projectRoot;
|
|
489
|
+
const allowedPaths = context.allowedPaths;
|
|
480
490
|
let resolvedPath;
|
|
481
491
|
try {
|
|
482
|
-
resolvedPath = validatePath(filePath,
|
|
492
|
+
resolvedPath = validatePath(filePath, projectRoot);
|
|
483
493
|
} catch (err) {
|
|
484
494
|
const msg = err instanceof Error ? err.message : "Path validation failed";
|
|
485
495
|
return { toolCallId: "", name: "edit", content: msg, isError: true };
|
|
486
496
|
}
|
|
497
|
+
if (!isPathAllowed(resolvedPath, allowedPaths, projectRoot)) {
|
|
498
|
+
return {
|
|
499
|
+
toolCallId: "",
|
|
500
|
+
name: "edit",
|
|
501
|
+
content: `Access denied: ${resolvedPath} is outside the configured allowed paths.`,
|
|
502
|
+
isError: true
|
|
503
|
+
};
|
|
504
|
+
}
|
|
487
505
|
try {
|
|
488
506
|
const fileStat = await stat(resolvedPath);
|
|
489
507
|
if (!fileStat.isFile()) {
|
|
@@ -545,10 +563,6 @@ function createEditTool() {
|
|
|
545
563
|
};
|
|
546
564
|
}
|
|
547
565
|
var MAX_RESULTS = 1e3;
|
|
548
|
-
var projectRoot4 = process.cwd();
|
|
549
|
-
function setGlobProjectRoot(root) {
|
|
550
|
-
projectRoot4 = root;
|
|
551
|
-
}
|
|
552
566
|
function createGlobTool() {
|
|
553
567
|
return {
|
|
554
568
|
definition: {
|
|
@@ -570,10 +584,10 @@ function createGlobTool() {
|
|
|
570
584
|
]
|
|
571
585
|
},
|
|
572
586
|
category: "search",
|
|
573
|
-
requiresApproval: (
|
|
587
|
+
requiresApproval: (_context, _args) => {
|
|
574
588
|
return false;
|
|
575
589
|
},
|
|
576
|
-
execute: async (args) => {
|
|
590
|
+
execute: async (args, context) => {
|
|
577
591
|
const pattern = args["pattern"];
|
|
578
592
|
if (typeof pattern !== "string" || pattern.length === 0) {
|
|
579
593
|
return {
|
|
@@ -583,12 +597,22 @@ function createGlobTool() {
|
|
|
583
597
|
isError: true
|
|
584
598
|
};
|
|
585
599
|
}
|
|
600
|
+
const projectRoot = context.projectRoot;
|
|
601
|
+
const allowedPaths = context.allowedPaths;
|
|
586
602
|
let searchPath;
|
|
587
603
|
if (typeof args["path"] === "string" && args["path"].length > 0) {
|
|
588
|
-
const resolved = resolve(
|
|
589
|
-
searchPath = validatePath(resolved,
|
|
604
|
+
const resolved = resolve(projectRoot, args["path"]);
|
|
605
|
+
searchPath = validatePath(resolved, projectRoot);
|
|
590
606
|
} else {
|
|
591
|
-
searchPath =
|
|
607
|
+
searchPath = projectRoot;
|
|
608
|
+
}
|
|
609
|
+
if (!isPathAllowed(searchPath, allowedPaths, projectRoot)) {
|
|
610
|
+
return {
|
|
611
|
+
toolCallId: "",
|
|
612
|
+
name: "glob",
|
|
613
|
+
content: `Access denied: ${searchPath} is outside the configured allowed paths.`,
|
|
614
|
+
isError: true
|
|
615
|
+
};
|
|
592
616
|
}
|
|
593
617
|
let matchedPaths;
|
|
594
618
|
try {
|
|
@@ -742,10 +766,6 @@ function applyLimits(output, headLimit, offset) {
|
|
|
742
766
|
}
|
|
743
767
|
return result;
|
|
744
768
|
}
|
|
745
|
-
var projectRoot5 = process.cwd();
|
|
746
|
-
function setGrepProjectRoot(root) {
|
|
747
|
-
projectRoot5 = root;
|
|
748
|
-
}
|
|
749
769
|
function createGrepTool() {
|
|
750
770
|
return {
|
|
751
771
|
definition: {
|
|
@@ -833,10 +853,10 @@ function createGrepTool() {
|
|
|
833
853
|
]
|
|
834
854
|
},
|
|
835
855
|
category: "search",
|
|
836
|
-
requiresApproval: (
|
|
856
|
+
requiresApproval: (_context, _args) => {
|
|
837
857
|
return false;
|
|
838
858
|
},
|
|
839
|
-
execute: async (args) => {
|
|
859
|
+
execute: async (args, context) => {
|
|
840
860
|
const pattern = args["pattern"];
|
|
841
861
|
if (typeof pattern !== "string" || pattern.length === 0) {
|
|
842
862
|
return {
|
|
@@ -846,12 +866,22 @@ function createGrepTool() {
|
|
|
846
866
|
isError: true
|
|
847
867
|
};
|
|
848
868
|
}
|
|
869
|
+
const projectRoot = context.projectRoot;
|
|
870
|
+
const allowedPaths = context.allowedPaths;
|
|
849
871
|
let searchPath;
|
|
850
872
|
if (typeof args["path"] === "string" && args["path"].length > 0) {
|
|
851
|
-
const resolved = resolve(
|
|
852
|
-
searchPath = validatePath(resolved,
|
|
873
|
+
const resolved = resolve(projectRoot, args["path"]);
|
|
874
|
+
searchPath = validatePath(resolved, projectRoot);
|
|
853
875
|
} else {
|
|
854
|
-
searchPath =
|
|
876
|
+
searchPath = projectRoot;
|
|
877
|
+
}
|
|
878
|
+
if (!isPathAllowed(searchPath, allowedPaths, projectRoot)) {
|
|
879
|
+
return {
|
|
880
|
+
toolCallId: "",
|
|
881
|
+
name: "grep",
|
|
882
|
+
content: `Access denied: ${searchPath} is outside the configured allowed paths.`,
|
|
883
|
+
isError: true
|
|
884
|
+
};
|
|
855
885
|
}
|
|
856
886
|
const outputMode = args["output_mode"] === "content" || args["output_mode"] === "count" ? args["output_mode"] : "files_with_matches";
|
|
857
887
|
const headLimit = typeof args["head_limit"] === "number" ? args["head_limit"] : DEFAULT_HEAD_LIMIT;
|
|
@@ -984,14 +1014,6 @@ function truncateOutput(output) {
|
|
|
984
1014
|
}
|
|
985
1015
|
return output.substring(0, MAX_OUTPUT_LENGTH2) + "\n...(truncated)";
|
|
986
1016
|
}
|
|
987
|
-
var workingDirectory = process.cwd();
|
|
988
|
-
var blockedCommands = [];
|
|
989
|
-
function setBashWorkingDirectory(dir) {
|
|
990
|
-
workingDirectory = dir;
|
|
991
|
-
}
|
|
992
|
-
function setBashBlockedCommands(commands) {
|
|
993
|
-
blockedCommands = commands;
|
|
994
|
-
}
|
|
995
1017
|
function createBashTool() {
|
|
996
1018
|
return {
|
|
997
1019
|
definition: {
|
|
@@ -1020,17 +1042,18 @@ function createBashTool() {
|
|
|
1020
1042
|
]
|
|
1021
1043
|
},
|
|
1022
1044
|
category: "shell",
|
|
1023
|
-
requiresApproval: (
|
|
1045
|
+
requiresApproval: (context, args) => {
|
|
1024
1046
|
const command = typeof args["command"] === "string" ? args["command"] : "";
|
|
1047
|
+
const blockedCommands = context.blockedCommands;
|
|
1025
1048
|
if (isDangerousCommand(command) || isCommandBlocked(command, blockedCommands)) {
|
|
1026
1049
|
return true;
|
|
1027
1050
|
}
|
|
1028
|
-
if (
|
|
1051
|
+
if (context.permissionMode === "strict") {
|
|
1029
1052
|
return true;
|
|
1030
1053
|
}
|
|
1031
1054
|
return false;
|
|
1032
1055
|
},
|
|
1033
|
-
execute: async (args) => {
|
|
1056
|
+
execute: async (args, context) => {
|
|
1034
1057
|
const command = args["command"];
|
|
1035
1058
|
if (typeof command !== "string" || command.length === 0) {
|
|
1036
1059
|
return {
|
|
@@ -1040,6 +1063,10 @@ function createBashTool() {
|
|
|
1040
1063
|
isError: true
|
|
1041
1064
|
};
|
|
1042
1065
|
}
|
|
1066
|
+
const workingDirectory = context.workingDirectory;
|
|
1067
|
+
const blockedCommands = context.blockedCommands;
|
|
1068
|
+
const allowedPaths = context.allowedPaths;
|
|
1069
|
+
const projectRoot = context.projectRoot;
|
|
1043
1070
|
const lowerCommand = command.toLowerCase().trim();
|
|
1044
1071
|
for (const pattern of DANGEROUS_PATTERNS) {
|
|
1045
1072
|
if (lowerCommand.includes(pattern)) {
|
|
@@ -1059,6 +1086,14 @@ function createBashTool() {
|
|
|
1059
1086
|
isError: true
|
|
1060
1087
|
};
|
|
1061
1088
|
}
|
|
1089
|
+
if (!isPathAllowed(workingDirectory, allowedPaths, projectRoot)) {
|
|
1090
|
+
return {
|
|
1091
|
+
toolCallId: "",
|
|
1092
|
+
name: "bash",
|
|
1093
|
+
content: `Access denied: working directory ${workingDirectory} is outside the configured allowed paths.`,
|
|
1094
|
+
isError: true
|
|
1095
|
+
};
|
|
1096
|
+
}
|
|
1062
1097
|
let timeoutMs = DEFAULT_TIMEOUT_MS;
|
|
1063
1098
|
if (typeof args["timeout"] === "number") {
|
|
1064
1099
|
timeoutMs = Math.max(1e3, Math.min(args["timeout"], MAX_TIMEOUT_MS));
|
|
@@ -1149,7 +1184,7 @@ function createWebSearchTool() {
|
|
|
1149
1184
|
]
|
|
1150
1185
|
},
|
|
1151
1186
|
category: "web",
|
|
1152
|
-
requiresApproval: (
|
|
1187
|
+
requiresApproval: (_context, _args) => {
|
|
1153
1188
|
return false;
|
|
1154
1189
|
},
|
|
1155
1190
|
execute: async (args) => {
|
|
@@ -1237,6 +1272,9 @@ function isPrivateHostname(hostname) {
|
|
|
1237
1272
|
const ipMatch = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(hostname);
|
|
1238
1273
|
if (ipMatch) {
|
|
1239
1274
|
const [, a, b] = ipMatch;
|
|
1275
|
+
if (a === void 0 || b === void 0) {
|
|
1276
|
+
return false;
|
|
1277
|
+
}
|
|
1240
1278
|
const first = parseInt(a, 10);
|
|
1241
1279
|
const second = parseInt(b, 10);
|
|
1242
1280
|
if (first === 127) return true;
|
|
@@ -1304,9 +1342,7 @@ function createWebFetchTool() {
|
|
|
1304
1342
|
]
|
|
1305
1343
|
},
|
|
1306
1344
|
category: "web",
|
|
1307
|
-
requiresApproval: (
|
|
1308
|
-
return false;
|
|
1309
|
-
},
|
|
1345
|
+
requiresApproval: (_context, _args) => false,
|
|
1310
1346
|
execute: async (args) => {
|
|
1311
1347
|
const rawUrl = args["url"];
|
|
1312
1348
|
if (typeof rawUrl !== "string" || rawUrl.length === 0) {
|
|
@@ -1332,7 +1368,9 @@ function createWebFetchTool() {
|
|
|
1332
1368
|
}
|
|
1333
1369
|
logger.debug({ url, timeout: timeoutMs }, "Fetching URL");
|
|
1334
1370
|
const controller = new AbortController();
|
|
1335
|
-
const timeoutId = setTimeout(() =>
|
|
1371
|
+
const timeoutId = setTimeout(() => {
|
|
1372
|
+
controller.abort();
|
|
1373
|
+
}, timeoutMs);
|
|
1336
1374
|
try {
|
|
1337
1375
|
const response = await fetch(url, {
|
|
1338
1376
|
signal: controller.signal,
|
|
@@ -1463,10 +1501,6 @@ function truncateOutput2(output) {
|
|
|
1463
1501
|
}
|
|
1464
1502
|
return output.substring(0, MAX_OUTPUT_LENGTH3) + "\n...(truncated)";
|
|
1465
1503
|
}
|
|
1466
|
-
var workingDirectory2 = process.cwd();
|
|
1467
|
-
function setGitWorkingDirectory(dir) {
|
|
1468
|
-
workingDirectory2 = dir;
|
|
1469
|
-
}
|
|
1470
1504
|
function createGitTool() {
|
|
1471
1505
|
return {
|
|
1472
1506
|
definition: {
|
|
@@ -1482,7 +1516,7 @@ function createGitTool() {
|
|
|
1482
1516
|
]
|
|
1483
1517
|
},
|
|
1484
1518
|
category: "git",
|
|
1485
|
-
requiresApproval: (
|
|
1519
|
+
requiresApproval: (context, args) => {
|
|
1486
1520
|
const command = typeof args["command"] === "string" ? args["command"] : "";
|
|
1487
1521
|
const subcommand = parseGitSubcommand(command);
|
|
1488
1522
|
if (hasDangerousFlags(command)) {
|
|
@@ -1491,15 +1525,15 @@ function createGitTool() {
|
|
|
1491
1525
|
if (subcommand && READ_ONLY_SUBCOMMANDS.has(subcommand)) {
|
|
1492
1526
|
return false;
|
|
1493
1527
|
}
|
|
1494
|
-
if (
|
|
1528
|
+
if (context.permissionMode === "strict") {
|
|
1495
1529
|
return true;
|
|
1496
1530
|
}
|
|
1497
|
-
if (subcommand === "push" &&
|
|
1531
|
+
if (subcommand === "push" && context.permissionMode === "standard") {
|
|
1498
1532
|
return true;
|
|
1499
1533
|
}
|
|
1500
1534
|
return false;
|
|
1501
1535
|
},
|
|
1502
|
-
execute: async (args) => {
|
|
1536
|
+
execute: async (args, context) => {
|
|
1503
1537
|
const command = args["command"];
|
|
1504
1538
|
if (typeof command !== "string" || command.length === 0) {
|
|
1505
1539
|
return {
|
|
@@ -1509,6 +1543,7 @@ function createGitTool() {
|
|
|
1509
1543
|
isError: true
|
|
1510
1544
|
};
|
|
1511
1545
|
}
|
|
1546
|
+
const workingDirectory = context.workingDirectory;
|
|
1512
1547
|
const trimmedCommand = command.trim();
|
|
1513
1548
|
if (!trimmedCommand.startsWith("git ")) {
|
|
1514
1549
|
return {
|
|
@@ -1536,10 +1571,10 @@ function createGitTool() {
|
|
|
1536
1571
|
isError: true
|
|
1537
1572
|
};
|
|
1538
1573
|
}
|
|
1539
|
-
logger.debug({ command: trimmedCommand, subcommand, cwd:
|
|
1574
|
+
logger.debug({ command: trimmedCommand, subcommand, cwd: workingDirectory }, "Executing git command");
|
|
1540
1575
|
try {
|
|
1541
1576
|
const result = await execaCommand(trimmedCommand, {
|
|
1542
|
-
cwd:
|
|
1577
|
+
cwd: workingDirectory,
|
|
1543
1578
|
timeout: GIT_TIMEOUT_MS,
|
|
1544
1579
|
reject: false,
|
|
1545
1580
|
env: {
|
|
@@ -1583,15 +1618,7 @@ function createGitTool() {
|
|
|
1583
1618
|
}
|
|
1584
1619
|
|
|
1585
1620
|
// src/tools/index.ts
|
|
1586
|
-
function createDefaultRegistry(
|
|
1587
|
-
setReadProjectRoot(context.projectRoot);
|
|
1588
|
-
setWriteProjectRoot(context.projectRoot);
|
|
1589
|
-
setEditProjectRoot(context.projectRoot);
|
|
1590
|
-
setGlobProjectRoot(context.projectRoot);
|
|
1591
|
-
setGrepProjectRoot(context.projectRoot);
|
|
1592
|
-
setBashWorkingDirectory(context.workingDirectory);
|
|
1593
|
-
setBashBlockedCommands(context.blockedCommands);
|
|
1594
|
-
setGitWorkingDirectory(context.workingDirectory);
|
|
1621
|
+
function createDefaultRegistry(_context) {
|
|
1595
1622
|
const registry = new ToolRegistry();
|
|
1596
1623
|
registry.register(createReadTool());
|
|
1597
1624
|
registry.register(createWriteTool());
|
|
@@ -1605,6 +1632,6 @@ function createDefaultRegistry(context) {
|
|
|
1605
1632
|
return registry;
|
|
1606
1633
|
}
|
|
1607
1634
|
|
|
1608
|
-
export { ToolRegistry, createBashTool, createDefaultRegistry, createEditTool, createGitTool, createGlobTool, createGrepTool, createReadTool, createWebFetchTool, createWebSearchTool, createWriteTool,
|
|
1609
|
-
//# sourceMappingURL=chunk-
|
|
1610
|
-
//# sourceMappingURL=chunk-
|
|
1635
|
+
export { ToolRegistry, createBashTool, createDefaultRegistry, createEditTool, createGitTool, createGlobTool, createGrepTool, createReadTool, createWebFetchTool, createWebSearchTool, createWriteTool, setWebSearchProvider };
|
|
1636
|
+
//# sourceMappingURL=chunk-FFS4T7BZ.js.map
|
|
1637
|
+
//# sourceMappingURL=chunk-FFS4T7BZ.js.map
|