Files
openclaw/scripts/write-plugin-sdk-entry-dts.ts
T
Tabula Myriad a9ae1a6778 feat: Triad development iteration complete
Matrix Protocol:
- docker-compose.matrix.yml: Dendrite homeserver + PostgreSQL + Nginx TLS
- src/channels/plugins/matrix-channel.ts: OpenClaw plugin implementation
- docs/matrix-triad-setup.md: Setup guide with auth scheme (@tm1-4:triad.local)

MCP Server Integration:
- docs/mcp-triad-integration.md: SearXNG, Playwright, GitHub MCP configs
- docs/mcp-curiosity-mapping.md: Gap-to-capability mapping

Node Sync Architecture:
- src/services/node-sync-service.ts: WebSocket peer sync + presence detection
- src/services/node-sync-service.test.ts: Unit tests
- docs/node-sync-architecture.md: Architecture docs

Triad Resilience:
- scripts/triad-corruption-check.mjs: SQLite + log + config + git integrity
- docs/triad-resilience.md: Recovery procedures
- .secure/deployment-logs/README.md: Schema v2
- skills/triad-heartbeat/SKILL.md: Corruption check integration

NPM Publish Workflow:
- scripts/npm-publish.mjs: version, changelog, validate, publish, rollback
- .github/workflows/npm-publish.yml: GitHub Actions with provenance
- docs/npm-publish-guide.md: Complete documentation

All deliverables tested in Docker before production.
2026-03-24 00:44:50 -04:00

81 lines
2.7 KiB
TypeScript
Executable File

import fs from "node:fs";
import path from "node:path";
import { pluginSdkEntrypoints } from "./lib/plugin-sdk-entries.mjs";
const RUNTIME_SHIMS: Partial<Record<string, string>> = {
"secret-input-runtime": [
"export {",
" hasConfiguredSecretInput,",
" normalizeResolvedSecretInputString,",
" normalizeSecretInputString,",
'} from "./config-runtime.js";',
"",
].join("\n"),
"webhook-path": [
"/** Normalize webhook paths into the canonical registry form used by route lookup. */",
"export function normalizeWebhookPath(raw) {",
" const trimmed = raw.trim();",
" if (!trimmed) {",
' return "/";',
" }",
' const withSlash = trimmed.startsWith("/") ? trimmed : `/${trimmed}`;',
' if (withSlash.length > 1 && withSlash.endsWith("/")) {',
" return withSlash.slice(0, -1);",
" }",
" return withSlash;",
"}",
"",
"/** Resolve the effective webhook path from explicit path, URL, or default fallback. */",
"export function resolveWebhookPath(params) {",
" const trimmedPath = params.webhookPath?.trim();",
" if (trimmedPath) {",
" return normalizeWebhookPath(trimmedPath);",
" }",
" if (params.webhookUrl?.trim()) {",
" try {",
" const parsed = new URL(params.webhookUrl);",
' return normalizeWebhookPath(parsed.pathname || "/");',
" } catch {",
" return null;",
" }",
" }",
" return params.defaultPath ?? null;",
"}",
"",
].join("\n"),
};
const TYPE_SHIMS: Partial<Record<string, string>> = {
"secret-input-runtime": [
"export {",
" hasConfiguredSecretInput,",
" normalizeResolvedSecretInputString,",
" normalizeSecretInputString,",
'} from "./config-runtime.js";',
"",
].join("\n"),
};
// `tsc` emits declarations under `dist/plugin-sdk/src/plugin-sdk/*` because the source lives
// at `src/plugin-sdk/*` and `rootDir` is `.` (repo root, to support cross-src/extensions refs).
//
// Our package export map points subpath `types` at `dist/plugin-sdk/<entry>.d.ts`, so we
// generate stable entry d.ts files that re-export the real declarations.
for (const entry of pluginSdkEntrypoints) {
const typeOut = path.join(process.cwd(), `dist/plugin-sdk/${entry}.d.ts`);
fs.mkdirSync(path.dirname(typeOut), { recursive: true });
fs.writeFileSync(
typeOut,
TYPE_SHIMS[entry] ?? `export * from "./src/plugin-sdk/${entry}.js";\n`,
"utf8",
);
const runtimeShim = RUNTIME_SHIMS[entry];
if (!runtimeShim) {
continue;
}
const runtimeOut = path.join(process.cwd(), `dist/plugin-sdk/${entry}.js`);
fs.mkdirSync(path.dirname(runtimeOut), { recursive: true });
fs.writeFileSync(runtimeOut, runtimeShim, "utf8");
}