agentinit 1.22.0 → 1.23.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.
- package/CHANGELOG.md +26 -1
- package/README.md +41 -0
- package/dist/agents/Agent.d.ts +4 -0
- package/dist/agents/Agent.d.ts.map +1 -1
- package/dist/agents/Agent.js +9 -1
- package/dist/agents/Agent.js.map +1 -1
- package/dist/agents/HermesAgent.d.ts.map +1 -1
- package/dist/agents/HermesAgent.js +1 -0
- package/dist/agents/HermesAgent.js.map +1 -1
- package/dist/cli.js +938 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +303 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +55 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/core/agentSettings/adapters/claude.d.ts +3 -0
- package/dist/core/agentSettings/adapters/claude.d.ts.map +1 -0
- package/dist/core/agentSettings/adapters/claude.js +147 -0
- package/dist/core/agentSettings/adapters/claude.js.map +1 -0
- package/dist/core/agentSettings/registry.d.ts +6 -0
- package/dist/core/agentSettings/registry.d.ts.map +1 -0
- package/dist/core/agentSettings/registry.js +20 -0
- package/dist/core/agentSettings/registry.js.map +1 -0
- package/dist/core/agentSettings/settingsManager.d.ts +12 -0
- package/dist/core/agentSettings/settingsManager.d.ts.map +1 -0
- package/dist/core/agentSettings/settingsManager.js +399 -0
- package/dist/core/agentSettings/settingsManager.js.map +1 -0
- package/dist/core/agentSettings/types.d.ts +93 -0
- package/dist/core/agentSettings/types.d.ts.map +1 -0
- package/dist/core/agentSettings/types.js +2 -0
- package/dist/core/agentSettings/types.js.map +1 -0
- package/dist/core/agentSettings/valueParser.d.ts +3 -0
- package/dist/core/agentSettings/valueParser.d.ts.map +1 -0
- package/dist/core/agentSettings/valueParser.js +60 -0
- package/dist/core/agentSettings/valueParser.js.map +1 -0
- package/dist/core/skillsManager.d.ts.map +1 -1
- package/dist/core/skillsManager.js +6 -3
- package/dist/core/skillsManager.js.map +1 -1
- package/dist/core/userConfig.d.ts +5 -0
- package/dist/core/userConfig.d.ts.map +1 -1
- package/dist/core/userConfig.js +33 -0
- package/dist/core/userConfig.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/agentSettings/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAMxG,wBAAgB,wBAAwB,IAAI,oBAAoB,EAAE,CAEjE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEvF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAExG;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,sBAAsB,GAAG,uBAAuB,CAKzF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { claudeSettingsAdapter } from './adapters/claude.js';
|
|
2
|
+
const ADAPTERS = [
|
|
3
|
+
claudeSettingsAdapter,
|
|
4
|
+
];
|
|
5
|
+
export function getAgentSettingsAdapters() {
|
|
6
|
+
return [...ADAPTERS];
|
|
7
|
+
}
|
|
8
|
+
export function getAgentSettingsAdapter(agent) {
|
|
9
|
+
return ADAPTERS.find(adapter => adapter.agent === agent);
|
|
10
|
+
}
|
|
11
|
+
export function getAgentSettingDefinition(agent, key) {
|
|
12
|
+
return getAgentSettingsAdapter(agent)?.definitions.find(definition => definition.key === key);
|
|
13
|
+
}
|
|
14
|
+
export function toSchemaEntry(definition) {
|
|
15
|
+
return {
|
|
16
|
+
...definition,
|
|
17
|
+
nativePath: definition.nativePath.join('.'),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/agentSettings/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,MAAM,QAAQ,GAA2B;IACvC,qBAAqB;CACtB,CAAC;AAEF,MAAM,UAAU,wBAAwB;IACtC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAa,EAAE,GAAW;IAClE,OAAO,uBAAuB,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkC;IAC9D,OAAO;QACL,GAAG,UAAU;QACb,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;KAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AgentHookAddOptions, AgentHookMatcher, AgentHookRemoveOptions, AgentHookWriteResult, AgentSettingReadOptions, AgentSettingsSchema, AgentSettingSetOptions, AgentSettingsWriteResult } from './types.js';
|
|
2
|
+
export declare class AgentSettingsManager {
|
|
3
|
+
getSupportedAgents(): string[];
|
|
4
|
+
getSchema(agent: string): AgentSettingsSchema;
|
|
5
|
+
get(agent: string, key?: string, options?: AgentSettingReadOptions): Promise<unknown>;
|
|
6
|
+
set(agent: string, key: string, rawValue: string, options?: AgentSettingSetOptions): Promise<AgentSettingsWriteResult>;
|
|
7
|
+
unset(agent: string, key: string, options?: AgentSettingSetOptions): Promise<AgentSettingsWriteResult>;
|
|
8
|
+
listHooks(agent: string, event?: string, options?: AgentSettingReadOptions): Promise<Record<string, AgentHookMatcher[]> | AgentHookMatcher[]>;
|
|
9
|
+
addHook(agent: string, event: string, command: string, options?: AgentHookAddOptions): Promise<AgentHookWriteResult>;
|
|
10
|
+
removeHook(agent: string, event: string, commandOrName: string, options?: AgentHookRemoveOptions): Promise<AgentHookWriteResult>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=settingsManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settingsManager.d.ts","sourceRoot":"","sources":["../../../src/core/agentSettings/settingsManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,mBAAmB,EAInB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EAEnB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAoOpB,qBAAa,oBAAoB;IAC/B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB;IAcvC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBzF,GAAG,CACP,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,wBAAwB,CAAC;IAkC9B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAgC1G,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC;IAgCjJ,OAAO,CACX,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,oBAAoB,CAAC;IA2C1B,UAAU,CACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,oBAAoB,CAAC;CAiDjC"}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { readFileIfExists, writeFile } from '../../utils/fs.js';
|
|
2
|
+
import { getEffectiveAgentSettingsDefaultScopeSync } from '../userConfig.js';
|
|
3
|
+
import { parseAgentSettingValue } from './valueParser.js';
|
|
4
|
+
import { getAgentSettingDefinition, getAgentSettingsAdapter, getAgentSettingsAdapters, toSchemaEntry } from './registry.js';
|
|
5
|
+
const HOOK_EVENT_ALIASES = {
|
|
6
|
+
'pre-tool-use': 'PreToolUse',
|
|
7
|
+
'before-tool-use': 'PreToolUse',
|
|
8
|
+
'post-tool-use': 'PostToolUse',
|
|
9
|
+
'after-tool-use': 'PostToolUse',
|
|
10
|
+
'post-tool-use-failure': 'PostToolUseFailure',
|
|
11
|
+
notification: 'Notification',
|
|
12
|
+
'permission-request': 'PermissionRequest',
|
|
13
|
+
stop: 'Stop',
|
|
14
|
+
'session-start': 'SessionStart',
|
|
15
|
+
'session-end': 'SessionEnd',
|
|
16
|
+
};
|
|
17
|
+
const HOOK_EVENTS = new Set(Object.values(HOOK_EVENT_ALIASES));
|
|
18
|
+
function assertObject(value, path) {
|
|
19
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
20
|
+
throw new Error(`${path} contains JSON that is not an object.`);
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function getNestedValue(config, path) {
|
|
25
|
+
let current = config;
|
|
26
|
+
for (const segment of path) {
|
|
27
|
+
if (!current || typeof current !== 'object' || Array.isArray(current)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
current = current[segment];
|
|
31
|
+
}
|
|
32
|
+
return current;
|
|
33
|
+
}
|
|
34
|
+
function setNestedValue(config, path, value) {
|
|
35
|
+
let current = config;
|
|
36
|
+
for (const segment of path.slice(0, -1)) {
|
|
37
|
+
const next = current[segment];
|
|
38
|
+
if (!next || typeof next !== 'object' || Array.isArray(next)) {
|
|
39
|
+
current[segment] = {};
|
|
40
|
+
}
|
|
41
|
+
current = current[segment];
|
|
42
|
+
}
|
|
43
|
+
current[path[path.length - 1]] = value;
|
|
44
|
+
}
|
|
45
|
+
function normalizeHookEvent(event) {
|
|
46
|
+
const exact = event;
|
|
47
|
+
if (HOOK_EVENTS.has(exact)) {
|
|
48
|
+
return exact;
|
|
49
|
+
}
|
|
50
|
+
const normalized = event.trim().replace(/_/g, '-').toLowerCase();
|
|
51
|
+
const mapped = HOOK_EVENT_ALIASES[normalized];
|
|
52
|
+
if (mapped) {
|
|
53
|
+
return mapped;
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`Unsupported hook event: ${event}. Supported: ${[...HOOK_EVENTS].join(', ')}.`);
|
|
56
|
+
}
|
|
57
|
+
function assertHookMatchers(value) {
|
|
58
|
+
if (value === undefined) {
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
if (!Array.isArray(value)) {
|
|
62
|
+
throw new Error('Existing hooks value is not an array.');
|
|
63
|
+
}
|
|
64
|
+
return value.map((entry) => {
|
|
65
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
|
66
|
+
throw new Error('Existing hook matcher is not an object.');
|
|
67
|
+
}
|
|
68
|
+
const entryObject = entry;
|
|
69
|
+
const matcher = entryObject.matcher;
|
|
70
|
+
const hooks = entryObject.hooks;
|
|
71
|
+
if (matcher !== undefined && typeof matcher !== 'string') {
|
|
72
|
+
throw new Error('Existing hook matcher must be a string.');
|
|
73
|
+
}
|
|
74
|
+
if (!Array.isArray(hooks)) {
|
|
75
|
+
throw new Error('Existing hook commands must be an array.');
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
...entryObject,
|
|
79
|
+
...(matcher !== undefined ? { matcher } : {}),
|
|
80
|
+
hooks: hooks.map((hook) => {
|
|
81
|
+
if (!hook || typeof hook !== 'object' || Array.isArray(hook)) {
|
|
82
|
+
throw new Error('Existing hook command is not an object.');
|
|
83
|
+
}
|
|
84
|
+
const hookObject = hook;
|
|
85
|
+
const type = hookObject.type;
|
|
86
|
+
const command = hookObject.command;
|
|
87
|
+
const name = hookObject.name;
|
|
88
|
+
if (type !== undefined && typeof type !== 'string') {
|
|
89
|
+
throw new Error('Existing hook command type must be a string when present.');
|
|
90
|
+
}
|
|
91
|
+
if (command !== undefined && typeof command !== 'string') {
|
|
92
|
+
throw new Error('Existing hook command must be a string when present.');
|
|
93
|
+
}
|
|
94
|
+
if (name !== undefined && typeof name !== 'string') {
|
|
95
|
+
throw new Error('Existing hook name must be a string when present.');
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
...hookObject,
|
|
99
|
+
...(typeof type === 'string' ? { type } : {}),
|
|
100
|
+
...(typeof command === 'string' ? { command } : {}),
|
|
101
|
+
...(typeof name === 'string' ? { name } : {}),
|
|
102
|
+
};
|
|
103
|
+
}),
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function getHookMatchers(config, event) {
|
|
108
|
+
const hooks = getNestedValue(config, ['hooks']);
|
|
109
|
+
if (hooks === undefined) {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
if (!hooks || typeof hooks !== 'object' || Array.isArray(hooks)) {
|
|
113
|
+
throw new Error('Existing hooks value is not an object.');
|
|
114
|
+
}
|
|
115
|
+
return assertHookMatchers(hooks[event]);
|
|
116
|
+
}
|
|
117
|
+
function setHookMatchers(config, event, matchers) {
|
|
118
|
+
const hooks = getNestedValue(config, ['hooks']);
|
|
119
|
+
if (hooks !== undefined && (!hooks || typeof hooks !== 'object' || Array.isArray(hooks))) {
|
|
120
|
+
throw new Error('Existing hooks value is not an object.');
|
|
121
|
+
}
|
|
122
|
+
const hooksObject = hooks;
|
|
123
|
+
const nextHooks = hooksObject ?? {};
|
|
124
|
+
if (matchers.length === 0) {
|
|
125
|
+
delete nextHooks[event];
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
nextHooks[event] = matchers;
|
|
129
|
+
}
|
|
130
|
+
if (Object.keys(nextHooks).length === 0) {
|
|
131
|
+
deleteNestedValue(config, ['hooks']);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
setNestedValue(config, ['hooks'], nextHooks);
|
|
135
|
+
}
|
|
136
|
+
function buildHookCommand(command, name) {
|
|
137
|
+
const trimmed = command.trim();
|
|
138
|
+
if (!trimmed) {
|
|
139
|
+
throw new Error('Hook command cannot be empty.');
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
type: 'command',
|
|
143
|
+
command: trimmed,
|
|
144
|
+
...(name ? { name } : {}),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function deleteNestedValue(config, path) {
|
|
148
|
+
const parents = [];
|
|
149
|
+
let current = config;
|
|
150
|
+
for (const segment of path.slice(0, -1)) {
|
|
151
|
+
if (!current || typeof current !== 'object' || Array.isArray(current)) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
parents.push({ object: current, key: segment });
|
|
155
|
+
current = current[segment];
|
|
156
|
+
}
|
|
157
|
+
if (!current || typeof current !== 'object' || Array.isArray(current)) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
const finalKey = path[path.length - 1];
|
|
161
|
+
if (!(finalKey in current)) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
delete current[finalKey];
|
|
165
|
+
for (let i = parents.length - 1; i >= 0; i--) {
|
|
166
|
+
const { object, key } = parents[i];
|
|
167
|
+
const value = object[key];
|
|
168
|
+
if (value && typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0) {
|
|
169
|
+
delete object[key];
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
function resolveProjectPath(projectPath) {
|
|
178
|
+
return projectPath ?? process.cwd();
|
|
179
|
+
}
|
|
180
|
+
function resolveScope(definition, scope) {
|
|
181
|
+
const resolvedScope = scope ?? getEffectiveAgentSettingsDefaultScopeSync();
|
|
182
|
+
if (!definition.scopes.includes(resolvedScope)) {
|
|
183
|
+
throw new Error(`"${definition.key}" does not support ${resolvedScope} scope. Supported scopes: ${definition.scopes.join(', ')}.`);
|
|
184
|
+
}
|
|
185
|
+
return resolvedScope;
|
|
186
|
+
}
|
|
187
|
+
async function readJsonObject(path) {
|
|
188
|
+
const content = await readFileIfExists(path);
|
|
189
|
+
if (!content) {
|
|
190
|
+
return {};
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
return assertObject(JSON.parse(content), path);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
if (error instanceof SyntaxError) {
|
|
197
|
+
throw new Error(`${path} contains invalid JSON.`);
|
|
198
|
+
}
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export class AgentSettingsManager {
|
|
203
|
+
getSupportedAgents() {
|
|
204
|
+
return getAgentSettingsAdapters().map(adapter => adapter.agent);
|
|
205
|
+
}
|
|
206
|
+
getSchema(agent) {
|
|
207
|
+
const adapter = getAgentSettingsAdapter(agent);
|
|
208
|
+
if (!adapter) {
|
|
209
|
+
throw new Error(`Unsupported agent settings adapter: ${agent}. Supported: ${this.getSupportedAgents().join(', ')}`);
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
agent: adapter.agent,
|
|
213
|
+
displayName: adapter.displayName,
|
|
214
|
+
effectiveDefaultScope: getEffectiveAgentSettingsDefaultScopeSync(),
|
|
215
|
+
settings: adapter.definitions.map(toSchemaEntry),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
async get(agent, key, options = {}) {
|
|
219
|
+
const adapter = getAgentSettingsAdapter(agent);
|
|
220
|
+
if (!adapter) {
|
|
221
|
+
throw new Error(`Unsupported agent settings adapter: ${agent}. Supported: ${this.getSupportedAgents().join(', ')}`);
|
|
222
|
+
}
|
|
223
|
+
if (!key) {
|
|
224
|
+
const scope = options.scope ?? getEffectiveAgentSettingsDefaultScopeSync();
|
|
225
|
+
const path = adapter.getSettingsPath(scope, resolveProjectPath(options.projectPath));
|
|
226
|
+
return await readJsonObject(path);
|
|
227
|
+
}
|
|
228
|
+
const definition = getAgentSettingDefinition(agent, key);
|
|
229
|
+
if (!definition) {
|
|
230
|
+
throw new Error(`Unknown ${agent} setting: ${key}.`);
|
|
231
|
+
}
|
|
232
|
+
const scope = resolveScope(definition, options.scope);
|
|
233
|
+
const path = adapter.getSettingsPath(scope, resolveProjectPath(options.projectPath));
|
|
234
|
+
const config = await readJsonObject(path);
|
|
235
|
+
return getNestedValue(config, definition.nativePath);
|
|
236
|
+
}
|
|
237
|
+
async set(agent, key, rawValue, options = {}) {
|
|
238
|
+
const adapter = getAgentSettingsAdapter(agent);
|
|
239
|
+
if (!adapter) {
|
|
240
|
+
throw new Error(`Unsupported agent settings adapter: ${agent}. Supported: ${this.getSupportedAgents().join(', ')}`);
|
|
241
|
+
}
|
|
242
|
+
const definition = getAgentSettingDefinition(agent, key);
|
|
243
|
+
if (!definition) {
|
|
244
|
+
throw new Error(`Unknown ${agent} setting: ${key}.`);
|
|
245
|
+
}
|
|
246
|
+
const scope = resolveScope(definition, options.scope);
|
|
247
|
+
const path = adapter.getSettingsPath(scope, resolveProjectPath(options.projectPath));
|
|
248
|
+
const config = await readJsonObject(path);
|
|
249
|
+
const previousValue = getNestedValue(config, definition.nativePath);
|
|
250
|
+
const value = parseAgentSettingValue(definition, rawValue, options.parseJson);
|
|
251
|
+
setNestedValue(config, definition.nativePath, value);
|
|
252
|
+
if (!options.dryRun) {
|
|
253
|
+
await writeFile(path, `${JSON.stringify(config, null, 2)}\n`);
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
agent,
|
|
257
|
+
key,
|
|
258
|
+
scope,
|
|
259
|
+
path,
|
|
260
|
+
value,
|
|
261
|
+
previousValue,
|
|
262
|
+
dryRun: Boolean(options.dryRun),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
async unset(agent, key, options = {}) {
|
|
266
|
+
const adapter = getAgentSettingsAdapter(agent);
|
|
267
|
+
if (!adapter) {
|
|
268
|
+
throw new Error(`Unsupported agent settings adapter: ${agent}. Supported: ${this.getSupportedAgents().join(', ')}`);
|
|
269
|
+
}
|
|
270
|
+
const definition = getAgentSettingDefinition(agent, key);
|
|
271
|
+
if (!definition) {
|
|
272
|
+
throw new Error(`Unknown ${agent} setting: ${key}.`);
|
|
273
|
+
}
|
|
274
|
+
const scope = resolveScope(definition, options.scope);
|
|
275
|
+
const path = adapter.getSettingsPath(scope, resolveProjectPath(options.projectPath));
|
|
276
|
+
const config = await readJsonObject(path);
|
|
277
|
+
const previousValue = getNestedValue(config, definition.nativePath);
|
|
278
|
+
deleteNestedValue(config, definition.nativePath);
|
|
279
|
+
if (!options.dryRun) {
|
|
280
|
+
await writeFile(path, `${JSON.stringify(config, null, 2)}\n`);
|
|
281
|
+
}
|
|
282
|
+
return {
|
|
283
|
+
agent,
|
|
284
|
+
key,
|
|
285
|
+
scope,
|
|
286
|
+
path,
|
|
287
|
+
previousValue,
|
|
288
|
+
dryRun: Boolean(options.dryRun),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
async listHooks(agent, event, options = {}) {
|
|
292
|
+
const adapter = getAgentSettingsAdapter(agent);
|
|
293
|
+
if (!adapter) {
|
|
294
|
+
throw new Error(`Unsupported agent settings adapter: ${agent}. Supported: ${this.getSupportedAgents().join(', ')}`);
|
|
295
|
+
}
|
|
296
|
+
if (agent !== 'claude') {
|
|
297
|
+
throw new Error(`Agent ${agent} does not support hook management.`);
|
|
298
|
+
}
|
|
299
|
+
const scope = options.scope ?? getEffectiveAgentSettingsDefaultScopeSync();
|
|
300
|
+
const path = adapter.getSettingsPath(scope, resolveProjectPath(options.projectPath));
|
|
301
|
+
const config = await readJsonObject(path);
|
|
302
|
+
if (event) {
|
|
303
|
+
return getHookMatchers(config, normalizeHookEvent(event));
|
|
304
|
+
}
|
|
305
|
+
const hooks = getNestedValue(config, ['hooks']);
|
|
306
|
+
if (hooks === undefined) {
|
|
307
|
+
return {};
|
|
308
|
+
}
|
|
309
|
+
if (!hooks || typeof hooks !== 'object' || Array.isArray(hooks)) {
|
|
310
|
+
throw new Error('Existing hooks value is not an object.');
|
|
311
|
+
}
|
|
312
|
+
const result = {};
|
|
313
|
+
for (const [hookEvent, value] of Object.entries(hooks)) {
|
|
314
|
+
result[hookEvent] = assertHookMatchers(value);
|
|
315
|
+
}
|
|
316
|
+
return result;
|
|
317
|
+
}
|
|
318
|
+
async addHook(agent, event, command, options = {}) {
|
|
319
|
+
const adapter = getAgentSettingsAdapter(agent);
|
|
320
|
+
if (!adapter) {
|
|
321
|
+
throw new Error(`Unsupported agent settings adapter: ${agent}. Supported: ${this.getSupportedAgents().join(', ')}`);
|
|
322
|
+
}
|
|
323
|
+
if (agent !== 'claude') {
|
|
324
|
+
throw new Error(`Agent ${agent} does not support hook management.`);
|
|
325
|
+
}
|
|
326
|
+
const hookEvent = normalizeHookEvent(event);
|
|
327
|
+
const scope = options.scope ?? getEffectiveAgentSettingsDefaultScopeSync();
|
|
328
|
+
const path = adapter.getSettingsPath(scope, resolveProjectPath(options.projectPath));
|
|
329
|
+
const config = await readJsonObject(path);
|
|
330
|
+
const hook = buildHookCommand(command, options.name);
|
|
331
|
+
const matchers = getHookMatchers(config, hookEvent);
|
|
332
|
+
const matcher = options.matcher ?? '*';
|
|
333
|
+
const existingMatcher = matchers.find(entry => (entry.matcher ?? '*') === matcher);
|
|
334
|
+
if (existingMatcher) {
|
|
335
|
+
existingMatcher.hooks.push(hook);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
matchers.push({
|
|
339
|
+
...(matcher === '*' ? {} : { matcher }),
|
|
340
|
+
hooks: [hook],
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
setHookMatchers(config, hookEvent, matchers);
|
|
344
|
+
if (!options.dryRun) {
|
|
345
|
+
await writeFile(path, `${JSON.stringify(config, null, 2)}\n`);
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
agent,
|
|
349
|
+
event: hookEvent,
|
|
350
|
+
scope,
|
|
351
|
+
path,
|
|
352
|
+
hook,
|
|
353
|
+
dryRun: Boolean(options.dryRun),
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
async removeHook(agent, event, commandOrName, options = {}) {
|
|
357
|
+
const adapter = getAgentSettingsAdapter(agent);
|
|
358
|
+
if (!adapter) {
|
|
359
|
+
throw new Error(`Unsupported agent settings adapter: ${agent}. Supported: ${this.getSupportedAgents().join(', ')}`);
|
|
360
|
+
}
|
|
361
|
+
if (agent !== 'claude') {
|
|
362
|
+
throw new Error(`Agent ${agent} does not support hook management.`);
|
|
363
|
+
}
|
|
364
|
+
const hookEvent = normalizeHookEvent(event);
|
|
365
|
+
const scope = options.scope ?? getEffectiveAgentSettingsDefaultScopeSync();
|
|
366
|
+
const path = adapter.getSettingsPath(scope, resolveProjectPath(options.projectPath));
|
|
367
|
+
const config = await readJsonObject(path);
|
|
368
|
+
const matchers = getHookMatchers(config, hookEvent);
|
|
369
|
+
let removed = 0;
|
|
370
|
+
const nextMatchers = matchers
|
|
371
|
+
.map((entry) => {
|
|
372
|
+
if (options.matcher !== undefined && (entry.matcher ?? '*') !== options.matcher) {
|
|
373
|
+
return entry;
|
|
374
|
+
}
|
|
375
|
+
const hooks = entry.hooks.filter(hook => {
|
|
376
|
+
const matches = hook.name === commandOrName || hook.command === commandOrName;
|
|
377
|
+
if (matches) {
|
|
378
|
+
removed++;
|
|
379
|
+
}
|
|
380
|
+
return !matches;
|
|
381
|
+
});
|
|
382
|
+
return { ...entry, hooks };
|
|
383
|
+
})
|
|
384
|
+
.filter(entry => entry.hooks.length > 0);
|
|
385
|
+
setHookMatchers(config, hookEvent, nextMatchers);
|
|
386
|
+
if (!options.dryRun) {
|
|
387
|
+
await writeFile(path, `${JSON.stringify(config, null, 2)}\n`);
|
|
388
|
+
}
|
|
389
|
+
return {
|
|
390
|
+
agent,
|
|
391
|
+
event: hookEvent,
|
|
392
|
+
scope,
|
|
393
|
+
path,
|
|
394
|
+
removed,
|
|
395
|
+
dryRun: Boolean(options.dryRun),
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=settingsManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settingsManager.js","sourceRoot":"","sources":["../../../src/core/agentSettings/settingsManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export type AgentSettingsScope = 'global' | 'project' | 'local';
|
|
2
|
+
export type AgentSettingValueType = 'string' | 'boolean' | 'number' | 'enum' | 'array' | 'object';
|
|
3
|
+
export type AgentSettingRisk = 'safe' | 'risky' | 'security-sensitive' | 'deprecated';
|
|
4
|
+
export interface AgentSettingDefinition {
|
|
5
|
+
agent: string;
|
|
6
|
+
key: string;
|
|
7
|
+
nativePath: string[];
|
|
8
|
+
title: string;
|
|
9
|
+
description: string;
|
|
10
|
+
valueType: AgentSettingValueType;
|
|
11
|
+
scopes: AgentSettingsScope[];
|
|
12
|
+
defaultScope: AgentSettingsScope;
|
|
13
|
+
allowedValues?: string[];
|
|
14
|
+
category: string;
|
|
15
|
+
risk: AgentSettingRisk;
|
|
16
|
+
deprecated?: boolean;
|
|
17
|
+
replacement?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AgentSettingsAdapter {
|
|
20
|
+
agent: string;
|
|
21
|
+
displayName: string;
|
|
22
|
+
definitions: AgentSettingDefinition[];
|
|
23
|
+
getSettingsPath(scope: AgentSettingsScope, projectPath: string): string;
|
|
24
|
+
}
|
|
25
|
+
export interface AgentSettingSchemaEntry extends Omit<AgentSettingDefinition, 'nativePath'> {
|
|
26
|
+
nativePath: string;
|
|
27
|
+
}
|
|
28
|
+
export interface AgentSettingsSchema {
|
|
29
|
+
agent: string;
|
|
30
|
+
displayName: string;
|
|
31
|
+
effectiveDefaultScope: AgentSettingsScope;
|
|
32
|
+
settings: AgentSettingSchemaEntry[];
|
|
33
|
+
}
|
|
34
|
+
export interface AgentSettingSetOptions {
|
|
35
|
+
scope?: AgentSettingsScope;
|
|
36
|
+
parseJson?: boolean;
|
|
37
|
+
dryRun?: boolean;
|
|
38
|
+
projectPath?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface AgentSettingReadOptions {
|
|
41
|
+
scope?: AgentSettingsScope;
|
|
42
|
+
projectPath?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface AgentSettingsWriteResult {
|
|
45
|
+
agent: string;
|
|
46
|
+
key: string;
|
|
47
|
+
scope: AgentSettingsScope;
|
|
48
|
+
path: string;
|
|
49
|
+
value?: unknown;
|
|
50
|
+
previousValue?: unknown;
|
|
51
|
+
dryRun: boolean;
|
|
52
|
+
}
|
|
53
|
+
export type AgentHookEvent = 'PreToolUse' | 'PostToolUse' | 'PostToolUseFailure' | 'Notification' | 'PermissionRequest' | 'Stop' | 'SessionStart' | 'SessionEnd';
|
|
54
|
+
export interface AgentHookAddOptions {
|
|
55
|
+
scope?: AgentSettingsScope;
|
|
56
|
+
projectPath?: string;
|
|
57
|
+
matcher?: string;
|
|
58
|
+
name?: string;
|
|
59
|
+
dryRun?: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface AgentHookRemoveOptions {
|
|
62
|
+
scope?: AgentSettingsScope;
|
|
63
|
+
projectPath?: string;
|
|
64
|
+
matcher?: string;
|
|
65
|
+
dryRun?: boolean;
|
|
66
|
+
}
|
|
67
|
+
export interface AgentHookEntry {
|
|
68
|
+
type?: string;
|
|
69
|
+
command?: string;
|
|
70
|
+
name?: string;
|
|
71
|
+
[key: string]: unknown;
|
|
72
|
+
}
|
|
73
|
+
export interface AgentHookCommand {
|
|
74
|
+
type: 'command';
|
|
75
|
+
command: string;
|
|
76
|
+
name?: string;
|
|
77
|
+
[key: string]: unknown;
|
|
78
|
+
}
|
|
79
|
+
export interface AgentHookMatcher {
|
|
80
|
+
matcher?: string;
|
|
81
|
+
hooks: AgentHookEntry[];
|
|
82
|
+
[key: string]: unknown;
|
|
83
|
+
}
|
|
84
|
+
export interface AgentHookWriteResult {
|
|
85
|
+
agent: string;
|
|
86
|
+
event: AgentHookEvent;
|
|
87
|
+
scope: AgentSettingsScope;
|
|
88
|
+
path: string;
|
|
89
|
+
hook?: AgentHookCommand;
|
|
90
|
+
removed?: number;
|
|
91
|
+
dryRun: boolean;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/agentSettings/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/agentSettings/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"valueParser.d.ts","sourceRoot":"","sources":["../../../src/core/agentSettings/valueParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAazD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,sBAAsB,EAClC,GAAG,EAAE,MAAM,EACX,SAAS,UAAQ,GAChB,OAAO,CAqDT"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const TRUE_VALUES = new Set(['true', 'on', 'yes', '1']);
|
|
2
|
+
const FALSE_VALUES = new Set(['false', 'off', 'no', '0']);
|
|
3
|
+
function parseJsonValue(raw, key) {
|
|
4
|
+
try {
|
|
5
|
+
return JSON.parse(raw);
|
|
6
|
+
}
|
|
7
|
+
catch (error) {
|
|
8
|
+
throw new Error(`Value for "${key}" is not valid JSON.`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function parseAgentSettingValue(definition, raw, parseJson = false) {
|
|
12
|
+
switch (definition.valueType) {
|
|
13
|
+
case 'string':
|
|
14
|
+
return raw;
|
|
15
|
+
case 'boolean': {
|
|
16
|
+
const normalized = raw.trim().toLowerCase();
|
|
17
|
+
if (TRUE_VALUES.has(normalized)) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
if (FALSE_VALUES.has(normalized)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
throw new Error(`Value for "${definition.key}" must be one of: on, off, true, false, yes, no, 1, 0.`);
|
|
24
|
+
}
|
|
25
|
+
case 'number': {
|
|
26
|
+
const value = Number(raw);
|
|
27
|
+
if (!Number.isFinite(value)) {
|
|
28
|
+
throw new Error(`Value for "${definition.key}" must be a finite number.`);
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
case 'enum': {
|
|
33
|
+
if (!definition.allowedValues?.includes(raw)) {
|
|
34
|
+
throw new Error(`Value for "${definition.key}" must be one of: ${definition.allowedValues?.join(', ')}.`);
|
|
35
|
+
}
|
|
36
|
+
return raw;
|
|
37
|
+
}
|
|
38
|
+
case 'array': {
|
|
39
|
+
if (parseJson) {
|
|
40
|
+
const value = parseJsonValue(raw, definition.key);
|
|
41
|
+
if (!Array.isArray(value)) {
|
|
42
|
+
throw new Error(`JSON value for "${definition.key}" must be an array.`);
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
return [raw];
|
|
47
|
+
}
|
|
48
|
+
case 'object': {
|
|
49
|
+
if (!parseJson) {
|
|
50
|
+
throw new Error(`Value for "${definition.key}" must be valid JSON. Use --value-json when setting it from the CLI.`);
|
|
51
|
+
}
|
|
52
|
+
const value = parseJsonValue(raw, definition.key);
|
|
53
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
54
|
+
throw new Error(`JSON value for "${definition.key}" must be an object.`);
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=valueParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"valueParser.js","sourceRoot":"","sources":["../../../src/core/agentSettings/valueParser.ts"],"names":[],"mappings":"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"}
|