@x12i/sdk 0.3.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/dist/admin-import.d.ts +6 -0
- package/dist/admin-import.js +127 -0
- package/dist/admin-import.js.map +1 -0
- package/dist/admin-mcp.d.ts +3 -0
- package/dist/admin-mcp.js +60 -0
- package/dist/admin-mcp.js.map +1 -0
- package/dist/admin.d.ts +63 -0
- package/dist/admin.js +259 -0
- package/dist/admin.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +68 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +74 -118
- package/dist/client.js +183 -379
- package/dist/client.js.map +1 -1
- package/dist/identity.d.ts +8 -0
- package/dist/identity.js +34 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +6 -20
- package/dist/index.js +6 -11
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +18 -0
- package/dist/init.js +147 -0
- package/dist/init.js.map +1 -0
- package/dist/maturity.d.ts +65 -0
- package/dist/maturity.js +138 -0
- package/dist/maturity.js.map +1 -0
- package/dist/mcp.d.ts +27 -0
- package/dist/mcp.js +168 -0
- package/dist/mcp.js.map +1 -0
- package/dist/protocol.d.ts +38 -0
- package/dist/protocol.js +168 -0
- package/dist/protocol.js.map +1 -0
- package/dist/rank.d.ts +19 -0
- package/dist/rank.js +82 -0
- package/dist/rank.js.map +1 -0
- package/dist/runner.d.ts +22 -0
- package/dist/runner.js +99 -0
- package/dist/runner.js.map +1 -0
- package/package.json +66 -60
- package/LICENSE +0 -21
- package/dist/client.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/registry.d.ts +0 -8
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -21
- package/dist/registry.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# @x12i/sdk
|
|
2
|
+
|
|
3
|
+
Version 1.0.0 is the catalog SDK. The earlier web client remains installable as `@x12i/sdk@0.4.0`.
|
|
4
|
+
|
|
5
|
+
Find an `@x12i` package that fits a task, read its README and maturity, and file a signed review other code agents can see.
|
|
6
|
+
|
|
7
|
+
The catalog and the ratings come from the x12i SDK service. A README is shown from the catalog cache first. When that cache is older than the publish time the catalog knows, the SDK fetches the current README and returns both. Listing and README text can also be read straight from the npm registry through `@x12i/npm-core` when that service is unreachable. Those registry matches are labeled unranked.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @x12i/sdk init
|
|
11
|
+
npx @x12i/sdk init --all
|
|
12
|
+
npx @x12i/sdk init --global
|
|
13
|
+
npx @x12i/sdk mcp
|
|
14
|
+
npx @x12i/sdk readme @x12i/sdk
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`init` with no host flags writes Cursor's `.cursor/mcp.json` and `.cursor/rules/x12i-sdk.mdc`. `--claude` and `--codex` add Claude Code and Codex. `--all` writes all three. Existing MCP servers are left in place. The first run also creates an Ed25519 install key under `%LOCALAPPDATA%\x12i\sdk` on Windows (or the platform config directory). The private key stays there. There is no shared API key in this package.
|
|
18
|
+
|
|
19
|
+
The rule tells the agent to call `x12i_search` before adding a dependency x12i might already publish, and `x12i_review` after trying one.
|
|
20
|
+
|
|
21
|
+
The service is `https://x12i-sdk.x12i.com`. `X12I_SDK_URL` overrides it. Use `http://127.0.0.1:8789` for the local service.
|
|
22
|
+
|
|
23
|
+
Search, README, reviews, and MCP are the regular SDK. Admin is separate and is not added to the MCP server:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
x12i-sdk admin catalog
|
|
27
|
+
x12i-sdk admin refresh
|
|
28
|
+
x12i-sdk admin refresh @x12i/sdk
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`admin catalog` prints every package as JSON, newest publish first. `admin refresh` updates the org listing, READMEs, and vulnerability scans. Set `X12I_SDK_ADMIN_KEY` for a remote service. The local service on `127.0.0.1` accepts its dev key when that variable is unset. `import { X12iAdmin } from "@x12i/sdk/admin"` is the same client.
|
|
32
|
+
|
|
33
|
+
Managed catalog commands mint a scoped capability and never print it:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
x12i-sdk admin import --from C:\path\to\x12i-catalog --dry-run
|
|
37
|
+
x12i-sdk admin export
|
|
38
|
+
x12i-sdk admin gaps
|
|
39
|
+
x12i-sdk admin lineage
|
|
40
|
+
x12i-sdk admin reconcile
|
|
41
|
+
x12i-sdk admin npm-links
|
|
42
|
+
x12i-sdk admin examples
|
|
43
|
+
x12i-sdk admin runner path\to\usage-repo
|
|
44
|
+
x12i-sdk admin mcp
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`admin mcp` is a second stdio server for catalog edits, example preparation, and publish. The public `x12i-sdk mcp` server does not receive it. Publish tools dry-run unless the caller sets `dryRun` to false on a token that includes `examples:publish`. The App private key stays on the service. See `packages/sdk-service/ADMIN.md`.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { X12iAdmin } from "./admin.js";
|
|
2
|
+
export declare function verifyCheckpoint(root: string): Promise<{
|
|
3
|
+
checked: number;
|
|
4
|
+
}>;
|
|
5
|
+
export declare function planImport(root: string): Promise<Record<string, number>>;
|
|
6
|
+
export declare function runImport(root: string, admin: X12iAdmin, dryRun: boolean): Promise<Record<string, unknown>>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
3
|
+
import { join, relative } from "node:path";
|
|
4
|
+
const SKIP = new Set(["node_modules", ".git", "dist", ".vite"]);
|
|
5
|
+
export async function verifyCheckpoint(root) {
|
|
6
|
+
const status = JSON.parse(await readFile(join(root, "research", "handover-status.json"), "utf8"));
|
|
7
|
+
const hashes = status.artifactSha256 ?? {};
|
|
8
|
+
let checked = 0;
|
|
9
|
+
for (const [name, expected] of Object.entries(hashes)) {
|
|
10
|
+
const actual = createHash("sha256").update(await readFile(join(root, name))).digest("hex");
|
|
11
|
+
if (actual !== expected)
|
|
12
|
+
throw new Error(`Checkpoint hash differs for ${name}`);
|
|
13
|
+
checked += 1;
|
|
14
|
+
}
|
|
15
|
+
return { checked };
|
|
16
|
+
}
|
|
17
|
+
export async function planImport(root) {
|
|
18
|
+
const catalog = JSON.parse(await readFile(join(root, "catalog.json"), "utf8"));
|
|
19
|
+
const evidence = JSON.parse(await readFile(join(root, "research", "enriched-evidence-index.json"), "utf8"));
|
|
20
|
+
const tasks = JSON.parse(await readFile(join(root, "todo.json"), "utf8"));
|
|
21
|
+
const receipts = JSON.parse(await readFile(join(root, "research", "usage-publish-receipts.json"), "utf8"));
|
|
22
|
+
return {
|
|
23
|
+
packages: catalog.packages.length,
|
|
24
|
+
families: catalog.families.length,
|
|
25
|
+
evidence: evidence.length,
|
|
26
|
+
tasks: tasks.tasks.length,
|
|
27
|
+
receipts: Object.keys(receipts).length,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export async function runImport(root, admin, dryRun) {
|
|
31
|
+
const checked = await verifyCheckpoint(root);
|
|
32
|
+
const plan = await planImport(root);
|
|
33
|
+
if (dryRun)
|
|
34
|
+
return { dryRun: true, ...checked, ...plan, uploaded: false };
|
|
35
|
+
const catalog = JSON.parse(await readFile(join(root, "catalog.json"), "utf8"));
|
|
36
|
+
const tokenAdmin = admin;
|
|
37
|
+
let applied = 0;
|
|
38
|
+
applied += await chunks(tokenAdmin, "packages", catalog.packages, (item) => String(item.name));
|
|
39
|
+
applied += await chunks(tokenAdmin, "families", catalog.families, (item) => String(item.id));
|
|
40
|
+
const evidence = JSON.parse(await readFile(join(root, "research", "enriched-evidence-index.json"), "utf8"));
|
|
41
|
+
applied += await chunks(tokenAdmin, "evidence", evidence, (item) => String(item.id));
|
|
42
|
+
const tasks = JSON.parse(await readFile(join(root, "todo.json"), "utf8"));
|
|
43
|
+
applied += await chunks(tokenAdmin, "tasks", tasks.tasks, (item) => String(item.id));
|
|
44
|
+
const findings = JSON.parse(await readFile(join(root, "research", "manual-findings.json"), "utf8"));
|
|
45
|
+
applied += await chunks(tokenAdmin, "findings", findings, (item) => String(item.title));
|
|
46
|
+
const receipts = JSON.parse(await readFile(join(root, "research", "usage-publish-receipts.json"), "utf8"));
|
|
47
|
+
applied += await chunks(tokenAdmin, "receipts", Object.entries(receipts).map(([slug, receipt]) => ({ slug, ...receipt })), (item) => String(item.slug));
|
|
48
|
+
const validation = JSON.parse(await readFile(join(root, "research", "usage-validation.json"), "utf8"));
|
|
49
|
+
applied += await chunks(tokenAdmin, "validations", validation, (item) => String(item.package));
|
|
50
|
+
const repositoryPlan = JSON.parse(await readFile(join(root, "research", "usage-repository-plan.json"), "utf8"));
|
|
51
|
+
applied += await chunks(tokenAdmin, "repositories", repositoryPlan.repositories, (item) => String(item.name));
|
|
52
|
+
const patches = JSON.parse(await readFile(join(root, "source-link-patches", "index.json"), "utf8"));
|
|
53
|
+
const links = patches.repositories.flatMap((repository) => repository.packages.map((pkg) => ({ ...pkg, repository: repository.repository, patch: repository.patch })));
|
|
54
|
+
applied += await chunks(tokenAdmin, "source-links", links, (item) => String(item.package));
|
|
55
|
+
applied += await importUsageFiles(root, tokenAdmin);
|
|
56
|
+
const current = await tokenAdmin.exportCatalog();
|
|
57
|
+
const finished = await tokenAdmin.finishImport(Number(current.revision ?? 0));
|
|
58
|
+
return { dryRun: false, ...checked, ...plan, chunks: applied, revision: finished.revision };
|
|
59
|
+
}
|
|
60
|
+
async function sendChunk(admin, chunk) {
|
|
61
|
+
for (let attempt = 0; attempt < 5; attempt += 1) {
|
|
62
|
+
try {
|
|
63
|
+
await admin.importChunk(chunk);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const status = error instanceof Error && "status" in error ? Number(error.status) : 0;
|
|
68
|
+
if (attempt === 4 || (status > 0 && status < 500))
|
|
69
|
+
throw error;
|
|
70
|
+
await new Promise((resolve) => setTimeout(resolve, 1000 * (attempt + 1)));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function chunks(admin, kind, items, idOf) {
|
|
75
|
+
const size = 25;
|
|
76
|
+
let count = 0;
|
|
77
|
+
for (let index = 0; index < items.length; index += size) {
|
|
78
|
+
const slice = items.slice(index, index + size);
|
|
79
|
+
const chunkId = `${kind}-${index / size}`;
|
|
80
|
+
const digest = createHash("sha256").update(JSON.stringify(slice)).digest("hex");
|
|
81
|
+
await sendChunk(admin, { kind, chunkId, digest, items: slice.map((item) => ({ ...item, chunkKey: idOf(item) })) });
|
|
82
|
+
count += 1;
|
|
83
|
+
}
|
|
84
|
+
return count;
|
|
85
|
+
}
|
|
86
|
+
async function importUsageFiles(root, admin) {
|
|
87
|
+
const base = join(root, "usage-repos");
|
|
88
|
+
let count = 0;
|
|
89
|
+
let entries = [];
|
|
90
|
+
try {
|
|
91
|
+
entries = await readdir(base);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
for (const slug of entries) {
|
|
97
|
+
const directory = join(base, slug);
|
|
98
|
+
if (!(await stat(directory)).isDirectory())
|
|
99
|
+
continue;
|
|
100
|
+
const files = {};
|
|
101
|
+
await walk(directory, directory, files);
|
|
102
|
+
if (Object.keys(files).length === 0)
|
|
103
|
+
continue;
|
|
104
|
+
await sendChunk(admin, { kind: "usage-files", chunkId: slug, digest: createHash("sha256").update(JSON.stringify(files)).digest("hex"), items: [{ slug, files, state: "imported-draft" }] });
|
|
105
|
+
count += 1;
|
|
106
|
+
}
|
|
107
|
+
return count;
|
|
108
|
+
}
|
|
109
|
+
async function walk(root, directory, files) {
|
|
110
|
+
for (const name of await readdir(directory)) {
|
|
111
|
+
if (SKIP.has(name))
|
|
112
|
+
continue;
|
|
113
|
+
const path = join(directory, name);
|
|
114
|
+
const info = await stat(path);
|
|
115
|
+
if (info.isDirectory()) {
|
|
116
|
+
await walk(root, path, files);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (info.size > 2_000_000)
|
|
120
|
+
continue;
|
|
121
|
+
const relativePath = relative(root, path).replaceAll("\\", "/");
|
|
122
|
+
if (!/^(README\.md|package\.json|package-lock\.json|\.gitignore|usage\.json|src\/.*)$/.test(relativePath))
|
|
123
|
+
continue;
|
|
124
|
+
files[relativePath] = await readFile(path, "utf8");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=admin-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-import.js","sourceRoot":"","sources":["../src/admin-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
const object = (properties, required) => ({ type: "object", properties, required, additionalProperties: false });
|
|
3
|
+
const str = (description) => ({ type: "string", description });
|
|
4
|
+
const TOOLS = [
|
|
5
|
+
{ name: "x12i_admin_gaps", description: "List packages that still need a confirmed tier or tag. Suggested rows are not confirmed.", inputSchema: object({}, []), run: (admin) => admin.gaps() },
|
|
6
|
+
{ name: "x12i_admin_lineage", description: "Read the Memorix lineage report. Spelling collisions are not confirmed replacements.", inputSchema: object({}, []), run: (admin) => admin.lineage() },
|
|
7
|
+
{ name: "x12i_admin_taxonomy", description: "Preview or save tier, tag, family, and lifecycle edits. Send expectedRevision.", inputSchema: object({ expectedRevision: { type: "integer" }, reason: str("Why this edit is being made"), preview: { type: "boolean" }, changes: { type: "array" } }, ["expectedRevision", "reason", "changes"]), run: (admin, args) => admin.taxonomy(args) },
|
|
8
|
+
{ name: "x12i_admin_propose_replacement", description: "Propose a rename, successor, split, or merge. This does not hide the source package.", inputSchema: object({ expectedRevision: { type: "integer" }, source: { type: "array" }, target: { type: "array" }, kind: str("rename, successor, split, or merge"), migrationNotes: str("What a consumer should do") }, ["expectedRevision", "source", "target", "kind", "migrationNotes"]), run: (admin, args) => admin.proposeReplacement(args) },
|
|
9
|
+
{ name: "x12i_admin_confirm_replacement", description: "Confirm a proposed replacement and mark its sources superseded.", inputSchema: object({ expectedRevision: { type: "integer" }, proposalId: str("Proposal id") }, ["expectedRevision", "proposalId"]), run: (admin, args) => admin.confirmReplacement(String(args.proposalId ?? ""), Number(args.expectedRevision)) },
|
|
10
|
+
{ name: "x12i_admin_reconcile", description: "Compare the catalog, receipts, and drafts. Historical inventory and published coverage are separate.", inputSchema: object({}, []), run: (admin) => admin.reconcile() },
|
|
11
|
+
{ name: "x12i_admin_npm_links", description: "List source link patches that are ready for review. This does not open a pull request or publish npm.", inputSchema: object({}, []), run: (admin) => admin.npmLinks() },
|
|
12
|
+
{ name: "x12i_admin_prepare_example", description: "Store a usage draft. dryRun writes nothing.", inputSchema: object({ packageName: str("Exact npm name"), version: str("Exact version"), scenario: str("What the example demonstrates"), dryRun: { type: "boolean" }, files: { type: "object" } }, ["packageName", "version", "scenario"]), run: (admin, args) => admin.prepareDraft(args) },
|
|
13
|
+
{ name: "x12i_admin_publish_example", description: "Publish a validated usage draft. dryRun is the default and creates nothing on GitHub.", inputSchema: object({ draftId: str("Draft id"), validationId: str("Validation id"), idempotencyKey: str("Retry key"), expectedRemoteHead: str("Remote commit the update must replace"), dryRun: { type: "boolean", description: "Defaults to true" } }, ["draftId", "validationId", "idempotencyKey"]), run: (admin, args) => admin.publishExample({ ...args, dryRun: args.dryRun !== false }) },
|
|
14
|
+
];
|
|
15
|
+
export async function runAdminMcp(admin) {
|
|
16
|
+
const token = process.env.X12I_SDK_ADMIN_TOKEN;
|
|
17
|
+
const scopes = (process.env.X12I_SDK_ADMIN_SCOPES ?? "catalog:read,metadata:write,examples:prepare,release:prepare").split(",").map((scope) => scope.trim()).filter(Boolean);
|
|
18
|
+
const scoped = token ? admin.withToken(token) : admin.withToken((await admin.mint(scopes, "admin-mcp")).token);
|
|
19
|
+
const lines = createInterface({ input: process.stdin });
|
|
20
|
+
for await (const line of lines) {
|
|
21
|
+
if (!line.trim())
|
|
22
|
+
continue;
|
|
23
|
+
const response = await handleAdminMcp(line, scoped);
|
|
24
|
+
if (response)
|
|
25
|
+
process.stdout.write(`${response}\n`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function handleAdminMcp(line, admin) {
|
|
29
|
+
let message;
|
|
30
|
+
try {
|
|
31
|
+
message = JSON.parse(line);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return JSON.stringify({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "Parse error" } });
|
|
35
|
+
}
|
|
36
|
+
if (message.id === undefined)
|
|
37
|
+
return undefined;
|
|
38
|
+
const id = message.id ?? null;
|
|
39
|
+
const params = message.params ?? {};
|
|
40
|
+
if (message.method === "initialize") {
|
|
41
|
+
return JSON.stringify({ jsonrpc: "2.0", id, result: { protocolVersion: "2025-06-18", capabilities: { tools: { listChanged: false } }, serverInfo: { name: "x12i-admin", version: "0.1.0" }, instructions: "Use these tools for catalog administration. Publishing defaults to a dry run. You do not receive the GitHub App key." } });
|
|
42
|
+
}
|
|
43
|
+
if (message.method === "tools/list") {
|
|
44
|
+
return JSON.stringify({ jsonrpc: "2.0", id, result: { tools: TOOLS.map(({ run: _run, ...tool }) => tool) } });
|
|
45
|
+
}
|
|
46
|
+
if (message.method === "tools/call") {
|
|
47
|
+
const tool = TOOLS.find((item) => item.name === params.name);
|
|
48
|
+
if (!tool)
|
|
49
|
+
return JSON.stringify({ jsonrpc: "2.0", id, error: { code: -32602, message: "Unknown tool" } });
|
|
50
|
+
try {
|
|
51
|
+
const value = await tool.run(admin, (params.arguments ?? {}));
|
|
52
|
+
return JSON.stringify({ jsonrpc: "2.0", id, result: { content: [{ type: "text", text: JSON.stringify(value) }], structuredContent: value, isError: false } });
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return JSON.stringify({ jsonrpc: "2.0", id, result: { content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }], isError: true } });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return JSON.stringify({ jsonrpc: "2.0", id, error: { code: -32601, message: "Method not found" } });
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=admin-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-mcp.js","sourceRoot":"","sources":["../src/admin-mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/admin.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** Dev key the local catalog accepts when SDK_ADMIN_KEY is unset. Never sent to a remote host. */
|
|
2
|
+
export declare const LOCAL_ADMIN_KEY = "dev-only-x12i-sdk-admin-key";
|
|
3
|
+
export type AdminOptions = {
|
|
4
|
+
baseUrl?: string;
|
|
5
|
+
adminKey?: string;
|
|
6
|
+
fetch?: typeof fetch;
|
|
7
|
+
};
|
|
8
|
+
export type AdminRefreshTarget = "listing" | "readmes" | "audits" | "package";
|
|
9
|
+
type CatalogPage = {
|
|
10
|
+
total?: number;
|
|
11
|
+
packages?: unknown[];
|
|
12
|
+
next?: string | null;
|
|
13
|
+
order?: string;
|
|
14
|
+
maturity?: unknown;
|
|
15
|
+
};
|
|
16
|
+
export declare class X12iAdmin {
|
|
17
|
+
readonly baseUrl: string;
|
|
18
|
+
readonly adminKey: string;
|
|
19
|
+
private readonly fetchImpl;
|
|
20
|
+
constructor(options?: AdminOptions);
|
|
21
|
+
/** Every catalog package, newest publish first, without README bodies. */
|
|
22
|
+
catalog(): Promise<CatalogPage>;
|
|
23
|
+
status(): Promise<unknown>;
|
|
24
|
+
refresh(target: Exclude<AdminRefreshTarget, "package">, budget?: number): Promise<Record<string, unknown>>;
|
|
25
|
+
refreshPackage(name: string): Promise<Record<string, unknown>>;
|
|
26
|
+
/** Refresh the org listing, then READMEs, then vulnerability scans, until each queue is caught up. */
|
|
27
|
+
refreshAll(onBatch?: (kind: string, batch: Record<string, unknown>) => void): Promise<Record<string, unknown>>;
|
|
28
|
+
private untilQuiet;
|
|
29
|
+
mint(scopes: string[], label?: string, limits?: {
|
|
30
|
+
packageScope?: string[];
|
|
31
|
+
repoScope?: string[];
|
|
32
|
+
}): Promise<{
|
|
33
|
+
id: string;
|
|
34
|
+
token: string;
|
|
35
|
+
scopes: string[];
|
|
36
|
+
}>;
|
|
37
|
+
importChunk(chunk: {
|
|
38
|
+
kind: string;
|
|
39
|
+
chunkId: string;
|
|
40
|
+
digest: string;
|
|
41
|
+
items: unknown[];
|
|
42
|
+
}): Promise<unknown>;
|
|
43
|
+
finishImport(expectedRevision: number, reason?: string): Promise<unknown>;
|
|
44
|
+
exportCatalog(part?: "overrides"): Promise<unknown>;
|
|
45
|
+
taxonomy(body: Record<string, unknown>): Promise<unknown>;
|
|
46
|
+
proposeReplacement(body: Record<string, unknown>): Promise<unknown>;
|
|
47
|
+
confirmReplacement(proposalId: string, expectedRevision: number): Promise<unknown>;
|
|
48
|
+
gaps(): Promise<unknown>;
|
|
49
|
+
lineage(): Promise<unknown>;
|
|
50
|
+
reconcile(): Promise<unknown>;
|
|
51
|
+
npmLinks(): Promise<unknown>;
|
|
52
|
+
prepareDraft(body: Record<string, unknown>): Promise<unknown>;
|
|
53
|
+
recordValidation(body: Record<string, unknown>): Promise<unknown>;
|
|
54
|
+
publishExample(body: Record<string, unknown>): Promise<unknown>;
|
|
55
|
+
withToken(token: string): X12iAdmin;
|
|
56
|
+
operation(id: string): Promise<unknown>;
|
|
57
|
+
cancelOperation(id: string): Promise<unknown>;
|
|
58
|
+
resumeOperation(id: string): Promise<unknown>;
|
|
59
|
+
exampleBacklog(): Promise<unknown>;
|
|
60
|
+
private send;
|
|
61
|
+
}
|
|
62
|
+
export declare function runAdminCli(args: string[]): Promise<void>;
|
|
63
|
+
export {};
|
package/dist/admin.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { SdkError, DEFAULT_SERVICE_URL } from "./client.js";
|
|
2
|
+
import { runImport } from "./admin-import.js";
|
|
3
|
+
import { runAdminMcp } from "./admin-mcp.js";
|
|
4
|
+
import { runValidationRunner } from "./runner.js";
|
|
5
|
+
/** Dev key the local catalog accepts when SDK_ADMIN_KEY is unset. Never sent to a remote host. */
|
|
6
|
+
export const LOCAL_ADMIN_KEY = "dev-only-x12i-sdk-admin-key";
|
|
7
|
+
export class X12iAdmin {
|
|
8
|
+
baseUrl;
|
|
9
|
+
adminKey;
|
|
10
|
+
fetchImpl;
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
this.baseUrl = (options.baseUrl ?? process.env.X12I_SDK_URL ?? DEFAULT_SERVICE_URL).replace(/\/$/, "");
|
|
13
|
+
this.adminKey = resolveAdminKey(this.baseUrl, options.adminKey);
|
|
14
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
15
|
+
}
|
|
16
|
+
/** Every catalog package, newest publish first, without README bodies. */
|
|
17
|
+
async catalog() {
|
|
18
|
+
return this.send("GET", "/v1/admin/catalog");
|
|
19
|
+
}
|
|
20
|
+
status() {
|
|
21
|
+
return this.send("GET", "/v1/admin/status");
|
|
22
|
+
}
|
|
23
|
+
refresh(target, budget) {
|
|
24
|
+
return this.send("POST", "/v1/admin/refresh", { target, budget });
|
|
25
|
+
}
|
|
26
|
+
refreshPackage(name) {
|
|
27
|
+
return this.send("POST", "/v1/admin/refresh", { target: "package", name });
|
|
28
|
+
}
|
|
29
|
+
/** Refresh the org listing, then READMEs, then vulnerability scans, until each queue is caught up. */
|
|
30
|
+
async refreshAll(onBatch) {
|
|
31
|
+
const listing = await this.refresh("listing", 40);
|
|
32
|
+
onBatch?.("listing", listing);
|
|
33
|
+
const readmes = await this.untilQuiet("readmes", 20, onBatch);
|
|
34
|
+
const audits = await this.untilQuiet("audits", 200, onBatch);
|
|
35
|
+
return { listing, readmes, audits };
|
|
36
|
+
}
|
|
37
|
+
async untilQuiet(target, budget, onBatch) {
|
|
38
|
+
let last = {};
|
|
39
|
+
for (let attempt = 0; attempt < 40; attempt += 1) {
|
|
40
|
+
last = await this.refresh(target, budget);
|
|
41
|
+
onBatch?.(target, last);
|
|
42
|
+
const pending = Number(last.pending ?? 0);
|
|
43
|
+
const moved = Number(last.updated ?? last.scanned ?? 0);
|
|
44
|
+
if (pending === 0 || moved === 0 || last.stopped === true)
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
return last;
|
|
48
|
+
}
|
|
49
|
+
mint(scopes, label = "agent", limits = {}) {
|
|
50
|
+
return this.send("POST", "/v1/admin/capabilities", { scopes, label, ...limits });
|
|
51
|
+
}
|
|
52
|
+
importChunk(chunk) {
|
|
53
|
+
return this.send("POST", "/v1/admin/import", chunk);
|
|
54
|
+
}
|
|
55
|
+
finishImport(expectedRevision, reason = "Import catalog baseline") {
|
|
56
|
+
return this.send("POST", "/v1/admin/import/finish", { expectedRevision, reason });
|
|
57
|
+
}
|
|
58
|
+
exportCatalog(part) {
|
|
59
|
+
return this.send("GET", part ? `/v1/admin/export?part=${part}` : "/v1/admin/export");
|
|
60
|
+
}
|
|
61
|
+
taxonomy(body) {
|
|
62
|
+
return this.send("POST", "/v1/admin/taxonomy", body);
|
|
63
|
+
}
|
|
64
|
+
proposeReplacement(body) {
|
|
65
|
+
return this.send("POST", "/v1/admin/replacements", body);
|
|
66
|
+
}
|
|
67
|
+
confirmReplacement(proposalId, expectedRevision) {
|
|
68
|
+
return this.send("POST", "/v1/admin/replacements/confirm", { proposalId, expectedRevision });
|
|
69
|
+
}
|
|
70
|
+
gaps() {
|
|
71
|
+
return this.send("GET", "/v1/admin/gaps");
|
|
72
|
+
}
|
|
73
|
+
lineage() {
|
|
74
|
+
return this.send("GET", "/v1/admin/lineage");
|
|
75
|
+
}
|
|
76
|
+
reconcile() {
|
|
77
|
+
return this.send("GET", "/v1/admin/reconcile");
|
|
78
|
+
}
|
|
79
|
+
npmLinks() {
|
|
80
|
+
return this.send("GET", "/v1/admin/npm-links");
|
|
81
|
+
}
|
|
82
|
+
prepareDraft(body) {
|
|
83
|
+
return this.send("POST", "/v1/admin/drafts", body);
|
|
84
|
+
}
|
|
85
|
+
recordValidation(body) {
|
|
86
|
+
return this.send("POST", "/v1/admin/validations", body);
|
|
87
|
+
}
|
|
88
|
+
publishExample(body) {
|
|
89
|
+
return this.send("POST", "/v1/admin/publications", body);
|
|
90
|
+
}
|
|
91
|
+
withToken(token) {
|
|
92
|
+
return new X12iAdmin({ baseUrl: this.baseUrl, adminKey: token, fetch: this.fetchImpl });
|
|
93
|
+
}
|
|
94
|
+
operation(id) {
|
|
95
|
+
return this.send("GET", `/v1/admin/operations/${encodeURIComponent(id)}`);
|
|
96
|
+
}
|
|
97
|
+
cancelOperation(id) {
|
|
98
|
+
return this.send("POST", `/v1/admin/operations/${encodeURIComponent(id)}/cancel`, {});
|
|
99
|
+
}
|
|
100
|
+
resumeOperation(id) {
|
|
101
|
+
return this.send("POST", `/v1/admin/operations/${encodeURIComponent(id)}/resume`, {});
|
|
102
|
+
}
|
|
103
|
+
exampleBacklog() {
|
|
104
|
+
return this.send("POST", "/v1/admin/example-backlog", {});
|
|
105
|
+
}
|
|
106
|
+
async send(method, path, payload) {
|
|
107
|
+
const response = await this.fetchImpl(`${this.baseUrl}${path}`, {
|
|
108
|
+
method,
|
|
109
|
+
headers: {
|
|
110
|
+
authorization: `Bearer ${this.adminKey}`,
|
|
111
|
+
...(payload ? { "content-type": "application/json" } : {}),
|
|
112
|
+
},
|
|
113
|
+
body: payload ? JSON.stringify(payload) : undefined,
|
|
114
|
+
});
|
|
115
|
+
const text = await response.text();
|
|
116
|
+
let body = {};
|
|
117
|
+
try {
|
|
118
|
+
body = text ? JSON.parse(text) : {};
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
throw new SdkError(`Admin request returned ${response.status}: ${text.replace(/\s+/g, " ").slice(0, 180)}`, response.status, "ADMIN_REQUEST_FAILED");
|
|
122
|
+
}
|
|
123
|
+
if (!response.ok) {
|
|
124
|
+
const message = body && typeof body === "object" && "error" in body ? String(body.error?.message ?? response.status) : `Admin request failed (${response.status})`;
|
|
125
|
+
throw new SdkError(message, response.status, "ADMIN_REQUEST_FAILED");
|
|
126
|
+
}
|
|
127
|
+
return body;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export async function runAdminCli(args) {
|
|
131
|
+
const [command, ...rest] = args;
|
|
132
|
+
if (!command || command === "help") {
|
|
133
|
+
process.stdout.write(adminHelp());
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const admin = new X12iAdmin();
|
|
137
|
+
if (command === "catalog") {
|
|
138
|
+
const catalog = await admin.catalog();
|
|
139
|
+
process.stdout.write(`${JSON.stringify(catalog, null, 2)}\n`);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (command === "status") {
|
|
143
|
+
process.stdout.write(`${JSON.stringify(await admin.status(), null, 2)}\n`);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (command === "mcp") {
|
|
147
|
+
await runAdminMcp(admin);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (command === "runner") {
|
|
151
|
+
const directory = rest.find((arg) => !arg.startsWith("--"));
|
|
152
|
+
process.stdout.write(`${JSON.stringify(await runValidationRunner(admin, directory), null, 2)}\n`);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (command === "examples") {
|
|
156
|
+
const minted = await admin.mint(["catalog:read", "metadata:write"], "examples");
|
|
157
|
+
const scoped = admin.withToken(minted.token);
|
|
158
|
+
process.stdout.write(`${JSON.stringify(await scoped.exampleBacklog(), null, 2)}\n`);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (command === "import") {
|
|
162
|
+
const dryRun = rest.includes("--dry-run");
|
|
163
|
+
const fromFlag = rest.indexOf("--from");
|
|
164
|
+
const root = fromFlag >= 0 ? rest[fromFlag + 1] : "";
|
|
165
|
+
if (!root) {
|
|
166
|
+
process.stderr.write("x12i-sdk admin import --from <catalog> [--dry-run]\n");
|
|
167
|
+
process.exitCode = 1;
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const minted = await admin.mint(["catalog:read", "metadata:write", "examples:prepare", "examples:validate", "examples:publish", "release:prepare"], "import");
|
|
171
|
+
const scoped = admin.withToken(minted.token);
|
|
172
|
+
const result = await runImport(root, scoped, dryRun);
|
|
173
|
+
process.stdout.write(`${JSON.stringify({ ...result, capability: minted.id }, null, 2)}\n`);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (command === "export" || command === "gaps" || command === "lineage" || command === "reconcile" || command === "npm-links") {
|
|
177
|
+
const minted = await admin.mint(["catalog:read", "release:prepare"], command);
|
|
178
|
+
const reader = admin.withToken(minted.token);
|
|
179
|
+
const result = command === "export" ? await reader.exportCatalog() : command === "gaps" ? await reader.gaps() : command === "lineage" ? await reader.lineage() : command === "reconcile" ? await reader.reconcile() : await reader.npmLinks();
|
|
180
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (command === "refresh") {
|
|
184
|
+
const target = rest[0];
|
|
185
|
+
if (!target) {
|
|
186
|
+
const result = await admin.refreshAll((kind, batch) => {
|
|
187
|
+
process.stderr.write(`${kind} ${JSON.stringify(batch)}\n`);
|
|
188
|
+
});
|
|
189
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (target.startsWith("@") || target.includes("/")) {
|
|
193
|
+
process.stdout.write(`${JSON.stringify(await admin.refreshPackage(target), null, 2)}\n`);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (target === "listing" || target === "readmes" || target === "audits") {
|
|
197
|
+
const result = target === "listing" ? await admin.refresh("listing", 40) : await admin.refresh(target);
|
|
198
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
process.stderr.write(`Unknown refresh target ${target}\n${adminHelp()}`);
|
|
202
|
+
process.exitCode = 1;
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
process.stderr.write(adminHelp());
|
|
206
|
+
process.exitCode = 1;
|
|
207
|
+
}
|
|
208
|
+
function adminHelp() {
|
|
209
|
+
return `x12i-sdk admin catalog
|
|
210
|
+
Print the entire catalog as JSON. Newest publish is first. README bodies stay on each package.
|
|
211
|
+
|
|
212
|
+
x12i-sdk admin status
|
|
213
|
+
Package count, READMEs still due, and vulnerability scans still due.
|
|
214
|
+
|
|
215
|
+
x12i-sdk admin refresh
|
|
216
|
+
Update the org listing, then READMEs, then vulnerability scans.
|
|
217
|
+
|
|
218
|
+
x12i-sdk admin refresh listing|readmes|audits
|
|
219
|
+
Run one of those updates.
|
|
220
|
+
|
|
221
|
+
x12i-sdk admin refresh <package>
|
|
222
|
+
Update one package's record, README, and vulnerability scan.
|
|
223
|
+
|
|
224
|
+
x12i-sdk admin import --from <catalog> [--dry-run]
|
|
225
|
+
Check the handover hashes and import the managed catalog. --dry-run does not upload.
|
|
226
|
+
|
|
227
|
+
x12i-sdk admin export|gaps|lineage|reconcile|npm-links
|
|
228
|
+
Read the managed catalog. npm-links does not open pull requests.
|
|
229
|
+
|
|
230
|
+
x12i-sdk admin examples
|
|
231
|
+
Record a task for each package that still has no verified public example.
|
|
232
|
+
|
|
233
|
+
x12i-sdk admin runner <usage-directory>
|
|
234
|
+
Install with scripts disabled, run each consumer, and store a fixture validation.
|
|
235
|
+
|
|
236
|
+
x12i-sdk admin mcp
|
|
237
|
+
Admin MCP server. Set X12I_SDK_ADMIN_TOKEN to reuse a capability. Publishing tools dry-run unless asked.
|
|
238
|
+
|
|
239
|
+
Set X12I_SDK_URL for the catalog. Set X12I_SDK_ADMIN_KEY for any host other than 127.0.0.1 or localhost.
|
|
240
|
+
`;
|
|
241
|
+
}
|
|
242
|
+
function resolveAdminKey(baseUrl, explicit) {
|
|
243
|
+
if (explicit)
|
|
244
|
+
return explicit;
|
|
245
|
+
const fromEnv = process.env.X12I_SDK_ADMIN_KEY;
|
|
246
|
+
if (fromEnv)
|
|
247
|
+
return fromEnv;
|
|
248
|
+
let host = "";
|
|
249
|
+
try {
|
|
250
|
+
host = new URL(baseUrl).hostname;
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
host = "";
|
|
254
|
+
}
|
|
255
|
+
if (host === "127.0.0.1" || host === "localhost" || host === "[::1]")
|
|
256
|
+
return LOCAL_ADMIN_KEY;
|
|
257
|
+
throw new SdkError("Set X12I_SDK_ADMIN_KEY to use admin commands against this service.", 0, "ADMIN_KEY_REQUIRED");
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED