@abapify/adt-plugin-gcts-cli 0.4.17 → 0.4.19

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/dist/index.d.mts CHANGED
@@ -1,9 +1,6 @@
1
1
  import { CliCommandPlugin } from "@abapify/adt-plugin";
2
2
  import { GctsBranchesResponse, GctsCommitRequest, GctsConfigResponse, GctsCreateBranchRequest, GctsCreateBranchResponse, GctsCreateRepositoryRequest, GctsLogResponse, GctsObjectsResponse, GctsPullResponse, GctsRepositoriesResponse, GctsRepositoryEnvelope, GctsSetConfigRequest } from "@abapify/adt-contracts";
3
- //#region src/lib/commands/gcts.d.ts
4
3
  declare const gctsCommand: CliCommandPlugin;
5
- //#endregion
6
- //#region src/lib/client/gcts-client.d.ts
7
4
  interface GctsClient {
8
5
  adt: {
9
6
  gcts: {
@@ -37,6 +34,5 @@ interface GctsClient {
37
34
  };
38
35
  };
39
36
  }
40
- //#endregion
41
37
  export { type GctsClient, gctsCommand as default, gctsCommand };
42
38
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/commands/gcts.ts","../src/lib/client/gcts-client.ts"],"mappings":";;;cAsjBa,aAAa;;;UC9hBT;EACf;IACE;MACE;QACE,YAAY,QAAQ;QACpB,MAAM,gBAAgB,QAAQ;QAC9B,SACE,MAAM,gCACH,QAAQ;QACb,SAAS,gBAAgB,QAAQ;QACjC,QAAQ,gBAAgB,QAAQ;QAChC,OAAO,gBAAgB,QAAQ;QAC/B,OAAO,gBAAgB,QAAQ;QAC/B,WACE,aACA,uBACA,yBACG,QAAQ;QACb,MAAM,gBAAgB,QAAQ;QAC9B,UAAU,gBAAgB,QAAQ;QAClC,UACE,aACA,MAAM,4BACH,QAAQ;;MAEf;QACE,OAAO,gBAAgB,QAAQ;QAC/B,SACE,aACA,MAAM,4BACH,QAAQ;QACb,SAAS,aAAa,iBAAiB,QAAQ;QAC/C,SACE,aACA,uBACA,mBACG,QAAQ;;MAEf;QACE,SACE,aACA,MAAM,sBACH,QAAQ;;MAEf;QACE,MAAM,aAAa,gBAAgB,QAAQ;QAC3C,MACE,aACA,MAAM,yBACH,QAAQ;QACb,SAAS,aAAa,gBAAgB,QAAQ"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/commands/gcts.ts","../src/lib/client/gcts-client.ts"],"mappings":";;cAsjBa,aAAa;UC9hBT;EACf;IACE;MACE;QACE,YAAY,QAAQ;QACpB,MAAM,gBAAgB,QAAQ;QAC9B,SACE,MAAM,gCACH,QAAQ;QACb,SAAS,gBAAgB,QAAQ;QACjC,QAAQ,gBAAgB,QAAQ;QAChC,OAAO,gBAAgB,QAAQ;QAC/B,OAAO,gBAAgB,QAAQ;QAC/B,WACE,aACA,uBACA,yBACG,QAAQ;QACb,MAAM,gBAAgB,QAAQ;QAC9B,UAAU,gBAAgB,QAAQ;QAClC,UACE,aACA,MAAM,4BACH,QAAQ;;MAEf;QACE,OAAO,gBAAgB,QAAQ;QAC/B,SACE,aACA,MAAM,4BACH,QAAQ;QACb,SAAS,aAAa,iBAAiB,QAAQ;QAC/C,SACE,aACA,uBACA,mBACG,QAAQ;;MAEf;QACE,SACE,aACA,MAAM,sBACH,QAAQ;;MAEf;QACE,MAAM,aAAa,gBAAgB,QAAQ;QAC3C,MACE,aACA,MAAM,yBACH,QAAQ;QACb,SAAS,aAAa,gBAAgB,QAAQ"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/lib/client/gcts-client.ts
1
+ // src/lib/client/gcts-client.ts
2
2
  /**
3
3
  * Resolve a `GctsClient` from the CLI context, printing a friendly error and
4
4
  * exiting when no authenticated client is available (mirrors the pattern in
@@ -13,8 +13,7 @@ async function getGctsClient(ctx) {
13
13
  return await ctx.getAdtClient();
14
14
  }
15
15
 
16
- //#endregion
17
- //#region src/lib/commands/gcts.ts
16
+ // src/lib/commands/gcts.ts
18
17
  /** Stringify an object with 2-space indent (matches `sap gcts ... -f JSON`). */
19
18
  function json(x) {
20
19
  return JSON.stringify(x, null, 2);
@@ -616,6 +615,5 @@ const gctsCommand = {
616
615
  }
617
616
  };
618
617
 
619
- //#endregion
620
618
  export { gctsCommand as default, gctsCommand };
