251148c3ff
## Summary - add repository-wide quality tooling and verification scaffolding, including CI workflows, pnpm workspace setup, ESLint/Prettier/markdown checks, and generated-output verification helpers - reorganize skill sources and generation flow by introducing canonical `_source` variants, generator/manifests, reusable helper abstractions, and shared web-automation/browser utilities - clean up and expand documentation so the root README flows into docs and skill docs, with clearer development, reviewer, installer, and workflow guidance ## Notable changes - docs flow and consistency cleanup across `README.md`, `docs/README.md`, and related docs - new scripts for `check`, docs verification, generated-file verification, shell portability, and safe directory replacement - refactors in Atlassian and web-automation skill runtimes to reduce duplication and centralize reusable code - changelog, development documentation, and CI surface updates ## Test Plan - [ ] `pnpm run check` - [ ] review generated/manifests and skill sync outputs - [ ] smoke-check docs flow from `README.md` to `docs/README.md` to skill docs ## Notes - this branch currently includes tracked `skills/web-automation/shared/node_modules` content that should be reviewed carefully as potentially noisy/accidental committed artifacts Co-authored-by: Stefano Fiorini <stefano.fiorini@firsthorizon.com> Reviewed-on: #1
42 lines
1.4 KiB
JavaScript
42 lines
1.4 KiB
JavaScript
#!/usr/bin/env node
|
||
// ⚠️ GENERATED FILE – do not edit directly. Edit the canonical source in skills/web-automation/shared/ and run `pnpm run sync:pi`.
|
||
|
||
import fs from "node:fs";
|
||
import path from "node:path";
|
||
import { fileURLToPath } from "node:url";
|
||
|
||
const __filename = fileURLToPath(import.meta.url);
|
||
const __dirname = path.dirname(__filename);
|
||
|
||
function fail(message, details) {
|
||
const payload = { error: message };
|
||
if (details) payload.details = details;
|
||
process.stderr.write(`${JSON.stringify(payload)}\n`);
|
||
process.exit(1);
|
||
}
|
||
|
||
async function main() {
|
||
try {
|
||
await import("cloakbrowser");
|
||
await import("playwright-core");
|
||
} catch (error) {
|
||
fail(
|
||
"Missing dependency/config: web-automation requires cloakbrowser and playwright-core.",
|
||
error instanceof Error ? error.message : String(error)
|
||
);
|
||
}
|
||
|
||
const browsePath = path.join(__dirname, "browse.ts");
|
||
const browseSource = fs.readFileSync(browsePath, "utf8");
|
||
if (!/launchPersistentContext/.test(browseSource) || !/from ['"]cloakbrowser['"]/.test(browseSource)) {
|
||
fail("browse.ts is not configured for CloakBrowser.");
|
||
}
|
||
|
||
process.stdout.write("OK: cloakbrowser + playwright-core installed\n");
|
||
process.stdout.write("OK: CloakBrowser integration detected in browse.ts\n");
|
||
}
|
||
|
||
main().catch((error) => {
|
||
fail("Install check failed.", error instanceof Error ? error.message : String(error));
|
||
});
|