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,59 @@
|
|
|
1
|
+
export const SCHEMA_VERSION = 1;
|
|
2
|
+
export const ID_PATTERN = /^[a-z0-9][a-z0-9-]{0,62}$/;
|
|
3
|
+
export const SESSION_ID_PATTERN = /^[A-Za-z0-9_-]{1,128}$/;
|
|
4
|
+
export const PARAMETER_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
5
|
+
export const TEMPLATE_REF_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/;
|
|
6
|
+
export const RECORD_KINDS = [
|
|
7
|
+
'environment',
|
|
8
|
+
'service',
|
|
9
|
+
'deployment',
|
|
10
|
+
'ruleProfile',
|
|
11
|
+
'operationBinding',
|
|
12
|
+
];
|
|
13
|
+
export const KIND_DIRECTORIES = {
|
|
14
|
+
environment: 'environments',
|
|
15
|
+
service: 'services',
|
|
16
|
+
deployment: 'deployments',
|
|
17
|
+
ruleProfile: 'rules',
|
|
18
|
+
operationBinding: 'operations',
|
|
19
|
+
};
|
|
20
|
+
export const STANDARD_OPERATIONS = [
|
|
21
|
+
'install',
|
|
22
|
+
'deploy',
|
|
23
|
+
'redeploy',
|
|
24
|
+
'replace',
|
|
25
|
+
'restart',
|
|
26
|
+
'upgrade',
|
|
27
|
+
'rollback',
|
|
28
|
+
'uninstall',
|
|
29
|
+
'collect-logs',
|
|
30
|
+
'health-check',
|
|
31
|
+
'inspect',
|
|
32
|
+
'upload',
|
|
33
|
+
'download',
|
|
34
|
+
];
|
|
35
|
+
export const WRITE_OPERATIONS = new Set([
|
|
36
|
+
'install',
|
|
37
|
+
'deploy',
|
|
38
|
+
'redeploy',
|
|
39
|
+
'replace',
|
|
40
|
+
'restart',
|
|
41
|
+
'upgrade',
|
|
42
|
+
'rollback',
|
|
43
|
+
'uninstall',
|
|
44
|
+
'upload',
|
|
45
|
+
]);
|
|
46
|
+
export const LIMITS = {
|
|
47
|
+
recordBytes: 1024 * 1024,
|
|
48
|
+
sessionBytes: 64 * 1024,
|
|
49
|
+
templateLength: 2048,
|
|
50
|
+
maxParameters: 50,
|
|
51
|
+
maxDiagnostics: 200,
|
|
52
|
+
maxWarnings: 20,
|
|
53
|
+
backupCount: 5,
|
|
54
|
+
maxSnapshotRecords: 5000,
|
|
55
|
+
};
|
|
56
|
+
export function isRecordKind(value) {
|
|
57
|
+
return RECORD_KINDS.includes(value);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/domain/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAE/B,MAAM,CAAC,MAAM,UAAU,GAAG,2BAA2B,CAAA;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAA;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAA;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,qDAAqD,CAAA;AAEzF,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,aAAa;IACb,SAAS;IACT,YAAY;IACZ,aAAa;IACb,kBAAkB;CACnB,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,WAAW,EAAE,cAAc;IAC3B,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,OAAO;IACpB,gBAAgB,EAAE,YAAY;CAC/B,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS;IACT,QAAQ;IACR,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;IACT,UAAU;IACV,WAAW;IACX,cAAc;IACd,cAAc;IACd,SAAS;IACT,QAAQ;IACR,UAAU;CACF,CAAA;AAEV,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IAC3D,SAAS;IACT,QAAQ;IACR,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;IACT,UAAU;IACV,WAAW;IACX,QAAQ;CACT,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,WAAW,EAAE,IAAI,GAAG,IAAI;IACxB,YAAY,EAAE,EAAE,GAAG,IAAI;IACvB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,GAAG;IACnB,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,CAAC;IACd,kBAAkB,EAAE,IAAI;CAChB,CAAA;AAEV,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAQ,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC5D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { HarnessError } from '@deepseek-ai/dsh-llm';
|
|
2
|
+
export type ErrorCode = 'ENV_NOT_FOUND' | 'SERVICE_NOT_FOUND' | 'DEPLOYMENT_NOT_FOUND' | 'HOST_NOT_FOUND' | 'CLUSTER_NOT_FOUND' | 'RULE_PROFILE_NOT_FOUND' | 'BINDING_NOT_FOUND' | 'DEPLOYMENT_AMBIGUOUS' | 'DUPLICATE_ID' | 'RECORD_INVALID' | 'RECORD_IN_USE' | 'RECORD_LIMIT_EXCEEDED' | 'RECORD_TOO_LARGE' | 'INVALID_ARGUMENT' | 'FORBIDDEN' | 'STORAGE_UNWRITABLE' | 'SCHEMA_UNSUPPORTED' | 'UNKNOWN_FIELD' | 'RULE_TEMPLATE_INVALID' | 'RULE_UNDEFINED_VARIABLE' | 'RULE_CYCLE' | 'RULE_PATH_TRAVERSAL' | 'RULE_TYPE_MISMATCH' | 'OPERATION_UNKNOWN' | 'BINDING_CONFLICT' | 'SKILL_UNAVAILABLE' | 'SKILL_REGISTRY_UNAVAILABLE' | 'POLICY_DENIED' | 'PARAMETER_RESOLUTION_FAILED' | 'CREDENTIAL_MISSING' | 'CREDENTIAL_UNAVAILABLE' | 'CREDENTIAL_WRITE_FAILED' | 'MEMORY_BRIDGE_UNAVAILABLE' | 'SESSION_CONTEXT_UNAVAILABLE' | 'SESSION_CONTEXT_UNPERSISTED' | 'INTERNAL_ERROR';
|
|
3
|
+
export declare class EnvManagerError extends HarnessError {
|
|
4
|
+
readonly details?: Record<string, unknown>;
|
|
5
|
+
constructor(code: ErrorCode, message: string, details?: Record<string, unknown>);
|
|
6
|
+
}
|
|
7
|
+
export declare function isEnvManagerError(error: unknown): error is EnvManagerError;
|
|
8
|
+
export declare function asEnvManagerError(error: unknown): EnvManagerError;
|
|
9
|
+
export declare function diagnostic(code: ErrorCode, severity: 'info' | 'warning' | 'error', message: string, extra?: {
|
|
10
|
+
file?: string;
|
|
11
|
+
path?: string;
|
|
12
|
+
details?: Record<string, unknown>;
|
|
13
|
+
}): {
|
|
14
|
+
file?: string;
|
|
15
|
+
path?: string;
|
|
16
|
+
details?: Record<string, unknown>;
|
|
17
|
+
code: ErrorCode;
|
|
18
|
+
severity: "info" | "warning" | "error";
|
|
19
|
+
message: string;
|
|
20
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { HarnessError } from '@deepseek-ai/dsh-llm';
|
|
2
|
+
export class EnvManagerError extends HarnessError {
|
|
3
|
+
details;
|
|
4
|
+
constructor(code, message, details) {
|
|
5
|
+
super(message, code);
|
|
6
|
+
this.name = 'EnvManagerError';
|
|
7
|
+
this.details = details;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function isEnvManagerError(error) {
|
|
11
|
+
return error instanceof EnvManagerError;
|
|
12
|
+
}
|
|
13
|
+
export function asEnvManagerError(error) {
|
|
14
|
+
if (error instanceof EnvManagerError)
|
|
15
|
+
return error;
|
|
16
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
17
|
+
return new EnvManagerError('INTERNAL_ERROR', message);
|
|
18
|
+
}
|
|
19
|
+
export function diagnostic(code, severity, message, extra) {
|
|
20
|
+
return { code, severity, message, ...extra };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/domain/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAwCnD,MAAM,OAAO,eAAgB,SAAQ,YAAY;IACtC,OAAO,CAA0B;IAE1C,YAAY,IAAe,EAAE,OAAe,EAAE,OAAiC;QAC7E,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,eAAe,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,KAAK,YAAY,eAAe;QAAE,OAAO,KAAK,CAAA;IAClD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtE,OAAO,IAAI,eAAe,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAe,EACf,QAAsC,EACtC,OAAe,EACf,KAA2E;IAE3E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAA;AAC9C,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AnyRecord, RecordKind } from './types.js';
|
|
2
|
+
export interface RecordIssue {
|
|
3
|
+
path: string;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export type ParseResult<T extends AnyRecord = AnyRecord> = {
|
|
7
|
+
ok: true;
|
|
8
|
+
record: T;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
issues: RecordIssue[];
|
|
12
|
+
};
|
|
13
|
+
export declare function matchShape(match: Record<string, unknown>): string | null;
|
|
14
|
+
export declare function normalizeRecordInput(kind: RecordKind, raw: unknown): unknown;
|
|
15
|
+
export declare function parseRecordInput(kind: RecordKind, raw: unknown): ParseResult;
|
|
16
|
+
export declare function parseRecord(kind: RecordKind, raw: unknown): ParseResult;
|
|
17
|
+
export declare function parseRecordLoose(kind: RecordKind, raw: unknown): ParseResult;
|
|
18
|
+
export declare function withTimestamps<T extends {
|
|
19
|
+
createdAt?: string;
|
|
20
|
+
updatedAt?: string;
|
|
21
|
+
}>(record: T, previous?: {
|
|
22
|
+
createdAt: string;
|
|
23
|
+
}, now?: string): T & {
|
|
24
|
+
createdAt: string;
|
|
25
|
+
updatedAt: string;
|
|
26
|
+
};
|
|
27
|
+
/** Top-level unknown keys, used for read-side `UNKNOWN_FIELD` warnings. */
|
|
28
|
+
export declare function unknownTopLevelKeys(kind: RecordKind, raw: unknown): string[];
|
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ID_PATTERN, PARAMETER_KEY_PATTERN, SCHEMA_VERSION, WRITE_OPERATIONS } from './constants.js';
|
|
3
|
+
const idSchema = z.string().regex(ID_PATTERN, 'Must match ^[a-z0-9][a-z0-9-]{0,62}$');
|
|
4
|
+
const runtimeModeSchema = z.enum(['native', 'docker', 'kubernetes']);
|
|
5
|
+
const hostKindSchema = z.enum(['vm', 'physical', 'k8s-all-in-one', 'k8s-worker', 'pod-host']);
|
|
6
|
+
const hostAccessSchema = z.enum(['ssh', 'kubectl', 'docker']);
|
|
7
|
+
const clusterTopologySchema = z.enum(['all-in-one', 'separate', 'external']);
|
|
8
|
+
const timestampSchema = z
|
|
9
|
+
.string()
|
|
10
|
+
.refine((value) => !Number.isNaN(Date.parse(value)), 'Must be an ISO-8601 timestamp');
|
|
11
|
+
const scalarSchema = z.union([z.string(), z.number(), z.boolean()]);
|
|
12
|
+
const loginProtocolSchema = z.enum(['ssh', 'rdp', 'web', 'k8s-api', 'docker', 'custom']);
|
|
13
|
+
const loginAuthTypeSchema = z.enum(['password', 'private-key', 'agent', 'token', 'other']);
|
|
14
|
+
const webLoginUrlSchema = z
|
|
15
|
+
.string()
|
|
16
|
+
.url()
|
|
17
|
+
.refine((value) => /^https?:\/\//i.test(value), 'Must be an http(s) URL');
|
|
18
|
+
function hostAccountSchema(mode) {
|
|
19
|
+
return o({
|
|
20
|
+
id: z.string().min(1),
|
|
21
|
+
username: z.string().min(1),
|
|
22
|
+
purpose: z.string().optional(),
|
|
23
|
+
protocol: loginProtocolSchema.optional(),
|
|
24
|
+
loginUrl: webLoginUrlSchema.optional(),
|
|
25
|
+
port: z.number().int().min(1).max(65535).optional(),
|
|
26
|
+
authType: loginAuthTypeSchema.optional(),
|
|
27
|
+
credentialRef: z.string().min(1).optional(),
|
|
28
|
+
lastLoginAt: timestampSchema.optional(),
|
|
29
|
+
lastLoginFrom: z.string().optional(),
|
|
30
|
+
note: z.string().optional(),
|
|
31
|
+
}, mode);
|
|
32
|
+
}
|
|
33
|
+
function loginRecordSchema(mode) {
|
|
34
|
+
return o({
|
|
35
|
+
id: z.string().min(1),
|
|
36
|
+
at: timestampSchema,
|
|
37
|
+
username: z.string().min(1),
|
|
38
|
+
hostRef: z.string().min(1).optional(),
|
|
39
|
+
accountId: z.string().min(1).optional(),
|
|
40
|
+
protocol: loginProtocolSchema.optional(),
|
|
41
|
+
sourceIp: z.string().optional(),
|
|
42
|
+
result: z.enum(['success', 'failure']),
|
|
43
|
+
note: z.string().optional(),
|
|
44
|
+
}, mode);
|
|
45
|
+
}
|
|
46
|
+
function o(shape, mode) {
|
|
47
|
+
return mode === 'read' ? z.looseObject(shape) : z.strictObject(shape);
|
|
48
|
+
}
|
|
49
|
+
function metaShape(input) {
|
|
50
|
+
return {
|
|
51
|
+
id: idSchema,
|
|
52
|
+
schemaVersion: z.literal(SCHEMA_VERSION),
|
|
53
|
+
createdAt: input ? timestampSchema.optional() : timestampSchema,
|
|
54
|
+
updatedAt: input ? timestampSchema.optional() : timestampSchema,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function logSourceSchema(mode) {
|
|
58
|
+
return z.discriminatedUnion('kind', [
|
|
59
|
+
o({ kind: z.literal('file'), path: z.string().min(1) }, mode),
|
|
60
|
+
o({ kind: z.literal('container-stdout'), container: z.string().min(1) }, mode),
|
|
61
|
+
o({
|
|
62
|
+
kind: z.literal('pod-logs'),
|
|
63
|
+
namespace: z.string().min(1),
|
|
64
|
+
workload: z.string().min(1),
|
|
65
|
+
}, mode),
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
function classLocationSchema(mode) {
|
|
69
|
+
return o({
|
|
70
|
+
kind: z.enum(['build-output', 'deployed-dir', 'jar-entry']),
|
|
71
|
+
path: z.string().min(1),
|
|
72
|
+
entryPrefix: z.string().optional(),
|
|
73
|
+
}, mode);
|
|
74
|
+
}
|
|
75
|
+
function ruleOverrideSchema(mode) {
|
|
76
|
+
return o({
|
|
77
|
+
variables: z.record(z.string().min(1), scalarSchema).optional(),
|
|
78
|
+
paths: z.record(z.string().min(1), z.string()).optional(),
|
|
79
|
+
logSources: z
|
|
80
|
+
.object({
|
|
81
|
+
native: logSourceSchema(mode).optional(),
|
|
82
|
+
docker: logSourceSchema(mode).optional(),
|
|
83
|
+
kubernetes: logSourceSchema(mode).optional(),
|
|
84
|
+
})
|
|
85
|
+
.optional(),
|
|
86
|
+
classLocations: z
|
|
87
|
+
.object({
|
|
88
|
+
native: classLocationSchema(mode).optional(),
|
|
89
|
+
docker: classLocationSchema(mode).optional(),
|
|
90
|
+
kubernetes: classLocationSchema(mode).optional(),
|
|
91
|
+
})
|
|
92
|
+
.optional(),
|
|
93
|
+
}, mode);
|
|
94
|
+
}
|
|
95
|
+
function environmentFields(mode) {
|
|
96
|
+
return {
|
|
97
|
+
name: z.string().min(1),
|
|
98
|
+
aliases: z.array(z.string().min(1)).default([]),
|
|
99
|
+
category: z.enum(['dev', 'test', 'staging', 'production', 'custom']),
|
|
100
|
+
description: z.string().optional(),
|
|
101
|
+
roles: z
|
|
102
|
+
.array(o({
|
|
103
|
+
id: z.string().min(1),
|
|
104
|
+
name: z.string().min(1),
|
|
105
|
+
description: z.string().optional(),
|
|
106
|
+
}, mode))
|
|
107
|
+
.min(1, 'At least one logical role is required'),
|
|
108
|
+
hosts: z
|
|
109
|
+
.array(o({
|
|
110
|
+
id: z.string().min(1),
|
|
111
|
+
name: z.string().min(1),
|
|
112
|
+
kind: hostKindSchema.default('vm'),
|
|
113
|
+
os: z.string().optional(),
|
|
114
|
+
platform: z.string().optional(),
|
|
115
|
+
ip: z.string().optional(),
|
|
116
|
+
publicIp: z.string().optional(),
|
|
117
|
+
sshPort: z.number().int().min(1).max(65535).optional(),
|
|
118
|
+
roles: z.array(z.string().min(1)).min(1, 'At least one host role is required'),
|
|
119
|
+
access: z.array(hostAccessSchema).max(3).optional(),
|
|
120
|
+
clusterRef: z.string().min(1).optional(),
|
|
121
|
+
adminUser: z.string().optional(),
|
|
122
|
+
isActive: z.boolean().optional(),
|
|
123
|
+
credentialRef: z.string().min(1).optional(),
|
|
124
|
+
accounts: z.array(hostAccountSchema(mode)).max(50).optional(),
|
|
125
|
+
note: z.string().optional(),
|
|
126
|
+
}, mode))
|
|
127
|
+
.default([]),
|
|
128
|
+
clusters: z
|
|
129
|
+
.array(o({
|
|
130
|
+
id: z.string().min(1),
|
|
131
|
+
name: z.string().min(1),
|
|
132
|
+
kind: z.enum(['kubernetes', 'docker']),
|
|
133
|
+
topology: clusterTopologySchema.optional(),
|
|
134
|
+
apiEndpoint: z.string().optional(),
|
|
135
|
+
namespaces: z.array(z.string().min(1)).optional(),
|
|
136
|
+
credentialRef: z.string().min(1).optional(),
|
|
137
|
+
note: z.string().optional(),
|
|
138
|
+
}, mode))
|
|
139
|
+
.default([]),
|
|
140
|
+
endpoints: z
|
|
141
|
+
.array(o({
|
|
142
|
+
id: z.string().min(1),
|
|
143
|
+
kind: z.enum(['ssh', 'web', 'k8s-api', 'docker', 'custom']),
|
|
144
|
+
hostRef: z.string().min(1).optional(),
|
|
145
|
+
clusterRef: z.string().min(1).optional(),
|
|
146
|
+
url: z.string().optional(),
|
|
147
|
+
port: z.number().int().min(1).max(65535).optional(),
|
|
148
|
+
credentialRef: z.string().min(1).optional(),
|
|
149
|
+
note: z.string().optional(),
|
|
150
|
+
}, mode))
|
|
151
|
+
.default([]),
|
|
152
|
+
loginRecords: z.array(loginRecordSchema(mode)).max(200).optional(),
|
|
153
|
+
ruleOverrides: ruleOverrideSchema(mode).optional(),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function serviceFields(mode) {
|
|
157
|
+
return {
|
|
158
|
+
name: z.string().min(1),
|
|
159
|
+
aliases: z.array(z.string().min(1)).default([]),
|
|
160
|
+
category: z.string().min(1),
|
|
161
|
+
description: z.string().optional(),
|
|
162
|
+
git: o({
|
|
163
|
+
url: z.string().min(1),
|
|
164
|
+
defaultBranch: z.string().min(1).default('main'),
|
|
165
|
+
modulePath: z.string().optional(),
|
|
166
|
+
}, mode),
|
|
167
|
+
build: o({
|
|
168
|
+
tool: z.enum(['maven', 'gradle', 'npm', 'custom']),
|
|
169
|
+
command: z.string().optional(),
|
|
170
|
+
}, mode).optional(),
|
|
171
|
+
artifact: o({
|
|
172
|
+
name: z.string().min(1),
|
|
173
|
+
path: z.string().optional(),
|
|
174
|
+
}, mode).optional(),
|
|
175
|
+
deployModes: z.array(runtimeModeSchema).min(1),
|
|
176
|
+
ruleProfileRefs: z.array(z.string().min(1)).default([]),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
function deploymentFields(mode) {
|
|
180
|
+
const native = o({
|
|
181
|
+
kind: z.literal('native'),
|
|
182
|
+
hostRef: z.string().min(1),
|
|
183
|
+
installDir: z.string().optional(),
|
|
184
|
+
serviceName: z.string().optional(),
|
|
185
|
+
processMatch: z.string().optional(),
|
|
186
|
+
}, mode);
|
|
187
|
+
const docker = o({
|
|
188
|
+
kind: z.literal('docker'),
|
|
189
|
+
hostRef: z.string().min(1),
|
|
190
|
+
containerName: z.string().optional(),
|
|
191
|
+
image: z.string().optional(),
|
|
192
|
+
volumes: z.array(z.string()).optional(),
|
|
193
|
+
}, mode);
|
|
194
|
+
const kubernetes = o({
|
|
195
|
+
kind: z.literal('kubernetes'),
|
|
196
|
+
clusterRef: z.string().min(1),
|
|
197
|
+
namespace: z.string().min(1),
|
|
198
|
+
workload: o({
|
|
199
|
+
kind: z.enum(['Deployment', 'StatefulSet', 'DaemonSet', 'CronJob', 'Pod']),
|
|
200
|
+
name: z.string().min(1),
|
|
201
|
+
}, mode),
|
|
202
|
+
container: z.string().optional(),
|
|
203
|
+
}, mode);
|
|
204
|
+
return {
|
|
205
|
+
name: z.string().optional(),
|
|
206
|
+
environmentId: z.string().min(1),
|
|
207
|
+
serviceId: z.string().min(1),
|
|
208
|
+
runtimeMode: runtimeModeSchema,
|
|
209
|
+
location: z.discriminatedUnion('kind', [native, docker, kubernetes]),
|
|
210
|
+
variables: z.record(z.string().min(1), scalarSchema).optional(),
|
|
211
|
+
ruleOverrides: ruleOverrideSchema(mode).optional(),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function ruleProfileFields(mode) {
|
|
215
|
+
return {
|
|
216
|
+
name: z.string().optional(),
|
|
217
|
+
description: z.string().optional(),
|
|
218
|
+
variables: z.record(z.string().min(1), scalarSchema).optional(),
|
|
219
|
+
paths: z.record(z.string().min(1), z.string()).optional(),
|
|
220
|
+
logSources: z
|
|
221
|
+
.object({
|
|
222
|
+
native: logSourceSchema(mode).optional(),
|
|
223
|
+
docker: logSourceSchema(mode).optional(),
|
|
224
|
+
kubernetes: logSourceSchema(mode).optional(),
|
|
225
|
+
})
|
|
226
|
+
.optional(),
|
|
227
|
+
classLocations: z
|
|
228
|
+
.object({
|
|
229
|
+
native: classLocationSchema(mode).optional(),
|
|
230
|
+
docker: classLocationSchema(mode).optional(),
|
|
231
|
+
kubernetes: classLocationSchema(mode).optional(),
|
|
232
|
+
})
|
|
233
|
+
.optional(),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function operationBindingFields(mode) {
|
|
237
|
+
return {
|
|
238
|
+
operation: z.string().min(1),
|
|
239
|
+
match: o({
|
|
240
|
+
environmentId: z.string().min(1).optional(),
|
|
241
|
+
serviceId: z.string().min(1).optional(),
|
|
242
|
+
deploymentId: z.string().min(1).optional(),
|
|
243
|
+
deploymentMode: runtimeModeSchema.optional(),
|
|
244
|
+
serviceCategory: z.string().min(1).optional(),
|
|
245
|
+
}, mode),
|
|
246
|
+
skill: o({
|
|
247
|
+
name: z.string().min(1),
|
|
248
|
+
expectedSource: z.string().min(1).nullable().optional(),
|
|
249
|
+
expectedProvider: z.string().min(1).nullable().optional(),
|
|
250
|
+
}, mode),
|
|
251
|
+
parameters: z.record(z.string().regex(PARAMETER_KEY_PATTERN), scalarSchema).optional(),
|
|
252
|
+
policy: o({
|
|
253
|
+
requiresApproval: z.boolean().default(true),
|
|
254
|
+
allowProduction: z.boolean().default(false),
|
|
255
|
+
}, mode),
|
|
256
|
+
enabled: z.boolean().default(true),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function fieldsOf(kind, mode) {
|
|
260
|
+
switch (kind) {
|
|
261
|
+
case 'environment':
|
|
262
|
+
return environmentFields(mode);
|
|
263
|
+
case 'service':
|
|
264
|
+
return serviceFields(mode);
|
|
265
|
+
case 'deployment':
|
|
266
|
+
return deploymentFields(mode);
|
|
267
|
+
case 'ruleProfile':
|
|
268
|
+
return ruleProfileFields(mode);
|
|
269
|
+
case 'operationBinding':
|
|
270
|
+
return operationBindingFields(mode);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
export function matchShape(match) {
|
|
274
|
+
const keys = Object.keys(match).filter((key) => match[key] !== undefined);
|
|
275
|
+
const has = (key) => keys.includes(key);
|
|
276
|
+
if (has('deploymentId')) {
|
|
277
|
+
const allowed = new Set(['deploymentId', 'environmentId', 'serviceId']);
|
|
278
|
+
return keys.every((key) => allowed.has(key)) ? 'deployment' : null;
|
|
279
|
+
}
|
|
280
|
+
if (has('environmentId') && has('serviceId')) {
|
|
281
|
+
const allowed = new Set(['environmentId', 'serviceId']);
|
|
282
|
+
return keys.every((key) => allowed.has(key)) ? 'environment-service' : null;
|
|
283
|
+
}
|
|
284
|
+
if (has('serviceId')) {
|
|
285
|
+
return keys.length === 1 ? 'service' : null;
|
|
286
|
+
}
|
|
287
|
+
if (has('serviceCategory') && has('deploymentMode')) {
|
|
288
|
+
return keys.length === 2 ? 'category-mode' : null;
|
|
289
|
+
}
|
|
290
|
+
if (keys.length === 0)
|
|
291
|
+
return 'global';
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
function crossCheck(kind, value, ctx) {
|
|
295
|
+
const add = (path, message) => ctx.addIssue({ code: 'custom', message, path: path ? path.split('.') : [] });
|
|
296
|
+
const unique = (items, label, path) => {
|
|
297
|
+
const seen = new Set();
|
|
298
|
+
for (const [index, item] of items.entries()) {
|
|
299
|
+
if (seen.has(item.id))
|
|
300
|
+
add(`${path}[${index}].id`, `Duplicate ${label} id "${item.id}"`);
|
|
301
|
+
seen.add(item.id);
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
if (kind === 'environment') {
|
|
305
|
+
const env = value;
|
|
306
|
+
unique(env.roles ?? [], 'role', 'roles');
|
|
307
|
+
unique(env.hosts ?? [], 'host', 'hosts');
|
|
308
|
+
unique(env.clusters ?? [], 'cluster', 'clusters');
|
|
309
|
+
unique(env.endpoints ?? [], 'endpoint', 'endpoints');
|
|
310
|
+
const roleIds = new Set((env.roles ?? []).map((role) => role.id));
|
|
311
|
+
const clusterIds = new Set((env.clusters ?? []).map((cluster) => cluster.id));
|
|
312
|
+
const k8sNodeKinds = new Set(['k8s-all-in-one', 'k8s-worker']);
|
|
313
|
+
for (const [index, host] of (env.hosts ?? []).entries()) {
|
|
314
|
+
for (const role of host.roles) {
|
|
315
|
+
if (!roleIds.has(role))
|
|
316
|
+
add(`hosts[${index}].roles`, `Unknown role "${role}"`);
|
|
317
|
+
}
|
|
318
|
+
if (k8sNodeKinds.has(host.kind || 'vm') && !host.clusterRef) {
|
|
319
|
+
add(`hosts[${index}].clusterRef`, 'K8s nodes must reference a cluster');
|
|
320
|
+
}
|
|
321
|
+
if (host.clusterRef && !clusterIds.has(host.clusterRef)) {
|
|
322
|
+
add(`hosts[${index}].clusterRef`, `Unknown cluster "${host.clusterRef}"`);
|
|
323
|
+
}
|
|
324
|
+
if (host.access && new Set(host.access).size !== host.access.length) {
|
|
325
|
+
add(`hosts[${index}].access`, 'Duplicate host access method');
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
const seenIps = new Set();
|
|
329
|
+
for (const [index, host] of (env.hosts ?? []).entries()) {
|
|
330
|
+
if (!host.ip)
|
|
331
|
+
continue;
|
|
332
|
+
if (seenIps.has(host.ip))
|
|
333
|
+
add(`hosts[${index}].ip`, `Duplicate host ip "${host.ip}"`);
|
|
334
|
+
seenIps.add(host.ip);
|
|
335
|
+
}
|
|
336
|
+
const hostIds = new Set((env.hosts ?? []).map((host) => host.id));
|
|
337
|
+
for (const [index, endpoint] of (env.endpoints ?? []).entries()) {
|
|
338
|
+
if (endpoint.hostRef && !hostIds.has(endpoint.hostRef)) {
|
|
339
|
+
add(`endpoints[${index}].hostRef`, `Unknown host "${endpoint.hostRef}"`);
|
|
340
|
+
}
|
|
341
|
+
if (endpoint.clusterRef && !clusterIds.has(endpoint.clusterRef)) {
|
|
342
|
+
add(`endpoints[${index}].clusterRef`, `Unknown cluster "${endpoint.clusterRef}"`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (kind === 'deployment') {
|
|
347
|
+
const deployment = value;
|
|
348
|
+
if (deployment.runtimeMode !== deployment.location.kind) {
|
|
349
|
+
add('location.kind', 'location.kind must equal runtimeMode');
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
if (kind === 'operationBinding') {
|
|
353
|
+
const binding = value;
|
|
354
|
+
if (matchShape(binding.match) === null) {
|
|
355
|
+
add('match', 'match must be one of: deployment, environment-service, service, category-mode, global');
|
|
356
|
+
}
|
|
357
|
+
if (binding.parameters && Object.keys(binding.parameters).length > 50) {
|
|
358
|
+
add('parameters', 'At most 50 parameters are allowed');
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
const cache = new Map();
|
|
363
|
+
function schemaFor(kind, mode, input) {
|
|
364
|
+
const key = `${kind}:${mode}:${input ? 'input' : 'record'}`;
|
|
365
|
+
const cached = cache.get(key);
|
|
366
|
+
if (cached)
|
|
367
|
+
return cached;
|
|
368
|
+
const schema = o({ ...metaShape(input), ...fieldsOf(kind, mode) }, mode).superRefine((value, ctx) => crossCheck(kind, value, ctx));
|
|
369
|
+
cache.set(key, schema);
|
|
370
|
+
return schema;
|
|
371
|
+
}
|
|
372
|
+
function issuesFrom(error) {
|
|
373
|
+
return error.issues.slice(0, 50).map((issue) => ({
|
|
374
|
+
path: issue.path.map(String).join('.'),
|
|
375
|
+
message: issue.message,
|
|
376
|
+
}));
|
|
377
|
+
}
|
|
378
|
+
export function normalizeRecordInput(kind, raw) {
|
|
379
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
|
|
380
|
+
return raw;
|
|
381
|
+
const value = { ...raw };
|
|
382
|
+
switch (kind) {
|
|
383
|
+
case 'environment': {
|
|
384
|
+
value.aliases ??= [];
|
|
385
|
+
value.roles ??= [];
|
|
386
|
+
value.hosts ??= [];
|
|
387
|
+
value.clusters ??= [];
|
|
388
|
+
value.endpoints ??= [];
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
case 'service': {
|
|
392
|
+
value.aliases ??= [];
|
|
393
|
+
value.ruleProfileRefs ??= [];
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
case 'ruleProfile':
|
|
397
|
+
break;
|
|
398
|
+
case 'deployment':
|
|
399
|
+
break;
|
|
400
|
+
case 'operationBinding': {
|
|
401
|
+
value.enabled ??= true;
|
|
402
|
+
const existing = (value.policy ?? {});
|
|
403
|
+
const operation = typeof value.operation === 'string' ? value.operation : '';
|
|
404
|
+
value.policy = {
|
|
405
|
+
requiresApproval: existing.requiresApproval ?? WRITE_OPERATIONS.has(operation),
|
|
406
|
+
allowProduction: existing.allowProduction ?? false,
|
|
407
|
+
};
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return value;
|
|
412
|
+
}
|
|
413
|
+
export function parseRecordInput(kind, raw) {
|
|
414
|
+
const result = schemaFor(kind, 'write', true).safeParse(normalizeRecordInput(kind, raw));
|
|
415
|
+
if (!result.success)
|
|
416
|
+
return { ok: false, issues: issuesFrom(result.error) };
|
|
417
|
+
return { ok: true, record: result.data };
|
|
418
|
+
}
|
|
419
|
+
export function parseRecord(kind, raw) {
|
|
420
|
+
const result = schemaFor(kind, 'write', false).safeParse(raw);
|
|
421
|
+
if (!result.success)
|
|
422
|
+
return { ok: false, issues: issuesFrom(result.error) };
|
|
423
|
+
return { ok: true, record: result.data };
|
|
424
|
+
}
|
|
425
|
+
export function parseRecordLoose(kind, raw) {
|
|
426
|
+
const result = schemaFor(kind, 'read', false).safeParse(raw);
|
|
427
|
+
if (!result.success)
|
|
428
|
+
return { ok: false, issues: issuesFrom(result.error) };
|
|
429
|
+
return { ok: true, record: result.data };
|
|
430
|
+
}
|
|
431
|
+
export function withTimestamps(record, previous, now = new Date().toISOString()) {
|
|
432
|
+
return {
|
|
433
|
+
...record,
|
|
434
|
+
createdAt: previous?.createdAt ?? record.createdAt ?? now,
|
|
435
|
+
updatedAt: now,
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
/** Top-level unknown keys, used for read-side `UNKNOWN_FIELD` warnings. */
|
|
439
|
+
export function unknownTopLevelKeys(kind, raw) {
|
|
440
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
|
|
441
|
+
return [];
|
|
442
|
+
const allowed = new Set(Object.keys({ ...metaShape(false), ...fieldsOf(kind, 'read') }));
|
|
443
|
+
return Object.keys(raw).filter((key) => !allowed.has(key));
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/domain/schemas.ts"],"names":[],"mappings":"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"}
|