621
619
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/lib/client/gcts-client.ts","../src/lib/commands/gcts.ts"],"sourcesContent":["/**\n * Typed interface for the subset of the ADT client used by the gCTS CLI.\n *\n * The `CliContext.getAdtClient()` factory (provided by `adt-cli`) returns\n * `Promise<unknown>`. To keep the plugin self-contained, we declare the\n * exact shape we need here, structurally matching `client.adt.gcts.*` from\n * `@abapify/adt-contracts`.\n */\n\nimport type {\n GctsRepositoryEnvelope,\n GctsRepositoriesResponse,\n GctsBranchesResponse,\n GctsCreateBranchResponse,\n GctsLogResponse,\n GctsPullResponse,\n GctsObjectsResponse,\n GctsConfigResponse,\n GctsCreateRepositoryRequest,\n GctsCreateBranchRequest,\n GctsCommitRequest,\n GctsSetConfigRequest,\n} from '@abapify/adt-contracts';\n\nexport interface GctsClient {\n adt: {\n gcts: {\n repository: {\n list: () => Promise<GctsRepositoriesResponse>;\n get: (rid: string) => Promise<GctsRepositoryEnvelope>;\n create: (\n body: GctsCreateRepositoryRequest,\n ) => Promise<GctsRepositoryEnvelope>;\n delete: (rid: string) => Promise<Record<string, unknown>>;\n clone: (rid: string) => Promise<Record<string, unknown>>;\n pull: (rid: string) => Promise<GctsPullResponse>;\n push: (rid: string) => Promise<Record<string, unknown>>;\n checkout: (\n rid: string,\n currentBranch: string,\n targetBranch: string,\n ) => Promise<Record<string, unknown>>;\n log: (rid: string) => Promise<GctsLogResponse>;\n objects: (rid: string) => Promise<GctsObjectsResponse>;\n setItem: (\n rid: string,\n body: Record<string, unknown>,\n ) => Promise<Record<string, unknown>>;\n };\n branches: {\n list: (rid: string) => Promise<GctsBranchesResponse>;\n create: (\n rid: string,\n body: GctsCreateBranchRequest,\n ) => Promise<GctsCreateBranchResponse>;\n delete: (rid: string, name: string) => Promise<Record<string, unknown>>;\n switch: (\n rid: string,\n currentBranch: string,\n target: string,\n ) => Promise<Record<string, unknown>>;\n };\n commits: {\n commit: (\n rid: string,\n body: GctsCommitRequest,\n ) => Promise<Record<string, unknown>>;\n };\n config: {\n get: (rid: string, key: string) => Promise<GctsConfigResponse>;\n set: (\n rid: string,\n body: GctsSetConfigRequest,\n ) => Promise<Record<string, unknown>>;\n delete: (rid: string, key: string) => Promise<Record<string, unknown>>;\n };\n };\n };\n}\n\nimport type { CliContext } from '@abapify/adt-plugin';\n\n/**\n * Resolve a `GctsClient` from the CLI context, printing a friendly error and\n * exiting when no authenticated client is available (mirrors the pattern in\n * `@abapify/adt-atc`).\n */\nexport async function getGctsClient(ctx: CliContext): Promise<GctsClient> {\n if (!ctx.getAdtClient) {\n ctx.logger.error(\n '❌ ADT client not available. gCTS commands require authentication.',\n );\n ctx.logger.error(' Run: adt auth login');\n process.exit(1);\n }\n return (await ctx.getAdtClient()) as GctsClient;\n}\n","/**\n * `adt gcts` — top-level CLI command plugin.\n *\n * Mirrors sapcli's `sap gcts` surface:\n * - `adt gcts repo list / create / clone / delete / pull / push / checkout`\n * - `adt gcts branch list / create / switch / delete`\n * - `adt gcts commit <rid>`\n * - `adt gcts log <rid>`\n * - `adt gcts config <rid> get|set|unset [key] [value]`\n * - `adt gcts objects <rid>`\n *\n * All commands talk to `/sap/bc/cts_abapvcs/` via the typed contracts in\n * `@abapify/adt-contracts` (accessed as `client.adt.gcts.*`). JSON responses\n * are printed via `console.log` (respects `--json` flag where applicable).\n */\n\nimport type { CliCommandPlugin, CliContext } from '@abapify/adt-plugin';\nimport { getGctsClient } from '../client/gcts-client';\n\n// ── small helpers ──────────────────────────────────────────────────────────\n\n/** Stringify an object with 2-space indent (matches `sap gcts ... -f JSON`). */\nfunction json(x: unknown): string {\n return JSON.stringify(x, null, 2);\n}\n\n/** Safely coerce an `args` value to a string. */\nfunction str(v: unknown): string {\n return typeof v === 'string' ? v : '';\n}\n\n// ── repo subcommands ───────────────────────────────────────────────────────\n\nconst repoList: CliCommandPlugin = {\n name: 'list',\n description: 'List all gCTS repositories (GET /repository)',\n options: [{ flags: '--json', description: 'Output as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const res = await client.adt.gcts.repository.list();\n const repos = res.result ?? [];\n if (args.json) {\n console.log(json(repos));\n return;\n }\n if (repos.length === 0) {\n ctx.logger.info('No gCTS repositories found.');\n return;\n }\n for (const r of repos) {\n console.log(\n `${r.rid}\\t${r.status ?? ''}\\t${r.branch ?? ''}\\t${r.url ?? ''}`,\n );\n }\n },\n};\n\nconst repoCreate: CliCommandPlugin = {\n name: 'create',\n description: 'Create a new gCTS repository (POST /repository)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<url>', description: 'Git URL (https://...)' },\n ],\n options: [\n {\n flags: '--vsid <vsid>',\n description: 'Virtual system ID',\n default: '6IT',\n },\n {\n flags: '--role <role>',\n description: 'Repository role (SOURCE|TARGET)',\n default: 'SOURCE',\n },\n {\n flags: '--type <type>',\n description: 'Repository type (GITHUB|GIT)',\n default: 'GITHUB',\n },\n {\n flags: '--starting-folder <dir>',\n description: 'Repository start dir',\n default: 'src/',\n },\n { flags: '--vcs-token <token>', description: 'VCS authentication token' },\n { flags: '--json', description: 'Output response as JSON' },\n ],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const url = str(args.url);\n const config: Array<{ key: string; value: string }> = [];\n if (args.startingFolder)\n config.push({ key: 'VCS_TARGET_DIR', value: str(args.startingFolder) });\n if (args.vcsToken)\n config.push({ key: 'CLIENT_VCS_AUTH_TOKEN', value: str(args.vcsToken) });\n\n const body = {\n repository: rid,\n data: {\n rid,\n name: rid,\n vsid: str(args.vsid) || '6IT',\n url,\n role: str(args.role) || 'SOURCE',\n type: str(args.type) || 'GITHUB',\n connection: 'ssl',\n ...(config.length > 0 ? { config } : {}),\n },\n };\n const res = await client.adt.gcts.repository.create(body);\n if (args.json) {\n console.log(json(res));\n return;\n }\n const repo = res.repository ?? res.result;\n ctx.logger.info(`✅ Created repository \"${rid}\"`);\n if (repo?.status) ctx.logger.info(` status: ${repo.status}`);\n },\n};\n\nconst repoClone: CliCommandPlugin = {\n name: 'clone',\n description:\n 'Clone repository on target system (POST /repository/<rid>/clone)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.clone(rid);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Cloned repository \"${rid}\"`);\n },\n};\n\nconst repoDelete: CliCommandPlugin = {\n name: 'delete',\n description: 'Delete a gCTS repository (DELETE /repository/<rid>)',\n alias: 'rm',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.delete(rid);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`🗑 Deleted repository \"${rid}\"`);\n },\n};\n\nconst repoPull: CliCommandPlugin = {\n name: 'pull',\n description: 'Pull a gCTS repository (GET /repository/<rid>/pullByCommit)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.pull(rid);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Pulled repository \"${rid}\"`);\n if (res.fromCommit && res.toCommit) {\n ctx.logger.info(` ${res.fromCommit} -> ${res.toCommit}`);\n } else if (res.toCommit) {\n ctx.logger.info(` HEAD = ${res.toCommit}`);\n }\n },\n};\n\nconst repoPush: CliCommandPlugin = {\n name: 'push',\n description: 'Push a gCTS repository (GET /repository/<rid>/push)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.push(rid);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Pushed repository \"${rid}\"`);\n },\n};\n\nconst repoCheckout: CliCommandPlugin = {\n name: 'checkout',\n description:\n 'Check out a branch (GET /repository/<rid>/branches/<current>/switch?branch=X)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<branch>', description: 'Target branch name' },\n {\n name: '[currentBranch]',\n description:\n 'Current branch (optional — inferred from repo if omitted; defaults to \"main\")',\n },\n ],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const target = str(args.branch);\n let current = str(args.currentBranch);\n\n if (!current) {\n // Discover current branch — mirrors sapcli's behaviour of reading\n // the repo `branch` property before building the switch URL.\n try {\n const repoRes = await client.adt.gcts.repository.get(rid);\n current = str(repoRes.result?.branch) || 'main';\n } catch {\n current = 'main';\n }\n }\n\n const res = await client.adt.gcts.repository.checkout(rid, current, target);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Switched \"${rid}\" from \"${current}\" to \"${target}\"`);\n },\n};\n\nconst repoGroup: CliCommandPlugin = {\n name: 'repo',\n description: 'Manage gCTS repositories',\n subcommands: [\n repoList,\n repoCreate,\n repoClone,\n repoDelete,\n repoPull,\n repoPush,\n repoCheckout,\n ],\n};\n\n// ── branch subcommands ─────────────────────────────────────────────────────\n\nconst branchList: CliCommandPlugin = {\n name: 'list',\n description: 'List branches of a repository (GET /branches)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [\n { flags: '-r, --remote', description: 'Show remote branches only' },\n { flags: '-a, --all', description: 'Show all branches (local + remote)' },\n { flags: '--json', description: 'Output as JSON' },\n ],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.branches.list(rid);\n const all = res.branches ?? [];\n let filtered: typeof all;\n if (args.remote) {\n filtered = all.filter((b) => b.type === 'remote');\n } else if (args.all) {\n filtered = all;\n } else {\n filtered = all.filter((b) => b.type === 'local');\n }\n\n if (args.json) {\n console.log(json(filtered));\n return;\n }\n for (const b of filtered) {\n console.log(`${b.name}\\t${b.type ?? ''}\\t${b.ref ?? ''}`);\n }\n },\n};\n\nconst branchCreate: CliCommandPlugin = {\n name: 'create',\n description: 'Create a new branch (POST /branches)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<name>', description: 'Branch name' },\n ],\n options: [\n { flags: '--local-only', description: 'Create a local branch only' },\n { flags: '--symbolic', description: 'Create a symbolic ref' },\n { flags: '--peeled', description: 'Create a peeled ref' },\n { flags: '--json', description: 'Output response as JSON' },\n ],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const name = str(args.name);\n const body = {\n branch: name,\n type: args.localOnly ? ('local' as const) : ('global' as const),\n isSymbolic: Boolean(args.symbolic),\n isPeeled: Boolean(args.peeled),\n };\n const res = await client.adt.gcts.branches.create(rid, body);\n if (args.json) {\n console.log(json(res));\n return;\n }\n const branchName = res.branch?.name ?? name;\n ctx.logger.info(`✅ Branch \"${branchName}\" created in \"${rid}\"`);\n },\n};\n\nconst branchDelete: CliCommandPlugin = {\n name: 'delete',\n description: 'Delete a branch (DELETE /branches/<name>)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<name>', description: 'Branch name' },\n ],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const name = str(args.name);\n const res = await client.adt.gcts.branches.delete(rid, name);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`🗑 Deleted branch \"${name}\" in \"${rid}\"`);\n },\n};\n\nconst branchSwitch: CliCommandPlugin = {\n name: 'switch',\n description:\n 'Switch branches (GET /branches/<current>/switch?branch=<target>)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<target>', description: 'Target branch name' },\n { name: '[current]', description: 'Current branch (defaults to \"main\")' },\n ],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const target = str(args.target);\n let current = str(args.current);\n if (!current) {\n try {\n const r = await client.adt.gcts.repository.get(rid);\n current = str(r.result?.branch) || 'main';\n } catch {\n current = 'main';\n }\n }\n const res = await client.adt.gcts.branches.switch(rid, current, target);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Switched to \"${target}\" in \"${rid}\"`);\n },\n};\n\nconst branchGroup: CliCommandPlugin = {\n name: 'branch',\n description: 'Manage gCTS branches',\n subcommands: [branchList, branchCreate, branchDelete, branchSwitch],\n};\n\n// ── top-level `commit` / `log` / `config` / `objects` ──────────────────────\n\nconst commitCmd: CliCommandPlugin = {\n name: 'commit',\n description: 'Commit a package or transport (POST /repository/<rid>/commit)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [\n {\n flags: '-m, --message <text>',\n description: 'Commit message (default: auto-generated)',\n },\n {\n flags: '-d, --devc <pkg>',\n description: 'ABAP package name (defaults to <rid>)',\n },\n {\n flags: '--corrnr <tr>',\n description: 'Transport number (mutually exclusive with --devc)',\n },\n { flags: '--description <text>', description: 'Long commit description' },\n { flags: '--json', description: 'Output response as JSON' },\n ],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const corrnr = str(args.corrnr);\n\n const objects = corrnr\n ? [{ object: corrnr, type: 'TRANSPORT' }]\n : [\n {\n object: (str(args.devc) || rid).toUpperCase(),\n type: 'FULL_PACKAGE',\n },\n ];\n\n const defaultMsg = corrnr\n ? `Transport ${corrnr}`\n : `Export package ${(str(args.devc) || rid).toUpperCase()}`;\n\n const body = {\n message: str(args.message) || defaultMsg,\n autoPush: 'true' as const,\n objects,\n ...(args.description ? { description: str(args.description) } : {}),\n };\n\n const res = await client.adt.gcts.commits.commit(rid, body);\n if (args.json) {\n console.log(json(res));\n return;\n }\n const detail = corrnr\n ? `transport ${corrnr}`\n : `package ${objects[0].object}`;\n ctx.logger.info(`✅ Committed to \"${rid}\": ${detail}`);\n },\n};\n\nconst logCmd: CliCommandPlugin = {\n name: 'log',\n description:\n 'Show repository commit history (GET /repository/<rid>/getCommit)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.log(rid);\n const commits = res.commits ?? [];\n if (args.json) {\n console.log(json(commits));\n return;\n }\n for (const c of commits) {\n console.log(`commit ${c.id ?? ''}`);\n if (c.author) console.log(`Author: ${c.author} <${c.authorMail ?? ''}>`);\n if (c.date) console.log(`Date: ${c.date}`);\n console.log('');\n console.log(` ${c.message ?? ''}`);\n console.log('');\n }\n },\n};\n\nconst objectsCmd: CliCommandPlugin = {\n name: 'objects',\n description: 'List repository objects (GET /repository/<rid>/getObjects)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.objects(rid);\n const objs = res.objects ?? [];\n if (args.json) {\n console.log(json(objs));\n return;\n }\n for (const o of objs) {\n console.log(`${o.pgmid ?? ''}\\t${o.type ?? ''}\\t${o.object ?? ''}`);\n }\n },\n};\n\nconst configCmd: CliCommandPlugin = {\n name: 'config',\n description:\n 'Manage repository configuration (GET/POST/DELETE /repository/<rid>/config)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n {\n name: '[action]',\n description: 'get | set | unset | list (default: list)',\n default: 'list',\n },\n { name: '[key]', description: 'Config key (for get/set/unset)' },\n { name: '[value]', description: 'Config value (for set)' },\n ],\n options: [{ flags: '--json', description: 'Output as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const action = (str(args.action) || 'list').toLowerCase();\n const key = str(args.key);\n\n if (action === 'list') {\n const repo = await client.adt.gcts.repository.get(rid);\n const cfg = repo.result?.config ?? [];\n if (args.json) {\n console.log(json(cfg));\n return;\n }\n for (const c of cfg) {\n console.log(`${c.key}=${c.value ?? ''}`);\n }\n return;\n }\n\n if (!key) {\n ctx.logger.error(`❌ \"${action}\" requires a key argument.`);\n process.exit(1);\n }\n\n if (action === 'get') {\n const res = await client.adt.gcts.config.get(rid, key);\n if (args.json) {\n console.log(json(res));\n return;\n }\n console.log(`${res.result?.key ?? key}=${res.result?.value ?? ''}`);\n return;\n }\n\n if (action === 'set') {\n const value = str(args.value);\n if (!value) {\n ctx.logger.error('❌ \"set\" requires a value argument.');\n process.exit(1);\n }\n const res = await client.adt.gcts.config.set(rid, { key, value });\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ ${key}=${value}`);\n return;\n }\n\n if (action === 'unset' || action === 'delete') {\n const res = await client.adt.gcts.config.delete(rid, key);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`🗑 unset ${key}`);\n return;\n }\n\n ctx.logger.error(\n `❌ Unknown config action \"${action}\" (expected: get|set|unset|list)`,\n );\n process.exit(1);\n },\n};\n\n// ── root ───────────────────────────────────────────────────────────────────\n\nexport const gctsCommand: CliCommandPlugin = {\n name: 'gcts',\n description: 'SAP gCTS (git-enabled CTS) operations (repo/branch/commit/...)',\n subcommands: [\n repoGroup,\n branchGroup,\n commitCmd,\n logCmd,\n objectsCmd,\n configCmd,\n ],\n async execute(\n _args: Record<string, unknown>,\n ctx: CliContext,\n ): Promise<void> {\n // Surfaces help when called without a subcommand.\n ctx.logger.info(\n 'Usage: adt gcts <repo|branch|commit|log|objects|config> [...]',\n );\n ctx.logger.info(\n 'Run `adt gcts <subcommand> --help` for subcommand-specific options.',\n );\n },\n};\n\nexport default gctsCommand;\n"],"mappings":";;;;;;AAuFA,eAAsB,cAAc,KAAsC;CACxE,IAAI,CAAC,IAAI,cAAc;EACrB,IAAI,OAAO,MACT,mEACF;EACA,IAAI,OAAO,MAAM,wBAAwB;EACzC,QAAQ,KAAK,CAAC;CAChB;CACA,OAAQ,MAAM,IAAI,aAAa;AACjC;;;;;AC1EA,SAAS,KAAK,GAAoB;CAChC,OAAO,KAAK,UAAU,GAAG,MAAM,CAAC;AAClC;;AAGA,SAAS,IAAI,GAAoB;CAC/B,OAAO,OAAO,MAAM,WAAW,IAAI;AACrC;AAgNA,MAAM,YAA8B;CAClC,MAAM;CACN,aAAa;CACb,aAAa;EACX;GA/MF,MAAM;GACN,aAAa;GACb,SAAS,CAAC;IAAE,OAAO;IAAU,aAAa;GAAiB,CAAC;GAC5D,MAAM,QAAQ,MAAM,KAAK;IAGvB,MAAM,SAAQ,OADI,MADG,cAAc,GAAG,EACd,CAAC,IAAI,KAAK,WAAW,KAAK,EACjC,CAAC,UAAU,CAAC;IAC7B,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,KAAK,CAAC;KACvB;IACF;IACA,IAAI,MAAM,WAAW,GAAG;KACtB,IAAI,OAAO,KAAK,6BAA6B;KAC7C;IACF;IACA,KAAK,MAAM,KAAK,OACd,QAAQ,IACN,GAAG,EAAE,IAAI,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,IAC9D;GAEJ;EA2LS;EACP;GAxLF,MAAM;GACN,aAAa;GACb,WAAW,CACT;IAAE,MAAM;IAAS,aAAa;GAAgB,GAC9C;IAAE,MAAM;IAAS,aAAa;GAAwB,CACxD;GACA,SAAS;IACP;KACE,OAAO;KACP,aAAa;KACb,SAAS;IACX;IACA;KACE,OAAO;KACP,aAAa;KACb,SAAS;IACX;IACA;KACE,OAAO;KACP,aAAa;KACb,SAAS;IACX;IACA;KACE,OAAO;KACP,aAAa;KACb,SAAS;IACX;IACA;KAAE,OAAO;KAAuB,aAAa;IAA2B;IACxE;KAAE,OAAO;KAAU,aAAa;IAA0B;GAC5D;GACA,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,SAAgD,CAAC;IACvD,IAAI,KAAK,gBACP,OAAO,KAAK;KAAE,KAAK;KAAkB,OAAO,IAAI,KAAK,cAAc;IAAE,CAAC;IACxE,IAAI,KAAK,UACP,OAAO,KAAK;KAAE,KAAK;KAAyB,OAAO,IAAI,KAAK,QAAQ;IAAE,CAAC;IAEzE,MAAM,OAAO;KACX,YAAY;KACZ,MAAM;MACJ;MACA,MAAM;MACN,MAAM,IAAI,KAAK,IAAI,KAAK;MACxB;MACA,MAAM,IAAI,KAAK,IAAI,KAAK;MACxB,MAAM,IAAI,KAAK,IAAI,KAAK;MACxB,YAAY;MACZ,GAAI,OAAO,SAAS,IAAI,EAAE,OAAO,IAAI,CAAC;KACxC;IACF;IACA,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,WAAW,OAAO,IAAI;IACxD,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,MAAM,OAAO,IAAI,cAAc,IAAI;IACnC,IAAI,OAAO,KAAK,yBAAyB,IAAI,EAAE;IAC/C,IAAI,MAAM,QAAQ,IAAI,OAAO,KAAK,cAAc,KAAK,QAAQ;GAC/D;EA2HW;EACT;GAxHF,MAAM;GACN,aACE;GACF,WAAW,CAAC;IAAE,MAAM;IAAS,aAAa;GAAgB,CAAC;GAC3D,SAAS,CAAC;IAAE,OAAO;IAAU,aAAa;GAA0B,CAAC;GACrE,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,WAAW,MAAM,GAAG;IACtD,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,IAAI,OAAO,KAAK,wBAAwB,IAAI,EAAE;GAChD;EA0GU;EACR;GAvGF,MAAM;GACN,aAAa;GACb,OAAO;GACP,WAAW,CAAC;IAAE,MAAM;IAAS,aAAa;GAAgB,CAAC;GAC3D,SAAS,CAAC;IAAE,OAAO;IAAU,aAAa;GAA0B,CAAC;GACrE,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,WAAW,OAAO,GAAG;IACvD,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,IAAI,OAAO,KAAK,2BAA2B,IAAI,EAAE;GACnD;EAyFW;EACT;GAtFF,MAAM;GACN,aAAa;GACb,WAAW,CAAC;IAAE,MAAM;IAAS,aAAa;GAAgB,CAAC;GAC3D,SAAS,CAAC;IAAE,OAAO;IAAU,aAAa;GAA0B,CAAC;GACrE,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,WAAW,KAAK,GAAG;IACrD,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,IAAI,OAAO,KAAK,wBAAwB,IAAI,EAAE;IAC9C,IAAI,IAAI,cAAc,IAAI,UACxB,IAAI,OAAO,KAAK,MAAM,IAAI,WAAW,MAAM,IAAI,UAAU;SACpD,IAAI,IAAI,UACb,IAAI,OAAO,KAAK,aAAa,IAAI,UAAU;GAE/C;EAoES;EACP;GAjEF,MAAM;GACN,aAAa;GACb,WAAW,CAAC;IAAE,MAAM;IAAS,aAAa;GAAgB,CAAC;GAC3D,SAAS,CAAC;IAAE,OAAO;IAAU,aAAa;GAA0B,CAAC;GACrE,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,WAAW,KAAK,GAAG;IACrD,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,IAAI,OAAO,KAAK,wBAAwB,IAAI,EAAE;GAChD;EAoDS;EACP;GAjDF,MAAM;GACN,aACE;GACF,WAAW;IACT;KAAE,MAAM;KAAS,aAAa;IAAgB;IAC9C;KAAE,MAAM;KAAY,aAAa;IAAqB;IACtD;KACE,MAAM;KACN,aACE;IACJ;GACF;GACA,SAAS,CAAC;IAAE,OAAO;IAAU,aAAa;GAA0B,CAAC;GACrE,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,SAAS,IAAI,KAAK,MAAM;IAC9B,IAAI,UAAU,IAAI,KAAK,aAAa;IAEpC,IAAI,CAAC,SAGH,IAAI;KAEF,UAAU,KAAI,MADQ,OAAO,IAAI,KAAK,WAAW,IAAI,GAAG,EACnC,CAAC,QAAQ,MAAM,KAAK;IAC3C,QAAQ;KACN,UAAU;IACZ;IAGF,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,WAAW,SAAS,KAAK,SAAS,MAAM;IAC1E,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,IAAI,OAAO,KAAK,eAAe,IAAI,UAAU,QAAQ,QAAQ,OAAO,EAAE;GACxE;EAaa;CACb;AACF;AA2HA,MAAM,cAAgC;CACpC,MAAM;CACN,aAAa;CACb,aAAa;EAAC;GAzHd,MAAM;GACN,aAAa;GACb,WAAW,CAAC;IAAE,MAAM;IAAS,aAAa;GAAgB,CAAC;GAC3D,SAAS;IACP;KAAE,OAAO;KAAgB,aAAa;IAA4B;IAClE;KAAE,OAAO;KAAa,aAAa;IAAqC;IACxE;KAAE,OAAO;KAAU,aAAa;IAAiB;GACnD;GACA,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IAExB,MAAM,OAAM,MADM,OAAO,IAAI,KAAK,SAAS,KAAK,GAAG,EACpC,CAAC,YAAY,CAAC;IAC7B,IAAI;IACJ,IAAI,KAAK,QACP,WAAW,IAAI,QAAQ,MAAM,EAAE,SAAS,QAAQ;SAC3C,IAAI,KAAK,KACd,WAAW;SAEX,WAAW,IAAI,QAAQ,MAAM,EAAE,SAAS,OAAO;IAGjD,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,QAAQ,CAAC;KAC1B;IACF;IACA,KAAK,MAAM,KAAK,UACd,QAAQ,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,IAAI;GAE5D;EA4FuB;EAAG;GAxF1B,MAAM;GACN,aAAa;GACb,WAAW,CACT;IAAE,MAAM;IAAS,aAAa;GAAgB,GAC9C;IAAE,MAAM;IAAU,aAAa;GAAc,CAC/C;GACA,SAAS;IACP;KAAE,OAAO;KAAgB,aAAa;IAA6B;IACnE;KAAE,OAAO;KAAc,aAAa;IAAwB;IAC5D;KAAE,OAAO;KAAY,aAAa;IAAsB;IACxD;KAAE,OAAO;KAAU,aAAa;IAA0B;GAC5D;GACA,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,OAAO,IAAI,KAAK,IAAI;IAC1B,MAAM,OAAO;KACX,QAAQ;KACR,MAAM,KAAK,YAAa,UAAqB;KAC7C,YAAY,QAAQ,KAAK,QAAQ;KACjC,UAAU,QAAQ,KAAK,MAAM;IAC/B;IACA,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,SAAS,OAAO,KAAK,IAAI;IAC3D,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,MAAM,aAAa,IAAI,QAAQ,QAAQ;IACvC,IAAI,OAAO,KAAK,aAAa,WAAW,gBAAgB,IAAI,EAAE;GAChE;EA2DqC;EAAG;GAvDxC,MAAM;GACN,aAAa;GACb,WAAW,CACT;IAAE,MAAM;IAAS,aAAa;GAAgB,GAC9C;IAAE,MAAM;IAAU,aAAa;GAAc,CAC/C;GACA,SAAS,CAAC;IAAE,OAAO;IAAU,aAAa;GAA0B,CAAC;GACrE,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,OAAO,IAAI,KAAK,IAAI;IAC1B,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,SAAS,OAAO,KAAK,IAAI;IAC3D,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,IAAI,OAAO,KAAK,uBAAuB,KAAK,QAAQ,IAAI,EAAE;GAC5D;EAsCmD;EAAG;GAlCtD,MAAM;GACN,aACE;GACF,WAAW;IACT;KAAE,MAAM;KAAS,aAAa;IAAgB;IAC9C;KAAE,MAAM;KAAY,aAAa;IAAqB;IACtD;KAAE,MAAM;KAAa,aAAa;IAAsC;GAC1E;GACA,SAAS,CAAC;IAAE,OAAO;IAAU,aAAa;GAA0B,CAAC;GACrE,MAAM,QAAQ,MAAM,KAAK;IACvB,MAAM,SAAS,MAAM,cAAc,GAAG;IACtC,MAAM,MAAM,IAAI,KAAK,GAAG;IACxB,MAAM,SAAS,IAAI,KAAK,MAAM;IAC9B,IAAI,UAAU,IAAI,KAAK,OAAO;IAC9B,IAAI,CAAC,SACH,IAAI;KAEF,UAAU,KAAI,MADE,OAAO,IAAI,KAAK,WAAW,IAAI,GAAG,EACnC,CAAC,QAAQ,MAAM,KAAK;IACrC,QAAQ;KACN,UAAU;IACZ;IAEF,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,SAAS,OAAO,KAAK,SAAS,MAAM;IACtE,IAAI,KAAK,MAAM;KACb,QAAQ,IAAI,KAAK,GAAG,CAAC;KACrB;IACF;IACA,IAAI,OAAO,KAAK,kBAAkB,OAAO,QAAQ,IAAI,EAAE;GACzD;EAMiE;CAAC;AACpE;AAIA,MAAM,YAA8B;CAClC,MAAM;CACN,aAAa;CACb,WAAW,CAAC;EAAE,MAAM;EAAS,aAAa;CAAgB,CAAC;CAC3D,SAAS;EACP;GACE,OAAO;GACP,aAAa;EACf;EACA;GACE,OAAO;GACP,aAAa;EACf;EACA;GACE,OAAO;GACP,aAAa;EACf;EACA;GAAE,OAAO;GAAwB,aAAa;EAA0B;EACxE;GAAE,OAAO;GAAU,aAAa;EAA0B;CAC5D;CACA,MAAM,QAAQ,MAAM,KAAK;EACvB,MAAM,SAAS,MAAM,cAAc,GAAG;EACtC,MAAM,MAAM,IAAI,KAAK,GAAG;EACxB,MAAM,SAAS,IAAI,KAAK,MAAM;EAE9B,MAAM,UAAU,SACZ,CAAC;GAAE,QAAQ;GAAQ,MAAM;EAAY,CAAC,IACtC,CACE;GACE,SAAS,IAAI,KAAK,IAAI,KAAK,IAAG,CAAE,YAAY;GAC5C,MAAM;EACR,CACF;EAEJ,MAAM,aAAa,SACf,aAAa,WACb,mBAAmB,IAAI,KAAK,IAAI,KAAK,IAAG,CAAE,YAAY;EAE1D,MAAM,OAAO;GACX,SAAS,IAAI,KAAK,OAAO,KAAK;GAC9B,UAAU;GACV;GACA,GAAI,KAAK,cAAc,EAAE,aAAa,IAAI,KAAK,WAAW,EAAE,IAAI,CAAC;EACnE;EAEA,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,QAAQ,OAAO,KAAK,IAAI;EAC1D,IAAI,KAAK,MAAM;GACb,QAAQ,IAAI,KAAK,GAAG,CAAC;GACrB;EACF;EACA,MAAM,SAAS,SACX,aAAa,WACb,WAAW,QAAQ,EAAE,CAAC;EAC1B,IAAI,OAAO,KAAK,mBAAmB,IAAI,KAAK,QAAQ;CACtD;AACF;AAEA,MAAM,SAA2B;CAC/B,MAAM;CACN,aACE;CACF,WAAW,CAAC;EAAE,MAAM;EAAS,aAAa;CAAgB,CAAC;CAC3D,SAAS,CAAC;EAAE,OAAO;EAAU,aAAa;CAAiB,CAAC;CAC5D,MAAM,QAAQ,MAAM,KAAK;EACvB,MAAM,SAAS,MAAM,cAAc,GAAG;EACtC,MAAM,MAAM,IAAI,KAAK,GAAG;EAExB,MAAM,WAAU,MADE,OAAO,IAAI,KAAK,WAAW,IAAI,GAAG,EACjC,CAAC,WAAW,CAAC;EAChC,IAAI,KAAK,MAAM;GACb,QAAQ,IAAI,KAAK,OAAO,CAAC;GACzB;EACF;EACA,KAAK,MAAM,KAAK,SAAS;GACvB,QAAQ,IAAI,UAAU,EAAE,MAAM,IAAI;GAClC,IAAI,EAAE,QAAQ,QAAQ,IAAI,WAAW,EAAE,OAAO,IAAI,EAAE,cAAc,GAAG,EAAE;GACvE,IAAI,EAAE,MAAM,QAAQ,IAAI,WAAW,EAAE,MAAM;GAC3C,QAAQ,IAAI,EAAE;GACd,QAAQ,IAAI,OAAO,EAAE,WAAW,IAAI;GACpC,QAAQ,IAAI,EAAE;EAChB;CACF;AACF;AAEA,MAAM,aAA+B;CACnC,MAAM;CACN,aAAa;CACb,WAAW,CAAC;EAAE,MAAM;EAAS,aAAa;CAAgB,CAAC;CAC3D,SAAS,CAAC;EAAE,OAAO;EAAU,aAAa;CAAiB,CAAC;CAC5D,MAAM,QAAQ,MAAM,KAAK;EACvB,MAAM,SAAS,MAAM,cAAc,GAAG;EACtC,MAAM,MAAM,IAAI,KAAK,GAAG;EAExB,MAAM,QAAO,MADK,OAAO,IAAI,KAAK,WAAW,QAAQ,GAAG,EACxC,CAAC,WAAW,CAAC;EAC7B,IAAI,KAAK,MAAM;GACb,QAAQ,IAAI,KAAK,IAAI,CAAC;GACtB;EACF;EACA,KAAK,MAAM,KAAK,MACd,QAAQ,IAAI,GAAG,EAAE,SAAS,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,UAAU,IAAI;CAEtE;AACF;AAEA,MAAM,YAA8B;CAClC,MAAM;CACN,aACE;CACF,WAAW;EACT;GAAE,MAAM;GAAS,aAAa;EAAgB;EAC9C;GACE,MAAM;GACN,aAAa;GACb,SAAS;EACX;EACA;GAAE,MAAM;GAAS,aAAa;EAAiC;EAC/D;GAAE,MAAM;GAAW,aAAa;EAAyB;CAC3D;CACA,SAAS,CAAC;EAAE,OAAO;EAAU,aAAa;CAAiB,CAAC;CAC5D,MAAM,QAAQ,MAAM,KAAK;EACvB,MAAM,SAAS,MAAM,cAAc,GAAG;EACtC,MAAM,MAAM,IAAI,KAAK,GAAG;EACxB,MAAM,UAAU,IAAI,KAAK,MAAM,KAAK,OAAM,CAAE,YAAY;EACxD,MAAM,MAAM,IAAI,KAAK,GAAG;EAExB,IAAI,WAAW,QAAQ;GAErB,MAAM,OAAM,MADO,OAAO,IAAI,KAAK,WAAW,IAAI,GAAG,EACrC,CAAC,QAAQ,UAAU,CAAC;GACpC,IAAI,KAAK,MAAM;IACb,QAAQ,IAAI,KAAK,GAAG,CAAC;IACrB;GACF;GACA,KAAK,MAAM,KAAK,KACd,QAAQ,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,SAAS,IAAI;GAEzC;EACF;EAEA,IAAI,CAAC,KAAK;GACR,IAAI,OAAO,MAAM,MAAM,OAAO,2BAA2B;GACzD,QAAQ,KAAK,CAAC;EAChB;EAEA,IAAI,WAAW,OAAO;GACpB,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,GAAG;GACrD,IAAI,KAAK,MAAM;IACb,QAAQ,IAAI,KAAK,GAAG,CAAC;IACrB;GACF;GACA,QAAQ,IAAI,GAAG,IAAI,QAAQ,OAAO,IAAI,GAAG,IAAI,QAAQ,SAAS,IAAI;GAClE;EACF;EAEA,IAAI,WAAW,OAAO;GACpB,MAAM,QAAQ,IAAI,KAAK,KAAK;GAC5B,IAAI,CAAC,OAAO;IACV,IAAI,OAAO,MAAM,sCAAoC;IACrD,QAAQ,KAAK,CAAC;GAChB;GACA,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK;IAAE;IAAK;GAAM,CAAC;GAChE,IAAI,KAAK,MAAM;IACb,QAAQ,IAAI,KAAK,GAAG,CAAC;IACrB;GACF;GACA,IAAI,OAAO,KAAK,KAAK,IAAI,GAAG,OAAO;GACnC;EACF;EAEA,IAAI,WAAW,WAAW,WAAW,UAAU;GAC7C,MAAM,MAAM,MAAM,OAAO,IAAI,KAAK,OAAO,OAAO,KAAK,GAAG;GACxD,IAAI,KAAK,MAAM;IACb,QAAQ,IAAI,KAAK,GAAG,CAAC;IACrB;GACF;GACA,IAAI,OAAO,KAAK,aAAa,KAAK;GAClC;EACF;EAEA,IAAI,OAAO,MACT,4BAA4B,OAAO,iCACrC;EACA,QAAQ,KAAK,CAAC;CAChB;AACF;AAIA,MAAa,cAAgC;CAC3C,MAAM;CACN,aAAa;CACb,aAAa;EACX;EACA;EACA;EACA;EACA;EACA;CACF;CACA,MAAM,QACJ,OACA,KACe;EAEf,IAAI,OAAO,KACT,+DACF;EACA,IAAI,OAAO,KACT,qEACF;CACF;AACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/lib/client/gcts-client.ts","../src/lib/commands/gcts.ts"],"sourcesContent":["/**\n * Typed interface for the subset of the ADT client used by the gCTS CLI.\n *\n * The `CliContext.getAdtClient()` factory (provided by `adt-cli`) returns\n * `Promise<unknown>`. To keep the plugin self-contained, we declare the\n * exact shape we need here, structurally matching `client.adt.gcts.*` from\n * `@abapify/adt-contracts`.\n */\n\nimport type {\n GctsRepositoryEnvelope,\n GctsRepositoriesResponse,\n GctsBranchesResponse,\n GctsCreateBranchResponse,\n GctsLogResponse,\n GctsPullResponse,\n GctsObjectsResponse,\n GctsConfigResponse,\n GctsCreateRepositoryRequest,\n GctsCreateBranchRequest,\n GctsCommitRequest,\n GctsSetConfigRequest,\n} from '@abapify/adt-contracts';\n\nexport interface GctsClient {\n adt: {\n gcts: {\n repository: {\n list: () => Promise<GctsRepositoriesResponse>;\n get: (rid: string) => Promise<GctsRepositoryEnvelope>;\n create: (\n body: GctsCreateRepositoryRequest,\n ) => Promise<GctsRepositoryEnvelope>;\n delete: (rid: string) => Promise<Record<string, unknown>>;\n clone: (rid: string) => Promise<Record<string, unknown>>;\n pull: (rid: string) => Promise<GctsPullResponse>;\n push: (rid: string) => Promise<Record<string, unknown>>;\n checkout: (\n rid: string,\n currentBranch: string,\n targetBranch: string,\n ) => Promise<Record<string, unknown>>;\n log: (rid: string) => Promise<GctsLogResponse>;\n objects: (rid: string) => Promise<GctsObjectsResponse>;\n setItem: (\n rid: string,\n body: Record<string, unknown>,\n ) => Promise<Record<string, unknown>>;\n };\n branches: {\n list: (rid: string) => Promise<GctsBranchesResponse>;\n create: (\n rid: string,\n body: GctsCreateBranchRequest,\n ) => Promise<GctsCreateBranchResponse>;\n delete: (rid: string, name: string) => Promise<Record<string, unknown>>;\n switch: (\n rid: string,\n currentBranch: string,\n target: string,\n ) => Promise<Record<string, unknown>>;\n };\n commits: {\n commit: (\n rid: string,\n body: GctsCommitRequest,\n ) => Promise<Record<string, unknown>>;\n };\n config: {\n get: (rid: string, key: string) => Promise<GctsConfigResponse>;\n set: (\n rid: string,\n body: GctsSetConfigRequest,\n ) => Promise<Record<string, unknown>>;\n delete: (rid: string, key: string) => Promise<Record<string, unknown>>;\n };\n };\n };\n}\n\nimport type { CliContext } from '@abapify/adt-plugin';\n\n/**\n * Resolve a `GctsClient` from the CLI context, printing a friendly error and\n * exiting when no authenticated client is available (mirrors the pattern in\n * `@abapify/adt-atc`).\n */\nexport async function getGctsClient(ctx: CliContext): Promise<GctsClient> {\n if (!ctx.getAdtClient) {\n ctx.logger.error(\n '❌ ADT client not available. gCTS commands require authentication.',\n );\n ctx.logger.error(' Run: adt auth login');\n process.exit(1);\n }\n return (await ctx.getAdtClient()) as GctsClient;\n}\n","/**\n * `adt gcts` — top-level CLI command plugin.\n *\n * Mirrors sapcli's `sap gcts` surface:\n * - `adt gcts repo list / create / clone / delete / pull / push / checkout`\n * - `adt gcts branch list / create / switch / delete`\n * - `adt gcts commit <rid>`\n * - `adt gcts log <rid>`\n * - `adt gcts config <rid> get|set|unset [key] [value]`\n * - `adt gcts objects <rid>`\n *\n * All commands talk to `/sap/bc/cts_abapvcs/` via the typed contracts in\n * `@abapify/adt-contracts` (accessed as `client.adt.gcts.*`). JSON responses\n * are printed via `console.log` (respects `--json` flag where applicable).\n */\n\nimport type { CliCommandPlugin, CliContext } from '@abapify/adt-plugin';\nimport { getGctsClient } from '../client/gcts-client';\n\n// ── small helpers ──────────────────────────────────────────────────────────\n\n/** Stringify an object with 2-space indent (matches `sap gcts ... -f JSON`). */\nfunction json(x: unknown): string {\n return JSON.stringify(x, null, 2);\n}\n\n/** Safely coerce an `args` value to a string. */\nfunction str(v: unknown): string {\n return typeof v === 'string' ? v : '';\n}\n\n// ── repo subcommands ───────────────────────────────────────────────────────\n\nconst repoList: CliCommandPlugin = {\n name: 'list',\n description: 'List all gCTS repositories (GET /repository)',\n options: [{ flags: '--json', description: 'Output as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const res = await client.adt.gcts.repository.list();\n const repos = res.result ?? [];\n if (args.json) {\n console.log(json(repos));\n return;\n }\n if (repos.length === 0) {\n ctx.logger.info('No gCTS repositories found.');\n return;\n }\n for (const r of repos) {\n console.log(\n `${r.rid}\\t${r.status ?? ''}\\t${r.branch ?? ''}\\t${r.url ?? ''}`,\n );\n }\n },\n};\n\nconst repoCreate: CliCommandPlugin = {\n name: 'create',\n description: 'Create a new gCTS repository (POST /repository)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<url>', description: 'Git URL (https://...)' },\n ],\n options: [\n {\n flags: '--vsid <vsid>',\n description: 'Virtual system ID',\n default: '6IT',\n },\n {\n flags: '--role <role>',\n description: 'Repository role (SOURCE|TARGET)',\n default: 'SOURCE',\n },\n {\n flags: '--type <type>',\n description: 'Repository type (GITHUB|GIT)',\n default: 'GITHUB',\n },\n {\n flags: '--starting-folder <dir>',\n description: 'Repository start dir',\n default: 'src/',\n },\n { flags: '--vcs-token <token>', description: 'VCS authentication token' },\n { flags: '--json', description: 'Output response as JSON' },\n ],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const url = str(args.url);\n const config: Array<{ key: string; value: string }> = [];\n if (args.startingFolder)\n config.push({ key: 'VCS_TARGET_DIR', value: str(args.startingFolder) });\n if (args.vcsToken)\n config.push({ key: 'CLIENT_VCS_AUTH_TOKEN', value: str(args.vcsToken) });\n\n const body = {\n repository: rid,\n data: {\n rid,\n name: rid,\n vsid: str(args.vsid) || '6IT',\n url,\n role: str(args.role) || 'SOURCE',\n type: str(args.type) || 'GITHUB',\n connection: 'ssl',\n ...(config.length > 0 ? { config } : {}),\n },\n };\n const res = await client.adt.gcts.repository.create(body);\n if (args.json) {\n console.log(json(res));\n return;\n }\n const repo = res.repository ?? res.result;\n ctx.logger.info(`✅ Created repository \"${rid}\"`);\n if (repo?.status) ctx.logger.info(` status: ${repo.status}`);\n },\n};\n\nconst repoClone: CliCommandPlugin = {\n name: 'clone',\n description:\n 'Clone repository on target system (POST /repository/<rid>/clone)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.clone(rid);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Cloned repository \"${rid}\"`);\n },\n};\n\nconst repoDelete: CliCommandPlugin = {\n name: 'delete',\n description: 'Delete a gCTS repository (DELETE /repository/<rid>)',\n alias: 'rm',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.delete(rid);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`🗑 Deleted repository \"${rid}\"`);\n },\n};\n\nconst repoPull: CliCommandPlugin = {\n name: 'pull',\n description: 'Pull a gCTS repository (GET /repository/<rid>/pullByCommit)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.pull(rid);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Pulled repository \"${rid}\"`);\n if (res.fromCommit && res.toCommit) {\n ctx.logger.info(` ${res.fromCommit} -> ${res.toCommit}`);\n } else if (res.toCommit) {\n ctx.logger.info(` HEAD = ${res.toCommit}`);\n }\n },\n};\n\nconst repoPush: CliCommandPlugin = {\n name: 'push',\n description: 'Push a gCTS repository (GET /repository/<rid>/push)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.push(rid);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Pushed repository \"${rid}\"`);\n },\n};\n\nconst repoCheckout: CliCommandPlugin = {\n name: 'checkout',\n description:\n 'Check out a branch (GET /repository/<rid>/branches/<current>/switch?branch=X)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<branch>', description: 'Target branch name' },\n {\n name: '[currentBranch]',\n description:\n 'Current branch (optional — inferred from repo if omitted; defaults to \"main\")',\n },\n ],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const target = str(args.branch);\n let current = str(args.currentBranch);\n\n if (!current) {\n // Discover current branch — mirrors sapcli's behaviour of reading\n // the repo `branch` property before building the switch URL.\n try {\n const repoRes = await client.adt.gcts.repository.get(rid);\n current = str(repoRes.result?.branch) || 'main';\n } catch {\n current = 'main';\n }\n }\n\n const res = await client.adt.gcts.repository.checkout(rid, current, target);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Switched \"${rid}\" from \"${current}\" to \"${target}\"`);\n },\n};\n\nconst repoGroup: CliCommandPlugin = {\n name: 'repo',\n description: 'Manage gCTS repositories',\n subcommands: [\n repoList,\n repoCreate,\n repoClone,\n repoDelete,\n repoPull,\n repoPush,\n repoCheckout,\n ],\n};\n\n// ── branch subcommands ─────────────────────────────────────────────────────\n\nconst branchList: CliCommandPlugin = {\n name: 'list',\n description: 'List branches of a repository (GET /branches)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [\n { flags: '-r, --remote', description: 'Show remote branches only' },\n { flags: '-a, --all', description: 'Show all branches (local + remote)' },\n { flags: '--json', description: 'Output as JSON' },\n ],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.branches.list(rid);\n const all = res.branches ?? [];\n let filtered: typeof all;\n if (args.remote) {\n filtered = all.filter((b) => b.type === 'remote');\n } else if (args.all) {\n filtered = all;\n } else {\n filtered = all.filter((b) => b.type === 'local');\n }\n\n if (args.json) {\n console.log(json(filtered));\n return;\n }\n for (const b of filtered) {\n console.log(`${b.name}\\t${b.type ?? ''}\\t${b.ref ?? ''}`);\n }\n },\n};\n\nconst branchCreate: CliCommandPlugin = {\n name: 'create',\n description: 'Create a new branch (POST /branches)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<name>', description: 'Branch name' },\n ],\n options: [\n { flags: '--local-only', description: 'Create a local branch only' },\n { flags: '--symbolic', description: 'Create a symbolic ref' },\n { flags: '--peeled', description: 'Create a peeled ref' },\n { flags: '--json', description: 'Output response as JSON' },\n ],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const name = str(args.name);\n const body = {\n branch: name,\n type: args.localOnly ? ('local' as const) : ('global' as const),\n isSymbolic: Boolean(args.symbolic),\n isPeeled: Boolean(args.peeled),\n };\n const res = await client.adt.gcts.branches.create(rid, body);\n if (args.json) {\n console.log(json(res));\n return;\n }\n const branchName = res.branch?.name ?? name;\n ctx.logger.info(`✅ Branch \"${branchName}\" created in \"${rid}\"`);\n },\n};\n\nconst branchDelete: CliCommandPlugin = {\n name: 'delete',\n description: 'Delete a branch (DELETE /branches/<name>)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<name>', description: 'Branch name' },\n ],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const name = str(args.name);\n const res = await client.adt.gcts.branches.delete(rid, name);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`🗑 Deleted branch \"${name}\" in \"${rid}\"`);\n },\n};\n\nconst branchSwitch: CliCommandPlugin = {\n name: 'switch',\n description:\n 'Switch branches (GET /branches/<current>/switch?branch=<target>)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n { name: '<target>', description: 'Target branch name' },\n { name: '[current]', description: 'Current branch (defaults to \"main\")' },\n ],\n options: [{ flags: '--json', description: 'Output response as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const target = str(args.target);\n let current = str(args.current);\n if (!current) {\n try {\n const r = await client.adt.gcts.repository.get(rid);\n current = str(r.result?.branch) || 'main';\n } catch {\n current = 'main';\n }\n }\n const res = await client.adt.gcts.branches.switch(rid, current, target);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ Switched to \"${target}\" in \"${rid}\"`);\n },\n};\n\nconst branchGroup: CliCommandPlugin = {\n name: 'branch',\n description: 'Manage gCTS branches',\n subcommands: [branchList, branchCreate, branchDelete, branchSwitch],\n};\n\n// ── top-level `commit` / `log` / `config` / `objects` ──────────────────────\n\nconst commitCmd: CliCommandPlugin = {\n name: 'commit',\n description: 'Commit a package or transport (POST /repository/<rid>/commit)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [\n {\n flags: '-m, --message <text>',\n description: 'Commit message (default: auto-generated)',\n },\n {\n flags: '-d, --devc <pkg>',\n description: 'ABAP package name (defaults to <rid>)',\n },\n {\n flags: '--corrnr <tr>',\n description: 'Transport number (mutually exclusive with --devc)',\n },\n { flags: '--description <text>', description: 'Long commit description' },\n { flags: '--json', description: 'Output response as JSON' },\n ],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const corrnr = str(args.corrnr);\n\n const objects = corrnr\n ? [{ object: corrnr, type: 'TRANSPORT' }]\n : [\n {\n object: (str(args.devc) || rid).toUpperCase(),\n type: 'FULL_PACKAGE',\n },\n ];\n\n const defaultMsg = corrnr\n ? `Transport ${corrnr}`\n : `Export package ${(str(args.devc) || rid).toUpperCase()}`;\n\n const body = {\n message: str(args.message) || defaultMsg,\n autoPush: 'true' as const,\n objects,\n ...(args.description ? { description: str(args.description) } : {}),\n };\n\n const res = await client.adt.gcts.commits.commit(rid, body);\n if (args.json) {\n console.log(json(res));\n return;\n }\n const detail = corrnr\n ? `transport ${corrnr}`\n : `package ${objects[0].object}`;\n ctx.logger.info(`✅ Committed to \"${rid}\": ${detail}`);\n },\n};\n\nconst logCmd: CliCommandPlugin = {\n name: 'log',\n description:\n 'Show repository commit history (GET /repository/<rid>/getCommit)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.log(rid);\n const commits = res.commits ?? [];\n if (args.json) {\n console.log(json(commits));\n return;\n }\n for (const c of commits) {\n console.log(`commit ${c.id ?? ''}`);\n if (c.author) console.log(`Author: ${c.author} <${c.authorMail ?? ''}>`);\n if (c.date) console.log(`Date: ${c.date}`);\n console.log('');\n console.log(` ${c.message ?? ''}`);\n console.log('');\n }\n },\n};\n\nconst objectsCmd: CliCommandPlugin = {\n name: 'objects',\n description: 'List repository objects (GET /repository/<rid>/getObjects)',\n arguments: [{ name: '<rid>', description: 'Repository ID' }],\n options: [{ flags: '--json', description: 'Output as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const res = await client.adt.gcts.repository.objects(rid);\n const objs = res.objects ?? [];\n if (args.json) {\n console.log(json(objs));\n return;\n }\n for (const o of objs) {\n console.log(`${o.pgmid ?? ''}\\t${o.type ?? ''}\\t${o.object ?? ''}`);\n }\n },\n};\n\nconst configCmd: CliCommandPlugin = {\n name: 'config',\n description:\n 'Manage repository configuration (GET/POST/DELETE /repository/<rid>/config)',\n arguments: [\n { name: '<rid>', description: 'Repository ID' },\n {\n name: '[action]',\n description: 'get | set | unset | list (default: list)',\n default: 'list',\n },\n { name: '[key]', description: 'Config key (for get/set/unset)' },\n { name: '[value]', description: 'Config value (for set)' },\n ],\n options: [{ flags: '--json', description: 'Output as JSON' }],\n async execute(args, ctx) {\n const client = await getGctsClient(ctx);\n const rid = str(args.rid);\n const action = (str(args.action) || 'list').toLowerCase();\n const key = str(args.key);\n\n if (action === 'list') {\n const repo = await client.adt.gcts.repository.get(rid);\n const cfg = repo.result?.config ?? [];\n if (args.json) {\n console.log(json(cfg));\n return;\n }\n for (const c of cfg) {\n console.log(`${c.key}=${c.value ?? ''}`);\n }\n return;\n }\n\n if (!key) {\n ctx.logger.error(`❌ \"${action}\" requires a key argument.`);\n process.exit(1);\n }\n\n if (action === 'get') {\n const res = await client.adt.gcts.config.get(rid, key);\n if (args.json) {\n console.log(json(res));\n return;\n }\n console.log(`${res.result?.key ?? key}=${res.result?.value ?? ''}`);\n return;\n }\n\n if (action === 'set') {\n const value = str(args.value);\n if (!value) {\n ctx.logger.error('❌ \"set\" requires a value argument.');\n process.exit(1);\n }\n const res = await client.adt.gcts.config.set(rid, { key, value });\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`✅ ${key}=${value}`);\n return;\n }\n\n if (action === 'unset' || action === 'delete') {\n const res = await client.adt.gcts.config.delete(rid, key);\n if (args.json) {\n console.log(json(res));\n return;\n }\n ctx.logger.info(`🗑 unset ${key}`);\n return;\n }\n\n ctx.logger.error(\n `❌ Unknown config action \"${action}\" (expected: get|set|unset|list)`,\n );\n process.exit(1);\n },\n};\n\n// ── root ───────────────────────────────────────────────────────────────────\n\nexport const gctsCommand: CliCommandPlugin = {\n name: 'gcts',\n description: 'SAP gCTS (git-enabled CTS) operations (repo/branch/commit/...)',\n subcommands: [\n repoGroup,\n branchGroup,\n commitCmd,\n logCmd,\n objectsCmd,\n configCmd,\n ],\n async execute(\n _args: Record<string, unknown>,\n ctx: CliContext,\n ): Promise<void> {\n // Surfaces help when called without a subcommand.\n ctx.logger.info(\n 'Usage: adt gcts <repo|branch|commit|log|objects|config> [...]',\n );\n ctx.logger.info(\n 'Run `adt gcts <subcommand> --help` for subcommand-specific options.',\n );\n },\n};\n\nexport default gctsCommand;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abapify/adt-plugin-gcts-cli",
3
- "version": "0.4.17",
3
+ "version": "0.4.19",
4
4
  "description": "CLI command plugin for SAP gCTS (git-enabled CTS) — mirrors sapcli's `sap gcts`",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -27,8 +27,8 @@
27
27
  "cts_abapvcs"
28
28
  ],
29
29
  "dependencies": {
30
- "@abapify/adt-plugin": "0.4.17",
31
- "@abapify/adt-contracts": "0.4.17",
30
+ "@abapify/adt-plugin": "0.4.19",
31
+ "@abapify/adt-contracts": "0.4.19",
32
32
  "zod": "^3.23.8"
33
33
  },
34
34
  "repository": {