dsh-env-manager-plugin 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +273 -3
- package/client.js +2581 -0
- package/cordis.patch.yml +4 -0
- package/docs/00-project/current-state.md +272 -0
- package/docs/00-project/glossary.md +215 -0
- package/docs/00-project/project-brief.md +114 -0
- package/docs/00-project/roadmap.md +89 -0
- package/docs/01-architecture/DSH_Environment_Service_Memory_Skill_Brainstorm.md +493 -0
- package/docs/01-architecture/api-verification.md +416 -0
- package/docs/01-architecture/architecture-overview.md +222 -0
- package/docs/01-architecture/data-model.md +930 -0
- package/docs/01-architecture/decisions/ADR-0001-plugin-as-bundle.md +29 -0
- package/docs/01-architecture/decisions/ADR-0002-file-based-storage.md +25 -0
- package/docs/01-architecture/decisions/ADR-0003-skill-router-over-search.md +25 -0
- package/docs/01-architecture/decisions/ADR-0004-typescript-host-js-client.md +31 -0
- package/docs/01-architecture/decisions/ADR-0005-layered-rule-resolution.md +36 -0
- package/docs/01-architecture/decisions/ADR-0006-credentials-as-references.md +30 -0
- package/docs/01-architecture/decisions/ADR-0007-session-scoped-default-environment.md +28 -0
- package/docs/01-architecture/decisions/ADR-0008-memory-bridge-not-second-store.md +31 -0
- package/docs/01-architecture/decisions/ADR-0009-client-host-http-transport.md +87 -0
- package/docs/01-architecture/decisions/ADR-0010-environment-plane-model.md +87 -0
- package/docs/01-architecture/decisions/ADR-0011-k8s-node-execution-model.md +92 -0
- package/docs/01-architecture/design.md +666 -0
- package/docs/01-architecture/detailed-design.md +961 -0
- package/docs/01-architecture/implementation-plan.md +323 -0
- package/docs/01-architecture/module-boundaries.md +306 -0
- package/docs/01-architecture/security-model.md +227 -0
- package/docs/01-architecture/storage-contract.md +224 -0
- package/docs/01-architecture/tool-contract.md +438 -0
- package/docs/01-architecture/ui-design.md +587 -0
- package/docs/02-harness/agent-behavior.md +36 -0
- package/docs/02-harness/change-snapshot-policy.md +29 -0
- package/docs/02-harness/client-ui-integration.md +110 -0
- package/docs/02-harness/context-policy.md +43 -0
- package/docs/02-harness/harness-standard.md +91 -0
- package/docs/02-harness/task-execution-policy.md +26 -0
- package/docs/02-harness/verification-policy.md +97 -0
- package/docs/03-openspec/archive-rule.md +25 -0
- package/docs/03-openspec/bugfix-rule.md +30 -0
- package/docs/03-openspec/design-rule.md +33 -0
- package/docs/03-openspec/openspec-usage-guide.md +31 -0
- package/docs/03-openspec/proposal-rule.md +70 -0
- package/docs/03-openspec/spec-rule.md +33 -0
- package/docs/03-openspec/tasks-rule.md +31 -0
- package/docs/04-development/coding-style.md +67 -0
- package/docs/04-development/dependency-policy.md +43 -0
- package/docs/04-development/development-guide.md +85 -0
- package/docs/04-development/directory-convention.md +105 -0
- package/docs/04-development/local-run-guide.md +61 -0
- package/docs/04-development/testing-guide.md +102 -0
- package/docs/05-domain/deployment-template.md +76 -0
- package/docs/05-domain/environment-template.md +165 -0
- package/docs/05-domain/operation-binding-template.md +55 -0
- package/docs/05-domain/operation-record-template.md +55 -0
- package/docs/05-domain/prompt-template.md +90 -0
- package/docs/05-domain/rule-template.md +73 -0
- package/docs/05-domain/service-template.md +39 -0
- package/docs/06-operations/deployment-guide.md +54 -0
- package/docs/06-operations/release.md +198 -0
- package/docs/06-operations/security-policy.md +53 -0
- package/docs/06-operations/troubleshooting.md +141 -0
- package/docs/07-templates/adr-template.md +21 -0
- package/docs/07-templates/bugfix-template.md +11 -0
- package/docs/07-templates/case-template.md +15 -0
- package/docs/07-templates/design-template.md +29 -0
- package/docs/07-templates/proposal-template.md +19 -0
- package/docs/07-templates/spec-template.md +15 -0
- package/docs/07-templates/tasks-template.md +12 -0
- package/docs/99-archive/README.md +13 -0
- package/docs/README.md +142 -0
- package/icon.svg +4 -0
- package/index.js +31 -0
- package/lib/app/app.d.ts +67 -0
- package/lib/app/app.js +494 -0
- package/lib/app/app.js.map +1 -0
- package/lib/config.d.ts +55 -0
- package/lib/config.js +42 -0
- package/lib/config.js.map +1 -0
- package/lib/domain/constants.d.ts +21 -0
- package/lib/domain/constants.js +59 -0
- package/lib/domain/constants.js.map +1 -0
- package/lib/domain/errors.d.ts +20 -0
- package/lib/domain/errors.js +22 -0
- package/lib/domain/errors.js.map +1 -0
- package/lib/domain/schemas.d.ts +28 -0
- package/lib/domain/schemas.js +445 -0
- package/lib/domain/schemas.js.map +1 -0
- package/lib/domain/types.d.ts +412 -0
- package/lib/domain/types.js +2 -0
- package/lib/domain/types.js.map +1 -0
- package/lib/index.d.ts +18 -0
- package/lib/index.js +89 -0
- package/lib/index.js.map +1 -0
- package/lib/logger.d.ts +8 -0
- package/lib/logger.js +13 -0
- package/lib/logger.js.map +1 -0
- package/lib/memory/bridge.d.ts +18 -0
- package/lib/memory/bridge.js +13 -0
- package/lib/memory/bridge.js.map +1 -0
- package/lib/registry/integrity.d.ts +10 -0
- package/lib/registry/integrity.js +204 -0
- package/lib/registry/integrity.js.map +1 -0
- package/lib/registry/registry.d.ts +14 -0
- package/lib/registry/registry.js +182 -0
- package/lib/registry/registry.js.map +1 -0
- package/lib/resolver/merge.d.ts +23 -0
- package/lib/resolver/merge.js +90 -0
- package/lib/resolver/merge.js.map +1 -0
- package/lib/resolver/resolve.d.ts +18 -0
- package/lib/resolver/resolve.js +288 -0
- package/lib/resolver/resolve.js.map +1 -0
- package/lib/resolver/template.d.ts +10 -0
- package/lib/resolver/template.js +42 -0
- package/lib/resolver/template.js.map +1 -0
- package/lib/router/params.d.ts +3 -0
- package/lib/router/params.js +83 -0
- package/lib/router/params.js.map +1 -0
- package/lib/router/router.d.ts +11 -0
- package/lib/router/router.js +204 -0
- package/lib/router/router.js.map +1 -0
- package/lib/session/session.d.ts +16 -0
- package/lib/session/session.js +64 -0
- package/lib/session/session.js.map +1 -0
- package/lib/skill.d.ts +17 -0
- package/lib/skill.js +56 -0
- package/lib/skill.js.map +1 -0
- package/lib/storage/atomic.d.ts +10 -0
- package/lib/storage/atomic.js +107 -0
- package/lib/storage/atomic.js.map +1 -0
- package/lib/storage/paths.d.ts +10 -0
- package/lib/storage/paths.js +50 -0
- package/lib/storage/paths.js.map +1 -0
- package/lib/storage/records.d.ts +16 -0
- package/lib/storage/records.js +112 -0
- package/lib/storage/records.js.map +1 -0
- package/lib/storage/sessions.d.ts +17 -0
- package/lib/storage/sessions.js +65 -0
- package/lib/storage/sessions.js.map +1 -0
- package/lib/tools/tools.d.ts +14 -0
- package/lib/tools/tools.js +472 -0
- package/lib/tools/tools.js.map +1 -0
- package/lib/transport/http.d.ts +3 -0
- package/lib/transport/http.js +217 -0
- package/lib/transport/http.js.map +1 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +101 -6
- package/scripts/repair-profile.mjs +141 -0
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
2
|
+
import { EnvManagerError, asEnvManagerError } from '../domain/errors.js';
|
|
3
|
+
import { RECORD_KINDS, isRecordKind } from '../domain/constants.js';
|
|
4
|
+
const kindProperty = {
|
|
5
|
+
type: 'string',
|
|
6
|
+
enum: RECORD_KINDS,
|
|
7
|
+
description: 'Record kind.',
|
|
8
|
+
};
|
|
9
|
+
function text(value) {
|
|
10
|
+
return [{ type: 'text', text: value }];
|
|
11
|
+
}
|
|
12
|
+
function diagnosticsSchema() {
|
|
13
|
+
return {
|
|
14
|
+
type: 'array',
|
|
15
|
+
items: { type: 'json', description: 'Diagnostic with code, severity and message.' },
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function sessionOutputSchema() {
|
|
19
|
+
return {
|
|
20
|
+
type: 'object',
|
|
21
|
+
additionalProperties: false,
|
|
22
|
+
properties: {
|
|
23
|
+
sessionId: { type: 'string', required: true, description: 'Calling session id.' },
|
|
24
|
+
defaultEnvironmentId: {
|
|
25
|
+
oneOf: [{ type: 'string' }, { type: 'null' }],
|
|
26
|
+
required: true,
|
|
27
|
+
description: 'Default environment, or null.',
|
|
28
|
+
},
|
|
29
|
+
persisted: { type: 'boolean', required: true, description: 'Whether the value is on disk.' },
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function warningsSchema() {
|
|
34
|
+
return diagnosticsSchema();
|
|
35
|
+
}
|
|
36
|
+
async function approval(ctx, exec, toolName, reason) {
|
|
37
|
+
const agent = exec.agent;
|
|
38
|
+
if (!agent) {
|
|
39
|
+
throw new EnvManagerError('SESSION_CONTEXT_UNAVAILABLE', 'This operation requires a session-scoped agent');
|
|
40
|
+
}
|
|
41
|
+
const service = ctx.get('approval');
|
|
42
|
+
if (!service) {
|
|
43
|
+
throw new EnvManagerError('POLICY_DENIED', 'Approval service is unavailable; failing closed');
|
|
44
|
+
}
|
|
45
|
+
let outcome;
|
|
46
|
+
try {
|
|
47
|
+
outcome = await service.request({
|
|
48
|
+
agent,
|
|
49
|
+
toolName,
|
|
50
|
+
callId: exec.callId,
|
|
51
|
+
reason,
|
|
52
|
+
displayReason: { en: reason, zh: reason },
|
|
53
|
+
signal: exec.signal,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw new EnvManagerError('POLICY_DENIED', `Approval could not be requested: ${error instanceof Error ? error.message : String(error)}`);
|
|
58
|
+
}
|
|
59
|
+
if (outcome !== 'allowed-once') {
|
|
60
|
+
throw new EnvManagerError('POLICY_DENIED', `Approval ${outcome}`, { outcome });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function sessionIdOf(exec) {
|
|
64
|
+
const agent = exec.agent;
|
|
65
|
+
if (!agent) {
|
|
66
|
+
throw new EnvManagerError('SESSION_CONTEXT_UNAVAILABLE', 'This operation requires a session-scoped agent');
|
|
67
|
+
}
|
|
68
|
+
const id = agent.session?.header?.id ?? agent.id;
|
|
69
|
+
if (!id) {
|
|
70
|
+
throw new EnvManagerError('SESSION_CONTEXT_UNAVAILABLE', 'The calling agent has no session id');
|
|
71
|
+
}
|
|
72
|
+
return String(id);
|
|
73
|
+
}
|
|
74
|
+
function sessionValue(context) {
|
|
75
|
+
return {
|
|
76
|
+
sessionId: context.sessionId,
|
|
77
|
+
defaultEnvironmentId: context.defaultEnvironmentId,
|
|
78
|
+
persisted: context.persisted,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function createToolDefinitions(options) {
|
|
82
|
+
const { ctx, app, defaults, writePolicy } = options;
|
|
83
|
+
async function environmentIdFor(exec, explicit) {
|
|
84
|
+
if (explicit)
|
|
85
|
+
return explicit;
|
|
86
|
+
const context = await app.getContext(sessionIdOf(exec));
|
|
87
|
+
if (context.defaultEnvironmentId)
|
|
88
|
+
return context.defaultEnvironmentId;
|
|
89
|
+
if (defaults.environmentId)
|
|
90
|
+
return defaults.environmentId;
|
|
91
|
+
throw new EnvManagerError('INVALID_ARGUMENT', 'No environment selected; pass environmentId or call env_set_context first');
|
|
92
|
+
}
|
|
93
|
+
const envList = defineTool({
|
|
94
|
+
name: 'env_list',
|
|
95
|
+
description: 'Use when the caller needs an inventory or wants to discover record ids before a specific call.',
|
|
96
|
+
parameters: {
|
|
97
|
+
kind: {
|
|
98
|
+
type: 'string',
|
|
99
|
+
enum: RECORD_KINDS,
|
|
100
|
+
description: 'Limit the list to one record kind.',
|
|
101
|
+
},
|
|
102
|
+
query: {
|
|
103
|
+
type: 'string',
|
|
104
|
+
description: 'Case-insensitive filter over id and name.',
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
output: {
|
|
108
|
+
schema: {
|
|
109
|
+
type: 'object',
|
|
110
|
+
additionalProperties: false,
|
|
111
|
+
properties: {
|
|
112
|
+
items: { type: 'array', items: { type: 'json' }, required: true },
|
|
113
|
+
warnings: { ...diagnosticsSchema(), required: true },
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
render: (_args, value) => {
|
|
117
|
+
const items = value.items;
|
|
118
|
+
return text(`${items.length} record(s): ${items.slice(0, 8).map((item) => `${item.kind}/${item.id}`).join(', ')}${items.length > 8 ? ', …' : ''}`);
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
async execute(args) {
|
|
122
|
+
try {
|
|
123
|
+
const kinds = args.kind ? [args.kind] : [...RECORD_KINDS];
|
|
124
|
+
const items = [];
|
|
125
|
+
const warnings = [];
|
|
126
|
+
for (const kind of kinds) {
|
|
127
|
+
const result = await app.list(kind);
|
|
128
|
+
const needle = args.query ? String(args.query).toLowerCase() : '';
|
|
129
|
+
items.push(...result.items.filter((item) => !needle || item.id.toLowerCase().includes(needle) || item.name.toLowerCase().includes(needle)));
|
|
130
|
+
warnings.push(...result.warnings);
|
|
131
|
+
}
|
|
132
|
+
items.sort((a, b) => a.kind.localeCompare(b.kind) || a.id.localeCompare(b.id));
|
|
133
|
+
return { items, warnings: warnings.slice(0, 20) };
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throw asEnvManagerError(error);
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
const envGet = defineTool({
|
|
141
|
+
name: 'env_get',
|
|
142
|
+
description: 'Use when the caller already has an id and needs the full record and its YAML.',
|
|
143
|
+
parameters: {
|
|
144
|
+
kind: { ...kindProperty, required: true },
|
|
145
|
+
id: { type: 'string', required: true, description: 'Record id, e.g. test-a.' },
|
|
146
|
+
},
|
|
147
|
+
output: {
|
|
148
|
+
schema: {
|
|
149
|
+
type: 'object',
|
|
150
|
+
additionalProperties: false,
|
|
151
|
+
properties: {
|
|
152
|
+
record: { type: 'json', required: true },
|
|
153
|
+
yaml: { type: 'string', required: true },
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
render: (_args, value) => {
|
|
157
|
+
const result = value;
|
|
158
|
+
return text(`Record ${result.record.id}: ${result.yaml.length} bytes of YAML.`);
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
async execute(args) {
|
|
162
|
+
try {
|
|
163
|
+
return await app.get(args.kind, args.id);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
throw asEnvManagerError(error);
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
const envFind = defineTool({
|
|
171
|
+
name: 'env_find',
|
|
172
|
+
description: 'Use when the caller has a name or fragment and wants candidate ids; prefer this over guessing an id.',
|
|
173
|
+
parameters: {
|
|
174
|
+
query: { type: 'string', required: true, description: 'Name, id or fragment.' },
|
|
175
|
+
},
|
|
176
|
+
output: {
|
|
177
|
+
schema: {
|
|
178
|
+
type: 'object',
|
|
179
|
+
additionalProperties: false,
|
|
180
|
+
properties: {
|
|
181
|
+
hits: { type: 'array', items: { type: 'json' }, required: true },
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
render: (_args, value) => {
|
|
185
|
+
const hits = value.hits;
|
|
186
|
+
return text(hits.length ? `${hits.length} match(es): ${hits.map((hit) => `${hit.kind}/${hit.id}`).join(', ')}` : 'No matches.');
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
async execute(args) {
|
|
190
|
+
try {
|
|
191
|
+
return await app.find(args.query);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
throw asEnvManagerError(error);
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
const envResolve = defineTool({
|
|
199
|
+
name: 'env_resolve',
|
|
200
|
+
description: 'Use when the caller needs concrete paths, log sources, class locations or variables for a service in an environment. This is the authoritative answer; never reconstruct paths from templates.',
|
|
201
|
+
parameters: {
|
|
202
|
+
environmentId: { type: 'string', description: 'Defaults to the session environment.' },
|
|
203
|
+
serviceId: { type: 'string', required: true, description: 'Service id or alias.' },
|
|
204
|
+
deploymentId: { type: 'string', description: 'Required only when several deployments bind the pair.' },
|
|
205
|
+
},
|
|
206
|
+
output: {
|
|
207
|
+
schema: {
|
|
208
|
+
type: 'object',
|
|
209
|
+
additionalProperties: false,
|
|
210
|
+
properties: {
|
|
211
|
+
context: { type: 'json', required: true },
|
|
212
|
+
warnings: { ...warningsSchema(), required: true },
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
render: (_args, value) => {
|
|
216
|
+
const result = value;
|
|
217
|
+
return text(`Resolved ${result.context.serviceId} in ${result.context.environmentId} (${result.context.runtimeMode}): ${Object.keys(result.context.paths).length} paths, ${Object.keys(result.context.variables).length} variables, ${result.warnings.length} warning(s).`);
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
async execute(args, exec) {
|
|
221
|
+
try {
|
|
222
|
+
const environmentId = await environmentIdFor(exec, args.environmentId);
|
|
223
|
+
const resolved = await app.resolve({
|
|
224
|
+
environmentId,
|
|
225
|
+
serviceId: args.serviceId,
|
|
226
|
+
deploymentId: args.deploymentId,
|
|
227
|
+
});
|
|
228
|
+
return { context: resolved.context, warnings: resolved.warnings };
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
throw asEnvManagerError(error);
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
const envResolveOperation = defineTool({
|
|
236
|
+
name: 'env_resolve_operation',
|
|
237
|
+
description: 'Use before acting: ask which Skill handles an operation for this context and what parameters it expects. This tool does not execute the Skill.',
|
|
238
|
+
parameters: {
|
|
239
|
+
operation: { type: 'string', required: true, description: 'Standard or custom operation id.' },
|
|
240
|
+
environmentId: { type: 'string', description: 'Defaults to the session environment.' },
|
|
241
|
+
serviceId: { type: 'string', description: 'Service id; or supply deploymentId.' },
|
|
242
|
+
deploymentId: { type: 'string', description: 'Deployment id; supplies the service when omitted.' },
|
|
243
|
+
},
|
|
244
|
+
output: {
|
|
245
|
+
schema: {
|
|
246
|
+
type: 'object',
|
|
247
|
+
additionalProperties: false,
|
|
248
|
+
properties: {
|
|
249
|
+
resolution: { type: 'json', required: true },
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
render: (_args, value) => {
|
|
253
|
+
const resolution = value.resolution;
|
|
254
|
+
return text(`${resolution.operation}: binding ${resolution.matchedBindingId ?? 'none'}, skill ${resolution.skill?.name ?? 'none'} (available: ${String(resolution.skill?.available)}).`);
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
async execute(args, exec) {
|
|
258
|
+
try {
|
|
259
|
+
if (!args.serviceId && !args.deploymentId) {
|
|
260
|
+
throw new EnvManagerError('INVALID_ARGUMENT', 'Pass serviceId or deploymentId so the operation can be bound to a service');
|
|
261
|
+
}
|
|
262
|
+
const environmentId = await environmentIdFor(exec, args.environmentId);
|
|
263
|
+
const resolution = await app.route({
|
|
264
|
+
operation: args.operation,
|
|
265
|
+
environmentId,
|
|
266
|
+
serviceId: args.serviceId,
|
|
267
|
+
deploymentId: args.deploymentId,
|
|
268
|
+
});
|
|
269
|
+
return { resolution };
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
throw asEnvManagerError(error);
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
const envGetContext = defineTool({
|
|
277
|
+
name: 'env_get_context',
|
|
278
|
+
description: 'Use to check what environment the current session defaults to.',
|
|
279
|
+
parameters: {},
|
|
280
|
+
output: {
|
|
281
|
+
schema: sessionOutputSchema(),
|
|
282
|
+
render: (_args, value) => {
|
|
283
|
+
const context = value;
|
|
284
|
+
return text(context.defaultEnvironmentId
|
|
285
|
+
? `Session default: ${context.defaultEnvironmentId}.`
|
|
286
|
+
: 'Session default: none.');
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
async execute(_args, exec) {
|
|
290
|
+
try {
|
|
291
|
+
const context = await app.getContext(sessionIdOf(exec));
|
|
292
|
+
return sessionValue(context);
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
throw asEnvManagerError(error);
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
const envSetContext = defineTool({
|
|
300
|
+
name: 'env_set_context',
|
|
301
|
+
description: 'Use when the user says to work on an environment and later calls should omit environmentId. Passing null clears the default.',
|
|
302
|
+
parameters: {
|
|
303
|
+
environmentId: {
|
|
304
|
+
oneOf: [{ type: 'string' }, { type: 'null' }],
|
|
305
|
+
required: true,
|
|
306
|
+
description: 'Environment id, or null to clear.',
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
output: {
|
|
310
|
+
schema: sessionOutputSchema(),
|
|
311
|
+
render: (_args, value) => {
|
|
312
|
+
const context = value;
|
|
313
|
+
return text(context.defaultEnvironmentId
|
|
314
|
+
? `Session default set to ${context.defaultEnvironmentId}.`
|
|
315
|
+
: 'Session default cleared.');
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
async execute(args, exec) {
|
|
319
|
+
try {
|
|
320
|
+
const sessionId = sessionIdOf(exec);
|
|
321
|
+
const context = await app.setContext(sessionId, args.environmentId);
|
|
322
|
+
return sessionValue(context);
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
throw asEnvManagerError(error);
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
});
|
|
329
|
+
const envSave = defineTool({
|
|
330
|
+
name: 'env_save',
|
|
331
|
+
description: 'Use to create or replace a record. Prefer env_get first, edit the YAML, then save the whole record; never send a partial patch.',
|
|
332
|
+
parameters: {
|
|
333
|
+
kind: { ...kindProperty, required: true },
|
|
334
|
+
record: { type: 'json', required: true, description: 'Complete record object.' },
|
|
335
|
+
dryRun: { type: 'boolean', description: 'Validate without writing.' },
|
|
336
|
+
},
|
|
337
|
+
output: {
|
|
338
|
+
schema: {
|
|
339
|
+
type: 'object',
|
|
340
|
+
additionalProperties: false,
|
|
341
|
+
properties: {
|
|
342
|
+
id: { type: 'string', required: true },
|
|
343
|
+
kind: { type: 'string', required: true },
|
|
344
|
+
created: { type: 'boolean', required: true },
|
|
345
|
+
dryRun: { type: 'boolean', required: true },
|
|
346
|
+
warnings: { ...warningsSchema(), required: true },
|
|
347
|
+
},
|
|
348
|
+
},
|
|
349
|
+
render: (_args, value) => {
|
|
350
|
+
const result = value;
|
|
351
|
+
return text(`${result.dryRun ? 'Validated' : result.created ? 'Created' : 'Updated'} ${result.kind} ${result.id}.`);
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
async execute(args, exec) {
|
|
355
|
+
try {
|
|
356
|
+
if (!isRecordKind(args.kind)) {
|
|
357
|
+
throw new EnvManagerError('INVALID_ARGUMENT', `Unknown record kind "${args.kind}"`);
|
|
358
|
+
}
|
|
359
|
+
if (writePolicy.requireApprovalForProductionSave &&
|
|
360
|
+
(await app.needsProductionApproval(args.kind, args.record))) {
|
|
361
|
+
await approval(ctx, exec, 'env_save', `Write production record ${args.record?.id ?? '(new)'}`);
|
|
362
|
+
}
|
|
363
|
+
return await app.save(args.kind, args.record, {
|
|
364
|
+
dryRun: Boolean(args.dryRun),
|
|
365
|
+
actor: 'agent',
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
throw asEnvManagerError(error);
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
});
|
|
373
|
+
const envDelete = defineTool({
|
|
374
|
+
name: 'env_delete',
|
|
375
|
+
description: 'Use only when the user explicitly asks to remove a record.',
|
|
376
|
+
parameters: {
|
|
377
|
+
kind: { ...kindProperty, required: true },
|
|
378
|
+
id: { type: 'string', required: true, description: 'Record id.' },
|
|
379
|
+
confirm: {
|
|
380
|
+
type: 'boolean',
|
|
381
|
+
required: true,
|
|
382
|
+
description: 'true deletes after approval; false only reports blockers.',
|
|
383
|
+
},
|
|
384
|
+
},
|
|
385
|
+
output: {
|
|
386
|
+
schema: {
|
|
387
|
+
type: 'object',
|
|
388
|
+
additionalProperties: false,
|
|
389
|
+
properties: {
|
|
390
|
+
id: { type: 'string', required: true },
|
|
391
|
+
kind: { type: 'string', required: true },
|
|
392
|
+
deleted: { type: 'boolean', required: true },
|
|
393
|
+
blockers: { ...diagnosticsSchema(), required: true },
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
render: (_args, value) => {
|
|
397
|
+
const result = value;
|
|
398
|
+
return text(result.deleted
|
|
399
|
+
? `Deleted ${result.kind} ${result.id} (backup kept).`
|
|
400
|
+
: `${result.kind} ${result.id} not deleted; ${result.blockers.length} blocker(s).`);
|
|
401
|
+
},
|
|
402
|
+
},
|
|
403
|
+
async execute(args, exec) {
|
|
404
|
+
try {
|
|
405
|
+
if (!args.confirm) {
|
|
406
|
+
return await app.remove(args.kind, args.id, 'agent', { dryRun: true });
|
|
407
|
+
}
|
|
408
|
+
if (writePolicy.requireApprovalForDelete) {
|
|
409
|
+
await approval(ctx, exec, 'env_delete', `Delete ${args.kind} ${args.id}`);
|
|
410
|
+
}
|
|
411
|
+
return await app.remove(args.kind, args.id, 'agent');
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
throw asEnvManagerError(error);
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
});
|
|
418
|
+
const envValidate = defineTool({
|
|
419
|
+
name: 'env_validate',
|
|
420
|
+
description: 'Use after hand-editing YAML or before trusting a resolve result.',
|
|
421
|
+
parameters: {},
|
|
422
|
+
output: {
|
|
423
|
+
schema: {
|
|
424
|
+
type: 'object',
|
|
425
|
+
additionalProperties: false,
|
|
426
|
+
properties: {
|
|
427
|
+
ok: { type: 'boolean', required: true },
|
|
428
|
+
counts: { type: 'json', required: true },
|
|
429
|
+
diagnostics: { ...diagnosticsSchema(), required: true },
|
|
430
|
+
},
|
|
431
|
+
},
|
|
432
|
+
render: (_args, value) => {
|
|
433
|
+
const report = value;
|
|
434
|
+
return text(report.ok
|
|
435
|
+
? `Registry valid; ${report.diagnostics.length} diagnostic(s).`
|
|
436
|
+
: `Registry invalid; ${report.diagnostics.length} diagnostic(s).`);
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
async execute() {
|
|
440
|
+
try {
|
|
441
|
+
const report = await app.validate();
|
|
442
|
+
return {
|
|
443
|
+
ok: report.ok,
|
|
444
|
+
counts: {
|
|
445
|
+
environment: report.counts.environments ?? 0,
|
|
446
|
+
service: report.counts.services ?? 0,
|
|
447
|
+
deployment: report.counts.deployments ?? 0,
|
|
448
|
+
ruleProfile: report.counts.ruleProfiles ?? 0,
|
|
449
|
+
operationBinding: report.counts.operationBindings ?? 0,
|
|
450
|
+
},
|
|
451
|
+
diagnostics: report.diagnostics,
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
throw asEnvManagerError(error);
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
});
|
|
459
|
+
return [
|
|
460
|
+
envList,
|
|
461
|
+
envGet,
|
|
462
|
+
envFind,
|
|
463
|
+
envResolve,
|
|
464
|
+
envResolveOperation,
|
|
465
|
+
envGetContext,
|
|
466
|
+
envSetContext,
|
|
467
|
+
envSave,
|
|
468
|
+
envDelete,
|
|
469
|
+
envValidate,
|
|
470
|
+
];
|
|
471
|
+
}
|
|
472
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"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"}
|