@bradygaster/squad-sdk 0.6.2 → 0.8.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/README.md +296 -296
- package/dist/adapter/client.d.ts +225 -0
- package/dist/adapter/client.d.ts.map +1 -0
- package/dist/adapter/client.js +397 -0
- package/dist/adapter/client.js.map +1 -0
- package/dist/adapter/errors.d.ts +260 -0
- package/dist/adapter/errors.d.ts.map +1 -0
- package/dist/adapter/errors.js +362 -0
- package/dist/adapter/errors.js.map +1 -0
- package/dist/adapter/types.d.ts +779 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +11 -0
- package/dist/adapter/types.js.map +1 -0
- package/dist/agents/charter-compiler.d.ts +102 -0
- package/dist/agents/charter-compiler.d.ts.map +1 -0
- package/dist/agents/charter-compiler.js +157 -0
- package/dist/agents/charter-compiler.js.map +1 -0
- package/dist/agents/history-shadow.d.ts +80 -0
- package/dist/agents/history-shadow.d.ts.map +1 -0
- package/dist/agents/history-shadow.js +239 -0
- package/dist/agents/history-shadow.js.map +1 -0
- package/dist/agents/index.d.ts +68 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +74 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/lifecycle.d.ts +138 -0
- package/dist/agents/lifecycle.d.ts.map +1 -0
- package/dist/agents/lifecycle.js +258 -0
- package/dist/agents/lifecycle.js.map +1 -0
- package/dist/agents/model-selector.d.ts +80 -0
- package/dist/agents/model-selector.d.ts.map +1 -0
- package/dist/agents/model-selector.js +198 -0
- package/dist/agents/model-selector.js.map +1 -0
- package/dist/agents/onboarding.d.ts +65 -0
- package/dist/agents/onboarding.d.ts.map +1 -0
- package/dist/agents/onboarding.js +373 -0
- package/dist/agents/onboarding.js.map +1 -0
- package/dist/build/bundle.d.ts +32 -0
- package/dist/build/bundle.d.ts.map +1 -0
- package/dist/build/bundle.js +97 -0
- package/dist/build/bundle.js.map +1 -0
- package/dist/build/ci-pipeline.d.ts +51 -0
- package/dist/build/ci-pipeline.d.ts.map +1 -0
- package/dist/build/ci-pipeline.js +180 -0
- package/dist/build/ci-pipeline.js.map +1 -0
- package/dist/build/github-dist.d.ts +37 -0
- package/dist/build/github-dist.d.ts.map +1 -0
- package/dist/build/github-dist.js +117 -0
- package/dist/build/github-dist.js.map +1 -0
- package/dist/build/index.d.ts +11 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +11 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/install-migration.d.ts +28 -0
- package/dist/build/install-migration.d.ts.map +1 -0
- package/dist/build/install-migration.js +103 -0
- package/dist/build/install-migration.js.map +1 -0
- package/dist/build/npm-package.d.ts +54 -0
- package/dist/build/npm-package.d.ts.map +1 -0
- package/dist/build/npm-package.js +128 -0
- package/dist/build/npm-package.js.map +1 -0
- package/dist/build/release.d.ts +108 -0
- package/dist/build/release.d.ts.map +1 -0
- package/dist/build/release.js +295 -0
- package/dist/build/release.js.map +1 -0
- package/dist/build/versioning.d.ts +38 -0
- package/dist/build/versioning.d.ts.map +1 -0
- package/dist/build/versioning.js +113 -0
- package/dist/build/versioning.js.map +1 -0
- package/dist/casting/casting-engine.d.ts +60 -0
- package/dist/casting/casting-engine.d.ts.map +1 -0
- package/dist/casting/casting-engine.js +223 -0
- package/dist/casting/casting-engine.js.map +1 -0
- package/dist/casting/casting-history.d.ts +54 -0
- package/dist/casting/casting-history.d.ts.map +1 -0
- package/dist/casting/casting-history.js +63 -0
- package/dist/casting/casting-history.js.map +1 -0
- package/dist/casting/index.d.ts +46 -0
- package/dist/casting/index.d.ts.map +1 -0
- package/dist/casting/index.js +37 -0
- package/dist/casting/index.js.map +1 -0
- package/dist/client/event-bus.d.ts +29 -0
- package/dist/client/event-bus.d.ts.map +1 -0
- package/dist/client/event-bus.js +53 -0
- package/dist/client/event-bus.js.map +1 -0
- package/dist/client/index.d.ts +100 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +170 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/session-pool.d.ts +66 -0
- package/dist/client/session-pool.d.ts.map +1 -0
- package/dist/client/session-pool.js +145 -0
- package/dist/client/session-pool.js.map +1 -0
- package/dist/config/agent-doc.d.ts +43 -0
- package/dist/config/agent-doc.d.ts.map +1 -0
- package/dist/config/agent-doc.js +158 -0
- package/dist/config/agent-doc.js.map +1 -0
- package/dist/config/agent-source.d.ts +95 -0
- package/dist/config/agent-source.d.ts.map +1 -0
- package/dist/config/agent-source.js +274 -0
- package/dist/config/agent-source.js.map +1 -0
- package/dist/config/doc-sync.d.ts +66 -0
- package/dist/config/doc-sync.d.ts.map +1 -0
- package/dist/config/doc-sync.js +270 -0
- package/dist/config/doc-sync.js.map +1 -0
- package/dist/config/feature-audit.d.ts +49 -0
- package/dist/config/feature-audit.d.ts.map +1 -0
- package/dist/config/feature-audit.js +148 -0
- package/dist/config/feature-audit.js.map +1 -0
- package/dist/config/index.d.ts +15 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +15 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/init.d.ts +61 -0
- package/dist/config/init.d.ts.map +1 -0
- package/dist/config/init.js +369 -0
- package/dist/config/init.js.map +1 -0
- package/dist/config/legacy-fallback.d.ts +83 -0
- package/dist/config/legacy-fallback.d.ts.map +1 -0
- package/dist/config/legacy-fallback.js +212 -0
- package/dist/config/legacy-fallback.js.map +1 -0
- package/dist/config/markdown-migration.d.ts +157 -0
- package/dist/config/markdown-migration.d.ts.map +1 -0
- package/dist/config/markdown-migration.js +434 -0
- package/dist/config/markdown-migration.js.map +1 -0
- package/dist/config/migration.d.ts +123 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +273 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/migrations/index.d.ts +36 -0
- package/dist/config/migrations/index.d.ts.map +1 -0
- package/dist/config/migrations/index.js +216 -0
- package/dist/config/migrations/index.js.map +1 -0
- package/dist/config/models.d.ts +134 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +354 -0
- package/dist/config/models.js.map +1 -0
- package/dist/config/routing.d.ts +118 -0
- package/dist/config/routing.d.ts.map +1 -0
- package/dist/config/routing.js +247 -0
- package/dist/config/routing.js.map +1 -0
- package/dist/config/schema.d.ts +72 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +63 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/coordinator/coordinator.d.ts +82 -0
- package/dist/coordinator/coordinator.d.ts.map +1 -0
- package/dist/coordinator/coordinator.js +174 -0
- package/dist/coordinator/coordinator.js.map +1 -0
- package/dist/coordinator/direct-response.d.ts +83 -0
- package/dist/coordinator/direct-response.d.ts.map +1 -0
- package/dist/coordinator/direct-response.js +187 -0
- package/dist/coordinator/direct-response.js.map +1 -0
- package/dist/coordinator/fan-out.d.ts +83 -0
- package/dist/coordinator/fan-out.d.ts.map +1 -0
- package/dist/coordinator/fan-out.js +161 -0
- package/dist/coordinator/fan-out.js.map +1 -0
- package/dist/coordinator/index.d.ts +47 -0
- package/dist/coordinator/index.d.ts.map +1 -0
- package/dist/coordinator/index.js +54 -0
- package/dist/coordinator/index.js.map +1 -0
- package/dist/coordinator/response-tiers.d.ts +49 -0
- package/dist/coordinator/response-tiers.d.ts.map +1 -0
- package/dist/coordinator/response-tiers.js +149 -0
- package/dist/coordinator/response-tiers.js.map +1 -0
- package/dist/hooks/index.d.ts +103 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +279 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -3
- package/dist/index.js.map +1 -1
- package/dist/marketplace/backend.d.ts +35 -0
- package/dist/marketplace/backend.d.ts.map +1 -0
- package/dist/marketplace/backend.js +99 -0
- package/dist/marketplace/backend.js.map +1 -0
- package/dist/marketplace/browser.d.ts +33 -0
- package/dist/marketplace/browser.d.ts.map +1 -0
- package/dist/marketplace/browser.js +97 -0
- package/dist/marketplace/browser.js.map +1 -0
- package/dist/marketplace/extension-adapter.d.ts +51 -0
- package/dist/marketplace/extension-adapter.d.ts.map +1 -0
- package/dist/marketplace/extension-adapter.js +81 -0
- package/dist/marketplace/extension-adapter.js.map +1 -0
- package/dist/marketplace/index.d.ts +51 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +108 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/packaging.d.ts +25 -0
- package/dist/marketplace/packaging.d.ts.map +1 -0
- package/dist/marketplace/packaging.js +117 -0
- package/dist/marketplace/packaging.js.map +1 -0
- package/dist/marketplace/schema.d.ts +50 -0
- package/dist/marketplace/schema.d.ts.map +1 -0
- package/dist/marketplace/schema.js +120 -0
- package/dist/marketplace/schema.js.map +1 -0
- package/dist/marketplace/security.d.ts +26 -0
- package/dist/marketplace/security.d.ts.map +1 -0
- package/dist/marketplace/security.js +199 -0
- package/dist/marketplace/security.js.map +1 -0
- package/dist/parsers.d.ts +15 -0
- package/dist/parsers.d.ts.map +1 -0
- package/dist/parsers.js +15 -0
- package/dist/parsers.js.map +1 -0
- package/dist/ralph/index.d.ts +56 -0
- package/dist/ralph/index.d.ts.map +1 -0
- package/dist/ralph/index.js +61 -0
- package/dist/ralph/index.js.map +1 -0
- package/dist/resolution.d.ts +47 -0
- package/dist/resolution.d.ts.map +1 -0
- package/dist/resolution.js +106 -0
- package/dist/resolution.js.map +1 -0
- package/dist/runtime/benchmarks.d.ts +121 -0
- package/dist/runtime/benchmarks.d.ts.map +1 -0
- package/dist/runtime/benchmarks.js +251 -0
- package/dist/runtime/benchmarks.js.map +1 -0
- package/dist/runtime/config.d.ts +313 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +466 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/cost-tracker.d.ts +73 -0
- package/dist/runtime/cost-tracker.d.ts.map +1 -0
- package/dist/runtime/cost-tracker.js +157 -0
- package/dist/runtime/cost-tracker.js.map +1 -0
- package/dist/runtime/event-bus.d.ts +190 -0
- package/dist/runtime/event-bus.d.ts.map +1 -0
- package/dist/runtime/event-bus.js +218 -0
- package/dist/runtime/event-bus.js.map +1 -0
- package/dist/runtime/health.d.ts +66 -0
- package/dist/runtime/health.d.ts.map +1 -0
- package/dist/runtime/health.js +111 -0
- package/dist/runtime/health.js.map +1 -0
- package/dist/runtime/i18n.d.ts +54 -0
- package/dist/runtime/i18n.d.ts.map +1 -0
- package/dist/runtime/i18n.js +126 -0
- package/dist/runtime/i18n.js.map +1 -0
- package/dist/runtime/offline.d.ts +64 -0
- package/dist/runtime/offline.d.ts.map +1 -0
- package/dist/runtime/offline.js +108 -0
- package/dist/runtime/offline.js.map +1 -0
- package/dist/runtime/streaming.d.ts +97 -0
- package/dist/runtime/streaming.d.ts.map +1 -0
- package/dist/runtime/streaming.js +156 -0
- package/dist/runtime/streaming.js.map +1 -0
- package/dist/runtime/telemetry.d.ts +82 -0
- package/dist/runtime/telemetry.d.ts.map +1 -0
- package/dist/runtime/telemetry.js +120 -0
- package/dist/runtime/telemetry.js.map +1 -0
- package/dist/sharing/agent-repo.d.ts +33 -0
- package/dist/sharing/agent-repo.d.ts.map +1 -0
- package/dist/sharing/agent-repo.js +79 -0
- package/dist/sharing/agent-repo.js.map +1 -0
- package/dist/sharing/cache.d.ts +36 -0
- package/dist/sharing/cache.d.ts.map +1 -0
- package/dist/sharing/cache.js +85 -0
- package/dist/sharing/cache.js.map +1 -0
- package/dist/sharing/conflicts.d.ts +32 -0
- package/dist/sharing/conflicts.d.ts.map +1 -0
- package/dist/sharing/conflicts.js +121 -0
- package/dist/sharing/conflicts.js.map +1 -0
- package/dist/sharing/export.d.ts +50 -0
- package/dist/sharing/export.d.ts.map +1 -0
- package/dist/sharing/export.js +156 -0
- package/dist/sharing/export.js.map +1 -0
- package/dist/sharing/history-split.d.ts +34 -0
- package/dist/sharing/history-split.d.ts.map +1 -0
- package/dist/sharing/history-split.js +101 -0
- package/dist/sharing/history-split.js.map +1 -0
- package/dist/sharing/import.d.ts +37 -0
- package/dist/sharing/import.d.ts.map +1 -0
- package/dist/sharing/import.js +138 -0
- package/dist/sharing/import.js.map +1 -0
- package/dist/sharing/index.d.ts +11 -0
- package/dist/sharing/index.d.ts.map +1 -0
- package/dist/sharing/index.js +11 -0
- package/dist/sharing/index.js.map +1 -0
- package/dist/sharing/versioning.d.ts +32 -0
- package/dist/sharing/versioning.d.ts.map +1 -0
- package/dist/sharing/versioning.js +64 -0
- package/dist/sharing/versioning.js.map +1 -0
- package/dist/skills/index.d.ts +49 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +85 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +56 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +106 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-source.d.ts +63 -0
- package/dist/skills/skill-source.d.ts.map +1 -0
- package/dist/skills/skill-source.js +199 -0
- package/dist/skills/skill-source.js.map +1 -0
- package/dist/tools/index.d.ts +87 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +419 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/normalize-eol.d.ts +6 -0
- package/dist/utils/normalize-eol.d.ts.map +1 -0
- package/dist/utils/normalize-eol.js +8 -0
- package/dist/utils/normalize-eol.js.map +1 -0
- package/package.json +115 -39
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M6-13: Release candidate build & validation
|
|
3
|
+
* Handles release manifest creation, validation, and release notes generation.
|
|
4
|
+
*
|
|
5
|
+
* @module build/release
|
|
6
|
+
*/
|
|
7
|
+
import { createHash } from 'node:crypto';
|
|
8
|
+
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
9
|
+
import { parseConventionalCommit } from './versioning.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Release creation
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Compute the SHA-256 hash of a buffer or string.
|
|
15
|
+
*/
|
|
16
|
+
export function computeSha256(data) {
|
|
17
|
+
return createHash('sha256').update(data).digest('hex');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build a ReleaseArtifact from a file path.
|
|
21
|
+
* Returns null if the file does not exist.
|
|
22
|
+
*/
|
|
23
|
+
export function buildArtifact(name, filePath) {
|
|
24
|
+
if (!existsSync(filePath))
|
|
25
|
+
return null;
|
|
26
|
+
const content = readFileSync(filePath);
|
|
27
|
+
const stat = statSync(filePath);
|
|
28
|
+
return {
|
|
29
|
+
name,
|
|
30
|
+
path: filePath,
|
|
31
|
+
size: stat.size,
|
|
32
|
+
sha256: computeSha256(content),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create a release manifest from a ReleaseConfig.
|
|
37
|
+
*
|
|
38
|
+
* @param config - Release configuration
|
|
39
|
+
* @param artifactPaths - Optional map of artifact name → file path
|
|
40
|
+
* @returns Release manifest
|
|
41
|
+
*/
|
|
42
|
+
export function createRelease(config, artifactPaths) {
|
|
43
|
+
const artifacts = [];
|
|
44
|
+
if (artifactPaths) {
|
|
45
|
+
for (const [name, filePath] of Object.entries(artifactPaths)) {
|
|
46
|
+
const artifact = buildArtifact(name, filePath);
|
|
47
|
+
if (artifact) {
|
|
48
|
+
artifacts.push(artifact);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
version: config.version,
|
|
54
|
+
channel: config.channel,
|
|
55
|
+
artifacts,
|
|
56
|
+
timestamp: new Date().toISOString(),
|
|
57
|
+
changelog: '',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Validation
|
|
62
|
+
// ============================================================================
|
|
63
|
+
const SEMVER_RE = /^\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*)?$/;
|
|
64
|
+
/**
|
|
65
|
+
* Validate a release manifest for correctness.
|
|
66
|
+
*
|
|
67
|
+
* @param manifest - Release manifest to validate
|
|
68
|
+
* @returns Array of validation errors (empty if valid)
|
|
69
|
+
*/
|
|
70
|
+
export function validateRelease(manifest) {
|
|
71
|
+
const errors = [];
|
|
72
|
+
// Version
|
|
73
|
+
if (!manifest.version) {
|
|
74
|
+
errors.push({ field: 'version', message: 'Version is required', severity: 'error' });
|
|
75
|
+
}
|
|
76
|
+
else if (!SEMVER_RE.test(manifest.version)) {
|
|
77
|
+
errors.push({ field: 'version', message: `Invalid semver version: ${manifest.version}`, severity: 'error' });
|
|
78
|
+
}
|
|
79
|
+
// Channel
|
|
80
|
+
const validChannels = ['stable', 'rc', 'beta', 'alpha'];
|
|
81
|
+
if (!manifest.channel) {
|
|
82
|
+
errors.push({ field: 'channel', message: 'Channel is required', severity: 'error' });
|
|
83
|
+
}
|
|
84
|
+
else if (!validChannels.includes(manifest.channel)) {
|
|
85
|
+
errors.push({ field: 'channel', message: `Invalid channel: ${manifest.channel}`, severity: 'error' });
|
|
86
|
+
}
|
|
87
|
+
// Channel / version consistency
|
|
88
|
+
if (manifest.channel === 'stable' && manifest.version.includes('-')) {
|
|
89
|
+
errors.push({
|
|
90
|
+
field: 'version',
|
|
91
|
+
message: 'Stable releases must not have prerelease suffixes',
|
|
92
|
+
severity: 'error',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (manifest.channel !== 'stable' && !manifest.version.includes('-')) {
|
|
96
|
+
errors.push({
|
|
97
|
+
field: 'version',
|
|
98
|
+
message: `Non-stable channel "${manifest.channel}" should have a prerelease suffix`,
|
|
99
|
+
severity: 'warning',
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Timestamp
|
|
103
|
+
if (!manifest.timestamp) {
|
|
104
|
+
errors.push({ field: 'timestamp', message: 'Timestamp is required', severity: 'error' });
|
|
105
|
+
}
|
|
106
|
+
else if (isNaN(Date.parse(manifest.timestamp))) {
|
|
107
|
+
errors.push({ field: 'timestamp', message: 'Timestamp is not a valid ISO date', severity: 'error' });
|
|
108
|
+
}
|
|
109
|
+
// Artifacts
|
|
110
|
+
if (!Array.isArray(manifest.artifacts)) {
|
|
111
|
+
errors.push({ field: 'artifacts', message: 'Artifacts must be an array', severity: 'error' });
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
for (let i = 0; i < manifest.artifacts.length; i++) {
|
|
115
|
+
const a = manifest.artifacts[i];
|
|
116
|
+
if (!a.name) {
|
|
117
|
+
errors.push({ field: `artifacts[${i}].name`, message: 'Artifact name is required', severity: 'error' });
|
|
118
|
+
}
|
|
119
|
+
if (!a.path) {
|
|
120
|
+
errors.push({ field: `artifacts[${i}].path`, message: 'Artifact path is required', severity: 'error' });
|
|
121
|
+
}
|
|
122
|
+
if (typeof a.size !== 'number' || a.size < 0) {
|
|
123
|
+
errors.push({ field: `artifacts[${i}].size`, message: 'Artifact size must be a non-negative number', severity: 'error' });
|
|
124
|
+
}
|
|
125
|
+
if (!a.sha256 || !/^[a-f0-9]{64}$/.test(a.sha256)) {
|
|
126
|
+
errors.push({ field: `artifacts[${i}].sha256`, message: 'Artifact sha256 must be a valid 64-char hex string', severity: 'error' });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Duplicate names
|
|
130
|
+
const names = manifest.artifacts.map((a) => a.name);
|
|
131
|
+
const dupes = names.filter((n, i) => names.indexOf(n) !== i);
|
|
132
|
+
if (dupes.length > 0) {
|
|
133
|
+
errors.push({ field: 'artifacts', message: `Duplicate artifact names: ${[...new Set(dupes)].join(', ')}`, severity: 'warning' });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Changelog (warning only)
|
|
137
|
+
if (!manifest.changelog) {
|
|
138
|
+
errors.push({ field: 'changelog', message: 'Changelog is empty', severity: 'warning' });
|
|
139
|
+
}
|
|
140
|
+
return errors;
|
|
141
|
+
}
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// Release notes generation
|
|
144
|
+
// ============================================================================
|
|
145
|
+
/**
|
|
146
|
+
* Generate release notes markdown from a manifest and commit list.
|
|
147
|
+
*/
|
|
148
|
+
export function generateReleaseNotes(manifest, commits) {
|
|
149
|
+
const lines = [];
|
|
150
|
+
const date = manifest.timestamp ? manifest.timestamp.slice(0, 10) : new Date().toISOString().slice(0, 10);
|
|
151
|
+
lines.push(`# ${manifest.version} (${date})`);
|
|
152
|
+
lines.push('');
|
|
153
|
+
if (manifest.channel !== 'stable') {
|
|
154
|
+
lines.push(`> **${manifest.channel.toUpperCase()}** release — not recommended for production use.`);
|
|
155
|
+
lines.push('');
|
|
156
|
+
}
|
|
157
|
+
// Group commits by type
|
|
158
|
+
const groups = {};
|
|
159
|
+
const breaking = [];
|
|
160
|
+
for (const commit of commits) {
|
|
161
|
+
const parsed = parseConventionalCommit(commit.message);
|
|
162
|
+
if (parsed.breaking) {
|
|
163
|
+
breaking.push(`- ${parsed.description} (${commit.sha.slice(0, 7)})`);
|
|
164
|
+
}
|
|
165
|
+
const key = parsed.type;
|
|
166
|
+
if (!groups[key])
|
|
167
|
+
groups[key] = [];
|
|
168
|
+
groups[key].push({ description: parsed.description, sha: commit.sha });
|
|
169
|
+
}
|
|
170
|
+
if (breaking.length > 0) {
|
|
171
|
+
lines.push('## ⚠ Breaking Changes');
|
|
172
|
+
lines.push('');
|
|
173
|
+
lines.push(...breaking);
|
|
174
|
+
lines.push('');
|
|
175
|
+
}
|
|
176
|
+
const headings = {
|
|
177
|
+
feat: '## Features',
|
|
178
|
+
fix: '## Bug Fixes',
|
|
179
|
+
perf: '## Performance',
|
|
180
|
+
refactor: '## Refactoring',
|
|
181
|
+
docs: '## Documentation',
|
|
182
|
+
chore: '## Chores',
|
|
183
|
+
test: '## Tests',
|
|
184
|
+
ci: '## CI',
|
|
185
|
+
};
|
|
186
|
+
for (const [type, heading] of Object.entries(headings)) {
|
|
187
|
+
const items = groups[type];
|
|
188
|
+
if (!items || items.length === 0)
|
|
189
|
+
continue;
|
|
190
|
+
lines.push(heading);
|
|
191
|
+
lines.push('');
|
|
192
|
+
for (const item of items) {
|
|
193
|
+
lines.push(`- ${item.description} (${item.sha.slice(0, 7)})`);
|
|
194
|
+
}
|
|
195
|
+
lines.push('');
|
|
196
|
+
}
|
|
197
|
+
// Artifacts section
|
|
198
|
+
if (manifest.artifacts.length > 0) {
|
|
199
|
+
lines.push('## Artifacts');
|
|
200
|
+
lines.push('');
|
|
201
|
+
lines.push('| Name | Size | SHA-256 |');
|
|
202
|
+
lines.push('|------|------|---------|');
|
|
203
|
+
for (const a of manifest.artifacts) {
|
|
204
|
+
const sizeKb = (a.size / 1024).toFixed(1);
|
|
205
|
+
lines.push(`| ${a.name} | ${sizeKb} KB | \`${a.sha256.slice(0, 12)}…\` |`);
|
|
206
|
+
}
|
|
207
|
+
lines.push('');
|
|
208
|
+
}
|
|
209
|
+
return lines.join('\n').trimEnd() + '\n';
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Release checklist
|
|
213
|
+
// ============================================================================
|
|
214
|
+
/**
|
|
215
|
+
* Get the release checklist with default items.
|
|
216
|
+
* Each item's check function can be evaluated to determine pass/fail.
|
|
217
|
+
*/
|
|
218
|
+
export function getReleaseChecklist(manifest) {
|
|
219
|
+
const items = [
|
|
220
|
+
{
|
|
221
|
+
name: 'Version is valid semver',
|
|
222
|
+
check: () => manifest ? SEMVER_RE.test(manifest.version) : false,
|
|
223
|
+
required: true,
|
|
224
|
+
status: 'skip',
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
name: 'Channel is set',
|
|
228
|
+
check: () => manifest ? !!manifest.channel : false,
|
|
229
|
+
required: true,
|
|
230
|
+
status: 'skip',
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
name: 'Timestamp is present',
|
|
234
|
+
check: () => manifest ? !!manifest.timestamp && !isNaN(Date.parse(manifest.timestamp)) : false,
|
|
235
|
+
required: true,
|
|
236
|
+
status: 'skip',
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: 'At least one artifact',
|
|
240
|
+
check: () => manifest ? manifest.artifacts.length > 0 : false,
|
|
241
|
+
required: false,
|
|
242
|
+
status: 'skip',
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
name: 'Changelog is non-empty',
|
|
246
|
+
check: () => manifest ? !!manifest.changelog : false,
|
|
247
|
+
required: false,
|
|
248
|
+
status: 'skip',
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
name: 'All artifact hashes are valid',
|
|
252
|
+
check: () => {
|
|
253
|
+
if (!manifest)
|
|
254
|
+
return false;
|
|
255
|
+
return manifest.artifacts.every((a) => /^[a-f0-9]{64}$/.test(a.sha256));
|
|
256
|
+
},
|
|
257
|
+
required: true,
|
|
258
|
+
status: 'skip',
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
name: 'No duplicate artifact names',
|
|
262
|
+
check: () => {
|
|
263
|
+
if (!manifest)
|
|
264
|
+
return false;
|
|
265
|
+
const names = manifest.artifacts.map((a) => a.name);
|
|
266
|
+
return new Set(names).size === names.length;
|
|
267
|
+
},
|
|
268
|
+
required: true,
|
|
269
|
+
status: 'skip',
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
name: 'Version matches channel',
|
|
273
|
+
check: () => {
|
|
274
|
+
if (!manifest)
|
|
275
|
+
return false;
|
|
276
|
+
if (manifest.channel === 'stable')
|
|
277
|
+
return !manifest.version.includes('-');
|
|
278
|
+
return manifest.version.includes('-');
|
|
279
|
+
},
|
|
280
|
+
required: false,
|
|
281
|
+
status: 'skip',
|
|
282
|
+
},
|
|
283
|
+
];
|
|
284
|
+
// Evaluate checks
|
|
285
|
+
for (const item of items) {
|
|
286
|
+
try {
|
|
287
|
+
item.status = item.check() ? 'pass' : 'fail';
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
item.status = 'fail';
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return items;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=release.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/build/release.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M4-10: Version stamping & CHANGELOG generation
|
|
3
|
+
* Conventional commits parsing, version bumping, and changelog output.
|
|
4
|
+
*/
|
|
5
|
+
export interface CommitInfo {
|
|
6
|
+
sha: string;
|
|
7
|
+
message: string;
|
|
8
|
+
author: string;
|
|
9
|
+
date: string;
|
|
10
|
+
type: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ConventionalCommit {
|
|
13
|
+
type: string;
|
|
14
|
+
scope: string | null;
|
|
15
|
+
description: string;
|
|
16
|
+
breaking: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse a conventional commit message into structured parts.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseConventionalCommit(message: string): ConventionalCommit;
|
|
22
|
+
/**
|
|
23
|
+
* Bump a semver version string by the given increment type.
|
|
24
|
+
*/
|
|
25
|
+
export declare function bumpVersion(current: string, type: 'major' | 'minor' | 'patch' | 'prerelease'): string;
|
|
26
|
+
/**
|
|
27
|
+
* Stamp a version string into the specified file contents.
|
|
28
|
+
* Returns an array of { file, content } with the version replaced.
|
|
29
|
+
*/
|
|
30
|
+
export declare function stampVersion(version: string, files: string[]): {
|
|
31
|
+
file: string;
|
|
32
|
+
content: string;
|
|
33
|
+
}[];
|
|
34
|
+
/**
|
|
35
|
+
* Generate a CHANGELOG entry from a list of conventional commits.
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateChangelog(commits: CommitInfo[], currentVersion: string): string;
|
|
38
|
+
//# sourceMappingURL=versioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/build/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAkB3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,CA4BrG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAKlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAmDvF"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M4-10: Version stamping & CHANGELOG generation
|
|
3
|
+
* Conventional commits parsing, version bumping, and changelog output.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse a conventional commit message into structured parts.
|
|
7
|
+
*/
|
|
8
|
+
export function parseConventionalCommit(message) {
|
|
9
|
+
const line = message.split('\n')[0].trim();
|
|
10
|
+
// Match: type(scope)!: description or type!: description or type: description
|
|
11
|
+
const match = line.match(/^(\w+)(?:\(([^)]*)\))?(!)?\s*:\s*(.+)$/);
|
|
12
|
+
if (!match) {
|
|
13
|
+
return { type: 'other', scope: null, description: line, breaking: false };
|
|
14
|
+
}
|
|
15
|
+
const [, type, scope, bang, description] = match;
|
|
16
|
+
const breaking = bang === '!' || /^BREAKING[ -]CHANGE\b/i.test(message);
|
|
17
|
+
return {
|
|
18
|
+
type: type.toLowerCase(),
|
|
19
|
+
scope: scope ?? null,
|
|
20
|
+
description: description.trim(),
|
|
21
|
+
breaking,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Bump a semver version string by the given increment type.
|
|
26
|
+
*/
|
|
27
|
+
export function bumpVersion(current, type) {
|
|
28
|
+
// Strip leading 'v' if present
|
|
29
|
+
const stripped = current.startsWith('v') ? current.slice(1) : current;
|
|
30
|
+
const prereleaseMatch = stripped.match(/^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z]+)\.(\d+))?$/);
|
|
31
|
+
if (!prereleaseMatch) {
|
|
32
|
+
throw new Error(`Invalid semver version: ${current}`);
|
|
33
|
+
}
|
|
34
|
+
let [, majorStr, minorStr, patchStr, preTag, preNum] = prereleaseMatch;
|
|
35
|
+
let major = parseInt(majorStr, 10);
|
|
36
|
+
let minor = parseInt(minorStr, 10);
|
|
37
|
+
let patch = parseInt(patchStr, 10);
|
|
38
|
+
switch (type) {
|
|
39
|
+
case 'major':
|
|
40
|
+
return `${major + 1}.0.0`;
|
|
41
|
+
case 'minor':
|
|
42
|
+
return `${major}.${minor + 1}.0`;
|
|
43
|
+
case 'patch':
|
|
44
|
+
return `${major}.${minor}.${patch + 1}`;
|
|
45
|
+
case 'prerelease': {
|
|
46
|
+
if (preTag && preNum !== undefined) {
|
|
47
|
+
return `${major}.${minor}.${patch}-${preTag}.${parseInt(preNum, 10) + 1}`;
|
|
48
|
+
}
|
|
49
|
+
return `${major}.${minor}.${patch + 1}-alpha.0`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Stamp a version string into the specified file contents.
|
|
55
|
+
* Returns an array of { file, content } with the version replaced.
|
|
56
|
+
*/
|
|
57
|
+
export function stampVersion(version, files) {
|
|
58
|
+
return files.map(file => ({
|
|
59
|
+
file,
|
|
60
|
+
content: version,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Generate a CHANGELOG entry from a list of conventional commits.
|
|
65
|
+
*/
|
|
66
|
+
export function generateChangelog(commits, currentVersion) {
|
|
67
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
68
|
+
const lines = [];
|
|
69
|
+
lines.push(`## ${currentVersion} (${date})`);
|
|
70
|
+
lines.push('');
|
|
71
|
+
const groups = {};
|
|
72
|
+
const breaking = [];
|
|
73
|
+
for (const commit of commits) {
|
|
74
|
+
const parsed = parseConventionalCommit(commit.message);
|
|
75
|
+
if (parsed.breaking) {
|
|
76
|
+
breaking.push(`- ${parsed.description} (${commit.sha.slice(0, 7)})`);
|
|
77
|
+
}
|
|
78
|
+
const key = parsed.type;
|
|
79
|
+
if (!groups[key])
|
|
80
|
+
groups[key] = [];
|
|
81
|
+
groups[key].push({ scope: parsed.scope, description: parsed.description, sha: commit.sha });
|
|
82
|
+
}
|
|
83
|
+
if (breaking.length > 0) {
|
|
84
|
+
lines.push('### ⚠ BREAKING CHANGES');
|
|
85
|
+
lines.push('');
|
|
86
|
+
lines.push(...breaking);
|
|
87
|
+
lines.push('');
|
|
88
|
+
}
|
|
89
|
+
const headings = {
|
|
90
|
+
feat: '### Features',
|
|
91
|
+
fix: '### Bug Fixes',
|
|
92
|
+
perf: '### Performance',
|
|
93
|
+
refactor: '### Refactoring',
|
|
94
|
+
docs: '### Documentation',
|
|
95
|
+
chore: '### Chores',
|
|
96
|
+
test: '### Tests',
|
|
97
|
+
ci: '### CI',
|
|
98
|
+
};
|
|
99
|
+
for (const [type, heading] of Object.entries(headings)) {
|
|
100
|
+
const items = groups[type];
|
|
101
|
+
if (!items || items.length === 0)
|
|
102
|
+
continue;
|
|
103
|
+
lines.push(heading);
|
|
104
|
+
lines.push('');
|
|
105
|
+
for (const item of items) {
|
|
106
|
+
const scopeStr = item.scope ? `**${item.scope}:** ` : '';
|
|
107
|
+
lines.push(`- ${scopeStr}${item.description} (${item.sha.slice(0, 7)})`);
|
|
108
|
+
}
|
|
109
|
+
lines.push('');
|
|
110
|
+
}
|
|
111
|
+
return lines.join('\n').trimEnd() + '\n';
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=versioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/build/versioning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Casting Engine v1 (M3-2, Issue #138)
|
|
3
|
+
*
|
|
4
|
+
* Generates themed agent personas from a universe template.
|
|
5
|
+
* Each CastMember maps to an agent role with name, personality, and backstory.
|
|
6
|
+
*/
|
|
7
|
+
export type AgentRole = 'lead' | 'developer' | 'tester' | 'prompt-engineer' | 'security' | 'devops' | 'designer' | 'scribe' | 'reviewer';
|
|
8
|
+
export type UniverseId = 'usual-suspects' | 'oceans-eleven' | 'custom';
|
|
9
|
+
export interface CastMember {
|
|
10
|
+
/** Character name from the universe */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Agent role this character fills */
|
|
13
|
+
role: AgentRole;
|
|
14
|
+
/** One-line personality trait */
|
|
15
|
+
personality: string;
|
|
16
|
+
/** Short backstory for system-prompt injection */
|
|
17
|
+
backstory: string;
|
|
18
|
+
/** Display name: "Name — Role" */
|
|
19
|
+
displayName: string;
|
|
20
|
+
}
|
|
21
|
+
export interface CastingConfig {
|
|
22
|
+
/** Universe theme to draw characters from */
|
|
23
|
+
universe: UniverseId;
|
|
24
|
+
/** Desired team size (clamped to available characters) */
|
|
25
|
+
teamSize?: number;
|
|
26
|
+
/** Roles that must be filled */
|
|
27
|
+
requiredRoles?: AgentRole[];
|
|
28
|
+
/** Custom character names (only for universe = 'custom') */
|
|
29
|
+
customNames?: Record<AgentRole, string>;
|
|
30
|
+
}
|
|
31
|
+
interface UniverseCharacter {
|
|
32
|
+
name: string;
|
|
33
|
+
personality: string;
|
|
34
|
+
backstory: string;
|
|
35
|
+
preferredRoles: AgentRole[];
|
|
36
|
+
}
|
|
37
|
+
interface UniverseTemplate {
|
|
38
|
+
id: UniverseId;
|
|
39
|
+
label: string;
|
|
40
|
+
characters: UniverseCharacter[];
|
|
41
|
+
}
|
|
42
|
+
export declare class CastingEngine {
|
|
43
|
+
/** List available universe IDs. */
|
|
44
|
+
getUniverses(): UniverseId[];
|
|
45
|
+
/** Get a universe template by ID. */
|
|
46
|
+
getUniverse(id: UniverseId): UniverseTemplate | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Cast a team of agents from a universe.
|
|
49
|
+
*
|
|
50
|
+
* Roles are filled by best-fit characters (preferredRoles match).
|
|
51
|
+
* Required roles are guaranteed to be present.
|
|
52
|
+
* Team size is clamped to available characters.
|
|
53
|
+
*/
|
|
54
|
+
castTeam(config: CastingConfig): CastMember[];
|
|
55
|
+
private castCustomTeam;
|
|
56
|
+
private findBestFit;
|
|
57
|
+
private toCastMember;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=casting-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"casting-engine.d.ts","sourceRoot":"","sources":["../../src/casting/casting-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,WAAW,GACX,QAAQ,GACR,iBAAiB,GACjB,UAAU,GACV,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,EAAE,UAAU,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CACzC;AAID,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAmID,qBAAa,aAAa;IACxB,mCAAmC;IACnC,YAAY,IAAI,UAAU,EAAE;IAI5B,qCAAqC;IACrC,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS;IAIzD;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,EAAE;IA+C7C,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,YAAY;CASrB"}
|