@burdenoff/cli-sdk 2026.521.1 → 2026.525.1

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.
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var fs=require('fs'),path=require('path'),crypto=require('crypto');var u=class extends Error{exitCode;hint;constructor(n,a){super(n),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},f=class extends u{constructor(n,a){super(n,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},p=class extends Error{cause;constructor(n,a){super(n),this.name="CliInternalError",this.cause=a;}};var C=null;function E(e){C=e;}function g(){if(!C)throw new p("vibecontrols module helpers used before setHelpersContext was called");return C}function B(){let e=g();if(!e.auth.isAuthenticated())throw new f(`Authentication required. Run \`${e.productName} auth login\`.`)}async function d(e,n){return B(),g().gql.workspace.request(e,n)}function m(e){let n=e instanceof Error?e.message:String(e);throw new u(n)}function h(e,n,a){g().output.formatAndOutput(e,n,a);}function w(e){g().output.printSuccess(e);}function x(e){g().output.printInfo(e);}function y(e,n){return g().output.truncate(e,n)}var v=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var fs=require('fs'),path=require('path'),crypto=require('crypto');var u=class extends Error{exitCode;hint;constructor(r,a){super(r),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},m=class extends u{constructor(r,a){super(r,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},g=class extends Error{cause;constructor(r,a){super(r),this.name="CliInternalError",this.cause=a;}};var C=null;function E(n){C=n;}function w(){if(!C)throw new g("vibecontrols module helpers used before setHelpersContext was called");return C}function H(){let n=w();if(!n.auth.isAuthenticated())throw new m(`Authentication required. Run \`${n.productName} auth login\`.`)}async function l(n,r){return H(),w().gql.workspace.request(n,r)}function p(n){let r=n instanceof Error?n.message:String(n);throw new u(r)}function d(n,r,a){w().output.formatAndOutput(n,r,a);}function h(n){w().output.printSuccess(n);}function x(n){w().output.printInfo(n);}function y(n,r){return w().output.truncate(n,r)}var v=`
2
2
  query BrowseFolderRoot($pagination: PaginationInput) {
3
3
  getFilesInFolder(pagination: $pagination) {
4
4
  files { id name size mimeType extension createdAt }
@@ -31,19 +31,34 @@
31
31
  fileId
32
32
  }
33
33
  }
34
- `,R=`
34
+ `,$=`
35
35
  mutation CreateShare($input: FileCreateShareInput!) {
36
36
  createShare(input: $input) {
37
37
  id token shareType accessLevel expiresAt requiresPassword
38
38
  downloadCount maxDownloads createdAt
39
39
  }
40
40
  }
41
- `,$=`
41
+ `,D=`
42
42
  mutation RevokeShare($id: ID!) {
43
43
  revokeShare(id: $id) {
44
44
  id revokedAt revokedBy
45
45
  }
46
46
  }
47
- `;function D(e){let n=e.command("files").description("Workspace file management");n.command("browse").description("Browse a folder (defaults to root)").argument("[folderId]").option("--limit <n>","Page size",r=>parseInt(r,10),100).option("-f, --format <format>").action(async(r,t)=>{try{let s={limit:t.limit,offset:0};if(r){let o=await d(A,{folderId:r,pagination:s});if(t.format){h(t,{folder:o.getFolder,files:o.getFilesInFolder.files});return}o.getFolder&&x(`Folder: ${o.getFolder.name}`);for(let c of o.getFilesInFolder.files){let k=c.size?`${c.size}b`:"-";console.log(` \u{1F4C4} ${y(c.id,12)} ${c.name} ${k} ${c.mimeType??"-"}`);}console.log(`
48
- ${o.getFilesInFolder.total} files`);return}let l=await d(v,{pagination:s});if(t.format){h(t,{files:l.getFilesInFolder.files});return}for(let o of l.getFilesInFolder.files){let c=o.size?`${o.size}b`:"-";console.log(` \u{1F4C4} ${y(o.id,12)} ${o.name} ${c} ${o.mimeType??"-"}`);}console.log(`
49
- ${l.getFilesInFolder.total} files`);}catch(s){m(s);}}),n.command("upload").description("Upload a local file (initiates a multipart session)").argument("<path>","Local file path").option("--folder <folderId>","Target folder id").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("-f, --format <format>").action(async(r,t)=>{try{let s=fs.statSync(r),l=path.basename(r),o=path.extname(r).slice(1)||void 0,c=fs.readFileSync(r),k=crypto.createHash("sha256").update(c).digest("hex"),L={fileName:l,fileSize:s.size,mimeType:"application/octet-stream",extension:o,folderId:t.folder,sha256Hash:k,visibility:(t.visibility??"WORKSPACE").toUpperCase()},b=await d(S,{input:L});x("Upload session created. PUT the local bytes to the returned URL(s)."),h(t,b.initiateUpload),x(`After uploading, complete with: vibecontrols files upload-complete --session ${b.initiateUpload.session.id}`);}catch(s){m(s);}}),n.command("upload-complete").description("Complete an in-flight upload session").requiredOption("--session <id>","Session id from `files upload`").option("--folder <folderId>").option("--description <s>").option("-f, --format <format>").action(async r=>{try{let t=await d(O,{input:{sessionId:r.session,folderId:r.folder,description:r.description}});w(`Upload complete: ${t.completeUpload.fileId}`),h(r,t.completeUpload.file);}catch(t){m(t);}});let a=n.command("share").description("Manage file shares");a.command("create").description("Create a share link for a file").argument("<fileId>").option("--access <a>","VIEW|DOWNLOAD","DOWNLOAD").option("--expires <iso>","Expiry timestamp").option("--password <p>").option("--max-downloads <n>","",r=>parseInt(r,10)).option("-f, --format <format>").action(async(r,t)=>{try{let s={fileId:r,shareType:"PUBLIC_LINK",accessLevel:(t.access??"DOWNLOAD").toUpperCase(),expiresAt:t.expires,password:t.password,maxDownloads:t.maxDownloads},l=await d(R,{input:s});w("Share created"),h(t,l.createShare);}catch(s){m(s);}}),a.command("revoke").description("Revoke a share by id").argument("<shareId>").action(async r=>{try{await d($,{id:r}),w("Share revoked");}catch(t){m(t);}});}var X={id:"files",version:"1.0.0",displayName:"Files",dependsOn:["auth","workspaces"],register(e,n){E(n),D(e);}},pt=X;module.exports=pt;
47
+ `,R=`
48
+ query GetFile($id: ID!) {
49
+ getFile(id: $id) {
50
+ id name description workspaceId folderId
51
+ mimeType extension size s3Key s3Bucket
52
+ downloadUrl status visibility
53
+ starred downloadCount viewCount sha256Hash
54
+ uploadedById createdAt updatedAt
55
+ tags
56
+ }
57
+ }
58
+ `,F=`
59
+ query GetFileDownloadUrl($id: ID!, $expiresIn: Int) {
60
+ getFileDownloadUrl(id: $id, expiresIn: $expiresIn)
61
+ }
62
+ `;function L(n){let r=n.command("files").description("Workspace file management");r.command("browse").description("Browse a folder (defaults to root)").argument("[folderId]").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async(t,e)=>{try{let o={limit:e.limit,offset:0};if(t){let i=await l(A,{folderId:t,pagination:o});if(e.format){d(e,{folder:i.getFolder,files:i.getFilesInFolder.files});return}i.getFolder&&x(`Folder: ${i.getFolder.name}`);for(let c of i.getFilesInFolder.files){let k=c.size?`${c.size}b`:"-";console.log(` \u{1F4C4} ${y(c.id,12)} ${c.name} ${k} ${c.mimeType??"-"}`);}console.log(`
63
+ ${i.getFilesInFolder.total} files`);return}let f=await l(v,{pagination:o});if(e.format){d(e,{files:f.getFilesInFolder.files});return}for(let i of f.getFilesInFolder.files){let c=i.size?`${i.size}b`:"-";console.log(` \u{1F4C4} ${y(i.id,12)} ${i.name} ${c} ${i.mimeType??"-"}`);}console.log(`
64
+ ${f.getFilesInFolder.total} files`);}catch(o){p(o);}}),r.command("upload").description("Upload a local file (initiates a multipart session)").argument("<path>","Local file path").option("--folder <folderId>","Target folder id").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("-f, --format <format>").action(async(t,e)=>{try{let o=fs.statSync(t),f=path.basename(t),i=path.extname(t).slice(1)||void 0,c=fs.readFileSync(t),k=crypto.createHash("sha256").update(c).digest("hex"),q={fileName:f,fileSize:o.size,mimeType:"application/octet-stream",extension:i,folderId:e.folder,sha256Hash:k,visibility:(e.visibility??"WORKSPACE").toUpperCase()},I=await l(S,{input:q});x("Upload session created. PUT the local bytes to the returned URL(s)."),d(e,I.initiateUpload),x(`After uploading, complete with: vibecontrols files upload-complete --session ${I.initiateUpload.session.id}`);}catch(o){p(o);}}),r.command("upload-complete").description("Complete an in-flight upload session").requiredOption("--session <id>","Session id from `files upload`").option("--folder <folderId>").option("--description <s>").option("-f, --format <format>").action(async t=>{try{let e=await l(O,{input:{sessionId:t.session,folderId:t.folder,description:t.description}});h(`Upload complete: ${e.completeUpload.fileId}`),d(t,e.completeUpload.file);}catch(e){p(e);}}),r.command("get").description("Get a file by id").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let o=await l(R,{id:t});if(!o.getFile)throw new u(`File ${t} not found`);d(e,o.getFile);}catch(o){p(o);}}),r.command("download").description("Get a pre-signed download URL for a file").argument("<id>").option("--expires <seconds>","URL expiry in seconds",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let o=await l(F,{id:t,expiresIn:e.expires});if(e.format){d(e,{url:o.getFileDownloadUrl});return}h("Download URL:"),console.log(o.getFileDownloadUrl);}catch(o){p(o);}});let a=r.command("share").description("Manage file shares");a.command("create").description("Create a share link for a file").argument("<fileId>").option("--access <a>","VIEW|DOWNLOAD","DOWNLOAD").option("--expires <iso>","Expiry timestamp").option("--password <p>").option("--max-downloads <n>","",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let o={fileId:t,shareType:"PUBLIC_LINK",accessLevel:(e.access??"DOWNLOAD").toUpperCase(),expiresAt:e.expires,password:e.password,maxDownloads:e.maxDownloads},f=await l($,{input:o});h("Share created"),d(e,f.createShare);}catch(o){p(o);}}),a.command("revoke").description("Revoke a share by id").argument("<shareId>").action(async t=>{try{await l(D,{id:t}),h("Share revoked");}catch(e){p(e);}});}var ee={id:"files",version:"1.0.0",displayName:"Files",dependsOn:["auth","workspaces"],register(n,r){E(r),L(n);}},ft=ee;module.exports=ft;
@@ -1,11 +1,11 @@
1
- import {a,b,g,j,o,f,h}from'../../chunk-KTKHJORN.js';import'../../chunk-RNWXATAC.js';import {statSync,readFileSync}from'fs';import {basename,extname}from'path';import {createHash}from'crypto';var E=`
1
+ import {a,b,g,j,o,f,h as h$1}from'../../chunk-KTKHJORN.js';import {o as o$1}from'../../chunk-RNWXATAC.js';import {statSync,readFileSync}from'fs';import {basename,extname}from'path';import {createHash}from'crypto';var h=`
2
2
  query BrowseFolderRoot($pagination: PaginationInput) {
3
3
  getFilesInFolder(pagination: $pagination) {
4
4
  files { id name size mimeType extension createdAt }
5
5
  total hasMore
6
6
  }
7
7
  }
8
- `,C=`
8
+ `,x=`
9
9
  query BrowseFolderById($folderId: ID!, $pagination: PaginationInput) {
10
10
  getFolder(id: $folderId) {
11
11
  id name path
@@ -15,7 +15,7 @@ import {a,b,g,j,o,f,h}from'../../chunk-KTKHJORN.js';import'../../chunk-RNWXATAC.
15
15
  total hasMore
16
16
  }
17
17
  }
18
- `,R=`
18
+ `,E=`
19
19
  mutation InitiateUpload($input: InitiateUploadInput!) {
20
20
  initiateUpload(input: $input) {
21
21
  session { id fileName fileSize s3Bucket s3Key }
@@ -24,26 +24,41 @@ import {a,b,g,j,o,f,h}from'../../chunk-KTKHJORN.js';import'../../chunk-RNWXATAC.
24
24
  multipartUploadId
25
25
  }
26
26
  }
27
- `,O=`
27
+ `,R=`
28
28
  mutation CompleteUpload($input: CompleteUploadInput!) {
29
29
  completeUpload(input: $input) {
30
30
  file { id name size s3Bucket s3Key downloadUrl }
31
31
  fileId
32
32
  }
33
33
  }
34
- `,U=`
34
+ `,$=`
35
35
  mutation CreateShare($input: FileCreateShareInput!) {
36
36
  createShare(input: $input) {
37
37
  id token shareType accessLevel expiresAt requiresPassword
38
38
  downloadCount maxDownloads createdAt
39
39
  }
40
40
  }
41
- `,w=`
41
+ `,O=`
42
42
  mutation RevokeShare($id: ID!) {
43
43
  revokeShare(id: $id) {
44
44
  id revokedAt revokedBy
45
45
  }
46
46
  }
47
- `;function x(c){let a=c.command("files").description("Workspace file management");a.command("browse").description("Browse a folder (defaults to root)").argument("[folderId]").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async(t,e)=>{try{let i={limit:e.limit,offset:0};if(t){let o$1=await b(C,{folderId:t,pagination:i});if(e.format){g(e,{folder:o$1.getFolder,files:o$1.getFilesInFolder.files});return}o$1.getFolder&&j(`Folder: ${o$1.getFolder.name}`);for(let n of o$1.getFilesInFolder.files){let f=n.size?`${n.size}b`:"-";console.log(` \u{1F4C4} ${o(n.id,12)} ${n.name} ${f} ${n.mimeType??"-"}`);}console.log(`
48
- ${o$1.getFilesInFolder.total} files`);return}let s=await b(E,{pagination:i});if(e.format){g(e,{files:s.getFilesInFolder.files});return}for(let o$1 of s.getFilesInFolder.files){let n=o$1.size?`${o$1.size}b`:"-";console.log(` \u{1F4C4} ${o(o$1.id,12)} ${o$1.name} ${n} ${o$1.mimeType??"-"}`);}console.log(`
49
- ${s.getFilesInFolder.total} files`);}catch(i){f(i);}}),a.command("upload").description("Upload a local file (initiates a multipart session)").argument("<path>","Local file path").option("--folder <folderId>","Target folder id").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("-f, --format <format>").action(async(t,e)=>{try{let i=statSync(t),s=basename(t),o=extname(t).slice(1)||void 0,n=readFileSync(t),f=createHash("sha256").update(n).digest("hex"),A={fileName:s,fileSize:i.size,mimeType:"application/octet-stream",extension:o,folderId:e.folder,sha256Hash:f,visibility:(e.visibility??"WORKSPACE").toUpperCase()},I=await b(R,{input:A});j("Upload session created. PUT the local bytes to the returned URL(s)."),g(e,I.initiateUpload),j(`After uploading, complete with: vibecontrols files upload-complete --session ${I.initiateUpload.session.id}`);}catch(i){f(i);}}),a.command("upload-complete").description("Complete an in-flight upload session").requiredOption("--session <id>","Session id from `files upload`").option("--folder <folderId>").option("--description <s>").option("-f, --format <format>").action(async t=>{try{let e=await b(O,{input:{sessionId:t.session,folderId:t.folder,description:t.description}});h(`Upload complete: ${e.completeUpload.fileId}`),g(t,e.completeUpload.file);}catch(e){f(e);}});let g$1=a.command("share").description("Manage file shares");g$1.command("create").description("Create a share link for a file").argument("<fileId>").option("--access <a>","VIEW|DOWNLOAD","DOWNLOAD").option("--expires <iso>","Expiry timestamp").option("--password <p>").option("--max-downloads <n>","",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let i={fileId:t,shareType:"PUBLIC_LINK",accessLevel:(e.access??"DOWNLOAD").toUpperCase(),expiresAt:e.expires,password:e.password,maxDownloads:e.maxDownloads},s=await b(U,{input:i});h("Share created"),g(e,s.createShare);}catch(i){f(i);}}),g$1.command("revoke").description("Revoke a share by id").argument("<shareId>").action(async t=>{try{await b(w,{id:t}),h("Share revoked");}catch(e){f(e);}});}var v={id:"files",version:"1.0.0",displayName:"Files",dependsOn:["auth","workspaces"],register(c,a$1){a(a$1),x(c);}},q=v;export{q as default};
47
+ `,C=`
48
+ query GetFile($id: ID!) {
49
+ getFile(id: $id) {
50
+ id name description workspaceId folderId
51
+ mimeType extension size s3Key s3Bucket
52
+ downloadUrl status visibility
53
+ starred downloadCount viewCount sha256Hash
54
+ uploadedById createdAt updatedAt
55
+ tags
56
+ }
57
+ }
58
+ `,A=`
59
+ query GetFileDownloadUrl($id: ID!, $expiresIn: Int) {
60
+ getFileDownloadUrl(id: $id, expiresIn: $expiresIn)
61
+ }
62
+ `;function D(c){let s=c.command("files").description("Workspace file management");s.command("browse").description("Browse a folder (defaults to root)").argument("[folderId]").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async(t,e)=>{try{let o$1={limit:e.limit,offset:0};if(t){let i=await b(x,{folderId:t,pagination:o$1});if(e.format){g(e,{folder:i.getFolder,files:i.getFilesInFolder.files});return}i.getFolder&&j(`Folder: ${i.getFolder.name}`);for(let n of i.getFilesInFolder.files){let f=n.size?`${n.size}b`:"-";console.log(` \u{1F4C4} ${o(n.id,12)} ${n.name} ${f} ${n.mimeType??"-"}`);}console.log(`
63
+ ${i.getFilesInFolder.total} files`);return}let d=await b(h,{pagination:o$1});if(e.format){g(e,{files:d.getFilesInFolder.files});return}for(let i of d.getFilesInFolder.files){let n=i.size?`${i.size}b`:"-";console.log(` \u{1F4C4} ${o(i.id,12)} ${i.name} ${n} ${i.mimeType??"-"}`);}console.log(`
64
+ ${d.getFilesInFolder.total} files`);}catch(o){f(o);}}),s.command("upload").description("Upload a local file (initiates a multipart session)").argument("<path>","Local file path").option("--folder <folderId>","Target folder id").option("--visibility <v>","PRIVATE|WORKSPACE|PUBLIC","WORKSPACE").option("-f, --format <format>").action(async(t,e)=>{try{let o=statSync(t),d=basename(t),i=extname(t).slice(1)||void 0,n=readFileSync(t),f=createHash("sha256").update(n).digest("hex"),L={fileName:d,fileSize:o.size,mimeType:"application/octet-stream",extension:i,folderId:e.folder,sha256Hash:f,visibility:(e.visibility??"WORKSPACE").toUpperCase()},I=await b(E,{input:L});j("Upload session created. PUT the local bytes to the returned URL(s)."),g(e,I.initiateUpload),j(`After uploading, complete with: vibecontrols files upload-complete --session ${I.initiateUpload.session.id}`);}catch(o){f(o);}}),s.command("upload-complete").description("Complete an in-flight upload session").requiredOption("--session <id>","Session id from `files upload`").option("--folder <folderId>").option("--description <s>").option("-f, --format <format>").action(async t=>{try{let e=await b(R,{input:{sessionId:t.session,folderId:t.folder,description:t.description}});h$1(`Upload complete: ${e.completeUpload.fileId}`),g(t,e.completeUpload.file);}catch(e){f(e);}}),s.command("get").description("Get a file by id").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let o=await b(C,{id:t});if(!o.getFile)throw new o$1(`File ${t} not found`);g(e,o.getFile);}catch(o){f(o);}}),s.command("download").description("Get a pre-signed download URL for a file").argument("<id>").option("--expires <seconds>","URL expiry in seconds",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let o=await b(A,{id:t,expiresIn:e.expires});if(e.format){g(e,{url:o.getFileDownloadUrl});return}h$1("Download URL:"),console.log(o.getFileDownloadUrl);}catch(o){f(o);}});let u=s.command("share").description("Manage file shares");u.command("create").description("Create a share link for a file").argument("<fileId>").option("--access <a>","VIEW|DOWNLOAD","DOWNLOAD").option("--expires <iso>","Expiry timestamp").option("--password <p>").option("--max-downloads <n>","",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let o={fileId:t,shareType:"PUBLIC_LINK",accessLevel:(e.access??"DOWNLOAD").toUpperCase(),expiresAt:e.expires,password:e.password,maxDownloads:e.maxDownloads},d=await b($,{input:o});h$1("Share created"),g(e,d.createShare);}catch(o){f(o);}}),u.command("revoke").description("Revoke a share by id").argument("<shareId>").action(async t=>{try{await b(O,{id:t}),h$1("Share revoked");}catch(e){f(e);}});}var B={id:"files",version:"1.0.0",displayName:"Files",dependsOn:["auth","workspaces"],register(c,s){a(s),D(c);}},V=B;export{V as default};
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(r,i){super(r),this.name="CliUserError",this.exitCode=i?.exitCode??1,this.hint=i?.hint;}},m=class extends u{constructor(r,i){super(r,{exitCode:2,hint:i?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},d=class extends Error{cause;constructor(r,i){super(r),this.name="CliInternalError",this.cause=i;}};var h=null;function I(e){h=e;}function p(){if(!h)throw new d("vibecontrols module helpers used before setHelpersContext was called");return h}function K(){let e=p();if(!e.auth.isAuthenticated())throw new m(`Authentication required. Run \`${e.productName} auth login\`.`)}async function E(e,r){return K(),p().gql.workspace.request(e,r)}async function v(e,r){return p().gql.global.request(e,r)}function g(e){let r=e instanceof Error?e.message:String(e);throw new u(r)}function y(e,r,i){p().output.formatAndOutput(e,r,i);}function k(e){p().output.printSuccess(e);}function R(e){return p().output.formatStatus(e)}function C(e,r){return p().output.truncate(e,r)}function A(){return p()}var S=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var l=class extends Error{exitCode;hint;constructor(n,a){super(n),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},w=class extends l{constructor(n,a){super(n,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},f=class extends Error{cause;constructor(n,a){super(n),this.name="CliInternalError",this.cause=a;}};var x=null;function E(r){x=r;}function d(){if(!x)throw new f("vibecontrols module helpers used before setHelpersContext was called");return x}function X(){let r=d();if(!r.auth.isAuthenticated())throw new w(`Authentication required. Run \`${r.productName} auth login\`.`)}async function v(r,n){return X(),d().gql.workspace.request(r,n)}async function R(r,n){return d().gql.global.request(r,n)}function p(r){let n=r instanceof Error?r.message:String(r);throw new l(n)}function m(r,n,a){d().output.formatAndOutput(r,n,a);}function k(r){d().output.printSuccess(r);}function A(r){return d().output.formatStatus(r)}function h(r,n){return d().output.truncate(r,n)}function S(){return d()}var O=`
2
2
  query ListRoles($filter: RoleFilterInput, $pagination: PaginationInput, $scopeId: String!) {
3
3
  roles(filter: $filter, pagination: $pagination, scopeId: $scopeId) {
4
4
  id
@@ -13,7 +13,7 @@
13
13
  }
14
14
  }
15
15
  }
16
- `,O=`
16
+ `,L=`
17
17
  query GetRole($id: ID!) {
18
18
  role(id: $id) {
19
19
  id
@@ -28,7 +28,7 @@
28
28
  }
29
29
  }
30
30
  }
31
- `,L=`
31
+ `,P=`
32
32
  mutation CreateRole($input: CreateRoleInput!) {
33
33
  createRole(input: $input) {
34
34
  id
@@ -46,11 +46,35 @@
46
46
  priority
47
47
  }
48
48
  }
49
- `,P=`
49
+ `,D=`
50
50
  mutation DeleteRole($id: ID!, $reassignToRoleId: ID) {
51
51
  deleteRole(id: $id, reassignToRoleId: $reassignToRoleId)
52
52
  }
53
- `,D=`
53
+ `,q=`
54
+ query PolicyReferences($filter: PolicyReferenceFilterInput, $pagination: PaginationInput) {
55
+ policyReferences(filter: $filter, pagination: $pagination) {
56
+ id
57
+ name
58
+ description
59
+ opaPackage
60
+ resourceType
61
+ action
62
+ isActive
63
+ priority
64
+ }
65
+ }
66
+ `,_=`
67
+ mutation AttachPolicyToRole($roleId: ID!, $policyId: ID!) {
68
+ attachPolicyToRole(roleId: $roleId, policyId: $policyId) {
69
+ id
70
+ name
71
+ }
72
+ }
73
+ `,N=`
74
+ mutation DetachPolicyFromRole($roleId: ID!, $policyId: ID!) {
75
+ detachPolicyFromRole(roleId: $roleId, policyId: $policyId)
76
+ }
77
+ `,F=`
54
78
  query CheckPermission($input: PermissionCheckInput!) {
55
79
  checkPermission(input: $input) {
56
80
  allowed
@@ -60,4 +84,4 @@
60
84
  overrideType
61
85
  }
62
86
  }
63
- `;function w(e,r,i){return e==="workspace"?E(r,i):v(r,i)}function x(e){let r=A().auth.read();if(e==="workspace"){if(!r?.workspaceId)throw new u("No workspace set. Run `vibecontrols workspace set <id>` or pass --scope <workspaceId>.");return r.workspaceId}if(!r?.organizationId)throw new u("No organization context. Run `auth login` to bind a tenant or pass --scope <tenantId>.");return r.organizationId}function q(e){let r=e.command("rbac").description("Role-based access control"),i=r.command("roles").description("Manage roles");i.command("list").description("List roles").option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id (workspace or tenant)").option("--include-system","Include system roles",false).option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>","Output format").action(async t=>{try{let n=t.layer==="global"?"global":"workspace",s=t.scope??x(n),o={};t.includeSystem&&(o.includeSystem=!0);let c=await w(n,S,{filter:Object.keys(o).length?o:void 0,pagination:{limit:t.limit,offset:0},scopeId:s});y(t,c.roles,{headers:["ID","Name","Scope","Priority","System"],rows:c.roles.map(l=>[C(l.id,12),l.name,C(l.scopeId,12),String(l.priority),String(l.isSystem)])});}catch(n){g(n);}}),i.command("get").description("Get role by id").argument("<id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(t,n)=>{try{let s=n.layer==="global"?"global":"workspace",o=await w(s,O,{id:t});if(!o.role)throw new u(`Role ${t} not found`);y(n,o.role);}catch(s){g(s);}}),i.command("create").description("Create a role").requiredOption("--name <name>","Role name").option("--description <text>").option("--parent <id>","Parent role id").option("--priority <n>","Priority",t=>parseInt(t,10)).option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id").option("--scope-type <type>","wspace|entity (global only)").option("-f, --format <format>").action(async t=>{try{let n=t.layer==="global"?"global":"workspace",s=t.scope??x(n),o={name:t.name,description:t.description,parentId:t.parent,priority:t.priority,scopeId:s};n==="global"&&t.scopeType&&(o.scopeType=t.scopeType);let c=await w(n,L,{input:o});k(`Role created: ${c.createRole.name}`),y(t,c.createRole);}catch(n){g(n);}}),i.command("update").description("Update a role").argument("<id>").option("--name <name>").option("--description <text>").option("--priority <n>","",t=>parseInt(t,10)).option("--parent <id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(t,n)=>{try{let s=n.layer==="global"?"global":"workspace",o={};if(n.name&&(o.name=n.name),n.description!==void 0&&(o.description=n.description),n.priority!==void 0&&(o.priority=n.priority),n.parent&&(o.parentId=n.parent),!Object.keys(o).length)throw new u("No updates specified");let c=await w(s,$,{id:t,input:o});k("Role updated"),y(n,c.updateRole);}catch(s){g(s);}}),i.command("delete").description("Delete a role").argument("<id>").option("--reassign <roleId>","Reassign actors to this role").option("--layer <layer>","workspace or global","workspace").action(async(t,n)=>{try{let s=n.layer==="global"?"global":"workspace";await w(s,P,{id:t,reassignToRoleId:n.reassign}),k("Role deleted");}catch(s){g(s);}}),r.command("check").description("Check whether an actor has permission for an action on a resource").argument("<actorId>","Actor id (user/app/service/super_admin)").argument("<action>","Action like read/write/delete").argument("<resourceType>","Resource type like project/task").option("--actor-type <type>","USER|BOT|GROUP|INTEGRATION|DELEGATED_AGENT","USER").option("--resource-id <id>","Specific resource id (optional)").option("--scope <scopeId>","Scope id (workspaceId or tenantId)").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(t,n,s,o)=>{try{let c=o.layer==="global"?"global":"workspace",l=o.scope??x(c),_={actorId:t,actorType:(o.actorType??"USER").toUpperCase(),action:n,resourceType:s,resourceId:o.resourceId,scopeId:l},f=await w(c,D,{input:_});y(o,f.checkPermission,{headers:["Allowed","Decision","Role","Level","Override"],rows:[[R(f.checkPermission.allowed?"ACTIVE":"ERROR"),f.checkPermission.decisionPath,f.checkPermission.roleName??"-",f.checkPermission.roleLevel??"-",f.checkPermission.overrideType??"-"]]});}catch(c){g(c);}});}var Y={id:"rbac",version:"1.0.0",displayName:"RBAC",dependsOn:["auth"],register(e,r){I(r),q(e);}},st=Y;module.exports=st;
87
+ `;function u(r,n,a){return r==="workspace"?v(n,a):R(n,a)}function I(r){let n=S().auth.read();if(r==="workspace"){if(!n?.workspaceId)throw new l("No workspace set. Run `vibecontrols workspace set <id>` or pass --scope <workspaceId>.");return n.workspaceId}if(!n?.organizationId)throw new l("No organization context. Run `auth login` to bind a tenant or pass --scope <tenantId>.");return n.organizationId}function j(r){let n=r.command("rbac").description("Role-based access control"),a=n.command("roles").description("Manage roles");a.command("list").description("List roles").option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id (workspace or tenant)").option("--include-system","Include system roles",false).option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>","Output format").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i=e.scope??I(t),o={};e.includeSystem&&(o.includeSystem=!0);let s=await u(t,O,{filter:Object.keys(o).length?o:void 0,pagination:{limit:e.limit,offset:0},scopeId:i});m(e,s.roles,{headers:["ID","Name","Scope","Priority","System"],rows:s.roles.map(g=>[h(g.id,12),g.name,h(g.scopeId,12),String(g.priority),String(g.isSystem)])});}catch(t){p(t);}}),a.command("get").description("Get role by id").argument("<id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace",o=await u(i,L,{id:e});if(!o.role)throw new l(`Role ${e} not found`);m(t,o.role);}catch(i){p(i);}}),a.command("create").description("Create a role").requiredOption("--name <name>","Role name").option("--description <text>").option("--parent <id>","Parent role id").option("--priority <n>","Priority",e=>parseInt(e,10)).option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id").option("--scope-type <type>","wspace|entity (global only)").option("-f, --format <format>").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i=e.scope??I(t),o={name:e.name,description:e.description,parentId:e.parent,priority:e.priority,scopeId:i};t==="global"&&e.scopeType&&(o.scopeType=e.scopeType);let s=await u(t,P,{input:o});k(`Role created: ${s.createRole.name}`),m(e,s.createRole);}catch(t){p(t);}}),a.command("update").description("Update a role").argument("<id>").option("--name <name>").option("--description <text>").option("--priority <n>","",e=>parseInt(e,10)).option("--parent <id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace",o={};if(t.name&&(o.name=t.name),t.description!==void 0&&(o.description=t.description),t.priority!==void 0&&(o.priority=t.priority),t.parent&&(o.parentId=t.parent),!Object.keys(o).length)throw new l("No updates specified");let s=await u(i,$,{id:e,input:o});k("Role updated"),m(t,s.updateRole);}catch(i){p(i);}}),a.command("delete").description("Delete a role").argument("<id>").option("--reassign <roleId>","Reassign actors to this role").option("--layer <layer>","workspace or global","workspace").action(async(e,t)=>{try{let i=t.layer==="global"?"global":"workspace";await u(i,D,{id:e,reassignToRoleId:t.reassign}),k("Role deleted");}catch(i){p(i);}});let C=n.command("policies").description("Manage policy references");C.command("list").description("List policy references").option("--layer <layer>","workspace or global","workspace").option("--resource-type <s>","Filter by resource type").option("--action <s>","Filter by action").option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>").action(async e=>{try{let t=e.layer==="global"?"global":"workspace",i={};e.resourceType&&(i.resourceType=e.resourceType),e.action&&(i.action=e.action);let o=await u(t,q,{filter:Object.keys(i).length?i:void 0,pagination:{limit:e.limit,offset:0}});m(e,o.policyReferences,{headers:["ID","Name","Resource","Action","Active","Priority"],rows:o.policyReferences.map(s=>[h(s.id,12),s.name,s.resourceType??"-",s.action??"-",String(s.isActive),String(s.priority??"-")])});}catch(t){p(t);}}),C.command("attach").description("Attach a policy to a role").requiredOption("--role <roleId>").requiredOption("--policy <policyId>").option("--layer <layer>","workspace or global","workspace").action(async e=>{try{let t=e.layer==="global"?"global":"workspace";await u(t,_,{roleId:e.role,policyId:e.policy}),k("Policy attached");}catch(t){p(t);}}),C.command("detach").description("Detach a policy from a role").requiredOption("--role <roleId>").requiredOption("--policy <policyId>").option("--layer <layer>","workspace or global","workspace").action(async e=>{try{let t=e.layer==="global"?"global":"workspace";await u(t,N,{roleId:e.role,policyId:e.policy}),k("Policy detached");}catch(t){p(t);}}),n.command("check").description("Check whether an actor has permission for an action on a resource").argument("<actorId>","Actor id (user/app/service/super_admin)").argument("<action>","Action like read/write/delete").argument("<resourceType>","Resource type like project/task").option("--actor-type <type>","USER|BOT|GROUP|INTEGRATION|DELEGATED_AGENT","USER").option("--resource-id <id>","Specific resource id (optional)").option("--scope <scopeId>","Scope id (workspaceId or tenantId)").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,t,i,o)=>{try{let s=o.layer==="global"?"global":"workspace",g=o.scope??I(s),G={actorId:e,actorType:(o.actorType??"USER").toUpperCase(),action:t,resourceType:i,resourceId:o.resourceId,scopeId:g},y=await u(s,F,{input:G});m(o,y.checkPermission,{headers:["Allowed","Decision","Role","Level","Override"],rows:[[A(y.checkPermission.allowed?"ACTIVE":"ERROR"),y.checkPermission.decisionPath,y.checkPermission.roleName??"-",y.checkPermission.roleLevel??"-",y.checkPermission.overrideType??"-"]]});}catch(s){p(s);}});}var ee={id:"rbac",version:"1.0.0",displayName:"RBAC",dependsOn:["auth"],register(r,n){E(n),j(r);}},pt=ee;module.exports=pt;
@@ -1,4 +1,4 @@
1
- import {a,g,o,f,h,m as m$1,r,b,c}from'../../chunk-KTKHJORN.js';import {o as o$1}from'../../chunk-RNWXATAC.js';var T=`
1
+ import {a,g,o,f as f$1,h,m,r,b,c}from'../../chunk-KTKHJORN.js';import {o as o$1}from'../../chunk-RNWXATAC.js';var L=`
2
2
  query ListRoles($filter: RoleFilterInput, $pagination: PaginationInput, $scopeId: String!) {
3
3
  roles(filter: $filter, pagination: $pagination, scopeId: $scopeId) {
4
4
  id
@@ -13,7 +13,7 @@ import {a,g,o,f,h,m as m$1,r,b,c}from'../../chunk-KTKHJORN.js';import {o as o$1}
13
13
  }
14
14
  }
15
15
  }
16
- `,L=`
16
+ `,P=`
17
17
  query GetRole($id: ID!) {
18
18
  role(id: $id) {
19
19
  id
@@ -37,7 +37,7 @@ import {a,g,o,f,h,m as m$1,r,b,c}from'../../chunk-KTKHJORN.js';import {o as o$1}
37
37
  scopeId
38
38
  }
39
39
  }
40
- `,S=`
40
+ `,O=`
41
41
  mutation UpdateRole($id: ID!, $input: UpdateRoleInput!) {
42
42
  updateRole(id: $id, input: $input) {
43
43
  id
@@ -46,11 +46,35 @@ import {a,g,o,f,h,m as m$1,r,b,c}from'../../chunk-KTKHJORN.js';import {o as o$1}
46
46
  priority
47
47
  }
48
48
  }
49
- `,P=`
49
+ `,S=`
50
50
  mutation DeleteRole($id: ID!, $reassignToRoleId: ID) {
51
51
  deleteRole(id: $id, reassignToRoleId: $reassignToRoleId)
52
52
  }
53
- `,O=`
53
+ `,$=`
54
+ query PolicyReferences($filter: PolicyReferenceFilterInput, $pagination: PaginationInput) {
55
+ policyReferences(filter: $filter, pagination: $pagination) {
56
+ id
57
+ name
58
+ description
59
+ opaPackage
60
+ resourceType
61
+ action
62
+ isActive
63
+ priority
64
+ }
65
+ }
66
+ `,A=`
67
+ mutation AttachPolicyToRole($roleId: ID!, $policyId: ID!) {
68
+ attachPolicyToRole(roleId: $roleId, policyId: $policyId) {
69
+ id
70
+ name
71
+ }
72
+ }
73
+ `,x=`
74
+ mutation DetachPolicyFromRole($roleId: ID!, $policyId: ID!) {
75
+ detachPolicyFromRole(roleId: $roleId, policyId: $policyId)
76
+ }
77
+ `,D=`
54
78
  query CheckPermission($input: PermissionCheckInput!) {
55
79
  checkPermission(input: $input) {
56
80
  allowed
@@ -60,4 +84,4 @@ import {a,g,o,f,h,m as m$1,r,b,c}from'../../chunk-KTKHJORN.js';import {o as o$1}
60
84
  overrideType
61
85
  }
62
86
  }
63
- `;function m(s,i,a){return s==="workspace"?b(i,a):c(i,a)}function R(s){let i=r().auth.read();if(s==="workspace"){if(!i?.workspaceId)throw new o$1("No workspace set. Run `vibecontrols workspace set <id>` or pass --scope <workspaceId>.");return i.workspaceId}if(!i?.organizationId)throw new o$1("No organization context. Run `auth login` to bind a tenant or pass --scope <tenantId>.");return i.organizationId}function $(s){let i=s.command("rbac").description("Role-based access control"),a=i.command("roles").description("Manage roles");a.command("list").description("List roles").option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id (workspace or tenant)").option("--include-system","Include system roles",false).option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>","Output format").action(async e=>{try{let o$1=e.layer==="global"?"global":"workspace",t=e.scope??R(o$1),r={};e.includeSystem&&(r.includeSystem=!0);let n=await m(o$1,T,{filter:Object.keys(r).length?r:void 0,pagination:{limit:e.limit,offset:0},scopeId:t});g(e,n.roles,{headers:["ID","Name","Scope","Priority","System"],rows:n.roles.map(c=>[o(c.id,12),c.name,o(c.scopeId,12),String(c.priority),String(c.isSystem)])});}catch(o){f(o);}}),a.command("get").description("Get role by id").argument("<id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,o)=>{try{let t=o.layer==="global"?"global":"workspace",r=await m(t,L,{id:e});if(!r.role)throw new o$1(`Role ${e} not found`);g(o,r.role);}catch(t){f(t);}}),a.command("create").description("Create a role").requiredOption("--name <name>","Role name").option("--description <text>").option("--parent <id>","Parent role id").option("--priority <n>","Priority",e=>parseInt(e,10)).option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id").option("--scope-type <type>","wspace|entity (global only)").option("-f, --format <format>").action(async e=>{try{let o=e.layer==="global"?"global":"workspace",t=e.scope??R(o),r={name:e.name,description:e.description,parentId:e.parent,priority:e.priority,scopeId:t};o==="global"&&e.scopeType&&(r.scopeType=e.scopeType);let n=await m(o,C,{input:r});h(`Role created: ${n.createRole.name}`),g(e,n.createRole);}catch(o){f(o);}}),a.command("update").description("Update a role").argument("<id>").option("--name <name>").option("--description <text>").option("--priority <n>","",e=>parseInt(e,10)).option("--parent <id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,o)=>{try{let t=o.layer==="global"?"global":"workspace",r={};if(o.name&&(r.name=o.name),o.description!==void 0&&(r.description=o.description),o.priority!==void 0&&(r.priority=o.priority),o.parent&&(r.parentId=o.parent),!Object.keys(r).length)throw new o$1("No updates specified");let n=await m(t,S,{id:e,input:r});h("Role updated"),g(o,n.updateRole);}catch(t){f(t);}}),a.command("delete").description("Delete a role").argument("<id>").option("--reassign <roleId>","Reassign actors to this role").option("--layer <layer>","workspace or global","workspace").action(async(e,o)=>{try{let t=o.layer==="global"?"global":"workspace";await m(t,P,{id:e,reassignToRoleId:o.reassign}),h("Role deleted");}catch(t){f(t);}}),i.command("check").description("Check whether an actor has permission for an action on a resource").argument("<actorId>","Actor id (user/app/service/super_admin)").argument("<action>","Action like read/write/delete").argument("<resourceType>","Resource type like project/task").option("--actor-type <type>","USER|BOT|GROUP|INTEGRATION|DELEGATED_AGENT","USER").option("--resource-id <id>","Specific resource id (optional)").option("--scope <scopeId>","Scope id (workspaceId or tenantId)").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,o,t,r)=>{try{let n=r.layer==="global"?"global":"workspace",c=r.scope??R(n),x={actorId:e,actorType:(r.actorType??"USER").toUpperCase(),action:o,resourceType:t,resourceId:r.resourceId,scopeId:c},l=await m(n,O,{input:x});g(r,l.checkPermission,{headers:["Allowed","Decision","Role","Level","Override"],rows:[[m$1(l.checkPermission.allowed?"ACTIVE":"ERROR"),l.checkPermission.decisionPath,l.checkPermission.roleName??"-",l.checkPermission.roleLevel??"-",l.checkPermission.overrideType??"-"]]});}catch(n){f(n);}});}var A={id:"rbac",version:"1.0.0",displayName:"RBAC",dependsOn:["auth"],register(s,i){a(i),$(s);}},j=A;export{j as default};
87
+ `;function s(p,n,c$1){return p==="workspace"?b(n,c$1):c(n,c$1)}function f(p){let n=r().auth.read();if(p==="workspace"){if(!n?.workspaceId)throw new o$1("No workspace set. Run `vibecontrols workspace set <id>` or pass --scope <workspaceId>.");return n.workspaceId}if(!n?.organizationId)throw new o$1("No organization context. Run `auth login` to bind a tenant or pass --scope <tenantId>.");return n.organizationId}function _(p){let n=p.command("rbac").description("Role-based access control"),c=n.command("roles").description("Manage roles");c.command("list").description("List roles").option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id (workspace or tenant)").option("--include-system","Include system roles",false).option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>","Output format").action(async e=>{try{let o$1=e.layer==="global"?"global":"workspace",t=e.scope??f(o$1),r={};e.includeSystem&&(r.includeSystem=!0);let i=await s(o$1,L,{filter:Object.keys(r).length?r:void 0,pagination:{limit:e.limit,offset:0},scopeId:t});g(e,i.roles,{headers:["ID","Name","Scope","Priority","System"],rows:i.roles.map(l=>[o(l.id,12),l.name,o(l.scopeId,12),String(l.priority),String(l.isSystem)])});}catch(o){f$1(o);}}),c.command("get").description("Get role by id").argument("<id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,o)=>{try{let t=o.layer==="global"?"global":"workspace",r=await s(t,P,{id:e});if(!r.role)throw new o$1(`Role ${e} not found`);g(o,r.role);}catch(t){f$1(t);}}),c.command("create").description("Create a role").requiredOption("--name <name>","Role name").option("--description <text>").option("--parent <id>","Parent role id").option("--priority <n>","Priority",e=>parseInt(e,10)).option("--layer <layer>","workspace or global","workspace").option("--scope <scopeId>","Override scope id").option("--scope-type <type>","wspace|entity (global only)").option("-f, --format <format>").action(async e=>{try{let o=e.layer==="global"?"global":"workspace",t=e.scope??f(o),r={name:e.name,description:e.description,parentId:e.parent,priority:e.priority,scopeId:t};o==="global"&&e.scopeType&&(r.scopeType=e.scopeType);let i=await s(o,C,{input:r});h(`Role created: ${i.createRole.name}`),g(e,i.createRole);}catch(o){f$1(o);}}),c.command("update").description("Update a role").argument("<id>").option("--name <name>").option("--description <text>").option("--priority <n>","",e=>parseInt(e,10)).option("--parent <id>").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,o)=>{try{let t=o.layer==="global"?"global":"workspace",r={};if(o.name&&(r.name=o.name),o.description!==void 0&&(r.description=o.description),o.priority!==void 0&&(r.priority=o.priority),o.parent&&(r.parentId=o.parent),!Object.keys(r).length)throw new o$1("No updates specified");let i=await s(t,O,{id:e,input:r});h("Role updated"),g(o,i.updateRole);}catch(t){f$1(t);}}),c.command("delete").description("Delete a role").argument("<id>").option("--reassign <roleId>","Reassign actors to this role").option("--layer <layer>","workspace or global","workspace").action(async(e,o)=>{try{let t=o.layer==="global"?"global":"workspace";await s(t,S,{id:e,reassignToRoleId:o.reassign}),h("Role deleted");}catch(t){f$1(t);}});let I=n.command("policies").description("Manage policy references");I.command("list").description("List policy references").option("--layer <layer>","workspace or global","workspace").option("--resource-type <s>","Filter by resource type").option("--action <s>","Filter by action").option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>").action(async e=>{try{let o$1=e.layer==="global"?"global":"workspace",t={};e.resourceType&&(t.resourceType=e.resourceType),e.action&&(t.action=e.action);let r=await s(o$1,$,{filter:Object.keys(t).length?t:void 0,pagination:{limit:e.limit,offset:0}});g(e,r.policyReferences,{headers:["ID","Name","Resource","Action","Active","Priority"],rows:r.policyReferences.map(i=>[o(i.id,12),i.name,i.resourceType??"-",i.action??"-",String(i.isActive),String(i.priority??"-")])});}catch(o){f$1(o);}}),I.command("attach").description("Attach a policy to a role").requiredOption("--role <roleId>").requiredOption("--policy <policyId>").option("--layer <layer>","workspace or global","workspace").action(async e=>{try{let o=e.layer==="global"?"global":"workspace";await s(o,A,{roleId:e.role,policyId:e.policy}),h("Policy attached");}catch(o){f$1(o);}}),I.command("detach").description("Detach a policy from a role").requiredOption("--role <roleId>").requiredOption("--policy <policyId>").option("--layer <layer>","workspace or global","workspace").action(async e=>{try{let o=e.layer==="global"?"global":"workspace";await s(o,x,{roleId:e.role,policyId:e.policy}),h("Policy detached");}catch(o){f$1(o);}}),n.command("check").description("Check whether an actor has permission for an action on a resource").argument("<actorId>","Actor id (user/app/service/super_admin)").argument("<action>","Action like read/write/delete").argument("<resourceType>","Resource type like project/task").option("--actor-type <type>","USER|BOT|GROUP|INTEGRATION|DELEGATED_AGENT","USER").option("--resource-id <id>","Specific resource id (optional)").option("--scope <scopeId>","Scope id (workspaceId or tenantId)").option("--layer <layer>","workspace or global","workspace").option("-f, --format <format>").action(async(e,o,t,r)=>{try{let i=r.layer==="global"?"global":"workspace",l=r.scope??f(i),v={actorId:e,actorType:(r.actorType??"USER").toUpperCase(),action:o,resourceType:t,resourceId:r.resourceId,scopeId:l},y=await s(i,D,{input:v});g(r,y.checkPermission,{headers:["Allowed","Decision","Role","Level","Override"],rows:[[m(y.checkPermission.allowed?"ACTIVE":"ERROR"),y.checkPermission.decisionPath,y.checkPermission.roleName??"-",y.checkPermission.roleLevel??"-",y.checkPermission.overrideType??"-"]]});}catch(i){f$1(i);}});}var U={id:"rbac",version:"1.0.0",displayName:"RBAC",dependsOn:["auth"],register(p,n){a(n),_(p);}},Y=U;export{Y as default};
@@ -1,4 +1,4 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var c=class extends Error{exitCode;hint;constructor(o,a){super(o),this.name="CliUserError",this.exitCode=a?.exitCode??1,this.hint=a?.hint;}},h=class extends c{constructor(o,a){super(o,{exitCode:2,hint:a?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},f=class extends Error{cause;constructor(o,a){super(o),this.name="CliInternalError",this.cause=a;}};var C=null;function S(n){C=n;}function d(){if(!C)throw new f("vibecontrols module helpers used before setHelpersContext was called");return C}function Z(){let n=d();if(!n.auth.isAuthenticated())throw new h(`Authentication required. Run \`${n.productName} auth login\`.`)}async function u(n,o){return Z(),d().gql.workspace.request(n,o)}function p(n){let o=n instanceof Error?n.message:String(n);throw new c(o)}function l(n,o,a){d().output.formatAndOutput(n,o,a);}function g(n){d().output.printSuccess(n);}function k(n){return d().output.formatStatus(n)}function y(n){return d().output.formatDate(n)}function x(n,o){return d().output.truncate(n,o)}function v(){return d()}var b=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var c=class extends Error{exitCode;hint;constructor(o,s){super(o),this.name="CliUserError",this.exitCode=s?.exitCode??1,this.hint=s?.hint;}},w=class extends c{constructor(o,s){super(o,{exitCode:2,hint:s?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},f=class extends Error{cause;constructor(o,s){super(o),this.name="CliInternalError",this.cause=s;}};var k=null;function v(r){k=r;}function g(){if(!k)throw new f("vibecontrols module helpers used before setHelpersContext was called");return k}function ee(){let r=g();if(!r.auth.isAuthenticated())throw new w(`Authentication required. Run \`${r.productName} auth login\`.`)}async function u(r,o){return ee(),g().gql.workspace.request(r,o)}function p(r){let o=r instanceof Error?r.message:String(r);throw new c(o)}function l(r,o,s){g().output.formatAndOutput(r,o,s);}function d(r){g().output.printSuccess(r);}function y(r){return g().output.formatStatus(r)}function C(r){return g().output.formatDate(r)}function x(r,o){return g().output.truncate(r,o)}function S(){return g()}var A=`
2
2
  query GetVaults($filter: VaultFilterInput, $pagination: SecurityPaginationInput) {
3
3
  getVaults(filter: $filter, pagination: $pagination) {
4
4
  items { id name description scope status createdAt }
@@ -11,28 +11,34 @@
11
11
  id name description scope scopeId status lockAfterMinutes createdAt updatedAt
12
12
  }
13
13
  }
14
- `,A=`
14
+ `,b=`
15
15
  mutation CreateVault($input: CreateVaultInput!) {
16
16
  createVault(input: $input) {
17
17
  id name scope scopeId status
18
18
  }
19
19
  }
20
20
  `,R=`
21
+ mutation UpdateVault($id: ID!, $input: UpdateVaultInput!) {
22
+ updateVault(id: $id, input: $input) {
23
+ id name scope scopeId status
24
+ }
25
+ }
26
+ `,$=`
21
27
  mutation DeleteVault($id: ID!) {
22
28
  deleteVault(id: $id)
23
29
  }
24
- `,$=`
30
+ `,O=`
25
31
  mutation ArchiveVault($id: ID!) {
26
32
  archiveVault(id: $id) { id status }
27
33
  }
28
- `,O=`
34
+ `,D=`
29
35
  query GetSecrets($vaultId: ID!, $filter: SecretFilterInput, $pagination: SecurityPaginationInput) {
30
36
  getSecrets(vaultId: $vaultId, filter: $filter, pagination: $pagination) {
31
37
  items { id key name description type status isEphemeral createdAt }
32
38
  total hasMore
33
39
  }
34
40
  }
35
- `,D=`
41
+ `,L=`
36
42
  query GetSecret($id: ID!) {
37
43
  getSecret(id: $id) {
38
44
  id key name description type status isEphemeral expiresAt createdAt updatedAt
@@ -44,7 +50,7 @@
44
50
  id key value
45
51
  }
46
52
  }
47
- `,L=`
53
+ `,V=`
48
54
  mutation CreateSecret($input: CreateSecretInput!) {
49
55
  createSecret(input: $input) {
50
56
  id key name type status
@@ -56,14 +62,14 @@
56
62
  id key name status updatedAt
57
63
  }
58
64
  }
59
- `,V=`
65
+ `,_=`
60
66
  mutation DeleteSecret($id: ID!) {
61
67
  deleteSecret(id: $id)
62
68
  }
63
- `,_=`
69
+ `,N=`
64
70
  mutation RotateSecret($id: ID!, $newValue: String!) {
65
71
  rotateSecret(id: $id, newValue: $newValue) {
66
72
  id key updatedAt
67
73
  }
68
74
  }
69
- `;function w(){let n=v().auth.read();if(!n?.workspaceId)throw new c("No workspace set. Run: vibecontrols workspace set <id>");return {workspaceId:n.workspaceId}}async function N(){if(process.stdin.isTTY)throw new c('Pipe the secret value via stdin (e.g. `echo -n "value" | vibecontrols security secrets set ...`).');let n=[];for await(let o of process.stdin)n.push(Buffer.isBuffer(o)?o:Buffer.from(o));return Buffer.concat(n).toString("utf8")}function G(n){let o=n.command("security").description("Security: vaults & secrets"),a=o.command("vaults").description("Vault management");a.command("list").description("List vaults").option("--scope <s>","WORKSPACE|GLOBAL|VIBE").option("--status <s>").option("--search <q>").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t={context:w()};e.scope&&(t.scope=e.scope.toUpperCase()),e.status&&(t.status=e.status.toUpperCase()),e.search&&(t.search=e.search);let r=await u(b,{filter:t,pagination:{limit:e.limit,offset:0}});l(e,r.getVaults.items,{headers:["ID","Name","Scope","Status","Created"],rows:r.getVaults.items.map(i=>[x(i.id,12),i.name,i.scope??"-",k(i.status),y(i.createdAt)])});}catch(t){p(t);}}),a.command("get").description("Get a vault").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let r=await u(I,{id:e});if(!r.getVault)throw new c(`Vault ${e} not found`);l(t,r.getVault);}catch(r){p(r);}}),a.command("create").description("Create a vault").requiredOption("--name <name>").option("--description <s>").option("--scope <s>","WORKSPACE|GLOBAL|VIBE","WORKSPACE").option("--scope-id <id>","Scope id (defaults to current workspace)").option("--lock-after <minutes>","Auto-lock after N minutes",e=>parseInt(e,10)).option("-f, --format <format>").action(async e=>{try{let t=w(),r={context:t,name:e.name,description:e.description,scope:(e.scope??"WORKSPACE").toUpperCase(),scopeId:e.scopeId??t.workspaceId,lockAfterMinutes:e.lockAfter},i=await u(A,{input:r});g(`Vault created: ${i.createVault.name}`),l(e,i.createVault);}catch(t){p(t);}}),a.command("delete").description("Delete a vault").argument("<id>").option("--archive","Archive instead of hard delete",false).action(async(e,t)=>{try{t.archive?(await u($,{id:e}),g("Vault archived")):(await u(R,{id:e}),g("Vault deleted"));}catch(r){p(r);}});let m=o.command("secrets").description("Secret management");m.command("list").description("List secrets in a vault").requiredOption("--vault <id>").option("--type <t>","Filter by secret type").option("--search <q>").option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>").action(async e=>{try{let t={context:w()};e.type&&(t.type=e.type.toUpperCase()),e.search&&(t.search=e.search);let r=await u(O,{vaultId:e.vault,filter:t,pagination:{limit:e.limit,offset:0}});l(e,r.getSecrets.items,{headers:["ID","Key","Name","Type","Status","Created"],rows:r.getSecrets.items.map(i=>[x(i.id,12),i.key,i.name,i.type??"-",k(i.status),y(i.createdAt)])});}catch(t){p(t);}}),m.command("get").description("Get secret metadata (does NOT decrypt)").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let r=await u(D,{id:e});if(!r.getSecret)throw new c(`Secret ${e} not found`);l(t,r.getSecret);}catch(r){p(r);}}),m.command("show").description("Decrypt and print a secret value (audited)").argument("<id>").action(async e=>{try{let t=await u(q,{id:e});process.stdout.write(t.decryptSecret.value);}catch(t){p(t);}}),m.command("set").description("Create a secret. Reads the value from stdin.").requiredOption("--vault <id>").requiredOption("--key <key>","Secret key (unique within vault)").requiredOption("--name <name>").option("--description <s>").option("--type <t>","API_KEY|PASSWORD|CERTIFICATE|TOKEN|OTHER","OTHER").option("--ephemeral","Mark as ephemeral").option("--expires <iso>").option("-f, --format <format>").action(async e=>{try{let t=await N(),r={context:w(),vaultId:e.vault,key:e.key,name:e.name,description:e.description,type:(e.type??"OTHER").toUpperCase(),isEphemeral:!!e.ephemeral,expiresAt:e.expires,value:t},i=await u(L,{input:r});g(`Secret created: ${i.createSecret.key}`),l(e,i.createSecret);}catch(t){p(t);}}),m.command("update").description("Update a secret. Pass --value via stdin to rotate.").argument("<id>").option("--name <s>").option("--description <s>").option("--rotate","Rotate value (reads new value from stdin)").option("--status <s>").option("-f, --format <format>").action(async(e,t)=>{try{if(t.rotate){let F=await N(),U=await u(_,{id:e,newValue:F});g("Secret rotated"),l(t,U.rotateSecret);return}let r={context:w()};if(t.name&&(r.name=t.name),t.description!==void 0&&(r.description=t.description),t.status&&(r.status=t.status.toUpperCase()),Object.keys(r).length===1)throw new c("No updates specified (use --rotate to change value)");let i=await u(P,{id:e,input:r});g("Secret updated"),l(t,i.updateSecret);}catch(r){p(r);}}),m.command("delete").description("Delete a secret").argument("<id>").action(async e=>{try{await u(V,{id:e}),g("Secret deleted");}catch(t){p(t);}});}var te={id:"security",version:"1.0.0",displayName:"Security",dependsOn:["auth","workspaces"],register(n,o){S(o),G(n);}},lt=te;module.exports=lt;
75
+ `;function h(){let r=S().auth.read();if(!r?.workspaceId)throw new c("No workspace set. Run: vibecontrols workspace set <id>");return {workspaceId:r.workspaceId}}async function U(){if(process.stdin.isTTY)throw new c('Pipe the secret value via stdin (e.g. `echo -n "value" | vibecontrols security secrets set ...`).');let r=[];for await(let o of process.stdin)r.push(Buffer.isBuffer(o)?o:Buffer.from(o));return Buffer.concat(r).toString("utf8")}function G(r){let o=r.command("security").description("Security: vaults & secrets"),s=o.command("vaults").description("Vault management");s.command("list").description("List vaults").option("--scope <s>","WORKSPACE|GLOBAL|VIBE").option("--status <s>").option("--search <q>").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t={context:h()};e.scope&&(t.scope=e.scope.toUpperCase()),e.status&&(t.status=e.status.toUpperCase()),e.search&&(t.search=e.search);let n=await u(A,{filter:t,pagination:{limit:e.limit,offset:0}});l(e,n.getVaults.items,{headers:["ID","Name","Scope","Status","Created"],rows:n.getVaults.items.map(i=>[x(i.id,12),i.name,i.scope??"-",y(i.status),C(i.createdAt)])});}catch(t){p(t);}}),s.command("get").description("Get a vault").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let n=await u(I,{id:e});if(!n.getVault)throw new c(`Vault ${e} not found`);l(t,n.getVault);}catch(n){p(n);}}),s.command("create").description("Create a vault").requiredOption("--name <name>").option("--description <s>").option("--scope <s>","WORKSPACE|GLOBAL|VIBE","WORKSPACE").option("--scope-id <id>","Scope id (defaults to current workspace)").option("--lock-after <minutes>","Auto-lock after N minutes",e=>parseInt(e,10)).option("-f, --format <format>").action(async e=>{try{let t=h(),n={context:t,name:e.name,description:e.description,scope:(e.scope??"WORKSPACE").toUpperCase(),scopeId:e.scopeId??t.workspaceId,lockAfterMinutes:e.lockAfter},i=await u(b,{input:n});d(`Vault created: ${i.createVault.name}`),l(e,i.createVault);}catch(t){p(t);}}),s.command("update").description("Update a vault").argument("<id>").option("--name <s>").option("--description <s>").option("--lock-after <minutes>","Auto-lock after N minutes",e=>parseInt(e,10)).option("-f, --format <format>").action(async(e,t)=>{try{let n={};if(t.name&&(n.name=t.name),t.description!==void 0&&(n.description=t.description),t.lockAfter!==void 0&&(n.lockAfterMinutes=t.lockAfter),!Object.keys(n).length)throw new c("No updates specified");let i=await u(R,{id:e,input:n});d("Vault updated"),l(t,i.updateVault);}catch(n){p(n);}}),s.command("delete").description("Delete a vault").argument("<id>").option("--archive","Archive instead of hard delete",false).action(async(e,t)=>{try{t.archive?(await u(O,{id:e}),d("Vault archived")):(await u($,{id:e}),d("Vault deleted"));}catch(n){p(n);}});let m=o.command("secrets").description("Secret management");m.command("list").description("List secrets in a vault").requiredOption("--vault <id>").option("--type <t>","Filter by secret type").option("--search <q>").option("--limit <n>","Page size",e=>parseInt(e,10),100).option("-f, --format <format>").action(async e=>{try{let t={context:h()};e.type&&(t.type=e.type.toUpperCase()),e.search&&(t.search=e.search);let n=await u(D,{vaultId:e.vault,filter:t,pagination:{limit:e.limit,offset:0}});l(e,n.getSecrets.items,{headers:["ID","Key","Name","Type","Status","Created"],rows:n.getSecrets.items.map(i=>[x(i.id,12),i.key,i.name,i.type??"-",y(i.status),C(i.createdAt)])});}catch(t){p(t);}}),m.command("get").description("Get secret metadata (does NOT decrypt)").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let n=await u(L,{id:e});if(!n.getSecret)throw new c(`Secret ${e} not found`);l(t,n.getSecret);}catch(n){p(n);}}),m.command("show").description("Decrypt and print a secret value (audited)").argument("<id>").action(async e=>{try{let t=await u(q,{id:e});process.stdout.write(t.decryptSecret.value);}catch(t){p(t);}}),m.command("set").description("Create a secret. Reads the value from stdin.").requiredOption("--vault <id>").requiredOption("--key <key>","Secret key (unique within vault)").requiredOption("--name <name>").option("--description <s>").option("--type <t>","API_KEY|PASSWORD|CERTIFICATE|TOKEN|OTHER","OTHER").option("--ephemeral","Mark as ephemeral").option("--expires <iso>").option("-f, --format <format>").action(async e=>{try{let t=await U(),n={context:h(),vaultId:e.vault,key:e.key,name:e.name,description:e.description,type:(e.type??"OTHER").toUpperCase(),isEphemeral:!!e.ephemeral,expiresAt:e.expires,value:t},i=await u(V,{input:n});d(`Secret created: ${i.createSecret.key}`),l(e,i.createSecret);}catch(t){p(t);}}),m.command("update").description("Update a secret. Pass --value via stdin to rotate.").argument("<id>").option("--name <s>").option("--description <s>").option("--rotate","Rotate value (reads new value from stdin)").option("--status <s>").option("-f, --format <format>").action(async(e,t)=>{try{if(t.rotate){let F=await U(),W=await u(N,{id:e,newValue:F});d("Secret rotated"),l(t,W.rotateSecret);return}let n={context:h()};if(t.name&&(n.name=t.name),t.description!==void 0&&(n.description=t.description),t.status&&(n.status=t.status.toUpperCase()),Object.keys(n).length===1)throw new c("No updates specified (use --rotate to change value)");let i=await u(P,{id:e,input:n});d("Secret updated"),l(t,i.updateSecret);}catch(n){p(n);}}),m.command("delete").description("Delete a secret").argument("<id>").action(async e=>{try{await u(_,{id:e}),d("Secret deleted");}catch(t){p(t);}});}var ne={id:"security",version:"1.0.0",displayName:"Security",dependsOn:["auth","workspaces"],register(r,o){v(o),G(r);}},dt=ne;module.exports=dt;
@@ -1,31 +1,37 @@
1
- import {a,b as b$1,g,o,m as m$1,n,f,h,r}from'../../chunk-KTKHJORN.js';import {o as o$1}from'../../chunk-RNWXATAC.js';var C=`
1
+ import {a,b,g,o,m,n,f,h,r}from'../../chunk-KTKHJORN.js';import {o as o$1}from'../../chunk-RNWXATAC.js';var T=`
2
2
  query GetVaults($filter: VaultFilterInput, $pagination: SecurityPaginationInput) {
3
3
  getVaults(filter: $filter, pagination: $pagination) {
4
4
  items { id name description scope status createdAt }
5
5
  total hasMore
6
6
  }
7
7
  }
8
- `,T=`
8
+ `,A=`
9
9
  query GetVault($id: ID!) {
10
10
  getVault(id: $id) {
11
11
  id name description scope scopeId status lockAfterMinutes createdAt updatedAt
12
12
  }
13
13
  }
14
- `,R=`
14
+ `,C=`
15
15
  mutation CreateVault($input: CreateVaultInput!) {
16
16
  createVault(input: $input) {
17
17
  id name scope scopeId status
18
18
  }
19
19
  }
20
- `,A=`
20
+ `,V=`
21
+ mutation UpdateVault($id: ID!, $input: UpdateVaultInput!) {
22
+ updateVault(id: $id, input: $input) {
23
+ id name scope scopeId status
24
+ }
25
+ }
26
+ `,R=`
21
27
  mutation DeleteVault($id: ID!) {
22
28
  deleteVault(id: $id)
23
29
  }
24
- `,V=`
30
+ `,I=`
25
31
  mutation ArchiveVault($id: ID!) {
26
32
  archiveVault(id: $id) { id status }
27
33
  }
28
- `,I=`
34
+ `,k=`
29
35
  query GetSecrets($vaultId: ID!, $filter: SecretFilterInput, $pagination: SecurityPaginationInput) {
30
36
  getSecrets(vaultId: $vaultId, filter: $filter, pagination: $pagination) {
31
37
  items { id key name description type status isEphemeral createdAt }
@@ -38,25 +44,25 @@ import {a,b as b$1,g,o,m as m$1,n,f,h,r}from'../../chunk-KTKHJORN.js';import {o
38
44
  id key name description type status isEphemeral expiresAt createdAt updatedAt
39
45
  }
40
46
  }
41
- `,k=`
47
+ `,$=`
42
48
  query DecryptSecret($id: ID!) {
43
49
  decryptSecret(id: $id) {
44
50
  id key value
45
51
  }
46
52
  }
47
- `,$=`
53
+ `,x=`
48
54
  mutation CreateSecret($input: CreateSecretInput!) {
49
55
  createSecret(input: $input) {
50
56
  id key name type status
51
57
  }
52
58
  }
53
- `,x=`
59
+ `,D=`
54
60
  mutation UpdateSecret($id: ID!, $input: UpdateSecretInput!) {
55
61
  updateSecret(id: $id, input: $input) {
56
62
  id key name status updatedAt
57
63
  }
58
64
  }
59
- `,D=`
65
+ `,U=`
60
66
  mutation DeleteSecret($id: ID!) {
61
67
  deleteSecret(id: $id)
62
68
  }
@@ -66,4 +72,4 @@ import {a,b as b$1,g,o,m as m$1,n,f,h,r}from'../../chunk-KTKHJORN.js';import {o
66
72
  id key updatedAt
67
73
  }
68
74
  }
69
- `;function m(){let s=r().auth.read();if(!s?.workspaceId)throw new o$1("No workspace set. Run: vibecontrols workspace set <id>");return {workspaceId:s.workspaceId}}async function L(){if(process.stdin.isTTY)throw new o$1('Pipe the secret value via stdin (e.g. `echo -n "value" | vibecontrols security secrets set ...`).');let s=[];for await(let c of process.stdin)s.push(Buffer.isBuffer(c)?c:Buffer.from(c));return Buffer.concat(s).toString("utf8")}function O(s){let c=s.command("security").description("Security: vaults & secrets"),l=c.command("vaults").description("Vault management");l.command("list").description("List vaults").option("--scope <s>","WORKSPACE|GLOBAL|VIBE").option("--status <s>").option("--search <q>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={context:m()};t.scope&&(e.scope=t.scope.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search);let r=await b$1(C,{filter:e,pagination:{limit:t.limit,offset:0}});g(t,r.getVaults.items,{headers:["ID","Name","Scope","Status","Created"],rows:r.getVaults.items.map(a=>[o(a.id,12),a.name,a.scope??"-",m$1(a.status),n(a.createdAt)])});}catch(e){f(e);}}),l.command("get").description("Get a vault").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let r=await b$1(T,{id:t});if(!r.getVault)throw new o$1(`Vault ${t} not found`);g(e,r.getVault);}catch(r){f(r);}}),l.command("create").description("Create a vault").requiredOption("--name <name>").option("--description <s>").option("--scope <s>","WORKSPACE|GLOBAL|VIBE","WORKSPACE").option("--scope-id <id>","Scope id (defaults to current workspace)").option("--lock-after <minutes>","Auto-lock after N minutes",t=>parseInt(t,10)).option("-f, --format <format>").action(async t=>{try{let e=m(),r={context:e,name:t.name,description:t.description,scope:(t.scope??"WORKSPACE").toUpperCase(),scopeId:t.scopeId??e.workspaceId,lockAfterMinutes:t.lockAfter},a=await b$1(R,{input:r});h(`Vault created: ${a.createVault.name}`),g(t,a.createVault);}catch(e){f(e);}}),l.command("delete").description("Delete a vault").argument("<id>").option("--archive","Archive instead of hard delete",false).action(async(t,e)=>{try{e.archive?(await b$1(V,{id:t}),h("Vault archived")):(await b$1(A,{id:t}),h("Vault deleted"));}catch(r){f(r);}});let d=c.command("secrets").description("Secret management");d.command("list").description("List secrets in a vault").requiredOption("--vault <id>").option("--type <t>","Filter by secret type").option("--search <q>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={context:m()};t.type&&(e.type=t.type.toUpperCase()),t.search&&(e.search=t.search);let r=await b$1(I,{vaultId:t.vault,filter:e,pagination:{limit:t.limit,offset:0}});g(t,r.getSecrets.items,{headers:["ID","Key","Name","Type","Status","Created"],rows:r.getSecrets.items.map(a=>[o(a.id,12),a.key,a.name,a.type??"-",m$1(a.status),n(a.createdAt)])});}catch(e){f(e);}}),d.command("get").description("Get secret metadata (does NOT decrypt)").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let r=await b$1(v,{id:t});if(!r.getSecret)throw new o$1(`Secret ${t} not found`);g(e,r.getSecret);}catch(r){f(r);}}),d.command("show").description("Decrypt and print a secret value (audited)").argument("<id>").action(async t=>{try{let e=await b$1(k,{id:t});process.stdout.write(e.decryptSecret.value);}catch(e){f(e);}}),d.command("set").description("Create a secret. Reads the value from stdin.").requiredOption("--vault <id>").requiredOption("--key <key>","Secret key (unique within vault)").requiredOption("--name <name>").option("--description <s>").option("--type <t>","API_KEY|PASSWORD|CERTIFICATE|TOKEN|OTHER","OTHER").option("--ephemeral","Mark as ephemeral").option("--expires <iso>").option("-f, --format <format>").action(async t=>{try{let e=await L(),r={context:m(),vaultId:t.vault,key:t.key,name:t.name,description:t.description,type:(t.type??"OTHER").toUpperCase(),isEphemeral:!!t.ephemeral,expiresAt:t.expires,value:e},a=await b$1($,{input:r});h(`Secret created: ${a.createSecret.key}`),g(t,a.createSecret);}catch(e){f(e);}}),d.command("update").description("Update a secret. Pass --value via stdin to rotate.").argument("<id>").option("--name <s>").option("--description <s>").option("--rotate","Rotate value (reads new value from stdin)").option("--status <s>").option("-f, --format <format>").action(async(t,e)=>{try{if(e.rotate){let U=await L(),P=await b$1(_,{id:t,newValue:U});h("Secret rotated"),g(e,P.rotateSecret);return}let r={context:m()};if(e.name&&(r.name=e.name),e.description!==void 0&&(r.description=e.description),e.status&&(r.status=e.status.toUpperCase()),Object.keys(r).length===1)throw new o$1("No updates specified (use --rotate to change value)");let a=await b$1(x,{id:t,input:r});h("Secret updated"),g(e,a.updateSecret);}catch(r){f(r);}}),d.command("delete").description("Delete a secret").argument("<id>").action(async t=>{try{await b$1(D,{id:t}),h("Secret deleted");}catch(e){f(e);}});}var b={id:"security",version:"1.0.0",displayName:"Security",dependsOn:["auth","workspaces"],register(s,c){a(c),O(s);}},W=b;export{W as default};
75
+ `;function l(){let o=r().auth.read();if(!o?.workspaceId)throw new o$1("No workspace set. Run: vibecontrols workspace set <id>");return {workspaceId:o.workspaceId}}async function L(){if(process.stdin.isTTY)throw new o$1('Pipe the secret value via stdin (e.g. `echo -n "value" | vibecontrols security secrets set ...`).');let o=[];for await(let p of process.stdin)o.push(Buffer.isBuffer(p)?p:Buffer.from(p));return Buffer.concat(o).toString("utf8")}function O(o$2){let p=o$2.command("security").description("Security: vaults & secrets"),m$1=p.command("vaults").description("Vault management");m$1.command("list").description("List vaults").option("--scope <s>","WORKSPACE|GLOBAL|VIBE").option("--status <s>").option("--search <q>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={context:l()};t.scope&&(e.scope=t.scope.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.search&&(e.search=t.search);let a=await b(T,{filter:e,pagination:{limit:t.limit,offset:0}});g(t,a.getVaults.items,{headers:["ID","Name","Scope","Status","Created"],rows:a.getVaults.items.map(r=>[o(r.id,12),r.name,r.scope??"-",m(r.status),n(r.createdAt)])});}catch(e){f(e);}}),m$1.command("get").description("Get a vault").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let a=await b(A,{id:t});if(!a.getVault)throw new o$1(`Vault ${t} not found`);g(e,a.getVault);}catch(a){f(a);}}),m$1.command("create").description("Create a vault").requiredOption("--name <name>").option("--description <s>").option("--scope <s>","WORKSPACE|GLOBAL|VIBE","WORKSPACE").option("--scope-id <id>","Scope id (defaults to current workspace)").option("--lock-after <minutes>","Auto-lock after N minutes",t=>parseInt(t,10)).option("-f, --format <format>").action(async t=>{try{let e=l(),a={context:e,name:t.name,description:t.description,scope:(t.scope??"WORKSPACE").toUpperCase(),scopeId:t.scopeId??e.workspaceId,lockAfterMinutes:t.lockAfter},r=await b(C,{input:a});h(`Vault created: ${r.createVault.name}`),g(t,r.createVault);}catch(e){f(e);}}),m$1.command("update").description("Update a vault").argument("<id>").option("--name <s>").option("--description <s>").option("--lock-after <minutes>","Auto-lock after N minutes",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let a={};if(e.name&&(a.name=e.name),e.description!==void 0&&(a.description=e.description),e.lockAfter!==void 0&&(a.lockAfterMinutes=e.lockAfter),!Object.keys(a).length)throw new o$1("No updates specified");let r=await b(V,{id:t,input:a});h("Vault updated"),g(e,r.updateVault);}catch(a){f(a);}}),m$1.command("delete").description("Delete a vault").argument("<id>").option("--archive","Archive instead of hard delete",false).action(async(t,e)=>{try{e.archive?(await b(I,{id:t}),h("Vault archived")):(await b(R,{id:t}),h("Vault deleted"));}catch(a){f(a);}});let u=p.command("secrets").description("Secret management");u.command("list").description("List secrets in a vault").requiredOption("--vault <id>").option("--type <t>","Filter by secret type").option("--search <q>").option("--limit <n>","Page size",t=>parseInt(t,10),100).option("-f, --format <format>").action(async t=>{try{let e={context:l()};t.type&&(e.type=t.type.toUpperCase()),t.search&&(e.search=t.search);let a=await b(k,{vaultId:t.vault,filter:e,pagination:{limit:t.limit,offset:0}});g(t,a.getSecrets.items,{headers:["ID","Key","Name","Type","Status","Created"],rows:a.getSecrets.items.map(r=>[o(r.id,12),r.key,r.name,r.type??"-",m(r.status),n(r.createdAt)])});}catch(e){f(e);}}),u.command("get").description("Get secret metadata (does NOT decrypt)").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let a=await b(v,{id:t});if(!a.getSecret)throw new o$1(`Secret ${t} not found`);g(e,a.getSecret);}catch(a){f(a);}}),u.command("show").description("Decrypt and print a secret value (audited)").argument("<id>").action(async t=>{try{let e=await b($,{id:t});process.stdout.write(e.decryptSecret.value);}catch(e){f(e);}}),u.command("set").description("Create a secret. Reads the value from stdin.").requiredOption("--vault <id>").requiredOption("--key <key>","Secret key (unique within vault)").requiredOption("--name <name>").option("--description <s>").option("--type <t>","API_KEY|PASSWORD|CERTIFICATE|TOKEN|OTHER","OTHER").option("--ephemeral","Mark as ephemeral").option("--expires <iso>").option("-f, --format <format>").action(async t=>{try{let e=await L(),a={context:l(),vaultId:t.vault,key:t.key,name:t.name,description:t.description,type:(t.type??"OTHER").toUpperCase(),isEphemeral:!!t.ephemeral,expiresAt:t.expires,value:e},r=await b(x,{input:a});h(`Secret created: ${r.createSecret.key}`),g(t,r.createSecret);}catch(e){f(e);}}),u.command("update").description("Update a secret. Pass --value via stdin to rotate.").argument("<id>").option("--name <s>").option("--description <s>").option("--rotate","Rotate value (reads new value from stdin)").option("--status <s>").option("-f, --format <format>").action(async(t,e)=>{try{if(e.rotate){let P=await L(),b$1=await b(_,{id:t,newValue:P});h("Secret rotated"),g(e,b$1.rotateSecret);return}let a={context:l()};if(e.name&&(a.name=e.name),e.description!==void 0&&(a.description=e.description),e.status&&(a.status=e.status.toUpperCase()),Object.keys(a).length===1)throw new o$1("No updates specified (use --rotate to change value)");let r=await b(D,{id:t,input:a});h("Secret updated"),g(e,r.updateSecret);}catch(a){f(a);}}),u.command("delete").description("Delete a secret").argument("<id>").action(async t=>{try{await b(U,{id:t}),h("Secret deleted");}catch(e){f(e);}});}var q={id:"security",version:"1.0.0",displayName:"Security",dependsOn:["auth","workspaces"],register(o,p){a(p),O(o);}},j=q;export{j as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/cli-sdk",
3
- "version": "2026.521.1",
3
+ "version": "2026.525.1",
4
4
  "description": "Modular CLI SDK shared across all Burdenoff product CLIs (vibecontrols, botlit, fluidgrids, bigconsole, healthybowl, devportal, workspaces). Each module exports CliModule contract; product CLIs become thin shells that pick which modules to mount.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -68,7 +68,7 @@
68
68
  "homepage": "https://github.com/algoshred/cli-sdk#readme",
69
69
  "publishConfig": {
70
70
  "access": "restricted",
71
- "registry": "https://verdaccio.tooling.internal.burdenoff.com/"
71
+ "registry": "https://registry.npmjs.org/"
72
72
  },
73
73
  "dependencies": {
74
74
  "cross-fetch": "^4.1.0"
@@ -99,6 +99,6 @@
99
99
  },
100
100
  "engines": {
101
101
  "node": ">=24.11.0",
102
- "bun": ">=1.3.10"
102
+ "bun": ">=1.3.14"
103
103
  }
104
104
  }