permdock 0.0.0 → 0.1.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 +268 -1
- package/dist/a2a/index.d.ts +178 -0
- package/dist/a2a/index.js +271 -0
- package/dist/ai-sdk/index.d.ts +74 -0
- package/dist/ai-sdk/index.js +137 -0
- package/dist/approval-required-TzNB9oQA.js +6 -0
- package/dist/approvals/index.d.ts +3 -0
- package/dist/approvals/index.js +4 -0
- package/dist/approvals-DaxY-Bdg.js +218 -0
- package/dist/approvers-aH0PJkmf.js +20 -0
- package/dist/arazzo-CTeVuXr5.js +70 -0
- package/dist/arazzo-aoTkqYsJ.js +54 -0
- package/dist/authzen/index.d.ts +48 -0
- package/dist/authzen/index.js +336 -0
- package/dist/better-auth/index.d.ts +92 -0
- package/dist/better-auth/index.js +324 -0
- package/dist/budget-JqcRqyhK.d.ts +11 -0
- package/dist/budget-NbEtbJC_.js +11 -0
- package/dist/capability-B68OFnZx.js +171 -0
- package/dist/capability-BDG_nkxt.d.ts +99 -0
- package/dist/catalog/index.d.ts +12 -0
- package/dist/catalog/index.js +2 -0
- package/dist/catalog-B0E6bggc.js +48 -0
- package/dist/catalog-H-vFGwWK.js +55 -0
- package/dist/catalog-doc-BSo_Q_-6.js +298 -0
- package/dist/catalog-idsHc0vo.js +2 -0
- package/dist/catalog-path-CnI0XTFK.js +12 -0
- package/dist/claude-agent/index.d.ts +81 -0
- package/dist/claude-agent/index.js +83 -0
- package/dist/clerk/index.d.ts +56 -0
- package/dist/clerk/index.js +280 -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/cloud/index.d.ts +91 -0
- package/dist/cloud/index.js +390 -0
- package/dist/cloud-BNQTrmrr.js +50 -0
- package/dist/cloud-Cuxr6Czw.js +117 -0
- package/dist/collect-B7_TIfmg.js +49 -0
- package/dist/collect-O-tOtbnk.js +350 -0
- package/dist/collect-fRPAQIWb.js +2 -0
- package/dist/commands-BMh_Etm2.js +93 -0
- package/dist/compact-y6vfu2_f.js +19 -0
- package/dist/compare-pfyVnBjE.js +12 -0
- package/dist/compile-CQbvyIBr.d.ts +30 -0
- package/dist/compile-D22iwvuV.js +558 -0
- package/dist/config-BPYmjTOp.js +26 -0
- package/dist/connection-JvqwHODC.js +194 -0
- package/dist/context-CKEAabd7.js +73 -0
- package/dist/context-gtAwAILx.js +6 -0
- package/dist/convex/index.d.ts +40 -0
- package/dist/convex/index.js +55 -0
- package/dist/create-BKF3dgFk.d.ts +162 -0
- package/dist/create-CSkhDU9T.js +222 -0
- package/dist/credential-B_rkUNlY.js +326 -0
- package/dist/credentials-BgRX3WEg.js +268 -0
- package/dist/describe-Bt1YD5uS.js +99 -0
- package/dist/describe-DernyItf.d.ts +37 -0
- package/dist/diff-BUzf5Poi.js +48 -0
- package/dist/diff-x5Il8LVa.js +418 -0
- package/dist/digest-B3kc_PgQ.d.ts +19 -0
- package/dist/digest-BI-6aa6d.js +27 -0
- package/dist/doctor-BGle8Gqi.js +1314 -0
- package/dist/doctor-Bqo6FwUa.js +53 -0
- package/dist/drizzle/index.d.ts +72 -0
- package/dist/drizzle/index.js +160 -0
- package/dist/duration-xK2jGFVc.js +25 -0
- package/dist/elysia/index.d.ts +71 -0
- package/dist/elysia/index.js +103 -0
- package/dist/errors-DSMnAVNa.js +43 -0
- package/dist/errors-DbZ1YOnb.d.ts +138 -0
- package/dist/errors-Iy71s7Oj.js +177 -0
- package/dist/errors-m3u9TmDu.js +27 -0
- package/dist/evaluations-DsAU9ppl.js +479 -0
- package/dist/eve/index.d.ts +95 -0
- package/dist/eve/index.js +181 -0
- package/dist/express/index.d.ts +46 -0
- package/dist/express/index.js +108 -0
- package/dist/fastify/index.d.ts +56 -0
- package/dist/fastify/index.js +141 -0
- package/dist/files-B_wAGYmt.js +121 -0
- package/dist/fixtures-Cvaw0gDG.js +64 -0
- package/dist/freeze-y1_jQL4v.js +31 -0
- package/dist/from-snapshot-BMGnhmgv.js +552 -0
- package/dist/generate-CH7ThJ14.js +173 -0
- package/dist/grantee-Bv04_Vzf.js +521 -0
- package/dist/headers-B5RRv3Xm.js +6 -0
- package/dist/headers-C8SHQccD.d.ts +6 -0
- package/dist/helpers-DnSOrhB9.js +682 -0
- package/dist/hono/index.d.ts +70 -0
- package/dist/hono/index.js +131 -0
- package/dist/hosted-BwKQ1BTA.js +265 -0
- package/dist/http-DPuDaChb.d.ts +13 -0
- package/dist/http-GgVApX1k.js +111 -0
- package/dist/index-CltcQ4Bf.d.ts +138 -0
- package/dist/index-LF_hS-yn.d.ts +177 -0
- package/dist/index-fG6NSXlc.d.ts +9 -0
- package/dist/index-xIxJLwOQ.d.ts +415 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +21 -0
- package/dist/jwt/index.d.ts +87 -0
- package/dist/jwt/index.js +571 -0
- package/dist/kernel-YOGCWNLf.js +211 -0
- package/dist/kysely/index.d.ts +77 -0
- package/dist/kysely/index.js +129 -0
- package/dist/load-BZ24CpZP.js +69 -0
- package/dist/load-QOOm1z70.js +2 -0
- package/dist/load-jose-BL6LH4bL.js +11 -0
- package/dist/lru-8q4WZjBV.js +28 -0
- package/dist/manifest-DDQbC6K0.d.ts +118 -0
- package/dist/map-DowSO96j.js +158 -0
- package/dist/map-claims-B_6I1Rn-.js +360 -0
- package/dist/map-error-RJ3ZsUyA.js +16 -0
- package/dist/markers-B0hYLvMD.js +60 -0
- package/dist/may-use-CnFEjVEp.js +37 -0
- package/dist/mcp/index.d.ts +127 -0
- package/dist/mcp/index.js +563 -0
- package/dist/nest/index.d.ts +80 -0
- package/dist/nest/index.js +270 -0
- package/dist/next/client.d.ts +24 -0
- package/dist/next/client.js +31 -0
- package/dist/next/index.d.ts +110 -0
- package/dist/next/index.js +195 -0
- package/dist/next/plugin.d.ts +14 -0
- package/dist/next/plugin.js +2 -0
- package/dist/node/index.d.ts +43 -0
- package/dist/node/index.js +66 -0
- package/dist/openai/index.d.ts +71 -0
- package/dist/openai/index.js +105 -0
- package/dist/openapi/index.d.ts +93 -0
- package/dist/openapi/index.js +3 -0
- package/dist/openapi-CwePaF7C.js +164 -0
- package/dist/openapi-DWD0Uc_4.js +250 -0
- package/dist/openapi-DcqM8nU7.js +306 -0
- package/dist/openapi-import-BWRUNNeW.js +5959 -0
- package/dist/openapi-schema-D8j_T9tO.js +6902 -0
- package/dist/orpc/index.d.ts +64 -0
- package/dist/orpc/index.js +188 -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-DPfIvFMU.js +135 -0
- package/dist/pdp/index.d.ts +22 -0
- package/dist/pdp/index.js +795 -0
- package/dist/peer-BOr_kJE1.js +31 -0
- package/dist/permdock-yoZ7EjxX.js +2956 -0
- package/dist/permissions-B4apnahQ.d.ts +185 -0
- package/dist/permissions-B8vCg_bI.d.ts +52 -0
- package/dist/permissions-CofRqesP.js +142 -0
- package/dist/permissions-DC7GROPA.js +600 -0
- package/dist/pg-4GJWDUxG.js +953 -0
- package/dist/pins-CqE1jZuF.js +12 -0
- package/dist/plugin-4gr7IxFJ.js +65 -0
- package/dist/policy-ANp36PnI.js +971 -0
- package/dist/policy-CInmNGkM.d.ts +1959 -0
- package/dist/policy-Cq2fB8Q5.d.ts +20 -0
- package/dist/prisma/index.d.ts +135 -0
- package/dist/prisma/index.js +430 -0
- package/dist/problem-Cgp9-KZA.js +226 -0
- package/dist/prompt-CXYhLfsS.js +32 -0
- package/dist/protected-B4K3BKoX.js +138 -0
- package/dist/protected-BuPAycJT.d.ts +26 -0
- package/dist/protected-wY7nXhY9.d.ts +23 -0
- package/dist/provider-_wx46HpB.js +48 -0
- package/dist/provider-wTAUda2v.d.ts +6 -0
- package/dist/react/index.d.ts +6 -0
- package/dist/react/index.js +6 -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 +42 -0
- package/dist/react-native/index.js +174 -0
- package/dist/refs-ChLSxbST.js +90 -0
- package/dist/relations-r4soIFZB.js +426 -0
- package/dist/revocations-Cy06JNx2.d.ts +21 -0
- package/dist/rls-BOFU3chG.js +233 -0
- package/dist/rls-CJVja9Ww.js +2119 -0
- package/dist/rls-graph-DxQ39PJj.js +371 -0
- package/dist/rls-helpers-BxRuif0l.js +1346 -0
- package/dist/rls-import-CXV6LBlS.js +942 -0
- package/dist/rls-migrate-DrFPbf8p.js +366 -0
- package/dist/row-check-BajTgQZ-.d.ts +43 -0
- package/dist/run-CJ6UvS3a.js +155 -0
- package/dist/runtime-DP9ttFh1.js +27 -0
- package/dist/saas-BRrZzJkM.js +1193 -0
- package/dist/schema-P8yoma__.js +296 -0
- package/dist/scim/index.d.ts +2 -0
- package/dist/scim/index.js +2 -0
- package/dist/scim-9NFa0XVZ.js +1445 -0
- package/dist/scopes-cKVp_WTw.js +212 -0
- package/dist/server/index.d.ts +123 -0
- package/dist/server/index.js +8 -0
- package/dist/sha256-BO0swRXL.js +150 -0
- package/dist/sink-Bd9PSyfq.js +141 -0
- package/dist/sink-Cfr9-7YC.d.ts +104 -0
- package/dist/skills-C_lpV4Jx.js +50 -0
- package/dist/skills-Dx3QLnMY.js +110 -0
- package/dist/snapshot-DE8dE_hz.js +1051 -0
- package/dist/solid/index.d.ts +63 -0
- package/dist/solid/index.js +197 -0
- package/dist/source-DoBBYJi2.js +6 -0
- package/dist/sources-DOpW5Ila.d.ts +347 -0
- package/dist/sources-DVHM3Mwq.js +284 -0
- package/dist/sql-Bll1d7y0.js +22 -0
- package/dist/src-CTNT-PBW.js +430 -0
- package/dist/ssf/index.d.ts +3 -0
- package/dist/ssf/index.js +622 -0
- package/dist/store-Bq90395i.d.ts +27 -0
- package/dist/store-C6hFW6ta.js +508 -0
- package/dist/stores-CkG2HrSg.js +140 -0
- package/dist/stores-CvOnu_2T.d.ts +41 -0
- package/dist/stream-BhMfZOwr.d.ts +12 -0
- package/dist/stream-Q_xlB6Ko.js +52 -0
- package/dist/style-CTm1AXDT.js +22 -0
- package/dist/subject-C6dLxqHU.js +24 -0
- package/dist/subject-settings-xt7V845g.js +82 -0
- package/dist/supabase/index.d.ts +67 -0
- package/dist/supabase/index.js +4 -0
- package/dist/supabase/middleware.d.ts +77 -0
- package/dist/supabase/middleware.js +68 -0
- package/dist/supabase-D8UlBA7Z.js +83 -0
- package/dist/supabase-DTxGtYdi.js +796 -0
- package/dist/supabase-hook-DW-xP4hU.js +2 -0
- package/dist/supabase-hook-D_OqGb_V.js +1528 -0
- package/dist/svelte/Protected.svelte +34 -0
- package/dist/svelte/index.d.ts +10 -0
- package/dist/svelte/index.js +53 -0
- package/dist/svelte/runtime.d.ts +6 -0
- package/dist/svelte/runtime.js +3 -0
- package/dist/svelte/source.d.ts +10 -0
- package/dist/svelte/source.js +8 -0
- package/dist/terminal/index.d.ts +171 -0
- package/dist/terminal/index.js +821 -0
- package/dist/testing/index.d.ts +656 -0
- package/dist/testing/index.js +3208 -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/trpc/index.d.ts +80 -0
- package/dist/trpc/index.js +205 -0
- package/dist/types-B8w5PFtS.d.ts +141 -0
- package/dist/types-B9dmiiab.d.ts +66 -0
- package/dist/types-BBK-exvJ.d.ts +177 -0
- package/dist/types-BvBk1wgn.d.ts +118 -0
- package/dist/types-CxquUByI.d.ts +9 -0
- package/dist/types-D6Z6-rKJ.d.ts +312 -0
- package/dist/types-DbWdEfcm.d.ts +87 -0
- package/dist/types-bva3i4Gf.d.ts +98 -0
- package/dist/types-i4BAOvdb.d.ts +97 -0
- package/dist/unplugin/index.d.ts +7 -0
- package/dist/unplugin/index.js +30 -0
- package/dist/usage-1ozMubLY.js +42 -0
- package/dist/usage-CUnK6Ou9.js +530 -0
- package/dist/usage-PyEor6GA.js +2 -0
- package/dist/validity-D0uRmJKJ.js +224 -0
- package/dist/verifier-B90agnhl.js +461 -0
- package/dist/version-CnSh33Fj.js +16 -0
- package/dist/vocabulary-Dk0fs-Jk.d.ts +56 -0
- package/dist/vue/index.d.ts +57 -0
- package/dist/vue/index.js +203 -0
- package/dist/webmcp/index.d.ts +75 -0
- package/dist/webmcp/index.js +313 -0
- package/package.json +423 -4
- package/rulesets/permdock.yaml +29 -0
- package/schemas/catalog-v1.json +507 -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 +139 -0
- package/schemas/supabase-manifest-v1.json +217 -0
- package/skills/permdock/SKILL.md +66 -0
- package/skills/permdock-agents/SKILL.md +77 -0
- package/skills/permdock-agents/references/runtimes.md +211 -0
- package/skills/permdock-approvals/SKILL.md +80 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +83 -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 +127 -0
- package/skills/permdock-data/SKILL.md +57 -0
- package/skills/permdock-data/references/queries-and-rls.md +54 -0
- package/skills/permdock-data/references/relationships.md +65 -0
- package/skills/permdock-tenancy/SKILL.md +77 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +83 -0
- package/skills/permdock-wire/SKILL.md +116 -0
- package/skills/permdock-wire/references/adapters.md +480 -0
- package/skills/permdock-wire/references/policy-options.md +43 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { $ as DecisionSink, Ft as Credential, Tt as TokenSigner, Y as CredentialEvent, ht as SinkEvent, q as AccessEvent, st as MembershipEvent } from "./policy-CInmNGkM.js";
|
|
2
|
+
//#region src/core/sink.d.ts
|
|
3
|
+
/** The closed list of CloudEvents `type` values PermDock emits. */
|
|
4
|
+
declare const CLOUD_EVENT_TYPES: {
|
|
5
|
+
readonly decision: "dev.permdock.decision";
|
|
6
|
+
readonly approval: "dev.permdock.approval";
|
|
7
|
+
readonly directory: "dev.permdock.directory";
|
|
8
|
+
readonly membership: "dev.permdock.membership";
|
|
9
|
+
readonly catalog: "dev.permdock.catalog";
|
|
10
|
+
readonly credential: "dev.permdock.credential";
|
|
11
|
+
readonly accessStarted: "dev.permdock.access.started";
|
|
12
|
+
readonly accessEnded: "dev.permdock.access.ended";
|
|
13
|
+
readonly accessRevoked: "dev.permdock.access.revoked";
|
|
14
|
+
};
|
|
15
|
+
type CloudEventType = (typeof CLOUD_EVENT_TYPES)[keyof typeof CLOUD_EVENT_TYPES];
|
|
16
|
+
/** Why a published catalog broke a live hosted grant, which the Cloud then suspends. */
|
|
17
|
+
type CatalogFindingCode = "permission-removed" | "not-hostable" | "grantee-removed" | "approval-tightened";
|
|
18
|
+
/** One drift finding: the permission key and, when one broke, the hosted grant id. */
|
|
19
|
+
type CatalogFinding = {
|
|
20
|
+
readonly code: CatalogFindingCode;
|
|
21
|
+
readonly permission: string;
|
|
22
|
+
readonly grant?: string;
|
|
23
|
+
};
|
|
24
|
+
/** `data` of a `dev.permdock.catalog` event: a `permdock cloud push` or a drift against live hosted grants. */
|
|
25
|
+
type CatalogEventData = {
|
|
26
|
+
readonly kind: "publish" | "drift";
|
|
27
|
+
/** The catalog fingerprint after the publish, or the one drift was measured against. */
|
|
28
|
+
readonly fingerprint: string;
|
|
29
|
+
readonly previous?: string;
|
|
30
|
+
readonly findings?: readonly CatalogFinding[];
|
|
31
|
+
};
|
|
32
|
+
type CloudEvent = {
|
|
33
|
+
readonly specversion: "1.0";
|
|
34
|
+
readonly type: CloudEventType;
|
|
35
|
+
readonly source: string;
|
|
36
|
+
readonly subject?: string;
|
|
37
|
+
readonly id: string;
|
|
38
|
+
readonly time: string;
|
|
39
|
+
readonly datacontenttype: "application/json";
|
|
40
|
+
readonly data: SinkEvent | CatalogEventData;
|
|
41
|
+
};
|
|
42
|
+
type SignDecisionBatchOptions = {
|
|
43
|
+
readonly audience?: string | readonly string[];
|
|
44
|
+
readonly source?: string;
|
|
45
|
+
};
|
|
46
|
+
type MemorySinkOptions = {
|
|
47
|
+
readonly capacity?: number;
|
|
48
|
+
readonly signer?: TokenSigner;
|
|
49
|
+
readonly audience?: string | readonly string[];
|
|
50
|
+
readonly source?: string;
|
|
51
|
+
};
|
|
52
|
+
type MemorySink = DecisionSink & {
|
|
53
|
+
readonly events: () => readonly SinkEvent[];
|
|
54
|
+
readonly batches: () => readonly string[];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* A `credential` sink event for `credential`. `sample` belongs on `used`
|
|
58
|
+
* events only and must be in `(0, 1]`.
|
|
59
|
+
*/
|
|
60
|
+
declare function credentialEvent(input: {
|
|
61
|
+
readonly operation: CredentialEvent["operation"];
|
|
62
|
+
readonly credential: Credential;
|
|
63
|
+
readonly source?: string;
|
|
64
|
+
readonly by?: CredentialEvent["by"];
|
|
65
|
+
readonly sample?: number;
|
|
66
|
+
readonly at?: string;
|
|
67
|
+
}): CredentialEvent;
|
|
68
|
+
declare function membershipEvent(input: {
|
|
69
|
+
readonly source: string;
|
|
70
|
+
readonly operation: MembershipEvent["operation"];
|
|
71
|
+
readonly principal: MembershipEvent["principal"];
|
|
72
|
+
readonly scope?: string;
|
|
73
|
+
readonly id?: string;
|
|
74
|
+
readonly within?: MembershipEvent["within"];
|
|
75
|
+
readonly via?: string;
|
|
76
|
+
readonly expiresAt?: number;
|
|
77
|
+
readonly roles: MembershipEvent["roles"];
|
|
78
|
+
readonly by?: MembershipEvent["by"];
|
|
79
|
+
readonly at?: string;
|
|
80
|
+
}): MembershipEvent;
|
|
81
|
+
/**
|
|
82
|
+
* A support-access lifecycle event. `started` on consent, `ended` when the
|
|
83
|
+
* session lapses, `revoked` when the tenant pulls consent early. It never
|
|
84
|
+
* decides; the app writes and revokes the membership.
|
|
85
|
+
*/
|
|
86
|
+
declare function accessEvent(input: {
|
|
87
|
+
readonly source: string;
|
|
88
|
+
readonly operation: AccessEvent["operation"];
|
|
89
|
+
readonly tenant: string;
|
|
90
|
+
readonly principal: AccessEvent["principal"];
|
|
91
|
+
readonly via?: string;
|
|
92
|
+
readonly roles: readonly string[];
|
|
93
|
+
readonly member?: AccessEvent["member"];
|
|
94
|
+
readonly expiresAt?: number;
|
|
95
|
+
readonly grantedBy?: string;
|
|
96
|
+
readonly reason?: string;
|
|
97
|
+
readonly actor?: AccessEvent["actor"];
|
|
98
|
+
readonly at?: string;
|
|
99
|
+
}): AccessEvent;
|
|
100
|
+
declare function toCloudEvent(event: SinkEvent, source?: string): CloudEvent;
|
|
101
|
+
declare function signDecisionBatch(events: readonly SinkEvent[], signer: TokenSigner, options?: SignDecisionBatchOptions): Promise<string>;
|
|
102
|
+
declare function memorySink(options?: MemorySinkOptions): MemorySink;
|
|
103
|
+
//#endregion
|
|
104
|
+
export { CloudEvent as a, MemorySinkOptions as c, credentialEvent as d, membershipEvent as f, toCloudEvent as h, CatalogFindingCode as i, SignDecisionBatchOptions as l, signDecisionBatch as m, CatalogEventData as n, CloudEventType as o, memorySink as p, CatalogFinding as r, MemorySink as s, CLOUD_EVENT_TYPES as t, accessEvent as u };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { a as listArg, i as globalArgs, t as COMMAND_DESCRIPTIONS } from "./commands-BMh_Etm2.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-Dx3QLnMY.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
|
+
},
|
|
25
|
+
async run({ args: parsed, rawArgs }) {
|
|
26
|
+
const action = parsed._[0];
|
|
27
|
+
let agents = listArg(rawArgs, "agent");
|
|
28
|
+
const installs = action === void 0 || action === "install" || action === "update";
|
|
29
|
+
if (ctx.interactive && installs && agents.length === 0) {
|
|
30
|
+
const detected = detectedAgents(ctx.cwd);
|
|
31
|
+
const picked = await pick("Which agents should get the PermDock skills?", Object.entries(SKILL_AGENTS).map(([value, hint]) => ({
|
|
32
|
+
value,
|
|
33
|
+
hint
|
|
34
|
+
})), detected.length > 0 ? detected : Object.keys(SKILL_AGENTS));
|
|
35
|
+
if (picked === void 0) {
|
|
36
|
+
ctx.report(CANCELLED);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
agents = picked;
|
|
40
|
+
}
|
|
41
|
+
ctx.report(runSkills({
|
|
42
|
+
cwd: ctx.cwd,
|
|
43
|
+
action,
|
|
44
|
+
agents
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { skills };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { t as packageRoot } from "./package-root-zGkxO3oN.js";
|
|
2
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { createRequire } from "node:module";
|
|
5
|
+
//#region src/cli/skills.ts
|
|
6
|
+
const SKILL_NAMES = [
|
|
7
|
+
"permdock",
|
|
8
|
+
"permdock-wire",
|
|
9
|
+
"permdock-audit",
|
|
10
|
+
"permdock-agents",
|
|
11
|
+
"permdock-approvals",
|
|
12
|
+
"permdock-tenancy",
|
|
13
|
+
"permdock-data",
|
|
14
|
+
"permdock-credentials"
|
|
15
|
+
];
|
|
16
|
+
const AGENT_FOLDERS = {
|
|
17
|
+
agents: ".agents/skills",
|
|
18
|
+
claude: ".claude/skills",
|
|
19
|
+
cursor: ".cursor/skills"
|
|
20
|
+
};
|
|
21
|
+
/** The `--agent` names `skills install` knows, with the folder each writes. */
|
|
22
|
+
const SKILL_AGENTS = AGENT_FOLDERS;
|
|
23
|
+
/** Agents whose config folder (`.claude`, `.cursor`, `.agents`) the project already has. */
|
|
24
|
+
function detectedAgents(cwd) {
|
|
25
|
+
return Object.entries(AGENT_FOLDERS).filter(([, folder]) => existsSync(join(cwd, dirname(folder)))).map(([agent]) => agent);
|
|
26
|
+
}
|
|
27
|
+
function runSkills(input) {
|
|
28
|
+
switch (input.action) {
|
|
29
|
+
case void 0:
|
|
30
|
+
case "install":
|
|
31
|
+
case "update": return runSkillsInstall({
|
|
32
|
+
cwd: input.cwd,
|
|
33
|
+
agents: input.agents
|
|
34
|
+
});
|
|
35
|
+
case "list": return listSkills(input.cwd);
|
|
36
|
+
default: return {
|
|
37
|
+
code: 2,
|
|
38
|
+
output: `unknown skills command '${input.action}'. Use install, list or update.`
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function runSkillsInstall(input) {
|
|
43
|
+
const source = resolveSkillsRoot(input.cwd, input.bundled ?? join(packageRoot(), "skills"));
|
|
44
|
+
if (source === void 0) return {
|
|
45
|
+
code: 2,
|
|
46
|
+
output: "PermDock CLI: permdock package with skills/ not found. Add permdock as a dependency."
|
|
47
|
+
};
|
|
48
|
+
const version = readPermdockVersion(source);
|
|
49
|
+
const targets = resolveTargets(input.agents);
|
|
50
|
+
const copied = [];
|
|
51
|
+
for (const folder of targets) {
|
|
52
|
+
const destRoot = join(input.cwd, folder);
|
|
53
|
+
for (const name of SKILL_NAMES) {
|
|
54
|
+
const from = join(source, name);
|
|
55
|
+
if (!existsSync(from)) continue;
|
|
56
|
+
copyDir(from, join(destRoot, name));
|
|
57
|
+
copied.push(`${folder}/${name}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
mkdirSync(join(input.cwd, ".permdock"), { recursive: true });
|
|
61
|
+
writeFileSync(join(input.cwd, ".permdock/skills-lock.json"), `${JSON.stringify({
|
|
62
|
+
version,
|
|
63
|
+
skills: [...SKILL_NAMES]
|
|
64
|
+
}, null, 2)}\n`);
|
|
65
|
+
return {
|
|
66
|
+
code: 0,
|
|
67
|
+
output: `installed ${copied.join(", ") || "no skills"} (permdock@${version})`
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function listSkills(cwd) {
|
|
71
|
+
const lockPath = join(cwd, ".permdock/skills-lock.json");
|
|
72
|
+
const lock = existsSync(lockPath) ? JSON.parse(readFileSync(lockPath, "utf8")) : {};
|
|
73
|
+
const lines = ["permdock skills", ""];
|
|
74
|
+
for (const name of SKILL_NAMES) {
|
|
75
|
+
const places = Object.values(AGENT_FOLDERS).filter((folder) => existsSync(join(cwd, folder, name, "SKILL.md")));
|
|
76
|
+
lines.push(` ${name} ${places.length > 0 ? places.join(", ") : "not installed"}`);
|
|
77
|
+
}
|
|
78
|
+
if (lock.version !== void 0) lines.push("", ` lock ${lock.version}`);
|
|
79
|
+
return {
|
|
80
|
+
code: 0,
|
|
81
|
+
output: `${lines.join("\n")}\n`
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function resolveTargets(agents) {
|
|
85
|
+
if (agents.length === 0) return Object.values(AGENT_FOLDERS);
|
|
86
|
+
return agents.map((agent) => {
|
|
87
|
+
const key = agent === "agent" ? "agents" : agent;
|
|
88
|
+
return AGENT_FOLDERS[key] ?? `.${key}/skills`;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function resolveSkillsRoot(cwd, bundled) {
|
|
92
|
+
try {
|
|
93
|
+
const pkg = createRequire(resolve(cwd, "package.json")).resolve("permdock/package.json");
|
|
94
|
+
const root = join(dirname(pkg), "skills");
|
|
95
|
+
if (existsSync(root)) return root;
|
|
96
|
+
} catch {}
|
|
97
|
+
const local = join(cwd, "node_modules/permdock/skills");
|
|
98
|
+
if (existsSync(local)) return local;
|
|
99
|
+
return existsSync(bundled) ? bundled : void 0;
|
|
100
|
+
}
|
|
101
|
+
function readPermdockVersion(skillsRoot) {
|
|
102
|
+
const pkg = join(dirname(skillsRoot), "package.json");
|
|
103
|
+
if (!existsSync(pkg)) return "0.0.0";
|
|
104
|
+
return JSON.parse(readFileSync(pkg, "utf8")).version;
|
|
105
|
+
}
|
|
106
|
+
function copyDir(from, to) {
|
|
107
|
+
cpSync(from, to, { recursive: true });
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
export { runSkillsInstall as i, detectedAgents as n, runSkills as r, SKILL_AGENTS as t };
|