自动同步: 2026-07-01 02:10
This commit is contained in:
+4
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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"}
|
||||
+14
@@ -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
@@ -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
|
||||
+1
File diff suppressed because one or more lines are too long
+1145
File diff suppressed because it is too large
Load Diff
+719
@@ -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
|
||||
+1
File diff suppressed because one or more lines are too long
+29
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
+1
File diff suppressed because one or more lines are too long
+5
@@ -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
@@ -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
@@ -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"}
|
||||
Reference in New Issue
Block a user