permdock 0.0.0 → 0.2.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 +327 -1
- package/dist/a2a/index.d.ts +169 -0
- package/dist/a2a/index.js +232 -0
- package/dist/adapter-context-mlWsVGGg.js +23 -0
- package/dist/ai-sdk/index.d.ts +95 -0
- package/dist/ai-sdk/index.js +154 -0
- package/dist/approval-required-TzNB9oQA.js +6 -0
- package/dist/approvals/index.d.ts +3 -0
- package/dist/approvals/index.js +5 -0
- package/dist/approvals-DbYAuNkG.js +224 -0
- package/dist/approvers-DT4AVyIg.js +52 -0
- package/dist/arazzo-BAgw9ap6.js +70 -0
- package/dist/arazzo-cmvX2jDe.js +54 -0
- package/dist/authzen/index.d.ts +39 -0
- package/dist/authzen/index.js +302 -0
- package/dist/better-auth/index.d.ts +109 -0
- package/dist/better-auth/index.js +344 -0
- package/dist/better-supabase/index.d.ts +206 -0
- package/dist/better-supabase/index.js +620 -0
- package/dist/bind-CVy3Espv.d.ts +25 -0
- package/dist/bind-VnYn2HKq.js +97 -0
- package/dist/boundary-BM8a_P6E.js +13 -0
- package/dist/boundary-BmHxVH1J.d.ts +15 -0
- package/dist/budget-JqcRqyhK.d.ts +11 -0
- package/dist/budget-NbEtbJC_.js +11 -0
- package/dist/canonical-json-DemiK4Vp.js +26 -0
- package/dist/capability-4qPdO9gk.js +173 -0
- package/dist/capability-Dq43tT1u.d.ts +99 -0
- package/dist/catalog/index.d.ts +12 -0
- package/dist/catalog/index.js +2 -0
- package/dist/catalog-BjZSovXQ.js +2 -0
- package/dist/catalog-doc-Dsc9y7sd.js +309 -0
- package/dist/catalog-h2tlKFkq.js +48 -0
- package/dist/catalog-path-CnI0XTFK.js +12 -0
- package/dist/catalog-z8q6bi_r.js +55 -0
- package/dist/claude-agent/index.d.ts +72 -0
- package/dist/claude-agent/index.js +77 -0
- package/dist/clerk/index.d.ts +65 -0
- package/dist/clerk/index.js +301 -0
- package/dist/cli/bin.d.ts +1 -0
- package/dist/cli/bin.js +20 -0
- package/dist/cli/index.d.ts +46 -0
- package/dist/cli/index.js +5 -0
- package/dist/clients-C7zLFuWT.d.ts +12 -0
- package/dist/clients-DjU5ABMy.js +23 -0
- package/dist/cloud/index.d.ts +90 -0
- package/dist/cloud/index.js +404 -0
- package/dist/cloud-BGhHS-lY.js +50 -0
- package/dist/cloud-Bo3e9Ak3.js +118 -0
- package/dist/collect-DDDv_ESs.js +502 -0
- package/dist/collect-DLlujdHC.js +83 -0
- package/dist/collect-rG2IQ3t0.js +2 -0
- package/dist/commands-DWOrSQic.js +97 -0
- package/dist/compact-y6vfu2_f.js +19 -0
- package/dist/compare-pfyVnBjE.js +12 -0
- package/dist/compile/index.d.ts +3 -0
- package/dist/compile/index.js +2 -0
- package/dist/compile-Ba4blROR.js +613 -0
- package/dist/compile-CNnl6uIt.d.ts +94 -0
- package/dist/config-BJiM-xAm.js +157 -0
- package/dist/config-Bn00Z3ks.js +36 -0
- package/dist/config-report-Dw_JcUqT.js +44 -0
- package/dist/connection-CU8MQxRi.js +194 -0
- package/dist/context-Ttp0ekMT.js +82 -0
- package/dist/convex/index.d.ts +45 -0
- package/dist/convex/index.js +65 -0
- package/dist/create-BWyx3jua.d.ts +245 -0
- package/dist/create-CPhDL6qx.js +253 -0
- package/dist/credential-8P81ff4u.js +306 -0
- package/dist/delegation-D8pUEuce.js +103 -0
- package/dist/describe-B_gVZEVi.js +94 -0
- package/dist/describe-PdoqESvg.d.ts +36 -0
- package/dist/diff-B8Tunc3o.js +451 -0
- package/dist/diff-CzqLxZ77.js +48 -0
- package/dist/digest-B3kc_PgQ.d.ts +19 -0
- package/dist/digest-BI-6aa6d.js +27 -0
- package/dist/doctor-WpvG6p4k.js +1194 -0
- package/dist/doctor-collect-ByfYlNv1.js +664 -0
- package/dist/doctor-rOr-4ZfS.js +53 -0
- package/dist/drizzle/index.d.ts +73 -0
- package/dist/drizzle/index.js +160 -0
- package/dist/duration-xK2jGFVc.js +25 -0
- package/dist/elysia/index.d.ts +49 -0
- package/dist/elysia/index.js +59 -0
- package/dist/errors-CWfoNg9N.js +47 -0
- package/dist/errors-Cz5zn0mW.js +123 -0
- package/dist/errors-DAqevpNk.d.ts +125 -0
- package/dist/errors-DRnGZHzF.js +30 -0
- package/dist/evaluation-items-CfCCejQd.js +40 -0
- package/dist/evaluations-tz6D9A2G.js +461 -0
- package/dist/eve/index.d.ts +86 -0
- package/dist/eve/index.js +176 -0
- package/dist/expiry-BoBJ8Tvc.js +7 -0
- package/dist/express/index.d.ts +23 -0
- package/dist/express/index.js +78 -0
- package/dist/fastify/index.d.ts +33 -0
- package/dist/fastify/index.js +92 -0
- package/dist/fields-BMl1RxoX.js +26 -0
- package/dist/files-DWUN9PzI.js +125 -0
- package/dist/fixtures-ht28Cplr.js +67 -0
- package/dist/freeze-CrU8nQeX.js +60 -0
- package/dist/from-snapshot-C3sHpZNS.js +569 -0
- package/dist/generate-CH7ThJ14.js +173 -0
- package/dist/grantee-Cv5Sogfv.js +602 -0
- package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
- package/dist/headers-BZSDieNT.js +6 -0
- package/dist/headers-Cf-zWvsO.d.ts +6 -0
- package/dist/helpers-H_KARDVC.js +421 -0
- package/dist/hono/index.d.ts +48 -0
- package/dist/hono/index.js +99 -0
- package/dist/hosted-DJQw46hn.js +266 -0
- package/dist/http-BIhmLfCc.js +95 -0
- package/dist/http-DPuDaChb.d.ts +13 -0
- package/dist/http-SO7qGttf.js +44 -0
- package/dist/ids-DC4V4CFu.js +18 -0
- package/dist/index-A0YNL8jZ.d.ts +177 -0
- package/dist/index-CtE07CBF.d.ts +6 -0
- package/dist/index-D3vbkoSI.d.ts +483 -0
- package/dist/index-D6_cSa1z.d.ts +201 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +26 -0
- package/dist/instance-options-BK_rNOSC.d.ts +11 -0
- package/dist/instance-options-Dhhcnm3y.js +22 -0
- package/dist/json-schema-BsAflUGW.js +106 -0
- package/dist/jwt/index.d.ts +91 -0
- package/dist/jwt/index.js +590 -0
- package/dist/kernel-GSQnMz3O.js +208 -0
- package/dist/kysely/index.d.ts +78 -0
- package/dist/kysely/index.js +129 -0
- package/dist/live-options-H2eG8dfJ.js +60 -0
- package/dist/load-DhWEB9P1.js +75 -0
- package/dist/load-DwJUafYN.js +2 -0
- package/dist/load-jose-BL6LH4bL.js +11 -0
- package/dist/lru-8q4WZjBV.js +28 -0
- package/dist/manifest-iaoBXHKc.js +783 -0
- package/dist/manifest-uDS9y5de.d.ts +206 -0
- package/dist/map-AcxK9o_D.js +147 -0
- package/dist/map-claims-Z4QZOiFF.js +369 -0
- package/dist/map-error-pgUWNNtG.js +23 -0
- package/dist/markers-B0hYLvMD.js +60 -0
- package/dist/may-use-DndQ5tQ-.js +77 -0
- package/dist/mcp/index.d.ts +159 -0
- package/dist/mcp/index.js +603 -0
- package/dist/nest/index.d.ts +75 -0
- package/dist/nest/index.js +261 -0
- package/dist/next/client.d.ts +23 -0
- package/dist/next/client.js +33 -0
- package/dist/next/index.d.ts +93 -0
- package/dist/next/index.js +180 -0
- package/dist/next/plugin.d.ts +14 -0
- package/dist/next/plugin.js +33 -0
- package/dist/node/index.d.ts +24 -0
- package/dist/node/index.js +34 -0
- package/dist/openai/index.d.ts +62 -0
- package/dist/openai/index.js +92 -0
- package/dist/openapi/index.d.ts +176 -0
- package/dist/openapi/index.js +3 -0
- package/dist/openapi-Bbg4wGVL.js +164 -0
- package/dist/openapi-BqRBvAng.js +538 -0
- package/dist/openapi-CqqEbHsL.js +250 -0
- package/dist/openapi-import-cmwetbzw.js +5959 -0
- package/dist/openapi-schema--ARjyfQr.js +6902 -0
- package/dist/orpc/index.d.ts +51 -0
- package/dist/orpc/index.js +145 -0
- package/dist/otel/index.d.ts +13 -0
- package/dist/otel/index.js +202 -0
- package/dist/package-root-zGkxO3oN.js +30 -0
- package/dist/parse-BuyjxhZV.js +53 -0
- package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
- package/dist/parse-local-manifest-BrMozJCo.js +36 -0
- package/dist/pdp/index.d.ts +22 -0
- package/dist/pdp/index.js +682 -0
- package/dist/peer-BOr_kJE1.js +31 -0
- package/dist/permdock-CzqXjCpU.js +3471 -0
- package/dist/permissions-CDgvKG5L.d.ts +52 -0
- package/dist/permissions-CpZrivYv.js +142 -0
- package/dist/permissions-DVoF6dMt.js +662 -0
- package/dist/permissions-DttnqqxC.d.ts +214 -0
- package/dist/pins-8ILTftC9.js +12 -0
- package/dist/policy-CFZAr_Al.d.ts +2252 -0
- package/dist/policy-D8UFyERw.d.ts +20 -0
- package/dist/policy-xyWg7QdR.js +1122 -0
- package/dist/powersync-A8x_Yyvh.js +2 -0
- package/dist/powersync-C7kLglqX.js +540 -0
- package/dist/powersync-yW1UUFzp.js +62 -0
- package/dist/prisma/index.d.ts +136 -0
- package/dist/prisma/index.js +455 -0
- package/dist/problem-B43ztKIm.js +191 -0
- package/dist/problem-details-CkL50EEf.d.ts +7 -0
- package/dist/problem-details-_AMOYz-w.js +144 -0
- package/dist/prompt-CXYhLfsS.js +32 -0
- package/dist/protected-CNsMzrVd.d.ts +27 -0
- package/dist/protected-Cs6kTaHo.js +100 -0
- package/dist/protected-bZs6rbT1.d.ts +40 -0
- package/dist/provider-Cjr62YMV.d.ts +6 -0
- package/dist/provider-DLzpb2Xz.js +52 -0
- package/dist/provider-store-DNyC1y48.js +43 -0
- package/dist/react/index.d.ts +8 -0
- package/dist/react/index.js +7 -0
- package/dist/react/provider-client.d.ts +2 -0
- package/dist/react/provider-client.js +3 -0
- package/dist/react-native/index.d.ts +198 -0
- package/dist/react-native/index.js +696 -0
- package/dist/refs-KYb4ntaz.js +91 -0
- package/dist/relations-cjOL01hZ.js +505 -0
- package/dist/replay-BsOyTrdV.js +28 -0
- package/dist/replay-sqBGMnNs.d.ts +5 -0
- package/dist/resource-ref-CaS9yVPi.js +20 -0
- package/dist/revocations-Bhr0aMIC.js +27 -0
- package/dist/revocations-Cy06JNx2.d.ts +21 -0
- package/dist/rls-BMNydpHk.js +2521 -0
- package/dist/rls-CEvs64Kj.js +238 -0
- package/dist/rls-fields-BMasREhR.js +3502 -0
- package/dist/rls-graph-pc9fuXYm.js +435 -0
- package/dist/rls-import-D8F7j35Q.js +943 -0
- package/dist/rls-migrate-7wikfrVI.js +367 -0
- package/dist/rls-ownership-B5Lkq62W.js +843 -0
- package/dist/rls-shared-aOQ4hGTO.js +493 -0
- package/dist/rls-verify-D8B7dOTh.js +745 -0
- package/dist/row-check-Dt35czLy.d.ts +40 -0
- package/dist/rpc-DOK54_CS.js +89 -0
- package/dist/run-YXCJDNYk.js +174 -0
- package/dist/runtime-CB8gQFvS.js +11 -0
- package/dist/saas-Bj_FFkjN.js +1203 -0
- package/dist/schema-D3MnDMxa.js +300 -0
- package/dist/scim/index.d.ts +2 -0
- package/dist/scim/index.js +2 -0
- package/dist/scim-BFGBBAqR.js +1445 -0
- package/dist/scopes-CVdPrWN-.js +239 -0
- package/dist/server/index.d.ts +134 -0
- package/dist/server/index.js +11 -0
- package/dist/server-DlZ28Oz5.js +268 -0
- package/dist/sha256-BO0swRXL.js +150 -0
- package/dist/shared-DRu8VFVM.js +123 -0
- package/dist/sink-Bd9PSyfq.js +141 -0
- package/dist/sink-Gs6TTVa-.d.ts +104 -0
- package/dist/skills-Biq5uup3.js +192 -0
- package/dist/skills-JaymNCdK.js +56 -0
- package/dist/snapshot-Enxd0n-s.js +975 -0
- package/dist/snapshot-cache-D6jLelln.js +44 -0
- package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
- package/dist/solid/index.d.ts +93 -0
- package/dist/solid/index.js +188 -0
- package/dist/sources-B0UvrJ21.js +534 -0
- package/dist/sources-BcJgw0lt.d.ts +192 -0
- package/dist/sql-xdg5f4Fi.js +27 -0
- package/dist/src-CSbUiozF.js +568 -0
- package/dist/ssf/index.d.ts +4 -0
- package/dist/ssf/index.js +596 -0
- package/dist/store-DMAWwAJV.js +371 -0
- package/dist/store-D_pjn91-.d.ts +36 -0
- package/dist/store-options-yO0V6gRn.js +716 -0
- package/dist/stores-4_sqiOA1.js +87 -0
- package/dist/stores-DVR5NHLE.d.ts +52 -0
- package/dist/stream-DDpvynSB.js +66 -0
- package/dist/stream-DlvG2hs-.d.ts +12 -0
- package/dist/style-CTm1AXDT.js +22 -0
- package/dist/subject-C6dLxqHU.js +24 -0
- package/dist/subject-settings-BwBmCdTR.js +128 -0
- package/dist/supabase/index.d.ts +183 -0
- package/dist/supabase/index.js +5 -0
- package/dist/supabase/middleware.d.ts +82 -0
- package/dist/supabase/middleware.js +102 -0
- package/dist/supabase-CwafwxxF.js +83 -0
- package/dist/supabase-DTBaC20O.js +774 -0
- package/dist/supabase-config-Bs44dare.js +472 -0
- package/dist/supabase-hook-BuxLQLpU.js +1814 -0
- package/dist/supabase-hook-D5qVd_D8.js +2 -0
- package/dist/supautils-DYZnzRWV.js +91 -0
- package/dist/svelte/PermissionBoundary.svelte +37 -0
- package/dist/svelte/Protected.svelte +40 -0
- package/dist/svelte/index.d.ts +13 -0
- package/dist/svelte/index.js +107 -0
- package/dist/svelte/runtime.d.ts +7 -0
- package/dist/svelte/runtime.js +4 -0
- package/dist/svelte/source.d.ts +13 -0
- package/dist/svelte/source.js +11 -0
- package/dist/terminal/index.d.ts +163 -0
- package/dist/terminal/index.js +833 -0
- package/dist/testing/index.d.ts +745 -0
- package/dist/testing/index.js +3672 -0
- package/dist/testing/saas/index.d.ts +194 -0
- package/dist/testing/saas/index.js +3 -0
- package/dist/testing/saas/permissions.d.ts +2 -0
- package/dist/testing/saas/permissions.js +2 -0
- package/dist/text-diff-BdkkYSbi.js +15 -0
- package/dist/thenable-okc2xDsj.js +10 -0
- package/dist/timeout-D51niuQP.js +8 -0
- package/dist/token-CIWxJOCh.js +50 -0
- package/dist/trpc/index.d.ts +61 -0
- package/dist/trpc/index.js +122 -0
- package/dist/types-9AWO9EGt.d.ts +197 -0
- package/dist/types-BPxgszlT.d.ts +550 -0
- package/dist/types-BVyImy5I.d.ts +120 -0
- package/dist/types-Bvc4oWT6.d.ts +9 -0
- package/dist/types-C3s9xVJG.d.ts +48 -0
- package/dist/types-Dnemwd77.d.ts +183 -0
- package/dist/types-kxznc7cn.d.ts +52 -0
- package/dist/types-vKyAMtcX.d.ts +157 -0
- package/dist/types-vNSDF7Dq.d.ts +66 -0
- package/dist/types-yF5LmQVD.d.ts +306 -0
- package/dist/unplugin/index.d.ts +7 -0
- package/dist/unplugin/index.js +31 -0
- package/dist/usage-D07N9QJ3.js +42 -0
- package/dist/usage-D82l1CwK.js +2 -0
- package/dist/usage-DG1oeCca.js +693 -0
- package/dist/validation-error-CnjZ4t92.js +33 -0
- package/dist/validation-error-CtF23SrC.d.ts +26 -0
- package/dist/validity-uOp8UpYn.js +245 -0
- package/dist/verifier-BxBo6I44.js +466 -0
- package/dist/version-BvacVTZR.js +17 -0
- package/dist/views-Soe7bGSC.js +95 -0
- package/dist/vocabulary-DA8a8zif.d.ts +56 -0
- package/dist/vue/index.d.ts +79 -0
- package/dist/vue/index.js +196 -0
- package/dist/watch-Etoa_Mvr.js +2 -0
- package/dist/watch-UihESpsJ.js +128 -0
- package/dist/webmcp/index.d.ts +75 -0
- package/dist/webmcp/index.js +307 -0
- package/package.json +450 -5
- package/rulesets/permdock.yaml +29 -0
- package/schemas/approval-request-v1.json +175 -0
- package/schemas/catalog-v1.json +535 -0
- package/schemas/openapi/oas-3.1.json +1298 -0
- package/schemas/openapi/oas-3.2.json +1516 -0
- package/schemas/openapi/overlay-1.1.json +79 -0
- package/schemas/supabase-claims-v1.json +144 -0
- package/schemas/supabase-manifest-v1.json +361 -0
- package/skills/permdock/SKILL.md +66 -0
- package/skills/permdock-agents/SKILL.md +77 -0
- package/skills/permdock-agents/references/runtimes.md +213 -0
- package/skills/permdock-approvals/SKILL.md +80 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +94 -0
- package/skills/permdock-audit/SKILL.md +67 -0
- package/skills/permdock-credentials/SKILL.md +55 -0
- package/skills/permdock-credentials/references/tokens-keys-links.md +132 -0
- package/skills/permdock-data/SKILL.md +57 -0
- package/skills/permdock-data/references/queries-and-rls.md +62 -0
- package/skills/permdock-data/references/relationships.md +67 -0
- package/skills/permdock-tenancy/SKILL.md +80 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +89 -0
- package/skills/permdock-wire/SKILL.md +116 -0
- package/skills/permdock-wire/references/adapters.md +492 -0
- package/skills/permdock-wire/references/policy-options.md +45 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { t as byCodePoint } from "./compare-pfyVnBjE.js";
|
|
2
|
+
import { t as packageRoot } from "./package-root-zGkxO3oN.js";
|
|
3
|
+
import { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
5
|
+
import { createRequire } from "node:module";
|
|
6
|
+
//#region src/cli/skills.ts
|
|
7
|
+
const SKILL_NAMES = [
|
|
8
|
+
"permdock",
|
|
9
|
+
"permdock-wire",
|
|
10
|
+
"permdock-audit",
|
|
11
|
+
"permdock-agents",
|
|
12
|
+
"permdock-approvals",
|
|
13
|
+
"permdock-tenancy",
|
|
14
|
+
"permdock-data",
|
|
15
|
+
"permdock-credentials"
|
|
16
|
+
];
|
|
17
|
+
const AGENT_FOLDERS = {
|
|
18
|
+
agents: ".agents/skills",
|
|
19
|
+
claude: ".claude/skills",
|
|
20
|
+
cursor: ".cursor/skills"
|
|
21
|
+
};
|
|
22
|
+
/** The `--agent` names `skills install` knows, with the folder each writes. */
|
|
23
|
+
const SKILL_AGENTS = AGENT_FOLDERS;
|
|
24
|
+
/** Agents whose config folder (`.claude`, `.cursor`, `.agents`) the project already has. */
|
|
25
|
+
function detectedAgents(cwd) {
|
|
26
|
+
return Object.entries(AGENT_FOLDERS).filter(([, folder]) => existsSync(join(cwd, dirname(folder)))).map(([agent]) => agent);
|
|
27
|
+
}
|
|
28
|
+
function runSkills(input) {
|
|
29
|
+
switch (input.action) {
|
|
30
|
+
case void 0:
|
|
31
|
+
case "install":
|
|
32
|
+
case "update": return input.check === true ? runSkillsCheck({
|
|
33
|
+
cwd: input.cwd,
|
|
34
|
+
agents: input.agents
|
|
35
|
+
}) : runSkillsInstall({
|
|
36
|
+
cwd: input.cwd,
|
|
37
|
+
agents: input.agents
|
|
38
|
+
});
|
|
39
|
+
case "list": return listSkills(input.cwd);
|
|
40
|
+
default: return {
|
|
41
|
+
code: 2,
|
|
42
|
+
output: `unknown skills command '${input.action}'. Use install, list or update.`
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function runSkillsInstall(input) {
|
|
47
|
+
const source = resolveSkillsRoot(input.cwd, input.bundled ?? join(packageRoot(), "skills"));
|
|
48
|
+
if (source === void 0) return {
|
|
49
|
+
code: 2,
|
|
50
|
+
output: "PermDock CLI: permdock package with skills/ not found. Add permdock as a dependency."
|
|
51
|
+
};
|
|
52
|
+
const version = readPermdockVersion(source);
|
|
53
|
+
const copied = [];
|
|
54
|
+
const linked = [];
|
|
55
|
+
for (const target of destinations(input.cwd, source, input.agents)) {
|
|
56
|
+
if (target.sameAs !== void 0) {
|
|
57
|
+
linked.push(`${target.shown} to ${target.sameAs}`);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
cpSync(target.from, target.real, { recursive: true });
|
|
61
|
+
copied.push(target.shown);
|
|
62
|
+
}
|
|
63
|
+
mkdirSync(join(input.cwd, ".permdock"), { recursive: true });
|
|
64
|
+
writeFileSync(join(input.cwd, ".permdock/skills-lock.json"), `${JSON.stringify({
|
|
65
|
+
version,
|
|
66
|
+
skills: [...SKILL_NAMES]
|
|
67
|
+
}, null, 2)}\n`);
|
|
68
|
+
const links = linked.length === 0 ? "" : `; linked ${linked.join(", ")}`;
|
|
69
|
+
return {
|
|
70
|
+
code: 0,
|
|
71
|
+
output: `installed ${copied.join(", ") || "no skills"}${links} (permdock@${version})`
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Compares the installed skills with the ones this version ships and writes
|
|
76
|
+
* nothing: exit 1 lists every file that is missing or differs. Without
|
|
77
|
+
* agents it checks the agent folders the project has, else every folder.
|
|
78
|
+
*/
|
|
79
|
+
function runSkillsCheck(input) {
|
|
80
|
+
const source = resolveSkillsRoot(input.cwd, input.bundled ?? join(packageRoot(), "skills"));
|
|
81
|
+
if (source === void 0) return {
|
|
82
|
+
code: 2,
|
|
83
|
+
output: "PermDock CLI: permdock package with skills/ not found. Add permdock as a dependency."
|
|
84
|
+
};
|
|
85
|
+
const version = readPermdockVersion(source);
|
|
86
|
+
const detected = detectedAgents(input.cwd);
|
|
87
|
+
const agents = input.agents.length > 0 ? input.agents : detected.length > 0 ? detected : Object.keys(AGENT_FOLDERS);
|
|
88
|
+
const stale = [];
|
|
89
|
+
for (const target of destinations(input.cwd, source, agents)) {
|
|
90
|
+
if (target.sameAs !== void 0) continue;
|
|
91
|
+
for (const file of filesOf(target.from)) {
|
|
92
|
+
const installed = join(target.real, file);
|
|
93
|
+
if (!existsSync(installed) || !readFileSync(installed).equals(readFileSync(join(target.from, file)))) stale.push(`${target.shown}/${file}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return stale.length === 0 ? {
|
|
97
|
+
code: 0,
|
|
98
|
+
output: `skills match permdock@${version}`
|
|
99
|
+
} : {
|
|
100
|
+
code: 1,
|
|
101
|
+
output: `skills differ from permdock@${version}: ${stale.join(", ")}. Run permdock skills install.`
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function destinations(cwd, source, agents) {
|
|
105
|
+
const seen = /* @__PURE__ */ new Map();
|
|
106
|
+
const list = [];
|
|
107
|
+
for (const folder of resolveTargets(agents)) for (const name of SKILL_NAMES) {
|
|
108
|
+
const from = join(source, name);
|
|
109
|
+
if (!existsSync(from)) continue;
|
|
110
|
+
const shown = `${folder}/${name}`;
|
|
111
|
+
const real = followLinks(join(cwd, folder, name));
|
|
112
|
+
const sameAs = seen.get(real);
|
|
113
|
+
list.push(sameAs === void 0 ? {
|
|
114
|
+
from,
|
|
115
|
+
shown,
|
|
116
|
+
real
|
|
117
|
+
} : {
|
|
118
|
+
from,
|
|
119
|
+
shown,
|
|
120
|
+
real,
|
|
121
|
+
sameAs
|
|
122
|
+
});
|
|
123
|
+
if (sameAs === void 0) seen.set(real, shown);
|
|
124
|
+
}
|
|
125
|
+
return list;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The path with every symlink on it followed, including a link whose target
|
|
129
|
+
* does not exist yet, so a skill folder linked to another agent's folder is
|
|
130
|
+
* written through the link instead of over it.
|
|
131
|
+
*/
|
|
132
|
+
function followLinks(path, depth = 0) {
|
|
133
|
+
if (depth > 32) throw new Error(`PermDock CLI: too many symlinks at ${path}`);
|
|
134
|
+
let link;
|
|
135
|
+
try {
|
|
136
|
+
link = lstatSync(path).isSymbolicLink();
|
|
137
|
+
} catch {
|
|
138
|
+
const parent = dirname(path);
|
|
139
|
+
return parent === path ? path : join(followLinks(parent, depth + 1), basename(path));
|
|
140
|
+
}
|
|
141
|
+
if (!link) return realpathSync(path);
|
|
142
|
+
try {
|
|
143
|
+
return realpathSync(path);
|
|
144
|
+
} catch {
|
|
145
|
+
return followLinks(resolve(dirname(path), readlinkSync(path)), depth + 1);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function filesOf(root, folder = root) {
|
|
149
|
+
return readdirSync(folder, { withFileTypes: true }).toSorted((a, b) => byCodePoint(a.name, b.name)).flatMap((entry) => {
|
|
150
|
+
const path = join(folder, entry.name);
|
|
151
|
+
if (entry.isDirectory()) return filesOf(root, path);
|
|
152
|
+
return entry.isFile() ? [relative(root, path).split("\\").join("/")] : [];
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function listSkills(cwd) {
|
|
156
|
+
const lockPath = join(cwd, ".permdock/skills-lock.json");
|
|
157
|
+
const lock = existsSync(lockPath) ? JSON.parse(readFileSync(lockPath, "utf8")) : {};
|
|
158
|
+
const lines = ["permdock skills", ""];
|
|
159
|
+
for (const name of SKILL_NAMES) {
|
|
160
|
+
const places = Object.values(AGENT_FOLDERS).filter((folder) => existsSync(join(cwd, folder, name, "SKILL.md")));
|
|
161
|
+
lines.push(` ${name} ${places.length > 0 ? places.join(", ") : "not installed"}`);
|
|
162
|
+
}
|
|
163
|
+
if (lock.version !== void 0) lines.push("", ` lock ${lock.version}`);
|
|
164
|
+
return {
|
|
165
|
+
code: 0,
|
|
166
|
+
output: `${lines.join("\n")}\n`
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function resolveTargets(agents) {
|
|
170
|
+
if (agents.length === 0) return Object.values(AGENT_FOLDERS);
|
|
171
|
+
return agents.map((agent) => {
|
|
172
|
+
const key = agent === "agent" ? "agents" : agent;
|
|
173
|
+
return AGENT_FOLDERS[key] ?? `.${key}/skills`;
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
function resolveSkillsRoot(cwd, bundled) {
|
|
177
|
+
try {
|
|
178
|
+
const pkg = createRequire(resolve(cwd, "package.json")).resolve("permdock/package.json");
|
|
179
|
+
const root = join(dirname(pkg), "skills");
|
|
180
|
+
if (existsSync(root)) return root;
|
|
181
|
+
} catch {}
|
|
182
|
+
const local = join(cwd, "node_modules/permdock/skills");
|
|
183
|
+
if (existsSync(local)) return local;
|
|
184
|
+
return existsSync(bundled) ? bundled : void 0;
|
|
185
|
+
}
|
|
186
|
+
function readPermdockVersion(skillsRoot) {
|
|
187
|
+
const pkg = join(dirname(skillsRoot), "package.json");
|
|
188
|
+
if (!existsSync(pkg)) return "0.0.0";
|
|
189
|
+
return JSON.parse(readFileSync(pkg, "utf8")).version;
|
|
190
|
+
}
|
|
191
|
+
//#endregion
|
|
192
|
+
export { runSkillsInstall as i, detectedAgents as n, runSkills as r, SKILL_AGENTS as t };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { a as listArg, i as globalArgs, t as COMMAND_DESCRIPTIONS } from "./commands-DWOrSQic.js";
|
|
2
|
+
import { r as pick, t as CANCELLED } from "./prompt-CXYhLfsS.js";
|
|
3
|
+
import { n as detectedAgents, r as runSkills, t as SKILL_AGENTS } from "./skills-Biq5uup3.js";
|
|
4
|
+
import { defineCommand } from "citty";
|
|
5
|
+
//#region src/cli/commands/skills.ts
|
|
6
|
+
function skills(ctx) {
|
|
7
|
+
return defineCommand({
|
|
8
|
+
meta: {
|
|
9
|
+
name: "skills",
|
|
10
|
+
description: COMMAND_DESCRIPTIONS.skills
|
|
11
|
+
},
|
|
12
|
+
args: {
|
|
13
|
+
...globalArgs,
|
|
14
|
+
action: {
|
|
15
|
+
type: "positional",
|
|
16
|
+
required: false,
|
|
17
|
+
description: "install (default), update or list"
|
|
18
|
+
},
|
|
19
|
+
agent: {
|
|
20
|
+
type: "string",
|
|
21
|
+
description: "Agent skill folders to write, repeatable",
|
|
22
|
+
valueHint: "name"
|
|
23
|
+
},
|
|
24
|
+
check: {
|
|
25
|
+
type: "boolean",
|
|
26
|
+
description: "Fail when the installed skills differ from this version; write nothing"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
async run({ args: parsed, rawArgs }) {
|
|
30
|
+
const action = parsed._[0];
|
|
31
|
+
let agents = listArg(rawArgs, "agent");
|
|
32
|
+
const installs = action === void 0 || action === "install" || action === "update";
|
|
33
|
+
const check = parsed.check === true;
|
|
34
|
+
if (ctx.interactive && installs && !check && agents.length === 0) {
|
|
35
|
+
const detected = detectedAgents(ctx.cwd);
|
|
36
|
+
const picked = await pick("Which agents should get the PermDock skills?", Object.entries(SKILL_AGENTS).map(([value, hint]) => ({
|
|
37
|
+
value,
|
|
38
|
+
hint
|
|
39
|
+
})), detected.length > 0 ? detected : Object.keys(SKILL_AGENTS));
|
|
40
|
+
if (picked === void 0) {
|
|
41
|
+
ctx.report(CANCELLED);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
agents = picked;
|
|
45
|
+
}
|
|
46
|
+
ctx.report(runSkills({
|
|
47
|
+
cwd: ctx.cwd,
|
|
48
|
+
action,
|
|
49
|
+
agents,
|
|
50
|
+
check
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
export { skills };
|