自动同步: 2026-07-01 02:10

This commit is contained in:
2026-07-01 02:10:07 +08:00
parent d20bd4cfab
commit 489a0835e9
4162 changed files with 1010609 additions and 12590 deletions
+4
View File
@@ -0,0 +1,4 @@
import { ArkErrors } from "arktype";
export type ArkValidator<T> = (data: unknown) => T | ArkErrors;
export declare function parseArk<T>(schema: ArkValidator<T>, data: unknown, label: string): T;
export declare function formatArkErrors(errors: ArkErrors): string;
+26
View File
@@ -0,0 +1,26 @@
import { ArkErrors } from "arktype";
export function parseArk(schema, data, label) {
const result = schema(data);
if (result instanceof ArkErrors) {
throw new Error(`${label}: ${formatArkErrors(result)}`);
}
return result;
}
export function formatArkErrors(errors) {
const parts = [];
for (const error of errors) {
if (parts.length >= 3)
break;
const path = Array.isArray(error.path) ? error.path.join(".") : "";
const location = path ? `${path}: ` : "";
const description = typeof error.description === "string"
? error.description
: "invalid value";
parts.push(`${location}${description}`);
}
if (errors.count > parts.length) {
parts.push(`+${errors.count - parts.length} more`);
}
return parts.join("; ");
}
//# sourceMappingURL=ark.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"ark.js","sourceRoot":"","sources":["../../src/schema/ark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpC,MAAM,UAAU,QAAQ,CAAI,MAAuB,EAAE,IAAa,EAAE,KAAa;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,MAAM,YAAY,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,MAAM;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,WAAW,GACf,OAAQ,KAAmC,CAAC,WAAW,KAAK,QAAQ;YAClE,CAAC,CAAG,KAAiC,CAAC,WAAsB;YAC5D,CAAC,CAAC,eAAe,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,WAAW,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
+8
View File
@@ -0,0 +1,8 @@
export type { ArkValidator } from "./ark.js";
export { parseArk } from "./ark.js";
export { PLATFORM_SKILL_LICENSE, PLATFORM_SKILL_LICENSE_SUMMARY } from "./license.js";
export * from "./openclawContract.js";
export * from "./packages.js";
export { ApiRoutes, LegacyApiRoutes } from "./routes.js";
export * from "./schemas.js";
export * from "./textFiles.js";
+8
View File
@@ -0,0 +1,8 @@
export { parseArk } from "./ark.js";
export { PLATFORM_SKILL_LICENSE, PLATFORM_SKILL_LICENSE_SUMMARY } from "./license.js";
export * from "./openclawContract.js";
export * from "./packages.js";
export { ApiRoutes, LegacyApiRoutes } from "./routes.js";
export * from "./schemas.js";
export * from "./textFiles.js";
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AACtF,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
+4
View File
@@ -0,0 +1,4 @@
export declare const PLATFORM_SKILL_LICENSE: "MIT-0";
export declare const PLATFORM_SKILL_LICENSE_NAME: "MIT No Attribution";
export declare const PLATFORM_SKILL_LICENSE_SUMMARY: "Free to use, modify, and redistribute. No attribution required.";
export declare const PLATFORM_SKILL_LICENSE_URL: "https://spdx.org/licenses/MIT-0.html";
+5
View File
@@ -0,0 +1,5 @@
export const PLATFORM_SKILL_LICENSE = "MIT-0";
export const PLATFORM_SKILL_LICENSE_NAME = "MIT No Attribution";
export const PLATFORM_SKILL_LICENSE_SUMMARY = "Free to use, modify, and redistribute. No attribution required.";
export const PLATFORM_SKILL_LICENSE_URL = "https://spdx.org/licenses/MIT-0.html";
//# sourceMappingURL=license.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/schema/license.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAgB,CAAC;AACvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,oBAA6B,CAAC;AACzE,MAAM,CAAC,MAAM,8BAA8B,GACzC,iEAA0E,CAAC;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,sCAA+C,CAAC"}
@@ -0,0 +1,14 @@
import type { PackageCompatibility } from "./packages.js";
export type OpenClawExternalPluginValidationIssue = {
fieldPath: string;
message: string;
};
export type OpenClawExternalCodePluginValidation = {
compatibility?: PackageCompatibility;
issues: OpenClawExternalPluginValidationIssue[];
};
export declare const OPENCLAW_EXTERNAL_CODE_PLUGIN_REQUIRED_FIELD_PATHS: readonly ["openclaw.compat.pluginApi", "openclaw.build.openclawVersion"];
export declare function normalizeOpenClawExternalPluginCompatibility(packageJson: unknown): PackageCompatibility | undefined;
export declare function listMissingOpenClawExternalCodePluginFieldPaths(packageJson: unknown): string[];
export declare function validateOpenClawExternalCodePluginPackageJson(packageJson: unknown): OpenClawExternalCodePluginValidation;
export declare function validateOpenClawExternalCodePluginPackageContents(packageJson: unknown, filePaths: Iterable<string>): OpenClawExternalCodePluginValidation;
+125
View File
@@ -0,0 +1,125 @@
export const OPENCLAW_EXTERNAL_CODE_PLUGIN_REQUIRED_FIELD_PATHS = [
"openclaw.compat.pluginApi",
"openclaw.build.openclawVersion",
];
const COMPILED_RUNTIME_EXTENSIONS = [".js", ".mjs", ".cjs"];
function isRecord(value) {
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
}
function getTrimmedString(value) {
return typeof value === "string" && value.trim() ? value.trim() : undefined;
}
function getTrimmedStringArray(value) {
return Array.isArray(value)
? value
.filter((entry) => typeof entry === "string" && entry.trim().length > 0)
.map((entry) => entry.trim())
: [];
}
function normalizePackagePath(value) {
return value.trim().replaceAll("\\", "/").replace(/^\.\//, "");
}
function isTypeScriptRuntimeEntry(value) {
return /\.(?:c|m)?ts$/u.test(value);
}
function compiledRuntimeCandidates(entry) {
const normalized = normalizePackagePath(entry);
const withoutExtension = normalized.replace(/\.[^.]+$/u, "");
const distBase = normalized.startsWith("src/")
? `dist/${normalized.slice("src/".length).replace(/\.[^.]+$/u, "")}`
: `dist/${withoutExtension}`;
return [
...COMPILED_RUNTIME_EXTENSIONS.map((ext) => `${distBase}${ext}`),
...COMPILED_RUNTIME_EXTENSIONS.map((ext) => `${withoutExtension}${ext}`),
];
}
function readOpenClawBlock(packageJson) {
const root = isRecord(packageJson) ? packageJson : undefined;
const openclaw = isRecord(root?.openclaw) ? root.openclaw : undefined;
const compat = isRecord(openclaw?.compat) ? openclaw.compat : undefined;
const build = isRecord(openclaw?.build) ? openclaw.build : undefined;
const install = isRecord(openclaw?.install) ? openclaw.install : undefined;
return { root, openclaw, compat, build, install };
}
export function normalizeOpenClawExternalPluginCompatibility(packageJson) {
const { root, compat, build, install } = readOpenClawBlock(packageJson);
const version = getTrimmedString(root?.version);
const minHostVersion = getTrimmedString(install?.minHostVersion);
const compatibility = {};
const pluginApi = getTrimmedString(compat?.pluginApi);
if (pluginApi) {
compatibility.pluginApiRange = pluginApi;
}
const minGatewayVersion = getTrimmedString(compat?.minGatewayVersion) ?? minHostVersion;
if (minGatewayVersion) {
compatibility.minGatewayVersion = minGatewayVersion;
}
const builtWithOpenClawVersion = getTrimmedString(build?.openclawVersion) ?? version;
if (builtWithOpenClawVersion) {
compatibility.builtWithOpenClawVersion = builtWithOpenClawVersion;
}
const pluginSdkVersion = getTrimmedString(build?.pluginSdkVersion);
if (pluginSdkVersion) {
compatibility.pluginSdkVersion = pluginSdkVersion;
}
return Object.keys(compatibility).length > 0 ? compatibility : undefined;
}
export function listMissingOpenClawExternalCodePluginFieldPaths(packageJson) {
const { compat, build } = readOpenClawBlock(packageJson);
const missing = [];
if (!getTrimmedString(compat?.pluginApi)) {
missing.push("openclaw.compat.pluginApi");
}
if (!getTrimmedString(build?.openclawVersion)) {
missing.push("openclaw.build.openclawVersion");
}
return missing;
}
export function validateOpenClawExternalCodePluginPackageJson(packageJson) {
const issues = listMissingOpenClawExternalCodePluginFieldPaths(packageJson).map((fieldPath) => ({
fieldPath,
message: `${fieldPath} is required for external code plugins published to ClawHub.`,
}));
return {
compatibility: normalizeOpenClawExternalPluginCompatibility(packageJson),
issues,
};
}
export function validateOpenClawExternalCodePluginPackageContents(packageJson, filePaths) {
const validation = validateOpenClawExternalCodePluginPackageJson(packageJson);
const { root, openclaw } = readOpenClawBlock(packageJson);
const name = getTrimmedString(root?.name) ?? "package";
const packageFiles = new Set(Array.from(filePaths, normalizePackagePath));
const sourceEntries = getTrimmedStringArray(openclaw?.extensions);
const runtimeEntries = getTrimmedStringArray(openclaw?.runtimeExtensions);
if (runtimeEntries.length > 0 && runtimeEntries.length !== sourceEntries.length) {
validation.issues.push({
fieldPath: "openclaw.runtimeExtensions",
message: `${name} openclaw.runtimeExtensions length (${runtimeEntries.length}) must match openclaw.extensions length (${sourceEntries.length}).`,
});
}
for (const runtimeEntry of runtimeEntries) {
const normalized = normalizePackagePath(runtimeEntry);
if (!packageFiles.has(normalized)) {
validation.issues.push({
fieldPath: "openclaw.runtimeExtensions",
message: `${name} declares openclaw.runtimeExtensions entry ./${normalized}, but that file is missing from the package. Build first and publish a local folder or .tgz, or include the runtime file in the GitHub ref.`,
});
}
}
if (runtimeEntries.length === 0) {
for (const sourceEntry of sourceEntries) {
if (!isTypeScriptRuntimeEntry(sourceEntry))
continue;
const candidates = compiledRuntimeCandidates(sourceEntry);
if (candidates.some((candidate) => packageFiles.has(candidate)))
continue;
validation.issues.push({
fieldPath: "openclaw.extensions",
message: `${name} requires compiled runtime output for TypeScript entry ${sourceEntry}: expected ${candidates.map((candidate) => `./${candidate}`).join(", ")}`,
});
}
}
return validation;
}
//# sourceMappingURL=openclawContract.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+719
View File
@@ -0,0 +1,719 @@
import { type } from "arktype";
import { CliPublishFileSchema, PublishSourceSchema } from "./schemas.js";
export const PackageFamilySchema = type('"skill"|"code-plugin"|"bundle-plugin"');
export const PackageChannelSchema = type('"official"|"community"|"private"');
export const PackageVerificationTierSchema = type('"structural"|"source-linked"|"provenance-verified"|"rebuild-verified"');
export const PackageVerificationScopeSchema = type('"artifact-only"|"dependency-graph-aware"');
export const PackageCompatibilitySchema = type({
pluginApiRange: "string?",
builtWithOpenClawVersion: "string?",
pluginSdkVersion: "string?",
minGatewayVersion: "string?",
});
export const PluginManifestSummarySchema = type({
schemaVersion: "number",
compatibility: PackageCompatibilitySchema.optional(),
manifestIdentity: type({
name: "string?",
description: "string?",
version: "string?",
family: "string?",
}).optional(),
configFields: type({
name: "string",
description: "string?",
required: "boolean",
sensitive: "boolean",
}).array(),
mcpServers: type({
name: "string",
}).array(),
bundledSkills: type({
name: "string",
description: "string?",
rootPath: "string",
skillMdPath: "string",
sha256: "string",
size: "number",
}).array(),
});
export const PackageVerificationSummarySchema = type({
tier: PackageVerificationTierSchema,
scope: PackageVerificationScopeSchema,
summary: "string?",
sourceRepo: "string?",
sourceCommit: "string?",
sourceTag: "string?",
// Path of the package directory inside the source repo (e.g.
// "examples/openclaw-plugin"). Forward slash separated, no leading or
// trailing slash. Used when resolving relative README asset URLs against
// raw.githubusercontent.com so that subdirectory packages render correctly.
// Absent or "." means the package lives at the repo root.
sourcePath: "string?",
hasProvenance: "boolean?",
scanStatus: '"clean"|"suspicious"|"malicious"|"pending"|"not-run"?',
});
export const PackageStatsSchema = type({
downloads: "number",
installs: "number",
stars: "number",
versions: "number",
});
export const PackageArtifactKindSchema = type('"legacy-zip"|"npm-pack"');
export const PackageReleaseModerationStateSchema = type('"approved"|"quarantined"|"revoked"');
export const PackageReportStatusSchema = type('"open"|"confirmed"|"dismissed"');
export const PackageReportFinalActionSchema = type('"none"|"quarantine"|"revoke"');
export const PackageReportListStatusSchema = PackageReportStatusSchema.or('"all"');
export const PackageAppealStatusSchema = type('"open"|"accepted"|"rejected"');
export const PackageAppealFinalActionSchema = type('"none"|"approve"');
export const PackageAppealListStatusSchema = PackageAppealStatusSchema.or('"all"');
export const PackageOfficialMigrationPhaseSchema = type('"planned"|"published"|"clawpack-ready"|"legacy-zip-only"|"metadata-ready"|"blocked"|"ready-for-openclaw"');
export const PackageOfficialMigrationListPhaseSchema = PackageOfficialMigrationPhaseSchema.or('"all"');
export const PackageArtifactSummarySchema = type({
kind: PackageArtifactKindSchema,
sha256: "string?",
size: "number?",
format: "string?",
npmIntegrity: "string?",
npmShasum: "string?",
npmTarballName: "string?",
npmUnpackedSize: "number?",
npmFileCount: "number?",
source: '"clawhub"?',
artifactKind: PackageArtifactKindSchema.optional(),
artifactSha256: "string?",
packageName: "string?",
version: "string?",
});
export const PackagePublishArtifactSchema = type({
kind: '"npm-pack"',
storageId: "string",
sha256: "string",
size: "number",
format: '"tgz"',
npmIntegrity: "string",
npmShasum: "string",
npmTarballName: "string",
npmUnpackedSize: "number",
npmFileCount: "number",
});
export const PackageVtAnalysisSchema = type({
status: "string",
verdict: "string?",
analysis: "string?",
source: "string?",
checkedAt: "number",
});
export const PackageSkillSpectorIssueSchema = type({
issueId: "string",
category: "string?",
pattern: "string?",
severity: "string",
confidence: "number?",
file: "string?",
startLine: "number?",
endLine: "number?",
explanation: "string",
remediation: "string?",
finding: "string?",
codeSnippet: "string?",
});
export const PackageSkillSpectorAnalysisSchema = type({
status: "string",
score: "number?",
severity: "string?",
recommendation: "string?",
issueCount: "number",
issues: PackageSkillSpectorIssueSchema.array(),
scannerVersion: "string?",
summary: "string?",
error: "string?",
checkedAt: "number",
});
export const PackageLlmAnalysisDimensionSchema = type({
name: "string",
label: "string",
rating: "string",
detail: "string",
});
export const PackageLlmAnalysisSchema = type({
status: "string",
verdict: "string?",
confidence: "string?",
summary: "string?",
dimensions: PackageLlmAnalysisDimensionSchema.array().optional(),
guidance: "string?",
findings: "string?",
agenticRiskFindings: "unknown[]?",
riskSummary: "unknown?",
model: "string?",
checkedAt: "number",
});
export const PackageStaticFindingSchema = type({
code: "string",
severity: "string",
file: "string",
line: "number",
message: "string",
evidence: "string",
});
export const PackageStaticScanSchema = type({
status: "string",
reasonCodes: "string[]",
findings: PackageStaticFindingSchema.array(),
summary: "string",
engineVersion: "string",
checkedAt: "number",
});
export const BundlePublishMetadataSchema = type({
id: "string?",
format: "string?",
hostTargets: "string[]?",
});
export const PackageTrustedPublisherSchema = type({
provider: '"github-actions"',
repository: "string",
repositoryId: "string",
repositoryOwner: "string",
repositoryOwnerId: "string",
workflowFilename: "string",
environment: "string?",
});
export const MAX_PACKAGE_MULTIPART_BYTES = 18 * 1024 * 1024;
export const MAX_PACKAGE_CLAWPACK_BYTES = 120 * 1024 * 1024;
const PACKAGE_MULTIPART_FIXED_OVERHEAD_BYTES = 4096;
const PACKAGE_MULTIPART_PART_OVERHEAD_BYTES = 1024;
export function estimatePackageMultipartUploadBytes(input) {
return (PACKAGE_MULTIPART_FIXED_OVERHEAD_BYTES +
estimateMultipartStringPartBytes("payload", input.payloadJson) +
input.files.reduce((sum, file) => sum + estimateMultipartFilePartBytes(input.fileFieldName, file), 0));
}
export function isPackageMultipartUploadTooLarge(input) {
return estimatePackageMultipartUploadBytes(input) > MAX_PACKAGE_MULTIPART_BYTES;
}
export function getPackageMultipartSizeError() {
return "Package upload exceeds 18MB multipart upload limit";
}
function estimateMultipartStringPartBytes(fieldName, value) {
return PACKAGE_MULTIPART_PART_OVERHEAD_BYTES + utf8ByteLength(fieldName) + utf8ByteLength(value);
}
function estimateMultipartFilePartBytes(fieldName, file) {
return (file.size +
PACKAGE_MULTIPART_PART_OVERHEAD_BYTES +
utf8ByteLength(fieldName) +
utf8ByteLength(file.name) +
utf8ByteLength(file.type ?? ""));
}
function utf8ByteLength(value) {
let bytes = 0;
for (let index = 0; index < value.length; index += 1) {
const codePoint = value.codePointAt(index);
if (codePoint === undefined)
continue;
if (codePoint > 0xffff)
index += 1;
if (codePoint <= 0x7f) {
bytes += 1;
}
else if (codePoint <= 0x7ff) {
bytes += 2;
}
else if (codePoint <= 0xffff) {
bytes += 3;
}
else {
bytes += 4;
}
}
return bytes;
}
const PackagePublishMetadataFields = {
name: "string",
displayName: "string?",
ownerHandle: "string?",
family: PackageFamilySchema,
version: "string",
changelog: "string",
manualOverrideReason: "string?",
channel: PackageChannelSchema.optional(),
tags: "string[]?",
categories: "string[]?",
topics: "string[]?",
source: PublishSourceSchema.optional(),
bundle: BundlePublishMetadataSchema.optional(),
};
export const PackagePublishMetadataSchema = type({
"+": "reject",
...PackagePublishMetadataFields,
});
export const ServerPackagePublishRequestSchema = type({
"+": "reject",
...PackagePublishMetadataFields,
artifact: PackagePublishArtifactSchema.optional(),
files: CliPublishFileSchema.array(),
});
export const PackageListItemSchema = type({
name: "string",
displayName: "string",
family: PackageFamilySchema,
runtimeId: "string|null?",
channel: PackageChannelSchema,
isOfficial: "boolean",
summary: "string|null?",
icon: "string|null?",
ownerHandle: "string|null?",
createdAt: "number",
updatedAt: "number",
latestVersion: "string|null?",
categories: "string[]?",
topics: "string[]?",
verificationTier: PackageVerificationTierSchema.or("null").optional(),
stats: PackageStatsSchema.optional(),
});
export const ApiV1PackageListResponseSchema = type({
items: PackageListItemSchema.array(),
nextCursor: "string|null",
});
export const ApiV1PackageSearchResponseSchema = type({
results: type({
score: "number",
package: PackageListItemSchema,
}).array(),
});
export const ApiV1PackageResponseSchema = type({
package: type({
name: "string",
displayName: "string",
family: PackageFamilySchema,
runtimeId: "string|null?",
channel: PackageChannelSchema,
isOfficial: "boolean",
summary: "string|null?",
icon: "string|null?",
ownerHandle: "string|null?",
createdAt: "number",
updatedAt: "number",
latestVersion: "string|null?",
categories: "string[]?",
topics: "string[]?",
tags: "unknown",
compatibility: PackageCompatibilitySchema.or("null").optional(),
pluginManifestSummary: PluginManifestSummarySchema.or("null").optional(),
verification: PackageVerificationSummarySchema.or("null").optional(),
artifact: PackageArtifactSummarySchema.or("null").optional(),
scanStatus: '"clean"|"suspicious"|"malicious"|"pending"|"not-run"?',
stats: PackageStatsSchema.optional(),
}).or("null"),
owner: type({
handle: "string|null",
displayName: "string|null?",
image: "string|null?",
}).or("null"),
});
export const ApiV1PackageVersionListResponseSchema = type({
items: type({
version: "string",
createdAt: "number",
changelog: "string",
distTags: "string[]?",
}).array(),
nextCursor: "string|null",
});
export const ApiV1PackageVersionResponseSchema = type({
package: type({
name: "string",
displayName: "string",
family: PackageFamilySchema,
}).or("null"),
version: type({
version: "string",
createdAt: "number",
changelog: "string",
distTags: "string[]?",
files: "unknown",
compatibility: PackageCompatibilitySchema.or("null").optional(),
pluginManifestSummary: PluginManifestSummarySchema.or("null").optional(),
verification: PackageVerificationSummarySchema.or("null").optional(),
artifact: PackageArtifactSummarySchema.or("null").optional(),
// Deprecated compatibility hash for exact /download ZIP bytes; use artifact.sha256 for installs.
sha256hash: "string|null?",
vtAnalysis: PackageVtAnalysisSchema.or("null").optional(),
skillSpectorAnalysis: PackageSkillSpectorAnalysisSchema.or("null").optional(),
llmAnalysis: PackageLlmAnalysisSchema.or("null").optional(),
staticScan: PackageStaticScanSchema.or("null").optional(),
}).or("null"),
});
export const ApiV1PackageArtifactResponseSchema = type({
package: type({
name: "string",
displayName: "string",
family: PackageFamilySchema,
}),
version: "string",
artifact: type({
kind: PackageArtifactKindSchema,
sha256: "string?",
size: "number?",
format: "string?",
npmIntegrity: "string?",
npmShasum: "string?",
npmTarballName: "string?",
npmUnpackedSize: "number?",
npmFileCount: "number?",
downloadUrl: "string",
tarballUrl: "string?",
legacyDownloadUrl: "string?",
source: '"clawhub"?',
artifactKind: PackageArtifactKindSchema.optional(),
artifactSha256: "string?",
packageName: "string?",
version: "string?",
}),
});
export const ApiV1PackageSecurityResponseSchema = type({
package: type({
name: "string",
displayName: "string",
family: PackageFamilySchema,
}),
release: type({
releaseId: "string",
version: "string",
artifactKind: PackageArtifactKindSchema.or("null").optional(),
artifactSha256: "string?",
npmIntegrity: "string?",
npmShasum: "string?",
npmTarballName: "string?",
createdAt: "number",
}),
trust: type({
scanStatus: '"clean"|"suspicious"|"malicious"|"pending"|"not-run"',
moderationState: PackageReleaseModerationStateSchema.or("null").optional(),
blockedFromDownload: "boolean",
reasons: "string[]",
pending: "boolean",
stale: "boolean",
}),
});
export const PackageReleaseModerationRequestSchema = type({
state: PackageReleaseModerationStateSchema,
reason: "string",
});
export const PackageReportRequestSchema = type({
reason: "string",
version: "string?",
});
export const ApiV1PackageReportResponseSchema = type({
ok: "true",
reported: "boolean",
alreadyReported: "boolean",
packageId: "string",
releaseId: "string|null",
reportCount: "number",
});
export const PackageReportTriageRequestSchema = type({
status: PackageReportStatusSchema,
note: "string?",
finalAction: PackageReportFinalActionSchema.optional(),
});
export const PackageAppealRequestSchema = type({
version: "string",
message: "string",
});
export const ApiV1PackageAppealResponseSchema = type({
ok: "true",
submitted: "boolean",
alreadyOpen: "boolean",
appealId: "string",
packageId: "string",
releaseId: "string",
status: PackageAppealStatusSchema,
});
export const PackageAppealResolveRequestSchema = type({
status: PackageAppealStatusSchema,
note: "string?",
finalAction: PackageAppealFinalActionSchema.optional(),
});
export const ApiV1PackageAppealListResponseSchema = type({
items: type({
appealId: "string",
packageId: "string",
releaseId: "string",
name: "string",
displayName: "string",
family: PackageFamilySchema,
version: "string",
message: "string",
status: PackageAppealStatusSchema,
createdAt: "number",
submitter: type({
userId: "string",
handle: "string|null?",
displayName: "string|null?",
}),
resolvedAt: "number|null?",
resolvedBy: "string|null?",
resolutionNote: "string|null?",
actionTaken: PackageAppealFinalActionSchema.or("null").optional(),
}).array(),
nextCursor: "string|null",
done: "boolean",
});
export const ApiV1PackageAppealResolveResponseSchema = type({
ok: "true",
appealId: "string",
packageId: "string",
releaseId: "string",
status: PackageAppealStatusSchema,
actionTaken: PackageAppealFinalActionSchema.optional(),
});
export const ApiV1PackageReportListResponseSchema = type({
items: type({
reportId: "string",
packageId: "string",
releaseId: "string|null?",
name: "string",
displayName: "string",
family: PackageFamilySchema,
version: "string|null?",
reason: "string|null?",
status: PackageReportStatusSchema,
createdAt: "number",
reporter: type({
userId: "string",
handle: "string|null?",
displayName: "string|null?",
}),
triagedAt: "number|null?",
triagedBy: "string|null?",
triageNote: "string|null?",
actionTaken: PackageReportFinalActionSchema.or("null").optional(),
}).array(),
nextCursor: "string|null",
done: "boolean",
});
export const ApiV1PackageReportTriageResponseSchema = type({
ok: "true",
reportId: "string",
packageId: "string",
status: PackageReportStatusSchema,
reportCount: "number",
actionTaken: PackageReportFinalActionSchema.optional(),
});
export const ApiV1PackageModerationStatusResponseSchema = type({
package: type({
packageId: "string",
name: "string",
displayName: "string",
family: PackageFamilySchema,
channel: PackageChannelSchema,
isOfficial: "boolean",
reportCount: "number",
lastReportedAt: "number|null?",
scanStatus: '"clean"|"suspicious"|"malicious"|"pending"|"not-run"?',
}),
latestRelease: type({
releaseId: "string",
version: "string",
artifactKind: PackageArtifactKindSchema.or("null").optional(),
scanStatus: '"clean"|"suspicious"|"malicious"|"pending"|"not-run"',
moderationState: PackageReleaseModerationStateSchema.or("null").optional(),
moderationReason: "string|null?",
blockedFromDownload: "boolean",
reasons: "string[]",
createdAt: "number",
}).or("null"),
});
export const PackageReadinessCheckSchema = type({
id: "string",
label: "string",
status: '"pass"|"warn"|"fail"',
message: "string",
});
export const ApiV1PackageReadinessResponseSchema = type({
package: type({
name: "string",
displayName: "string",
family: PackageFamilySchema,
isOfficial: "boolean",
latestVersion: "string|null?",
}),
ready: "boolean",
checks: PackageReadinessCheckSchema.array(),
blockers: "string[]",
});
export const PackageTransferRequestSchema = type({
toOwner: "string",
reason: "string?",
});
export const ApiV1PackageTransferResponseSchema = type({
ok: "true",
packageId: "string",
name: "string",
ownerUserId: "string",
ownerPublisherId: "string?",
channel: PackageChannelSchema,
isOfficial: "boolean",
});
export const PackageRepairNameRequestSchema = type({
nextName: "string",
retireTarget: "boolean?",
owner: "string?",
reason: "string",
dryRun: "boolean?",
});
export const PackageRepairNamePackageSchema = type({
packageId: "string",
name: "string",
runtimeId: "string|null?",
ownerUserId: "string",
ownerPublisherId: "string|null?",
channel: PackageChannelSchema,
softDeletedAt: "number|null?",
});
export const PackageRepairNameOperationSchema = type({
action: '"retire-target"|"rename-source"|"transfer-owner"',
packageId: "string?",
from: "string?",
to: "string?",
owner: "string?",
});
export const ApiV1PackageRepairNameResponseSchema = type({
ok: "true",
dryRun: "boolean",
source: PackageRepairNamePackageSchema,
target: PackageRepairNamePackageSchema.or("null"),
retiredName: "string|null?",
operations: PackageRepairNameOperationSchema.array(),
});
export const PackageRepairRuntimeIdRequestSchema = type({
nextRuntimeId: "string",
reason: "string",
dryRun: "boolean?",
});
export const PackageRepairRuntimeIdOperationSchema = type({
action: '"repair-runtime-id"',
packageId: "string?",
from: "string|null?",
to: "string?",
});
export const ApiV1PackageRepairRuntimeIdResponseSchema = type({
ok: "true",
dryRun: "boolean",
source: PackageRepairNamePackageSchema,
operations: PackageRepairRuntimeIdOperationSchema.array(),
});
export const PackageOfficialMigrationUpsertRequestSchema = type({
bundledPluginId: "string",
packageName: "string",
owner: "string?",
sourceRepo: "string?",
sourcePath: "string?",
sourceCommit: "string?",
phase: PackageOfficialMigrationPhaseSchema.optional(),
blockers: "string[]?",
hostTargetsComplete: "boolean?",
scanClean: "boolean?",
moderationApproved: "boolean?",
runtimeBundlesReady: "boolean?",
notes: "string?",
});
export const PackageOfficialMigrationItemSchema = type({
migrationId: "string",
bundledPluginId: "string",
packageName: "string",
packageId: "string|null?",
owner: "string|null?",
sourceRepo: "string|null?",
sourcePath: "string|null?",
sourceCommit: "string|null?",
phase: PackageOfficialMigrationPhaseSchema,
blockers: "string[]",
hostTargetsComplete: "boolean",
scanClean: "boolean",
moderationApproved: "boolean",
runtimeBundlesReady: "boolean",
notes: "string|null?",
createdAt: "number",
updatedAt: "number",
});
export const ApiV1PackageOfficialMigrationListResponseSchema = type({
items: PackageOfficialMigrationItemSchema.array(),
nextCursor: "string|null",
done: "boolean",
});
export const ApiV1PackageOfficialMigrationResponseSchema = type({
ok: "true",
migration: PackageOfficialMigrationItemSchema,
});
export const PackageModerationQueueStatusSchema = type('"open"|"blocked"|"manual"|"all"');
export const ApiV1PackageModerationQueueResponseSchema = type({
items: type({
packageId: "string",
releaseId: "string",
name: "string",
displayName: "string",
family: PackageFamilySchema,
channel: PackageChannelSchema,
isOfficial: "boolean",
version: "string",
createdAt: "number",
artifactKind: PackageArtifactKindSchema.or("null").optional(),
scanStatus: '"clean"|"suspicious"|"malicious"|"pending"|"not-run"',
moderationState: PackageReleaseModerationStateSchema.or("null").optional(),
moderationReason: "string|null?",
sourceRepo: "string|null?",
sourceCommit: "string|null?",
reportCount: "number",
lastReportedAt: "number|null?",
reasons: "string[]",
}).array(),
nextCursor: "string|null",
done: "boolean",
});
export const ApiV1PackageReleaseModerationResponseSchema = type({
ok: "true",
packageId: "string",
releaseId: "string",
state: PackageReleaseModerationStateSchema,
scanStatus: '"clean"|"malicious"',
});
export const ApiV1PackagePublishResponseSchema = type({
ok: "true",
packageId: "string",
releaseId: "string",
inspectorFindings: type({
findingKind: '"warning"|"error"',
code: "string",
severity: "string?",
level: "string?",
issueClass: "string?",
message: "string",
authorRemediation: type({
summary: "string",
docsUrl: "string?",
}).optional(),
inspectorVersion: "string?",
targetOpenClawVersion: "string?",
})
.array()
.optional(),
});
export const PackageTrustedPublisherUpsertRequestSchema = type({
repository: "string",
workflowFilename: "string",
environment: "string?",
});
export const ApiV1PackageTrustedPublisherResponseSchema = type({
trustedPublisher: PackageTrustedPublisherSchema.or("null"),
});
export const PublishTokenMintRequestSchema = type({
packageName: "string",
version: "string",
githubOidcToken: "string",
});
export const ApiV1PublishTokenMintResponseSchema = type({
token: "string",
expiresAt: "number",
});
//# sourceMappingURL=packages.js.map
File diff suppressed because one or more lines are too long
+29
View File
@@ -0,0 +1,29 @@
export declare const LegacyApiRoutes: {
readonly download: "/api/download";
readonly search: "/api/search";
readonly skill: "/api/skill";
readonly skillResolve: "/api/skill/resolve";
readonly cliWhoami: "/api/cli/whoami";
readonly cliUploadUrl: "/api/cli/upload-url";
readonly cliPublish: "/api/cli/publish";
readonly cliTelemetryInstall: "/api/cli/telemetry/install";
readonly cliSkillDelete: "/api/cli/skill/delete";
readonly cliSkillUndelete: "/api/cli/skill/undelete";
};
export declare const ApiRoutes: {
readonly search: "/api/v1/search";
readonly resolve: "/api/v1/resolve";
readonly download: "/api/v1/download";
readonly publishTokenMint: "/api/v1/publish/token/mint";
readonly skills: "/api/v1/skills";
readonly skillScans: "/api/v1/skills/-/scan";
readonly packages: "/api/v1/packages";
readonly codePlugins: "/api/v1/code-plugins";
readonly bundlePlugins: "/api/v1/bundle-plugins";
readonly stars: "/api/v1/stars";
readonly transfers: "/api/v1/transfers";
readonly publishers: "/api/v1/publishers";
readonly users: "/api/v1/users";
readonly contentRights: "/api/v1/content-rights";
readonly whoami: "/api/v1/whoami";
};
+30
View File
@@ -0,0 +1,30 @@
export const LegacyApiRoutes = {
download: "/api/download",
search: "/api/search",
skill: "/api/skill",
skillResolve: "/api/skill/resolve",
cliWhoami: "/api/cli/whoami",
cliUploadUrl: "/api/cli/upload-url",
cliPublish: "/api/cli/publish",
cliTelemetryInstall: "/api/cli/telemetry/install",
cliSkillDelete: "/api/cli/skill/delete",
cliSkillUndelete: "/api/cli/skill/undelete",
};
export const ApiRoutes = {
search: "/api/v1/search",
resolve: "/api/v1/resolve",
download: "/api/v1/download",
publishTokenMint: "/api/v1/publish/token/mint",
skills: "/api/v1/skills",
skillScans: "/api/v1/skills/-/scan",
packages: "/api/v1/packages",
codePlugins: "/api/v1/code-plugins",
bundlePlugins: "/api/v1/bundle-plugins",
stars: "/api/v1/stars",
transfers: "/api/v1/transfers",
publishers: "/api/v1/publishers",
users: "/api/v1/users",
contentRights: "/api/v1/content-rights",
whoami: "/api/v1/whoami",
};
//# sourceMappingURL=routes.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/schema/routes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;IACnB,YAAY,EAAE,oBAAoB;IAClC,SAAS,EAAE,iBAAiB;IAC5B,YAAY,EAAE,qBAAqB;IACnC,UAAU,EAAE,kBAAkB;IAC9B,mBAAmB,EAAE,4BAA4B;IACjD,cAAc,EAAE,uBAAuB;IACvC,gBAAgB,EAAE,yBAAyB;CACnC,CAAC;AAEX,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,gBAAgB,EAAE,4BAA4B;IAC9C,MAAM,EAAE,gBAAgB;IACxB,UAAU,EAAE,uBAAuB;IACnC,QAAQ,EAAE,kBAAkB;IAC5B,WAAW,EAAE,sBAAsB;IACnC,aAAa,EAAE,wBAAwB;IACvC,KAAK,EAAE,eAAe;IACtB,SAAS,EAAE,mBAAmB;IAC9B,UAAU,EAAE,oBAAoB;IAChC,KAAK,EAAE,eAAe;IACtB,aAAa,EAAE,wBAAwB;IACvC,MAAM,EAAE,gBAAgB;CAChB,CAAC"}
+950
View File
@@ -0,0 +1,950 @@
import { type inferred } from "arktype";
export declare const GlobalConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
registry: string;
token?: string | undefined;
}, {}>;
export type GlobalConfig = (typeof GlobalConfigSchema)[inferred];
export declare const WellKnownConfigSchema: import("arktype/internal/variants/object.ts").ObjectType<{
apiBase: string;
authBase?: string | undefined;
minCliVersion?: string | undefined;
} | {
registry: string;
authBase?: string | undefined;
minCliVersion?: string | undefined;
}, {}>;
export type WellKnownConfig = (typeof WellKnownConfigSchema)[inferred];
export declare const LockfileSchema: import("arktype/internal/variants/object.ts").ObjectType<{
version: 1;
skills: {
[x: string]: {
version: string | null;
installedAt: number;
ownerHandle?: string | undefined;
pinned?: boolean | undefined;
pinReason?: string | undefined;
};
};
}, {}>;
export type Lockfile = (typeof LockfileSchema)[inferred];
export declare const ApiCliWhoamiResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
user: {
handle: string | null;
};
}, {}>;
export declare const ApiSearchResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
results: {
score: number;
slug?: string | undefined;
ownerHandle?: string | null | undefined;
displayName?: string | undefined;
version?: string | null | undefined;
}[];
}, {}>;
export declare const ApiSkillMetaResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
latestVersion?: {
version: string;
} | undefined;
skill?: unknown;
}, {}>;
export declare const ApiCliUploadUrlResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
uploadUrl: string;
uploadTicket: string;
}, {}>;
export declare const ApiUploadFileResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
storageId: string;
}, {}>;
export declare const CliPublishFileSchema: import("arktype/internal/variants/object.ts").ObjectType<{
path: string;
size: number;
storageId: string;
sha256: string;
contentType?: string | undefined;
}, {}>;
export type CliPublishFile = (typeof CliPublishFileSchema)[inferred];
export declare const PublishSourceSchema: import("arktype/internal/variants/object.ts").ObjectType<{
kind: "github";
url: string;
repo: string;
ref: string;
commit: string;
path: string;
importedAt: number;
}, {}>;
export declare const CliPublishRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
slug: string;
displayName: string;
version: string;
changelog: string;
files: {
path: string;
size: number;
storageId: string;
sha256: string;
contentType?: string | undefined;
}[];
ownerHandle?: string | undefined;
sourceOwnerHandle?: string | undefined;
migrateOwner?: boolean | undefined;
acceptLicenseTerms?: boolean | undefined;
tags?: string[] | undefined;
categories?: string[] | undefined;
topics?: string[] | undefined;
source?: {
kind: "github";
url: string;
repo: string;
ref: string;
commit: string;
path: string;
importedAt: number;
} | undefined;
forkOf?: {
slug: string;
ownerHandle?: string | undefined;
version?: string | undefined;
} | undefined;
}, {}>;
export type CliPublishRequest = (typeof CliPublishRequestSchema)[inferred];
export declare const ApiCliPublishResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
skillId: string;
versionId: string;
}, {}>;
export declare const CliSkillDeleteRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
slug: string;
reason?: string | undefined;
}, {}>;
export type CliSkillDeleteRequest = (typeof CliSkillDeleteRequestSchema)[inferred];
export declare const ApiCliSkillDeleteResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
slugReservedUntil?: number | undefined;
}, {}>;
export declare const ApiSkillResolveResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
match: {
version: string;
} | null;
latestVersion: {
version: string;
} | null;
}, {}>;
export declare const ApiV1SkillInstallResolveResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
slug: string;
installKind: "archive";
archive: {
version: string;
downloadUrl: string;
};
} | {
ok: true;
slug: string;
installKind: "github";
github: {
repo: string;
path: string;
commit: string;
contentHash: string;
sourceUrl: string;
};
} | {
ok: false;
slug: string;
reason: "archive_version_missing" | "github_source_missing" | "github_upstream_removed" | "github_upstream_missing" | "github_upstream_unknown" | "github_verification_pending" | "github_scan_failed";
message: string;
status: number;
}, {}>;
export type ApiV1SkillInstallResolveResponse = (typeof ApiV1SkillInstallResolveResponseSchema)[inferred];
export declare const CliTelemetryInstallRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
event: "install";
slug: string;
version?: string | undefined;
rootId?: string | undefined;
rootLabel?: string | undefined;
} | {
roots: {
rootId: string;
label: string;
skills: {
slug: string;
version?: string | null | undefined;
}[];
}[];
}, {}>;
export type CliTelemetryInstallRequest = (typeof CliTelemetryInstallRequestSchema)[inferred];
export declare const ApiCliTelemetryInstallResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
}, {}>;
export declare const ApiV1WhoamiResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
user: {
handle: string | null;
displayName?: string | null | undefined;
image?: string | null | undefined;
role?: "user" | "admin" | "moderator" | null | undefined;
};
}, {}>;
export declare const ApiV1UserSearchResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
items: {
userId: string;
handle: string | null;
displayName?: string | null | undefined;
name?: string | null | undefined;
role?: "user" | "admin" | "moderator" | null | undefined;
}[];
total: number;
}, {}>;
export declare const ApiV1PublisherCreateResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
publisherId: string;
handle: string;
created: true;
trusted: false;
}, {}>;
export type ApiV1PublisherCreateResponse = (typeof ApiV1PublisherCreateResponseSchema)[inferred];
export declare const ApiV1PublisherEnsureResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
publisherId: string;
handle: string;
created: boolean;
migrated: boolean;
trusted: boolean;
member?: {
userId: string;
handle: string;
role: "admin" | "owner" | "publisher";
} | undefined;
}, {}>;
export type ApiV1PublisherEnsureResponse = (typeof ApiV1PublisherEnsureResponseSchema)[inferred];
export declare const ApiV1PublisherRemoveMemberResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
publisherId: string;
handle: string;
removed: boolean;
member: {
userId: string;
handle: string;
role: "admin" | "owner" | "publisher";
};
}, {}>;
export type ApiV1PublisherRemoveMemberResponse = (typeof ApiV1PublisherRemoveMemberResponseSchema)[inferred];
export declare const ApiV1PublisherDeleteResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
publisherId: string;
handle: string;
dryRun: boolean;
deleted: boolean;
activeSkills: number;
activePackages: number;
memberCount: number;
}, {}>;
export type ApiV1PublisherDeleteResponse = (typeof ApiV1PublisherDeleteResponseSchema)[inferred];
export declare const ApiV1PublisherReclaimResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
publisherId: string;
handle: string;
dryRun: boolean;
hardDeleted: boolean;
activeSkills: number;
activePackages: number;
memberCount: number;
githubSources: number;
githubSourceContents: number;
officialPublisher: boolean;
confirmationToken: string;
}, {}>;
export type ApiV1PublisherReclaimResponse = (typeof ApiV1PublisherReclaimResponseSchema)[inferred];
export declare const ApiV1PublisherRecoveryResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
dryRun: boolean;
recovered: boolean;
publisherId: string;
handle: string;
previousUser: {
userId: string;
handle: string | null;
nextHandle: string | null;
githubProviderAccountId: string;
authAccountCount: number;
};
nextUser: {
userId: string;
handle: string | null;
nextHandle: string;
githubProviderAccountId: string;
authAccountCount: number;
};
retiredPersonalPublisher: {
publisherId: string;
handle: string;
skills: number;
packages: number;
githubSources: number;
} | null;
resourceOwnerMigration: {
limitPerTable: number;
skills: number;
skillSlugAliases: number;
packages: number;
packageInspectorWarnings: number;
githubSourcesChecked: number;
handleReservations: number;
};
identityVerified: boolean;
reason: string;
}, {}>;
export type ApiV1PublisherRecoveryResponse = (typeof ApiV1PublisherRecoveryResponseSchema)[inferred];
export declare const ApiV1OfficialPublisherListResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
items: {
officialPublisherId: string;
publisherId: string;
handle: string | null;
displayName: string | null;
kind: "user" | "org" | null;
active: boolean;
reason: string | null;
createdByUserId: string | null;
createdByHandle: string | null;
createdAt: number;
updatedAt: number;
}[];
}, {}>;
export type ApiV1OfficialPublisherListResponse = (typeof ApiV1OfficialPublisherListResponseSchema)[inferred];
export declare const ApiV1OfficialPublisherUpdateResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
publisherId: string;
handle: string;
added?: boolean | undefined;
removed?: boolean | undefined;
officialPublisherId?: string | undefined;
}, {}>;
export type ApiV1OfficialPublisherUpdateResponse = (typeof ApiV1OfficialPublisherUpdateResponseSchema)[inferred];
export declare const ApiV1StaffEmailSendResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
sent: true;
recipient: {
email: string;
userId?: string | undefined;
handle?: string | null | undefined;
};
subject: string;
template: string;
providerId: string | null;
}, {}>;
export type ApiV1StaffEmailSendResponse = (typeof ApiV1StaffEmailSendResponseSchema)[inferred];
export declare const ApiV1SearchResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
results: {
score: number;
slug?: string | undefined;
ownerHandle?: string | null | undefined;
displayName?: string | undefined;
summary?: string | null | undefined;
version?: string | null | undefined;
downloads?: number | undefined;
updatedAt?: number | undefined;
owner?: {
handle?: string | null | undefined;
displayName?: string | null | undefined;
image?: string | null | undefined;
} | null | undefined;
}[];
}, {}>;
export declare const ApiV1SkillListResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
items: {
slug: string;
displayName: string;
tags: unknown;
stats: unknown;
createdAt: number;
updatedAt: number;
summary?: string | null | undefined;
description?: string | null | undefined;
topics?: string[] | undefined;
latestVersion?: {
version: string;
createdAt: number;
changelog: string;
license?: "MIT-0" | null | undefined;
} | undefined;
metadata?: {
setup: {
key: string;
required: boolean;
}[];
os?: string[] | null | undefined;
systems?: string[] | null | undefined;
} | null | undefined;
}[];
nextCursor: string | null;
}, {}>;
export declare const ApiV1SkillResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
skill: {
slug: string;
displayName: string;
tags: unknown;
stats: unknown;
createdAt: number;
updatedAt: number;
summary?: string | null | undefined;
description?: string | null | undefined;
topics?: string[] | undefined;
} | null;
latestVersion: {
version: string;
createdAt: number;
changelog: string;
license?: "MIT-0" | null | undefined;
} | null;
owner: {
handle: string | null;
displayName?: string | null | undefined;
image?: string | null | undefined;
} | null;
metadata?: {
setup: {
key: string;
required: boolean;
}[];
os?: string[] | null | undefined;
systems?: string[] | null | undefined;
} | null | undefined;
moderation?: {
isSuspicious: boolean;
isMalwareBlocked: boolean;
verdict?: "clean" | "suspicious" | "malicious" | undefined;
reasonCodes?: string[] | undefined;
updatedAt?: number | null | undefined;
engineVersion?: string | null | undefined;
summary?: string | null | undefined;
} | null | undefined;
}, {}>;
export declare const ApiV1SkillModerationResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
moderation: {
isSuspicious: boolean;
isMalwareBlocked: boolean;
verdict: "clean" | "suspicious" | "malicious";
reasonCodes: string[];
evidence: {
code: string;
severity: "info" | "warn" | "critical";
file: string;
line: number;
message: string;
evidence: string;
}[];
updatedAt?: number | null | undefined;
engineVersion?: string | null | undefined;
summary?: string | null | undefined;
legacyReason?: string | null | undefined;
} | null;
}, {}>;
export declare const SkillReportStatusSchema: import("arktype/internal/variants/string.ts").StringType<"open" | "confirmed" | "dismissed", {}>;
export type SkillReportStatus = (typeof SkillReportStatusSchema)[inferred];
export declare const SkillReportFinalActionSchema: import("arktype/internal/variants/string.ts").StringType<"none" | "hide", {}>;
export type SkillReportFinalAction = (typeof SkillReportFinalActionSchema)[inferred];
export declare const SkillReportListStatusSchema: import("arktype/internal/variants/string.ts").StringType<"open" | "confirmed" | "dismissed" | "all", {}>;
export type SkillReportListStatus = (typeof SkillReportListStatusSchema)[inferred];
export declare const SkillAppealStatusSchema: import("arktype/internal/variants/string.ts").StringType<"open" | "accepted" | "rejected", {}>;
export type SkillAppealStatus = (typeof SkillAppealStatusSchema)[inferred];
export declare const SkillAppealFinalActionSchema: import("arktype/internal/variants/string.ts").StringType<"none" | "restore", {}>;
export type SkillAppealFinalAction = (typeof SkillAppealFinalActionSchema)[inferred];
export declare const SkillAppealListStatusSchema: import("arktype/internal/variants/string.ts").StringType<"open" | "all" | "accepted" | "rejected", {}>;
export type SkillAppealListStatus = (typeof SkillAppealListStatusSchema)[inferred];
export declare const SkillAppealRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
message: string;
version?: string | undefined;
}, {}>;
export type SkillAppealRequest = (typeof SkillAppealRequestSchema)[inferred];
export declare const ApiV1SkillReportResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
reported: boolean;
alreadyReported: boolean;
reportId: string;
skillId: string;
reportCount: number;
}, {}>;
export type ApiV1SkillReportResponse = (typeof ApiV1SkillReportResponseSchema)[inferred];
export declare const ApiV1SkillAppealResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
submitted: boolean;
alreadyOpen: boolean;
appealId: string;
skillId: string;
status: "open" | "accepted" | "rejected";
}, {}>;
export type ApiV1SkillAppealResponse = (typeof ApiV1SkillAppealResponseSchema)[inferred];
export declare const SkillReportTriageRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
status: "open" | "confirmed" | "dismissed";
note?: string | undefined;
finalAction?: "none" | "hide" | undefined;
}, {}>;
export type SkillReportTriageRequest = (typeof SkillReportTriageRequestSchema)[inferred];
export declare const SkillAppealResolveRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
status: "open" | "accepted" | "rejected";
note?: string | undefined;
finalAction?: "none" | "restore" | undefined;
}, {}>;
export type SkillAppealResolveRequest = (typeof SkillAppealResolveRequestSchema)[inferred];
export declare const ApiV1SkillReportListResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
items: {
reportId: string;
skillId: string;
slug: string;
displayName: string;
status: "open" | "confirmed" | "dismissed";
createdAt: number;
reporter: {
userId: string;
handle?: string | null | undefined;
displayName?: string | null | undefined;
};
skillVersionId?: string | null | undefined;
version?: string | null | undefined;
reason?: string | null | undefined;
triagedAt?: number | null | undefined;
triagedBy?: string | null | undefined;
triageNote?: string | null | undefined;
actionTaken?: "none" | "hide" | null | undefined;
}[];
nextCursor: string | null;
done: boolean;
}, {}>;
export type ApiV1SkillReportListResponse = (typeof ApiV1SkillReportListResponseSchema)[inferred];
export declare const ApiV1SkillReportTriageResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
reportId: string;
skillId: string;
status: "open" | "confirmed" | "dismissed";
reportCount: number;
actionTaken?: "none" | "hide" | undefined;
}, {}>;
export type ApiV1SkillReportTriageResponse = (typeof ApiV1SkillReportTriageResponseSchema)[inferred];
export declare const ApiV1SkillAppealListResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
items: {
appealId: string;
skillId: string;
slug: string;
displayName: string;
message: string;
status: "open" | "accepted" | "rejected";
createdAt: number;
submitter: {
userId: string;
handle?: string | null | undefined;
displayName?: string | null | undefined;
};
skillVersionId?: string | null | undefined;
version?: string | null | undefined;
resolvedAt?: number | null | undefined;
resolvedBy?: string | null | undefined;
resolutionNote?: string | null | undefined;
actionTaken?: "none" | "restore" | null | undefined;
}[];
nextCursor: string | null;
done: boolean;
}, {}>;
export type ApiV1SkillAppealListResponse = (typeof ApiV1SkillAppealListResponseSchema)[inferred];
export declare const ApiV1SkillAppealResolveResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
appealId: string;
skillId: string;
status: "open" | "accepted" | "rejected";
actionTaken?: "none" | "restore" | undefined;
}, {}>;
export type ApiV1SkillAppealResolveResponse = (typeof ApiV1SkillAppealResolveResponseSchema)[inferred];
export declare const ApiV1SkillRescanResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
slug: string;
version: string;
skillId: string;
skillVersionId: string;
jobId: string;
alreadyQueued: boolean;
} | {
ok: true;
slug: string;
version: string;
skillId: string;
githubContentHash: string;
scheduled: boolean;
alreadyQueued: boolean;
jobId?: string | undefined;
}, {}>;
export type ApiV1SkillRescanResponse = (typeof ApiV1SkillRescanResponseSchema)[inferred];
export declare const ApiV1SkillScanStatusSchema: import("arktype/internal/variants/string.ts").StringType<"queued" | "running" | "succeeded" | "failed", {}>;
export type ApiV1SkillScanStatus = (typeof ApiV1SkillScanStatusSchema)[inferred];
export declare const ApiV1SkillScanSourceSchema: import("arktype/internal/variants/object.ts").ObjectType<{
kind: "upload";
} | {
kind: "published";
slug: string;
version?: string | undefined;
}, {}>;
export type ApiV1SkillScanSource = (typeof ApiV1SkillScanSourceSchema)[inferred];
export declare const ApiV1SkillScanSubmitRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
source: {
kind: "upload";
} | {
kind: "published";
slug: string;
version?: string | undefined;
};
update?: boolean | undefined;
}, {}>;
export type ApiV1SkillScanSubmitRequest = (typeof ApiV1SkillScanSubmitRequestSchema)[inferred];
export declare const ApiV1SkillScanQueueSchema: import("arktype/internal/variants/object.ts").ObjectType<{
queuedAhead: number;
position: number | null;
running: number;
note: string;
queuedAheadIsEstimate?: boolean | undefined;
runningIsEstimate?: boolean | undefined;
}, {}>;
export type ApiV1SkillScanQueue = (typeof ApiV1SkillScanQueueSchema)[inferred];
export declare const ApiV1SkillScanSubmitResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
scanId: string;
status: "queued" | "running" | "succeeded" | "failed";
sourceKind: "upload" | "published";
update: boolean;
jobId?: string | undefined;
alreadyQueued?: boolean | undefined;
queue?: {
queuedAhead: number;
position: number | null;
running: number;
note: string;
queuedAheadIsEstimate?: boolean | undefined;
runningIsEstimate?: boolean | undefined;
} | undefined;
}, {}>;
export type ApiV1SkillScanSubmitResponse = (typeof ApiV1SkillScanSubmitResponseSchema)[inferred];
export declare const ApiV1SkillScanStatusResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
scanId: string;
status: "queued" | "running" | "succeeded" | "failed";
sourceKind: "upload" | "published";
update: boolean;
createdAt: number;
updatedAt: number;
jobId?: string | undefined;
writtenBack?: boolean | undefined;
artifact?: unknown;
report?: unknown;
queue?: {
queuedAhead: number;
position: number | null;
running: number;
note: string;
queuedAheadIsEstimate?: boolean | undefined;
runningIsEstimate?: boolean | undefined;
} | undefined;
lastError?: string | undefined;
completedAt?: number | undefined;
}, {}>;
export type ApiV1SkillScanStatusResponse = (typeof ApiV1SkillScanStatusResponseSchema)[inferred];
export declare const ApiV1SkillScanDownloadManifestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
scanId: string;
sourceKind: "upload" | "published";
update: boolean;
status: "queued" | "running" | "succeeded" | "failed";
createdAt: number;
updatedAt: number;
artifact?: unknown;
completedAt?: number | undefined;
writtenBack?: boolean | undefined;
}, {}>;
export type ApiV1SkillScanDownloadManifest = (typeof ApiV1SkillScanDownloadManifestSchema)[inferred];
export declare const ApiV1SkillBulkRescanBatchRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
mode?: "all-active-latest" | undefined;
cursor?: string | null | undefined;
batchSize?: number | undefined;
dryRun?: boolean | undefined;
}, {}>;
export type ApiV1SkillBulkRescanBatchRequest = (typeof ApiV1SkillBulkRescanBatchRequestSchema)[inferred];
export declare const ApiV1SkillBulkRescanBatchResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
mode: "all-active-latest";
queued: number;
alreadyQueued: number;
skipped: number;
jobIds: string[];
nextCursor: string | null;
done: boolean;
sampleSlugs: string[];
}, {}>;
export type ApiV1SkillBulkRescanBatchResponse = (typeof ApiV1SkillBulkRescanBatchResponseSchema)[inferred];
export declare const ApiV1SkillBulkRescanStatusRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
jobIds: string[];
}, {}>;
export type ApiV1SkillBulkRescanStatusRequest = (typeof ApiV1SkillBulkRescanStatusRequestSchema)[inferred];
export declare const ApiV1SkillBulkRescanStatusResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
total: number;
queued: number;
running: number;
succeeded: number;
failed: number;
missing: number;
terminal: number;
done: boolean;
failedJobIds: string[];
}, {}>;
export type ApiV1SkillBulkRescanStatusResponse = (typeof ApiV1SkillBulkRescanStatusResponseSchema)[inferred];
export declare const ApiV1SkillScanBatchRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
mode?: "all-active-latest" | undefined;
cursor?: string | null | undefined;
batchSize?: number | undefined;
dryRun?: boolean | undefined;
}, {}>;
export type ApiV1SkillScanBatchRequest = (typeof ApiV1SkillScanBatchRequestSchema)[inferred];
export declare const ApiV1SkillScanBatchResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
mode: "all-active-latest";
queued: number;
alreadyQueued: number;
skipped: number;
jobIds: string[];
nextCursor: string | null;
done: boolean;
sampleSlugs: string[];
}, {}>;
export type ApiV1SkillScanBatchResponse = (typeof ApiV1SkillScanBatchResponseSchema)[inferred];
export declare const ApiV1SkillScanBatchStatusRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
jobIds: string[];
}, {}>;
export type ApiV1SkillScanBatchStatusRequest = (typeof ApiV1SkillScanBatchStatusRequestSchema)[inferred];
export declare const ApiV1SkillScanBatchStatusResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
total: number;
queued: number;
running: number;
succeeded: number;
failed: number;
missing: number;
terminal: number;
done: boolean;
failedJobIds: string[];
}, {}>;
export type ApiV1SkillScanBatchStatusResponse = (typeof ApiV1SkillScanBatchStatusResponseSchema)[inferred];
export declare const ApiV1SkillRepairVtPendingRequestSchema: import("arktype/internal/variants/object.ts").ObjectType<{
cursor?: string | null | undefined;
batchSize?: number | undefined;
concurrency?: number | undefined;
dryRun?: boolean | undefined;
}, {}>;
export type ApiV1SkillRepairVtPendingRequest = (typeof ApiV1SkillRepairVtPendingRequestSchema)[inferred];
export declare const ApiV1SkillRepairVtPendingResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
dryRun: boolean;
total: number;
wouldUpdate: number;
updated: number;
noResults: number;
noDecisiveStats: number;
errors: number;
done: boolean;
cursor: string | null;
statusCounts: {
[x: string]: number;
};
sampleUpdated: {
slug: string;
status: string;
}[];
}, {}>;
export type ApiV1SkillRepairVtPendingResponse = (typeof ApiV1SkillRepairVtPendingResponseSchema)[inferred];
export declare const ApiV1SkillVersionListResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
items: {
version: string;
createdAt: number;
changelog: string;
changelogSource?: "user" | "auto" | null | undefined;
}[];
nextCursor: string | null;
}, {}>;
export declare const ApiV1SkillVersionResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
version: {
version: string;
createdAt: number;
changelog: string;
changelogSource?: "user" | "auto" | null | undefined;
license?: "MIT-0" | null | undefined;
files?: unknown;
} | null;
skill: {
slug: string;
displayName: string;
} | null;
}, {}>;
export declare const ApiV1SkillResolveResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
match: {
version: string;
} | null;
latestVersion: {
version: string;
} | null;
}, {}>;
export declare const ApiV1SkillVerifyResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
schema: "clawhub.skill.verify.v1";
ok: boolean;
decision: "fail" | "pass";
reasons: string[];
slug: string;
displayName: string;
pageUrl: string;
publisherHandle: string | null;
publisherDisplayName: string | null;
publisherProfileUrl: string | null;
version: string;
resolvedFrom: "version" | "tag" | "latest";
tag: string | null;
createdAt: number;
card: unknown;
artifact: unknown;
provenance: unknown;
security: unknown;
signature: unknown;
}, {}>;
export declare const ApiV1PublishResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
skillId: string;
versionId: string;
}, {}>;
export declare const ApiV1DeleteResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
slugReservedUntil?: number | undefined;
}, {}>;
export declare const ApiV1SkillRenameResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
slug: string;
previousSlug: string;
}, {}>;
export declare const ApiV1SkillMergeResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
sourceSlug: string;
targetSlug: string;
}, {}>;
export declare const ApiV1TransferRequestResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
transferId?: string | undefined;
toUserHandle?: string | undefined;
toPublisherHandle?: string | undefined;
skillSlug?: string | undefined;
expiresAt?: number | undefined;
transferred?: boolean | undefined;
}, {}>;
export declare const ApiV1TransferDecisionResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
skillSlug?: string | undefined;
}, {}>;
export declare const ApiV1TransferListResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
transfers: {
_id: string;
skill: {
_id: string;
slug: string;
displayName: string;
};
requestedAt: number;
expiresAt: number;
fromUser?: {
_id: string;
handle: string | null;
displayName: string | null;
} | undefined;
toUser?: {
_id: string;
handle: string | null;
displayName: string | null;
} | undefined;
message?: string | undefined;
}[];
}, {}>;
export declare const ApiV1BanUserResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
alreadyBanned: boolean;
deletedSkills: number;
}, {}>;
export declare const ApiV1UnbanUserResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
alreadyUnbanned: boolean;
restoredSkills?: number | undefined;
}, {}>;
export declare const ApiV1ReclassifyBanResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
dryRun: boolean;
userId: string;
handle: string | null;
previousReason: string | null;
nextReason: string;
changed: boolean;
}, {}>;
export declare const ApiV1SetRoleResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
role: "user" | "admin" | "moderator";
}, {}>;
export declare const ApiV1StarResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
starred: boolean;
alreadyStarred: boolean;
}, {}>;
export declare const ApiV1UnstarResponseSchema: import("arktype/internal/variants/object.ts").ObjectType<{
ok: true;
unstarred: boolean;
alreadyUnstarred: boolean;
}, {}>;
export declare const SkillInstallSpecSchema: import("arktype/internal/variants/object.ts").ObjectType<{
kind: "brew" | "node" | "go" | "uv";
id?: string | undefined;
label?: string | undefined;
bins?: string[] | undefined;
formula?: string | undefined;
tap?: string | undefined;
package?: string | undefined;
module?: string | undefined;
}, {}>;
export type SkillInstallSpec = (typeof SkillInstallSpecSchema)[inferred];
export declare const ClawdisRequiresSchema: import("arktype/internal/variants/object.ts").ObjectType<{
bins?: string[] | undefined;
anyBins?: string[] | undefined;
env?: string[] | undefined;
config?: string[] | undefined;
}, {}>;
export type ClawdisRequires = (typeof ClawdisRequiresSchema)[inferred];
export declare const EnvVarDeclarationSchema: import("arktype/internal/variants/object.ts").ObjectType<{
name: string;
required?: boolean | undefined;
description?: string | undefined;
}, {}>;
export type EnvVarDeclaration = (typeof EnvVarDeclarationSchema)[inferred];
export declare const ClawdisSkillMetadataSchema: import("arktype/internal/variants/object.ts").ObjectType<{
always?: boolean | undefined;
skillKey?: string | undefined;
primaryEnv?: string | undefined;
emoji?: string | undefined;
homepage?: string | undefined;
os?: string[] | undefined;
requires?: {
bins?: string[] | undefined;
anyBins?: string[] | undefined;
env?: string[] | undefined;
config?: string[] | undefined;
} | undefined;
install?: {
kind: "brew" | "node" | "go" | "uv";
id?: string | undefined;
label?: string | undefined;
bins?: string[] | undefined;
formula?: string | undefined;
tap?: string | undefined;
package?: string | undefined;
module?: string | undefined;
}[] | undefined;
envVars?: {
name: string;
required?: boolean | undefined;
description?: string | undefined;
}[] | undefined;
}, {}>;
export type ClawdisSkillMetadata = (typeof ClawdisSkillMetadataSchema)[inferred];
+847
View File
@@ -0,0 +1,847 @@
import { type } from "arktype";
export const GlobalConfigSchema = type({
registry: "string",
token: "string?",
});
export const WellKnownConfigSchema = type({
apiBase: "string",
authBase: "string?",
minCliVersion: "string?",
}).or({
registry: "string",
authBase: "string?",
minCliVersion: "string?",
});
export const LockfileSchema = type({
version: "1",
skills: {
"[string]": {
version: "string|null",
installedAt: "number",
ownerHandle: "string?",
pinned: "boolean?",
pinReason: "string?",
},
},
});
export const ApiCliWhoamiResponseSchema = type({
user: {
handle: "string|null",
},
});
export const ApiSearchResponseSchema = type({
results: type({
slug: "string?",
ownerHandle: "string|null?",
displayName: "string?",
version: "string|null?",
score: "number",
}).array(),
});
export const ApiSkillMetaResponseSchema = type({
latestVersion: type({
version: "string",
}).optional(),
skill: "unknown|null?",
});
export const ApiCliUploadUrlResponseSchema = type({
uploadUrl: "string",
uploadTicket: "string",
});
export const ApiUploadFileResponseSchema = type({
storageId: "string",
});
export const CliPublishFileSchema = type({
path: "string",
size: "number",
storageId: "string",
sha256: "string",
contentType: "string?",
});
export const PublishSourceSchema = type({
kind: '"github"',
url: "string",
repo: "string",
ref: "string",
commit: "string",
path: "string",
importedAt: "number",
});
export const CliPublishRequestSchema = type({
slug: "string",
displayName: "string",
ownerHandle: "string?",
sourceOwnerHandle: "string?",
migrateOwner: "boolean?",
version: "string",
changelog: "string",
acceptLicenseTerms: "boolean?",
tags: "string[]?",
categories: "string[]?",
topics: "string[]?",
source: PublishSourceSchema.optional(),
forkOf: type({
slug: "string",
ownerHandle: "string?",
version: "string?",
}).optional(),
files: CliPublishFileSchema.array(),
});
export const ApiCliPublishResponseSchema = type({
ok: "true",
skillId: "string",
versionId: "string",
});
export const CliSkillDeleteRequestSchema = type({
slug: "string",
reason: "string?",
});
export const ApiCliSkillDeleteResponseSchema = type({
ok: "true",
slugReservedUntil: "number?",
});
export const ApiSkillResolveResponseSchema = type({
match: type({ version: "string" }).or("null"),
latestVersion: type({ version: "string" }).or("null"),
});
export const ApiV1SkillInstallResolveResponseSchema = type({
ok: "true",
slug: "string",
installKind: '"archive"',
archive: {
version: "string",
downloadUrl: "string",
},
})
.or({
ok: "true",
slug: "string",
installKind: '"github"',
github: {
repo: "string",
path: "string",
commit: "string",
contentHash: "string",
sourceUrl: "string",
},
})
.or({
ok: "false",
slug: "string",
reason: '"archive_version_missing"|"github_source_missing"|"github_upstream_removed"|"github_upstream_missing"|"github_upstream_unknown"|"github_verification_pending"|"github_scan_failed"',
message: "string",
status: "number",
});
export const CliTelemetryInstallRequestSchema = type({
event: '"install"',
slug: "string",
version: "string?",
// Deprecated compatibility fields accepted and ignored by the backend.
rootId: "string?",
rootLabel: "string?",
}).or({
// Legacy bulk snapshots remain accepted while older CLIs are in circulation.
roots: type({
rootId: "string",
label: "string",
skills: type({
slug: "string",
version: "string|null?",
}).array(),
}).array(),
});
export const ApiCliTelemetryInstallResponseSchema = type({
ok: "true",
});
export const ApiV1WhoamiResponseSchema = type({
user: {
handle: "string|null",
displayName: "string|null?",
image: "string|null?",
role: '"admin"|"moderator"|"user"|null?',
},
});
export const ApiV1UserSearchResponseSchema = type({
items: type({
userId: "string",
handle: "string|null",
displayName: "string|null?",
name: "string|null?",
role: '"admin"|"moderator"|"user"|null?',
}).array(),
total: "number",
});
export const ApiV1PublisherCreateResponseSchema = type({
ok: "true",
publisherId: "string",
handle: "string",
created: "true",
trusted: "false",
});
export const ApiV1PublisherEnsureResponseSchema = type({
ok: "true",
publisherId: "string",
handle: "string",
created: "boolean",
migrated: "boolean",
trusted: "boolean",
"member?": type({
userId: "string",
handle: "string",
role: '"owner"|"admin"|"publisher"',
}),
});
export const ApiV1PublisherRemoveMemberResponseSchema = type({
ok: "true",
publisherId: "string",
handle: "string",
removed: "boolean",
member: type({
userId: "string",
handle: "string",
role: '"owner"|"admin"|"publisher"',
}),
});
export const ApiV1PublisherDeleteResponseSchema = type({
ok: "true",
publisherId: "string",
handle: "string",
dryRun: "boolean",
deleted: "boolean",
activeSkills: "number",
activePackages: "number",
memberCount: "number",
});
export const ApiV1PublisherReclaimResponseSchema = type({
ok: "true",
publisherId: "string",
handle: "string",
dryRun: "boolean",
hardDeleted: "boolean",
activeSkills: "number",
activePackages: "number",
memberCount: "number",
githubSources: "number",
githubSourceContents: "number",
officialPublisher: "boolean",
confirmationToken: "string",
});
export const ApiV1PublisherRecoveryResponseSchema = type({
ok: "true",
dryRun: "boolean",
recovered: "boolean",
publisherId: "string",
handle: "string",
previousUser: {
userId: "string",
handle: "string|null",
nextHandle: "string|null",
githubProviderAccountId: "string",
authAccountCount: "number",
},
nextUser: {
userId: "string",
handle: "string|null",
nextHandle: "string",
githubProviderAccountId: "string",
authAccountCount: "number",
},
retiredPersonalPublisher: type({
publisherId: "string",
handle: "string",
skills: "number",
packages: "number",
githubSources: "number",
}).or("null"),
resourceOwnerMigration: {
limitPerTable: "number",
skills: "number",
skillSlugAliases: "number",
packages: "number",
packageInspectorWarnings: "number",
githubSourcesChecked: "number",
handleReservations: "number",
},
identityVerified: "boolean",
reason: "string",
});
export const ApiV1OfficialPublisherListResponseSchema = type({
ok: "true",
items: type({
officialPublisherId: "string",
publisherId: "string",
handle: "string|null",
displayName: "string|null",
kind: '"user"|"org"|null',
active: "boolean",
reason: "string|null",
createdByUserId: "string|null",
createdByHandle: "string|null",
createdAt: "number",
updatedAt: "number",
}).array(),
});
export const ApiV1OfficialPublisherUpdateResponseSchema = type({
ok: "true",
publisherId: "string",
handle: "string",
"added?": "boolean",
"removed?": "boolean",
"officialPublisherId?": "string",
});
export const ApiV1StaffEmailSendResponseSchema = type({
ok: "true",
sent: "true",
recipient: type({
email: "string",
"userId?": "string",
"handle?": "string|null",
}),
subject: "string",
template: "string",
providerId: "string|null",
});
export const ApiV1SearchResponseSchema = type({
results: type({
slug: "string?",
ownerHandle: "string|null?",
displayName: "string?",
summary: "string|null?",
version: "string|null?",
score: "number",
downloads: "number?",
updatedAt: "number?",
owner: type({
handle: "string|null?",
displayName: "string|null?",
image: "string|null?",
})
.or("null")
.optional(),
}).array(),
});
export const ApiV1SkillListResponseSchema = type({
items: type({
slug: "string",
displayName: "string",
summary: "string|null?",
description: "string|null?",
topics: "string[]?",
tags: "unknown",
stats: "unknown",
createdAt: "number",
updatedAt: "number",
latestVersion: type({
version: "string",
createdAt: "number",
changelog: "string",
license: '"MIT-0"|null?',
}).optional(),
metadata: type({
setup: type({
key: "string",
required: "boolean",
}).array(),
os: "string[]|null?",
systems: "string[]|null?",
})
.or("null")
.optional(),
}).array(),
nextCursor: "string|null",
});
export const ApiV1SkillResponseSchema = type({
skill: type({
slug: "string",
displayName: "string",
summary: "string|null?",
description: "string|null?",
topics: "string[]?",
tags: "unknown",
stats: "unknown",
createdAt: "number",
updatedAt: "number",
}).or("null"),
latestVersion: type({
version: "string",
createdAt: "number",
changelog: "string",
license: '"MIT-0"|null?',
}).or("null"),
metadata: type({
setup: type({
key: "string",
required: "boolean",
}).array(),
os: "string[]|null?",
systems: "string[]|null?",
})
.or("null")
.optional(),
owner: type({
handle: "string|null",
displayName: "string|null?",
image: "string|null?",
}).or("null"),
moderation: type({
isSuspicious: "boolean",
isMalwareBlocked: "boolean",
verdict: '"clean"|"suspicious"|"malicious"?',
reasonCodes: "string[]?",
updatedAt: "number|null?",
engineVersion: "string|null?",
summary: "string|null?",
})
.or("null")
.optional(),
});
export const ApiV1SkillModerationResponseSchema = type({
moderation: type({
isSuspicious: "boolean",
isMalwareBlocked: "boolean",
verdict: '"clean"|"suspicious"|"malicious"',
reasonCodes: "string[]",
updatedAt: "number|null?",
engineVersion: "string|null?",
summary: "string|null?",
legacyReason: "string|null?",
evidence: type({
code: "string",
severity: '"info"|"warn"|"critical"',
file: "string",
line: "number",
message: "string",
evidence: "string",
}).array(),
}).or("null"),
});
export const SkillReportStatusSchema = type('"open"|"confirmed"|"dismissed"');
export const SkillReportFinalActionSchema = type('"none"|"hide"');
export const SkillReportListStatusSchema = SkillReportStatusSchema.or('"all"');
export const SkillAppealStatusSchema = type('"open"|"accepted"|"rejected"');
export const SkillAppealFinalActionSchema = type('"none"|"restore"');
export const SkillAppealListStatusSchema = SkillAppealStatusSchema.or('"all"');
export const SkillAppealRequestSchema = type({
version: "string?",
message: "string",
});
export const ApiV1SkillReportResponseSchema = type({
ok: "true",
reported: "boolean",
alreadyReported: "boolean",
reportId: "string",
skillId: "string",
reportCount: "number",
});
export const ApiV1SkillAppealResponseSchema = type({
ok: "true",
submitted: "boolean",
alreadyOpen: "boolean",
appealId: "string",
skillId: "string",
status: SkillAppealStatusSchema,
});
export const SkillReportTriageRequestSchema = type({
status: SkillReportStatusSchema,
note: "string?",
finalAction: SkillReportFinalActionSchema.optional(),
});
export const SkillAppealResolveRequestSchema = type({
status: SkillAppealStatusSchema,
note: "string?",
finalAction: SkillAppealFinalActionSchema.optional(),
});
export const ApiV1SkillReportListResponseSchema = type({
items: type({
reportId: "string",
skillId: "string",
skillVersionId: "string|null?",
slug: "string",
displayName: "string",
version: "string|null?",
reason: "string|null?",
status: SkillReportStatusSchema,
createdAt: "number",
reporter: type({
userId: "string",
handle: "string|null?",
displayName: "string|null?",
}),
triagedAt: "number|null?",
triagedBy: "string|null?",
triageNote: "string|null?",
actionTaken: SkillReportFinalActionSchema.or("null").optional(),
}).array(),
nextCursor: "string|null",
done: "boolean",
});
export const ApiV1SkillReportTriageResponseSchema = type({
ok: "true",
reportId: "string",
skillId: "string",
status: SkillReportStatusSchema,
reportCount: "number",
actionTaken: SkillReportFinalActionSchema.optional(),
});
export const ApiV1SkillAppealListResponseSchema = type({
items: type({
appealId: "string",
skillId: "string",
skillVersionId: "string|null?",
slug: "string",
displayName: "string",
version: "string|null?",
message: "string",
status: SkillAppealStatusSchema,
createdAt: "number",
submitter: type({
userId: "string",
handle: "string|null?",
displayName: "string|null?",
}),
resolvedAt: "number|null?",
resolvedBy: "string|null?",
resolutionNote: "string|null?",
actionTaken: SkillAppealFinalActionSchema.or("null").optional(),
}).array(),
nextCursor: "string|null",
done: "boolean",
});
export const ApiV1SkillAppealResolveResponseSchema = type({
ok: "true",
appealId: "string",
skillId: "string",
status: SkillAppealStatusSchema,
actionTaken: SkillAppealFinalActionSchema.optional(),
});
export const ApiV1SkillRescanResponseSchema = type({
ok: "true",
slug: "string",
version: "string",
skillId: "string",
skillVersionId: "string",
jobId: "string",
alreadyQueued: "boolean",
}).or({
ok: "true",
slug: "string",
version: "string",
skillId: "string",
githubContentHash: "string",
jobId: "string?",
scheduled: "boolean",
alreadyQueued: "boolean",
});
export const ApiV1SkillScanStatusSchema = type('"queued"|"running"|"succeeded"|"failed"');
export const ApiV1SkillScanSourceSchema = type({
kind: '"upload"',
}).or({
kind: '"published"',
slug: "string",
version: "string?",
});
export const ApiV1SkillScanSubmitRequestSchema = type({
source: ApiV1SkillScanSourceSchema,
update: "boolean?",
});
export const ApiV1SkillScanQueueSchema = type({
queuedAhead: "number",
queuedAheadIsEstimate: "boolean?",
position: "number|null",
running: "number",
runningIsEstimate: "boolean?",
note: "string",
});
export const ApiV1SkillScanSubmitResponseSchema = type({
ok: "true",
scanId: "string",
jobId: "string?",
status: ApiV1SkillScanStatusSchema,
sourceKind: '"upload"|"published"',
update: "boolean",
alreadyQueued: "boolean?",
queue: ApiV1SkillScanQueueSchema.optional(),
});
export const ApiV1SkillScanStatusResponseSchema = type({
ok: "true",
scanId: "string",
jobId: "string?",
status: ApiV1SkillScanStatusSchema,
sourceKind: '"upload"|"published"',
update: "boolean",
writtenBack: "boolean?",
artifact: "unknown?",
report: "unknown?",
queue: ApiV1SkillScanQueueSchema.optional(),
lastError: "string?",
createdAt: "number",
updatedAt: "number",
completedAt: "number?",
});
export const ApiV1SkillScanDownloadManifestSchema = type({
scanId: "string",
sourceKind: '"upload"|"published"',
update: "boolean",
status: ApiV1SkillScanStatusSchema,
artifact: "unknown?",
createdAt: "number",
updatedAt: "number",
completedAt: "number?",
writtenBack: "boolean?",
});
export const ApiV1SkillBulkRescanBatchRequestSchema = type({
mode: '"all-active-latest"?',
cursor: "string|null?",
batchSize: "number?",
dryRun: "boolean?",
});
export const ApiV1SkillBulkRescanBatchResponseSchema = type({
ok: "true",
mode: '"all-active-latest"',
queued: "number",
alreadyQueued: "number",
skipped: "number",
jobIds: "string[]",
nextCursor: "string|null",
done: "boolean",
sampleSlugs: "string[]",
});
export const ApiV1SkillBulkRescanStatusRequestSchema = type({
jobIds: "string[]",
});
export const ApiV1SkillBulkRescanStatusResponseSchema = type({
ok: "true",
total: "number",
queued: "number",
running: "number",
succeeded: "number",
failed: "number",
missing: "number",
terminal: "number",
done: "boolean",
failedJobIds: "string[]",
});
export const ApiV1SkillScanBatchRequestSchema = type({
mode: '"all-active-latest"?',
cursor: "string|null?",
batchSize: "number?",
dryRun: "boolean?",
});
export const ApiV1SkillScanBatchResponseSchema = type({
ok: "true",
mode: '"all-active-latest"',
queued: "number",
alreadyQueued: "number",
skipped: "number",
jobIds: "string[]",
nextCursor: "string|null",
done: "boolean",
sampleSlugs: "string[]",
});
export const ApiV1SkillScanBatchStatusRequestSchema = type({
jobIds: "string[]",
});
export const ApiV1SkillScanBatchStatusResponseSchema = type({
ok: "true",
total: "number",
queued: "number",
running: "number",
succeeded: "number",
failed: "number",
missing: "number",
terminal: "number",
done: "boolean",
failedJobIds: "string[]",
});
export const ApiV1SkillRepairVtPendingRequestSchema = type({
cursor: "string|null?",
batchSize: "number?",
concurrency: "number?",
dryRun: "boolean?",
});
export const ApiV1SkillRepairVtPendingResponseSchema = type({
ok: "true",
dryRun: "boolean",
total: "number",
wouldUpdate: "number",
updated: "number",
noResults: "number",
noDecisiveStats: "number",
errors: "number",
done: "boolean",
cursor: "string|null",
statusCounts: { "[string]": "number" },
sampleUpdated: type({
slug: "string",
status: "string",
}).array(),
});
export const ApiV1SkillVersionListResponseSchema = type({
items: type({
version: "string",
createdAt: "number",
changelog: "string",
changelogSource: '"auto"|"user"|null?',
}).array(),
nextCursor: "string|null",
});
export const ApiV1SkillVersionResponseSchema = type({
version: type({
version: "string",
createdAt: "number",
changelog: "string",
changelogSource: '"auto"|"user"|null?',
license: '"MIT-0"|null?',
files: "unknown?",
}).or("null"),
skill: type({
slug: "string",
displayName: "string",
}).or("null"),
});
export const ApiV1SkillResolveResponseSchema = type({
match: type({ version: "string" }).or("null"),
latestVersion: type({ version: "string" }).or("null"),
});
export const ApiV1SkillVerifyResponseSchema = type({
schema: '"clawhub.skill.verify.v1"',
ok: "boolean",
decision: '"pass"|"fail"',
reasons: "string[]",
slug: "string",
displayName: "string",
pageUrl: "string",
publisherHandle: "string|null",
publisherDisplayName: "string|null",
publisherProfileUrl: "string|null",
version: "string",
resolvedFrom: '"latest"|"version"|"tag"',
tag: "string|null",
createdAt: "number",
card: "unknown",
artifact: "unknown",
provenance: "unknown",
security: "unknown",
signature: "unknown",
});
export const ApiV1PublishResponseSchema = type({
ok: "true",
skillId: "string",
versionId: "string",
});
export const ApiV1DeleteResponseSchema = type({
ok: "true",
slugReservedUntil: "number?",
});
export const ApiV1SkillRenameResponseSchema = type({
ok: "true",
slug: "string",
previousSlug: "string",
});
export const ApiV1SkillMergeResponseSchema = type({
ok: "true",
sourceSlug: "string",
targetSlug: "string",
});
export const ApiV1TransferRequestResponseSchema = type({
ok: "true",
transferId: "string?",
toUserHandle: "string?",
toPublisherHandle: "string?",
skillSlug: "string?",
expiresAt: "number?",
transferred: "boolean?",
});
export const ApiV1TransferDecisionResponseSchema = type({
ok: "true",
skillSlug: "string?",
});
export const ApiV1TransferListResponseSchema = type({
transfers: type({
_id: "string",
skill: type({
_id: "string",
slug: "string",
displayName: "string",
}),
fromUser: type({
_id: "string",
handle: "string|null",
displayName: "string|null",
}).optional(),
toUser: type({
_id: "string",
handle: "string|null",
displayName: "string|null",
}).optional(),
message: "string?",
requestedAt: "number",
expiresAt: "number",
}).array(),
});
export const ApiV1BanUserResponseSchema = type({
ok: "true",
alreadyBanned: "boolean",
deletedSkills: "number",
});
export const ApiV1UnbanUserResponseSchema = type({
ok: "true",
alreadyUnbanned: "boolean",
restoredSkills: "number?",
});
export const ApiV1ReclassifyBanResponseSchema = type({
ok: "true",
dryRun: "boolean",
userId: "string",
handle: "string|null",
previousReason: "string|null",
nextReason: "string",
changed: "boolean",
});
export const ApiV1SetRoleResponseSchema = type({
ok: "true",
role: '"admin"|"moderator"|"user"',
});
export const ApiV1StarResponseSchema = type({
ok: "true",
starred: "boolean",
alreadyStarred: "boolean",
});
export const ApiV1UnstarResponseSchema = type({
ok: "true",
unstarred: "boolean",
alreadyUnstarred: "boolean",
});
export const SkillInstallSpecSchema = type({
id: "string?",
kind: '"brew"|"node"|"go"|"uv"',
label: "string?",
bins: "string[]?",
formula: "string?",
tap: "string?",
package: "string?",
module: "string?",
});
export const ClawdisRequiresSchema = type({
bins: "string[]?",
anyBins: "string[]?",
env: "string[]?",
config: "string[]?",
});
export const EnvVarDeclarationSchema = type({
name: "string",
required: "boolean?",
description: "string?",
});
export const ClawdisSkillMetadataSchema = type({
always: "boolean?",
skillKey: "string?",
primaryEnv: "string?",
emoji: "string?",
homepage: "string?",
os: "string[]?",
requires: ClawdisRequiresSchema.optional(),
install: SkillInstallSpecSchema.array().optional(),
envVars: EnvVarDeclarationSchema.array().optional(),
});
//# sourceMappingURL=schemas.js.map
File diff suppressed because one or more lines are too long
+5
View File
@@ -0,0 +1,5 @@
export declare const TEXT_FILE_EXTENSIONS: readonly ["md", "mdx", "txt", "json", "json5", "yaml", "yml", "toml", "js", "cjs", "mjs", "ts", "tsx", "jsx", "py", "sh", "ps1", "psm1", "psd1", "r", "rb", "go", "rs", "swift", "kt", "java", "cs", "cpp", "c", "h", "hpp", "sql", "csv", "tsv", "ini", "cfg", "conf", "env", "properties", "dat", "xml", "html", "css", "scss", "sass", "svg"];
export declare const TEXT_FILE_EXTENSION_SET: Set<string>;
export declare const TEXT_CONTENT_TYPES: readonly ["application/json", "application/xml", "application/yaml", "application/x-yaml", "application/toml", "application/javascript", "application/typescript", "application/markdown", "image/svg+xml"];
export declare const TEXT_CONTENT_TYPE_SET: Set<string>;
export declare function isTextContentType(contentType: string): boolean;
+74
View File
@@ -0,0 +1,74 @@
const RAW_TEXT_FILE_EXTENSIONS = [
"md",
"mdx",
"txt",
"json",
"json5",
"yaml",
"yml",
"toml",
"js",
"cjs",
"mjs",
"ts",
"tsx",
"jsx",
"py",
"sh",
"ps1",
"psm1",
"psd1",
"r",
"rb",
"go",
"rs",
"swift",
"kt",
"java",
"cs",
"cpp",
"c",
"h",
"hpp",
"sql",
"csv",
"tsv",
"ini",
"cfg",
"conf",
"env",
"properties",
"dat",
"xml",
"html",
"css",
"scss",
"sass",
"svg",
];
export const TEXT_FILE_EXTENSIONS = RAW_TEXT_FILE_EXTENSIONS;
export const TEXT_FILE_EXTENSION_SET = new Set(TEXT_FILE_EXTENSIONS);
const RAW_TEXT_CONTENT_TYPES = [
"application/json",
"application/xml",
"application/yaml",
"application/x-yaml",
"application/toml",
"application/javascript",
"application/typescript",
"application/markdown",
"image/svg+xml",
];
export const TEXT_CONTENT_TYPES = RAW_TEXT_CONTENT_TYPES;
export const TEXT_CONTENT_TYPE_SET = new Set(TEXT_CONTENT_TYPES);
export function isTextContentType(contentType) {
if (!contentType)
return false;
const normalized = contentType.split(";", 1)[0]?.trim().toLowerCase() ?? "";
if (!normalized)
return false;
if (normalized.startsWith("text/"))
return true;
return TEXT_CONTENT_TYPE_SET.has(normalized);
}
//# sourceMappingURL=textFiles.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"textFiles.js","sourceRoot":"","sources":["../../src/schema/textFiles.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG;IAC/B,IAAI;IACJ,KAAK;IACL,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;IACN,IAAI;IACJ,KAAK;IACL,KAAK;IACL,IAAI;IACJ,KAAK;IACL,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,MAAM;IACN,MAAM;IACN,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,MAAM;IACN,IAAI;IACJ,KAAK;IACL,GAAG;IACH,GAAG;IACH,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,YAAY;IACZ,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;CACG,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAE7E,MAAM,sBAAsB,GAAG;IAC7B,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,kBAAkB;IAClB,wBAAwB;IACxB,wBAAwB;IACxB,sBAAsB;IACtB,eAAe;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AACzD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAS,kBAAkB,CAAC,CAAC;AAEzE,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC5E,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC"}