@kindgi/cli 0.1.4-rc.5 → 0.1.5-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/README.md +16 -10
  2. package/dist/build/defaults.d.ts +3 -1
  3. package/dist/build/defaults.d.ts.map +1 -1
  4. package/dist/build/defaults.js +44 -1
  5. package/dist/build/defaults.js.map +1 -1
  6. package/dist/build/java-image.d.ts +31 -0
  7. package/dist/build/java-image.d.ts.map +1 -0
  8. package/dist/build/java-image.js +146 -0
  9. package/dist/build/java-image.js.map +1 -0
  10. package/dist/build/pack-root.d.ts +1 -31
  11. package/dist/build/pack-root.d.ts.map +1 -1
  12. package/dist/build/pack-root.js +22 -2
  13. package/dist/build/pack-root.js.map +1 -1
  14. package/dist/build/runners.d.ts +44 -0
  15. package/dist/build/runners.d.ts.map +1 -1
  16. package/dist/build/scala-image.d.ts +21 -0
  17. package/dist/build/scala-image.d.ts.map +1 -0
  18. package/dist/build/scala-image.js +150 -0
  19. package/dist/build/scala-image.js.map +1 -0
  20. package/dist/cli-pin.d.ts +16 -0
  21. package/dist/cli-pin.d.ts.map +1 -0
  22. package/dist/cli-pin.js +66 -0
  23. package/dist/cli-pin.js.map +1 -0
  24. package/dist/commands/agents.d.ts.map +1 -1
  25. package/dist/commands/agents.js +9 -8
  26. package/dist/commands/agents.js.map +1 -1
  27. package/dist/commands/approvals.d.ts.map +1 -1
  28. package/dist/commands/approvals.js +30 -4
  29. package/dist/commands/approvals.js.map +1 -1
  30. package/dist/commands/artifacts.d.ts.map +1 -1
  31. package/dist/commands/artifacts.js +100 -37
  32. package/dist/commands/artifacts.js.map +1 -1
  33. package/dist/commands/auth.js +2 -2
  34. package/dist/commands/blocks.d.ts.map +1 -1
  35. package/dist/commands/blocks.js +5 -4
  36. package/dist/commands/blocks.js.map +1 -1
  37. package/dist/commands/build.d.ts +10 -2
  38. package/dist/commands/build.d.ts.map +1 -1
  39. package/dist/commands/build.js +109 -16
  40. package/dist/commands/build.js.map +1 -1
  41. package/dist/commands/capabilities.d.ts.map +1 -1
  42. package/dist/commands/capabilities.js +37 -10
  43. package/dist/commands/capabilities.js.map +1 -1
  44. package/dist/commands/console.d.ts +21 -0
  45. package/dist/commands/console.d.ts.map +1 -0
  46. package/dist/commands/console.js +87 -0
  47. package/dist/commands/console.js.map +1 -0
  48. package/dist/commands/conversations.d.ts.map +1 -1
  49. package/dist/commands/conversations.js +13 -2
  50. package/dist/commands/conversations.js.map +1 -1
  51. package/dist/commands/deploy.d.ts.map +1 -1
  52. package/dist/commands/deploy.js +2 -2
  53. package/dist/commands/deploy.js.map +1 -1
  54. package/dist/commands/dev.d.ts +11 -0
  55. package/dist/commands/dev.d.ts.map +1 -1
  56. package/dist/commands/dev.js +211 -39
  57. package/dist/commands/dev.js.map +1 -1
  58. package/dist/commands/doctor.d.ts +18 -5
  59. package/dist/commands/doctor.d.ts.map +1 -1
  60. package/dist/commands/doctor.js +421 -21
  61. package/dist/commands/doctor.js.map +1 -1
  62. package/dist/commands/env-scoped.d.ts +44 -0
  63. package/dist/commands/env-scoped.d.ts.map +1 -0
  64. package/dist/commands/env-scoped.js +222 -0
  65. package/dist/commands/env-scoped.js.map +1 -0
  66. package/dist/commands/env.d.ts.map +1 -1
  67. package/dist/commands/env.js +85 -123
  68. package/dist/commands/env.js.map +1 -1
  69. package/dist/commands/eval-runs.d.ts +9 -0
  70. package/dist/commands/eval-runs.d.ts.map +1 -1
  71. package/dist/commands/eval-runs.js +20 -19
  72. package/dist/commands/eval-runs.js.map +1 -1
  73. package/dist/commands/eval-suites.d.ts.map +1 -1
  74. package/dist/commands/eval-suites.js +16 -8
  75. package/dist/commands/eval-suites.js.map +1 -1
  76. package/dist/commands/exports.d.ts +3 -0
  77. package/dist/commands/exports.d.ts.map +1 -0
  78. package/dist/commands/exports.js +82 -0
  79. package/dist/commands/exports.js.map +1 -0
  80. package/dist/commands/feedback.d.ts.map +1 -1
  81. package/dist/commands/feedback.js +6 -5
  82. package/dist/commands/feedback.js.map +1 -1
  83. package/dist/commands/flows.d.ts.map +1 -1
  84. package/dist/commands/flows.js +2 -1
  85. package/dist/commands/flows.js.map +1 -1
  86. package/dist/commands/gate-policies.d.ts.map +1 -1
  87. package/dist/commands/gate-policies.js +2 -1
  88. package/dist/commands/gate-policies.js.map +1 -1
  89. package/dist/commands/guardrails.d.ts.map +1 -1
  90. package/dist/commands/guardrails.js +3 -2
  91. package/dist/commands/guardrails.js.map +1 -1
  92. package/dist/commands/helpers.js +5 -5
  93. package/dist/commands/helpers.js.map +1 -1
  94. package/dist/commands/index.d.ts.map +1 -1
  95. package/dist/commands/index.js +14 -0
  96. package/dist/commands/index.js.map +1 -1
  97. package/dist/commands/init.d.ts +1 -1
  98. package/dist/commands/init.d.ts.map +1 -1
  99. package/dist/commands/init.js +254 -18
  100. package/dist/commands/init.js.map +1 -1
  101. package/dist/commands/judge-classes.d.ts.map +1 -1
  102. package/dist/commands/judge-classes.js +11 -10
  103. package/dist/commands/judge-classes.js.map +1 -1
  104. package/dist/commands/judgments.d.ts.map +1 -1
  105. package/dist/commands/judgments.js +7 -6
  106. package/dist/commands/judgments.js.map +1 -1
  107. package/dist/commands/key.js +4 -4
  108. package/dist/commands/memory.d.ts.map +1 -1
  109. package/dist/commands/memory.js +277 -25
  110. package/dist/commands/memory.js.map +1 -1
  111. package/dist/commands/people.d.ts +3 -0
  112. package/dist/commands/people.d.ts.map +1 -0
  113. package/dist/commands/people.js +166 -0
  114. package/dist/commands/people.js.map +1 -0
  115. package/dist/commands/proposals.d.ts.map +1 -1
  116. package/dist/commands/proposals.js +390 -69
  117. package/dist/commands/proposals.js.map +1 -1
  118. package/dist/commands/provenance.d.ts.map +1 -1
  119. package/dist/commands/provenance.js +6 -7
  120. package/dist/commands/provenance.js.map +1 -1
  121. package/dist/commands/providers.d.ts.map +1 -1
  122. package/dist/commands/providers.js +46 -7
  123. package/dist/commands/providers.js.map +1 -1
  124. package/dist/commands/reviewers.d.ts.map +1 -1
  125. package/dist/commands/reviewers.js +3 -2
  126. package/dist/commands/reviewers.js.map +1 -1
  127. package/dist/commands/runs.d.ts.map +1 -1
  128. package/dist/commands/runs.js +24 -14
  129. package/dist/commands/runs.js.map +1 -1
  130. package/dist/commands/schedules.d.ts +3 -0
  131. package/dist/commands/schedules.d.ts.map +1 -0
  132. package/dist/commands/schedules.js +275 -0
  133. package/dist/commands/schedules.js.map +1 -0
  134. package/dist/commands/secrets.d.ts.map +1 -1
  135. package/dist/commands/secrets.js +10 -11
  136. package/dist/commands/secrets.js.map +1 -1
  137. package/dist/commands/service-accounts.d.ts +3 -0
  138. package/dist/commands/service-accounts.d.ts.map +1 -0
  139. package/dist/commands/service-accounts.js +175 -0
  140. package/dist/commands/service-accounts.js.map +1 -0
  141. package/dist/commands/skills.d.ts +1 -1
  142. package/dist/commands/skills.d.ts.map +1 -1
  143. package/dist/commands/skills.js +11 -4
  144. package/dist/commands/skills.js.map +1 -1
  145. package/dist/commands/sso.d.ts +6 -0
  146. package/dist/commands/sso.d.ts.map +1 -0
  147. package/dist/commands/sso.js +318 -0
  148. package/dist/commands/sso.js.map +1 -0
  149. package/dist/commands/tokens.d.ts +11 -0
  150. package/dist/commands/tokens.d.ts.map +1 -1
  151. package/dist/commands/tokens.js +144 -11
  152. package/dist/commands/tokens.js.map +1 -1
  153. package/dist/commands/tools.d.ts.map +1 -1
  154. package/dist/commands/tools.js +4 -3
  155. package/dist/commands/tools.js.map +1 -1
  156. package/dist/commands/unwired.d.ts.map +1 -1
  157. package/dist/commands/unwired.js +1 -30
  158. package/dist/commands/unwired.js.map +1 -1
  159. package/dist/commands/upgrade.d.ts +11 -0
  160. package/dist/commands/upgrade.d.ts.map +1 -0
  161. package/dist/commands/upgrade.js +160 -0
  162. package/dist/commands/upgrade.js.map +1 -0
  163. package/dist/context.d.ts +7 -0
  164. package/dist/context.d.ts.map +1 -1
  165. package/dist/context.js +1 -0
  166. package/dist/context.js.map +1 -1
  167. package/dist/dev/defaults.d.ts +28 -11
  168. package/dist/dev/defaults.d.ts.map +1 -1
  169. package/dist/dev/defaults.js +114 -35
  170. package/dist/dev/defaults.js.map +1 -1
  171. package/dist/dev/google-credentials.d.ts +50 -0
  172. package/dist/dev/google-credentials.d.ts.map +1 -0
  173. package/dist/dev/google-credentials.js +157 -0
  174. package/dist/dev/google-credentials.js.map +1 -0
  175. package/dist/dev/java-builder.d.ts +56 -0
  176. package/dist/dev/java-builder.d.ts.map +1 -0
  177. package/dist/dev/java-builder.js +204 -0
  178. package/dist/dev/java-builder.js.map +1 -0
  179. package/dist/dev/jvm-run-files.d.ts +29 -0
  180. package/dist/dev/jvm-run-files.d.ts.map +1 -0
  181. package/dist/dev/jvm-run-files.js +94 -0
  182. package/dist/dev/jvm-run-files.js.map +1 -0
  183. package/dist/dev/lines.d.ts +13 -0
  184. package/dist/dev/lines.d.ts.map +1 -0
  185. package/dist/dev/lines.js +24 -0
  186. package/dist/dev/lines.js.map +1 -0
  187. package/dist/dev/log-view.d.ts +116 -0
  188. package/dist/dev/log-view.d.ts.map +1 -0
  189. package/dist/dev/log-view.js +233 -0
  190. package/dist/dev/log-view.js.map +1 -0
  191. package/dist/dev/pack-code.d.ts +79 -4
  192. package/dist/dev/pack-code.d.ts.map +1 -1
  193. package/dist/dev/pack-code.js +262 -3
  194. package/dist/dev/pack-code.js.map +1 -1
  195. package/dist/dev/pack-env.d.ts.map +1 -1
  196. package/dist/dev/pack-env.js +4 -0
  197. package/dist/dev/pack-env.js.map +1 -1
  198. package/dist/dev/pack-service.d.ts +11 -1
  199. package/dist/dev/pack-service.d.ts.map +1 -1
  200. package/dist/dev/pack-service.js +56 -20
  201. package/dist/dev/pack-service.js.map +1 -1
  202. package/dist/dev/paths.d.ts +6 -0
  203. package/dist/dev/paths.d.ts.map +1 -1
  204. package/dist/dev/paths.js +8 -0
  205. package/dist/dev/paths.js.map +1 -1
  206. package/dist/dev/project-database.js +1 -1
  207. package/dist/dev/project-database.js.map +1 -1
  208. package/dist/dev/runners.d.ts +35 -9
  209. package/dist/dev/runners.d.ts.map +1 -1
  210. package/dist/dev/runtime-container.d.ts +10 -2
  211. package/dist/dev/runtime-container.d.ts.map +1 -1
  212. package/dist/dev/runtime-container.js +48 -20
  213. package/dist/dev/runtime-container.js.map +1 -1
  214. package/dist/dev/runtime-env.d.ts +10 -0
  215. package/dist/dev/runtime-env.d.ts.map +1 -1
  216. package/dist/dev/runtime-env.js +8 -4
  217. package/dist/dev/runtime-env.js.map +1 -1
  218. package/dist/dev/runtime-image.d.ts +1 -1
  219. package/dist/dev/runtime-image.js +1 -1
  220. package/dist/dev/scala-builder.d.ts +72 -0
  221. package/dist/dev/scala-builder.d.ts.map +1 -0
  222. package/dist/dev/scala-builder.js +347 -0
  223. package/dist/dev/scala-builder.js.map +1 -0
  224. package/dist/env/project-env.d.ts.map +1 -1
  225. package/dist/env/project-env.js +3 -1
  226. package/dist/env/project-env.js.map +1 -1
  227. package/dist/errors.d.ts +9 -0
  228. package/dist/errors.d.ts.map +1 -1
  229. package/dist/errors.js +15 -0
  230. package/dist/errors.js.map +1 -1
  231. package/dist/help.d.ts +14 -0
  232. package/dist/help.d.ts.map +1 -1
  233. package/dist/help.js +55 -0
  234. package/dist/help.js.map +1 -1
  235. package/dist/init/dependency-specs.d.ts +26 -0
  236. package/dist/init/dependency-specs.d.ts.map +1 -1
  237. package/dist/init/dependency-specs.js +38 -0
  238. package/dist/init/dependency-specs.js.map +1 -1
  239. package/dist/init/java-augment.d.ts +24 -0
  240. package/dist/init/java-augment.d.ts.map +1 -0
  241. package/dist/init/java-augment.js +198 -0
  242. package/dist/init/java-augment.js.map +1 -0
  243. package/dist/init/mode-detect.d.ts +2 -2
  244. package/dist/init/mode-detect.d.ts.map +1 -1
  245. package/dist/init/mode-detect.js +12 -1
  246. package/dist/init/mode-detect.js.map +1 -1
  247. package/dist/init/scala-augment.d.ts +23 -0
  248. package/dist/init/scala-augment.d.ts.map +1 -0
  249. package/dist/init/scala-augment.js +213 -0
  250. package/dist/init/scala-augment.js.map +1 -0
  251. package/dist/init/template-files.d.ts +40 -2
  252. package/dist/init/template-files.d.ts.map +1 -1
  253. package/dist/init/template-files.js +56 -5
  254. package/dist/init/template-files.js.map +1 -1
  255. package/dist/main.d.ts +3 -0
  256. package/dist/main.d.ts.map +1 -1
  257. package/dist/main.js +30 -4
  258. package/dist/main.js.map +1 -1
  259. package/dist/open-url.d.ts +15 -0
  260. package/dist/open-url.d.ts.map +1 -0
  261. package/dist/open-url.js +41 -0
  262. package/dist/open-url.js.map +1 -0
  263. package/dist/package-manager.d.ts +10 -3
  264. package/dist/package-manager.d.ts.map +1 -1
  265. package/dist/package-manager.js +19 -1
  266. package/dist/package-manager.js.map +1 -1
  267. package/dist/providers/preset-loader.d.ts.map +1 -1
  268. package/dist/providers/preset-loader.js +9 -1
  269. package/dist/providers/preset-loader.js.map +1 -1
  270. package/dist/providers/presets/anthropic.json +35 -4
  271. package/dist/providers/presets/gemini-api.json +3 -0
  272. package/dist/providers/presets/gemini.json +3 -0
  273. package/dist/providers/presets/groq.json +1 -0
  274. package/dist/providers/presets/openai.json +36 -4
  275. package/dist/providers/presets/openrouter.json +6 -2
  276. package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +28 -4
  277. package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +1 -1
  278. package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +47 -3
  279. package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +7 -5
  280. package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +81 -52
  281. package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +27 -1
  282. package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +5 -4
  283. package/dist/sdk-skills/kindgi-getting-started/SKILL.md +1 -1
  284. package/dist/sdk-skills/kindgi-java-authoring-agents/SKILL.md +220 -0
  285. package/dist/sdk-skills/kindgi-java-authoring-flows/SKILL.md +390 -0
  286. package/dist/sdk-skills/kindgi-java-authoring-guardrails/SKILL.md +209 -0
  287. package/dist/sdk-skills/kindgi-java-authoring-tools/SKILL.md +334 -0
  288. package/dist/sdk-skills/kindgi-java-getting-started/SKILL.md +270 -0
  289. package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +23 -5
  290. package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
  291. package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +10 -3
  292. package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +36 -5
  293. package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +2 -2
  294. package/dist/sdk-skills/kindgi-scala-authoring-agents/SKILL.md +217 -0
  295. package/dist/sdk-skills/kindgi-scala-authoring-flows/SKILL.md +357 -0
  296. package/dist/sdk-skills/kindgi-scala-authoring-guardrails/SKILL.md +199 -0
  297. package/dist/sdk-skills/kindgi-scala-authoring-tools/SKILL.md +302 -0
  298. package/dist/sdk-skills/kindgi-scala-getting-started/SKILL.md +302 -0
  299. package/dist/templates/java/.mvn/wrapper/maven-wrapper.properties +3 -0
  300. package/dist/templates/java/AGENTS.md +31 -0
  301. package/dist/templates/java/README.md.tmpl +69 -0
  302. package/dist/templates/java/gitignore +9 -0
  303. package/dist/templates/java/kindgi.config.json.tmpl +8 -0
  304. package/dist/templates/java/kindgiw +33 -0
  305. package/dist/templates/java/kindgiw.cmd +28 -0
  306. package/dist/templates/java/mvnw +295 -0
  307. package/dist/templates/java/pom.xml.tmpl +65 -0
  308. package/dist/templates/java/src/main/java/__PACKAGE__/agents/EchoAgent.java.tmpl +27 -0
  309. package/dist/templates/java/src/main/java/__PACKAGE__/flows/EchoFlow.java.tmpl +18 -0
  310. package/dist/templates/java/src/main/java/__PACKAGE__/guardrails/ResponseNotEmpty.java.tmpl +28 -0
  311. package/dist/templates/java/src/main/java/__PACKAGE__/tools/Echo.java.tmpl +22 -0
  312. package/dist/templates/java/src/main/java/__PACKAGE__/tools/Greet.java.tmpl +23 -0
  313. package/dist/templates/java/src/test/java/__PACKAGE__/ToolsTest.java.tmpl +30 -0
  314. package/dist/templates/minimal/README.md.tmpl +8 -14
  315. package/dist/templates/python/README.md.tmpl +6 -6
  316. package/dist/templates/sample/README.md.tmpl +7 -13
  317. package/dist/templates/scala/AGENTS.md +32 -0
  318. package/dist/templates/scala/README.md.tmpl +75 -0
  319. package/dist/templates/scala/build.sbt.tmpl +16 -0
  320. package/dist/templates/scala/gitignore +13 -0
  321. package/dist/templates/scala/kindgi.config.json.tmpl +8 -0
  322. package/dist/templates/scala/project/build.properties +1 -0
  323. package/dist/templates/scala/src/main/scala/__PACKAGE__/agents/EchoAgent.scala.tmpl +23 -0
  324. package/dist/templates/scala/src/main/scala/__PACKAGE__/flows/EchoFlow.scala.tmpl +16 -0
  325. package/dist/templates/scala/src/main/scala/__PACKAGE__/guardrails/ResponseNotEmpty.scala.tmpl +21 -0
  326. package/dist/templates/scala/src/main/scala/__PACKAGE__/tools/Echo.scala.tmpl +16 -0
  327. package/dist/templates/scala/src/main/scala/__PACKAGE__/tools/Greet.scala.tmpl +17 -0
  328. package/dist/templates/scala/src/test/scala/__PACKAGE__/ToolsSuite.scala.tmpl +23 -0
  329. package/package.json +13 -12
@@ -0,0 +1,175 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { UsageError } from '../errors.js';
4
+ import { integerFlag, listFlag, requiredPositional, runSdk, stringFlag, } from './helpers.js';
5
+ /**
6
+ * `kindgi service-accounts`: named, non-human principals for an app, a
7
+ * pipeline or a schedule, with grants of their own. They act through API
8
+ * keys: `kindgi tokens create --for=sa:<id>`. Tenant admins only.
9
+ */
10
+ const PROJECT_ROLES = ['viewer', 'editor', 'owner', 'admin', 'member'];
11
+ /** `--project=<project-id>:<role>`, repeatable: project grants. */
12
+ function projectGrants(ctx) {
13
+ return listFlag(ctx, 'project').map((raw) => {
14
+ const colon = raw.lastIndexOf(':');
15
+ const projectId = raw.slice(0, colon);
16
+ const role = raw.slice(colon + 1);
17
+ if (colon <= 0 || !PROJECT_ROLES.includes(role)) {
18
+ throw new UsageError(`--project must be <project-id>:<role>, the role one of ${PROJECT_ROLES.join(', ')}; got "${raw}"`);
19
+ }
20
+ return { kind: 'project', projectId, role: role };
21
+ });
22
+ }
23
+ /** A grant in words: `tenant admin`, `tenant member`, `editor on <project-id>`. */
24
+ function grantWords(g) {
25
+ if (g.kind === 'tenant-admin')
26
+ return 'tenant admin';
27
+ if (g.kind === 'tenant-member')
28
+ return 'tenant member';
29
+ return `${g.role} on ${g.projectId}`;
30
+ }
31
+ function grantsCell(a) {
32
+ return a.grants.map(grantWords).join('; ');
33
+ }
34
+ /** Read the tenant's settings: a service account has it only when granted. */
35
+ const TENANT_MEMBER_HELP = "Tenant member: read the tenant's settings (providers, policies, adapters, signing keys, deployments), not its projects. Not given by default; give it only to an account whose job needs it.";
36
+ const TABLE = {
37
+ rows: (page) => page.data,
38
+ columns: [
39
+ { header: 'ID', get: (a) => a.serviceAccountId },
40
+ { header: 'NAME', get: (a) => a.name },
41
+ { header: 'GRANTS', get: grantsCell },
42
+ { header: 'CREATED', get: (a) => String(a.createdAt) },
43
+ {
44
+ header: 'UNREGISTERED',
45
+ get: (a) => (a.unregisteredAt !== undefined ? String(a.unregisteredAt) : ''),
46
+ },
47
+ ],
48
+ };
49
+ const create = {
50
+ kind: 'leaf',
51
+ name: 'create',
52
+ description: "Create a service account with its first grants, written before it answers: a key minted for it works at once. It reads the tenant's settings only with --tenant-member.",
53
+ usage: 'kindgi service-accounts create <name> [--description=<text>] [--tenant-admin] [--tenant-member] [--project=<project-id>:<role>]…',
54
+ optionSpec: {
55
+ description: { type: 'string', description: 'What it is for.' },
56
+ 'tenant-admin': { type: 'boolean', description: 'Make it a tenant admin.' },
57
+ 'tenant-member': { type: 'boolean', description: TENANT_MEMBER_HELP },
58
+ project: {
59
+ type: 'string',
60
+ multiple: true,
61
+ description: `A role on a project, \`<project-id>:<role>\` (repeatable); roles: ${PROJECT_ROLES.join(', ')}.`,
62
+ },
63
+ },
64
+ run: (ctx) => runSdk(ctx, 'service-accounts create', async () => {
65
+ const name = requiredPositional(ctx, 0, 'name');
66
+ const description = stringFlag(ctx, 'description');
67
+ const grants = [
68
+ ...(ctx.options['tenant-admin'] === true ? [{ kind: 'tenant-admin' }] : []),
69
+ ...(ctx.options['tenant-member'] === true ? [{ kind: 'tenant-member' }] : []),
70
+ ...projectGrants(ctx),
71
+ ];
72
+ return await ctx.client().serviceAccounts.create({
73
+ name,
74
+ ...(description !== undefined && { description }),
75
+ ...(grants.length > 0 && { grants }),
76
+ });
77
+ }),
78
+ };
79
+ const list = {
80
+ kind: 'leaf',
81
+ name: 'list',
82
+ description: 'List service accounts, oldest first; `--all` includes unregistered ones.',
83
+ usage: 'kindgi service-accounts list [--all] [--limit=<n>] [--cursor=<c>] [--table]',
84
+ optionSpec: {
85
+ all: { type: 'boolean', description: 'Unregistered accounts too.' },
86
+ limit: { type: 'string', description: 'Page size.' },
87
+ cursor: { type: 'string', description: 'The next page, from `nextCursor`.' },
88
+ },
89
+ run: (ctx) => runSdk(ctx, 'service-accounts list', async () => {
90
+ const limit = integerFlag(ctx, 'limit');
91
+ const cursor = stringFlag(ctx, 'cursor');
92
+ return await ctx.client().serviceAccounts.list({
93
+ ...(ctx.options.all === true && { includeUnregistered: true }),
94
+ ...(limit !== undefined && { limit }),
95
+ ...(cursor !== undefined && { cursor: cursor }),
96
+ });
97
+ }, TABLE),
98
+ };
99
+ const get = {
100
+ kind: 'leaf',
101
+ name: 'get',
102
+ description: 'One service account, with its grants.',
103
+ usage: 'kindgi service-accounts get <service-account-id>',
104
+ run: (ctx) => runSdk(ctx, 'service-accounts get', async () => ctx.client().serviceAccounts.get(requiredPositional(ctx, 0, 'service-account-id'))),
105
+ };
106
+ /** `--tenant-admin`, `--tenant-member`, or `--project=<id>`: exactly one. */
107
+ function targetFlags(ctx) {
108
+ const tenantAdmin = ctx.options['tenant-admin'] === true;
109
+ const tenantMember = ctx.options['tenant-member'] === true;
110
+ const projectId = stringFlag(ctx, 'project');
111
+ if ([tenantAdmin, tenantMember, projectId !== undefined].filter(Boolean).length !== 1) {
112
+ throw new UsageError('Give one of --tenant-admin, --tenant-member or --project=<project-id>');
113
+ }
114
+ if (tenantAdmin)
115
+ return { kind: 'tenant-admin' };
116
+ if (tenantMember)
117
+ return { kind: 'tenant-member' };
118
+ return { kind: 'project', projectId: projectId };
119
+ }
120
+ /** A grant: `--tenant-admin`, `--tenant-member`, or `--project=<id>` with `--role`. */
121
+ function grantFlags(ctx) {
122
+ const target = targetFlags(ctx);
123
+ if (target.kind !== 'project')
124
+ return target;
125
+ const role = stringFlag(ctx, 'role');
126
+ if (role === undefined || !PROJECT_ROLES.includes(role)) {
127
+ throw new UsageError(`--role must be one of ${PROJECT_ROLES.join(', ')}`);
128
+ }
129
+ return { ...target, role: role };
130
+ }
131
+ const grant = {
132
+ kind: 'leaf',
133
+ name: 'grant',
134
+ description: "Grant a service account tenant admin, tenant member (read the tenant's settings), or a role on a project (replacing its role there). Written before it answers.",
135
+ usage: 'kindgi service-accounts grant <service-account-id> (--tenant-admin | --tenant-member | --project=<project-id> --role=<role>)',
136
+ optionSpec: {
137
+ 'tenant-admin': { type: 'boolean', description: 'Tenant admin.' },
138
+ 'tenant-member': { type: 'boolean', description: TENANT_MEMBER_HELP },
139
+ project: { type: 'string', description: 'A project, by id.' },
140
+ role: { type: 'string', description: `Its role there: ${PROJECT_ROLES.join(', ')}.` },
141
+ },
142
+ run: (ctx) => runSdk(ctx, 'service-accounts grant', async () => {
143
+ const id = requiredPositional(ctx, 0, 'service-account-id');
144
+ return await ctx.client().serviceAccounts.grant(id, grantFlags(ctx));
145
+ }),
146
+ };
147
+ const ungrant = {
148
+ kind: 'leaf',
149
+ name: 'ungrant',
150
+ description: 'Remove tenant admin, tenant member, or the role on a project, from a service account.',
151
+ usage: 'kindgi service-accounts ungrant <service-account-id> (--tenant-admin | --tenant-member | --project=<project-id>)',
152
+ optionSpec: {
153
+ 'tenant-admin': { type: 'boolean', description: 'Tenant admin.' },
154
+ 'tenant-member': { type: 'boolean', description: 'Tenant member.' },
155
+ project: { type: 'string', description: 'A project, by id.' },
156
+ },
157
+ run: (ctx) => runSdk(ctx, 'service-accounts ungrant', async () => {
158
+ const id = requiredPositional(ctx, 0, 'service-account-id');
159
+ return await ctx.client().serviceAccounts.ungrant(id, targetFlags(ctx));
160
+ }),
161
+ };
162
+ const unregister = {
163
+ kind: 'leaf',
164
+ name: 'unregister',
165
+ description: 'Unregister a service account: its grants go and its keys are revoked. It stays readable.',
166
+ usage: 'kindgi service-accounts unregister <service-account-id>',
167
+ run: (ctx) => runSdk(ctx, 'service-accounts unregister', async () => ctx.client().serviceAccounts.unregister(requiredPositional(ctx, 0, 'service-account-id'))),
168
+ };
169
+ export const serviceAccountsCommand = {
170
+ kind: 'group',
171
+ name: 'service-accounts',
172
+ description: 'Service accounts: non-human principals with their own grants, acting through API keys (create / list / get / grant / ungrant / unregister).',
173
+ subcommands: [create, list, get, grant, ungrant, unregister],
174
+ };
175
+ //# sourceMappingURL=service-accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-accounts.js","sourceRoot":"","sources":["../../src/commands/service-accounts.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAUjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAEL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,MAAM,EACN,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB;;;;GAIG;AAEH,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAGhF,mEAAmE;AACnE,SAAS,aAAa,CAAC,GAAmB;IACxC,OAAO,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAE,aAAmC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,UAAU,CAClB,0DAA0D,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CACnG,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAmB,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,SAAS,UAAU,CAAC,CAAsB;IACxC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IACrD,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,eAAe,CAAC;IACvD,OAAO,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,UAAU,CAAC,CAAiB;IACnC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,8EAA8E;AAC9E,MAAM,kBAAkB,GACtB,8LAA8L,CAAC;AAEjM,MAAM,KAAK,GAAwD;IACjE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI;IACzB,OAAO,EAAE;QACP,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE;QAChD,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;QACtC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE;QACrC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;QACtD;YACE,MAAM,EAAE,cAAc;YACtB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E;KACF;CACF,CAAC;AAEF,MAAM,MAAM,GAAgB;IAC1B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,QAAQ;IACd,WAAW,EACT,yKAAyK;IAC3K,KAAK,EACH,kIAAkI;IACpI,UAAU,EAAE;QACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;QAC/D,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yBAAyB,EAAE;QAC3E,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE;QACrE,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,qEAAqE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;SAC9G;KACF;IACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACnD,MAAM,MAAM,GAA0B;YACpC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,aAAa,CAAC,GAAG,CAAC;SACtB,CAAC;QACF,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;YAC/C,IAAI;YACJ,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC;YACjD,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;SACrC,CAAC,CAAC;IACL,CAAC,CAAC;CACL,CAAC;AAEF,MAAM,IAAI,GAAgB;IACxB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,0EAA0E;IACvF,KAAK,EAAE,6EAA6E;IACpF,UAAU,EAAE;QACV,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4BAA4B,EAAE;QACnE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;QACpD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;KAC7E;IACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,MAAM,CACJ,GAAG,EACH,uBAAuB,EACvB,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;YAC7C,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;YAC9D,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC;SACzD,CAAC,CAAC;IACL,CAAC,EACD,KAAK,CACN;CACJ,CAAC;AAEF,MAAM,GAAG,GAAgB;IACvB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,uCAAuC;IACpD,KAAK,EAAE,kDAAkD;IACzD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,EAAE,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAC7C,GAAG,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC,CACnF;CACJ,CAAC;AAEF,6EAA6E;AAC7E,SAAS,WAAW,CAAC,GAAmB;IACtC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACzD,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IAC3D,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtF,MAAM,IAAI,UAAU,CAAC,uEAAuE,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IACjD,IAAI,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACnD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAmB,EAAE,CAAC;AAC7D,CAAC;AAED,uFAAuF;AACvF,SAAS,UAAU,CAAC,GAAmB;IACrC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAE,aAAmC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,UAAU,CAAC,yBAAyB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAmB,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,KAAK,GAAgB;IACzB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,OAAO;IACb,WAAW,EACT,iKAAiK;IACnK,KAAK,EACH,8HAA8H;IAChI,UAAU,EAAE;QACV,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE;QACjE,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE;QACrE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAC7D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;KACtF;IACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC5D,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC;CACL,CAAC;AAEF,MAAM,OAAO,GAAgB;IAC3B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,SAAS;IACf,WAAW,EACT,uFAAuF;IACzF,KAAK,EACH,kHAAkH;IACpH,UAAU,EAAE;QACV,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE;QACjE,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;QACnE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;KAC9D;IACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC5D,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC;CACL,CAAC;AAEF,MAAM,UAAU,GAAgB;IAC9B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,0FAA0F;IAC5F,KAAK,EAAE,yDAAyD;IAChE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,EAAE,6BAA6B,EAAE,KAAK,IAAI,EAAE,CACpD,GAAG,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAC1F;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAY;IAC7C,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,6IAA6I;IAC/I,WAAW,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC;CAC7D,CAAC"}
@@ -31,7 +31,7 @@ export declare function syncSkills(inputs: {
31
31
  }): Promise<SkillSyncReport>;
32
32
  /**
33
33
  * The pack languages a SKILL.md is written for — its frontmatter's
34
- * `pack_languages: [node, python]`. A skill without the field predates
34
+ * `pack_languages: [node, python, java, scala]`. A skill without the field predates
35
35
  * it and teaches the TypeScript surface: `['node']`.
36
36
  */
37
37
  export declare function skillPackLanguages(text: string): readonly PackLanguage[];
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAqB,KAAK,YAAY,EAAgB,MAAM,yBAAyB,CAAC;AAM7F,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,YAAY,CAAC;AAkBtE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,kBAAkB,GAAG,YAAY,CAAC;IACvF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAwDD,eAAO,MAAM,aAAa,EAAE,OAK3B,CAAC;AAMF,wBAAsB,UAAU,CAAC,MAAM,EAAE;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,eAAe,CAAC,CAkH3B;AAmFD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAQxE;AA6CD,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACL;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgC5B"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAqB,KAAK,YAAY,EAAgB,MAAM,yBAAyB,CAAC;AAM7F,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,YAAY,CAAC;AAkBtE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,kBAAkB,GAAG,YAAY,CAAC;IACvF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAwDD,eAAO,MAAM,aAAa,EAAE,OAK3B,CAAC;AAMF,wBAAsB,UAAU,CAAC,MAAM,EAAE;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,eAAe,CAAC,CAkH3B;AA2FD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAQxE;AA6CD,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACL;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgC5B"}
@@ -24,8 +24,8 @@
24
24
  * to git so teammates see the same installed state.
25
25
  *
26
26
  * A pack gets the skills written for its language: each skill lists
27
- * them in its frontmatter (`pack_languages: [node, python]`); a skill
28
- * without the field teaches the TypeScript surface (`[node]`).
27
+ * them in its frontmatter (`pack_languages: [node, python, java, scala]`); a
28
+ * skill without the field teaches the TypeScript surface (`[node]`).
29
29
  */
30
30
  import { createHash } from 'node:crypto';
31
31
  import { mkdir, readFile, readdir, stat, writeFile } from 'node:fs/promises';
@@ -272,6 +272,13 @@ async function listSkillDirs(root) {
272
272
  return [];
273
273
  }
274
274
  }
275
+ /** Every pack language, by name: a new one fails to compile here until skills can name it. */
276
+ const PACK_LANGUAGES = {
277
+ node: true,
278
+ python: true,
279
+ java: true,
280
+ scala: true,
281
+ };
275
282
  /** The bundled skills written for packs in `language` (`pack_languages`). */
276
283
  async function listBundledSkills(root, language) {
277
284
  const names = [];
@@ -284,7 +291,7 @@ async function listBundledSkills(root, language) {
284
291
  }
285
292
  /**
286
293
  * The pack languages a SKILL.md is written for — its frontmatter's
287
- * `pack_languages: [node, python]`. A skill without the field predates
294
+ * `pack_languages: [node, python, java, scala]`. A skill without the field predates
288
295
  * it and teaches the TypeScript surface: `['node']`.
289
296
  */
290
297
  export function skillPackLanguages(text) {
@@ -295,7 +302,7 @@ export function skillPackLanguages(text) {
295
302
  return list
296
303
  .split(',')
297
304
  .map((item) => item.trim().replace(/^["']|["']$/g, ''))
298
- .filter((item) => item === 'node' || item === 'python');
305
+ .filter((item) => Object.hasOwn(PACK_LANGUAGES, item));
299
306
  }
300
307
  async function pathExists(p) {
301
308
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { IdentityProviderSignInUrlsResult } from '@kindgi/client';
2
+ import type { Command } from './types.js';
3
+ /** What to send IT: the URLs for their side, and what to send back. */
4
+ export declare function handoffText(urls: IdentityProviderSignInUrlsResult, idp?: string): string;
5
+ export declare const ssoCommand: Command;
6
+ //# sourceMappingURL=sso.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sso.d.ts","sourceRoot":"","sources":["../../src/commands/sso.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,gCAAgC,EAEjC,MAAM,gBAAgB,CAAC;AAYxB,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AAuJvD,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,IAAI,EAAE,gCAAgC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CA4CxF;AA6LD,eAAO,MAAM,UAAU,EAAE,OAKxB,CAAC"}
@@ -0,0 +1,318 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { readFile } from 'node:fs/promises';
4
+ import { renderJson } from '../output.js';
5
+ import { listFlag, readJsonInput, requiredPositional, runSdk, runSdkRendered, stringFlag, } from './helpers.js';
6
+ /** The identity providers `start --idp` has steps for. */
7
+ /** The setup guides, at the docs' root (always the latest release). */
8
+ const GUIDES = 'https://docs.kindgi.com/guides/sso';
9
+ const IDP_STEPS = {
10
+ google: {
11
+ kind: 'oidc',
12
+ guide: 'google',
13
+ steps: [
14
+ 'Google Cloud console → Google Auth Platform:',
15
+ ' 1. Branding: the app name and a support email.',
16
+ ' 2. Audience: Internal (only your Google Workspace accounts; no test users, no review).',
17
+ ' 3. Data access: openid, email, profile.',
18
+ ' 4. Clients → Create client → Web application → Authorized redirect URIs: the URI above.',
19
+ ' 5. Download the client ID and secret (Google shows the secret once).',
20
+ 'Issuer: https://accounts.google.com',
21
+ ].join('\n'),
22
+ },
23
+ entra: {
24
+ kind: 'oidc',
25
+ guide: 'entra-id',
26
+ steps: [
27
+ 'Microsoft Entra admin center → App registrations → New registration:',
28
+ ' 1. Supported account types: this organizational directory only (single tenant).',
29
+ ' 2. Redirect URI: Web, the URI above.',
30
+ ' 3. Copy the Application (client) ID and the Directory (tenant) ID.',
31
+ ' 4. Certificates & secrets → New client secret: copy its Value (shown once). It expires:',
32
+ ' note the date.',
33
+ ' 5. Enterprise applications → the app → Properties → Assignment required: Yes; then',
34
+ ' Users and groups: who may sign in.',
35
+ 'Issuer: https://login.microsoftonline.com/<directory-tenant-id>/v2.0 (never `common`).',
36
+ ].join('\n'),
37
+ },
38
+ okta: {
39
+ kind: 'oidc',
40
+ guide: 'okta',
41
+ steps: [
42
+ 'Okta admin console → Applications → Create App Integration → OIDC - OpenID Connect →',
43
+ 'Web Application:',
44
+ ' 1. Sign-in redirect URIs: the URI above.',
45
+ ' 2. Assignments: the groups who may sign in.',
46
+ ' 3. Copy the client ID and the client secret.',
47
+ 'Issuer: https://<your-org>.okta.com',
48
+ ].join('\n'),
49
+ },
50
+ keycloak: {
51
+ kind: 'oidc',
52
+ guide: 'keycloak',
53
+ steps: [
54
+ 'Keycloak admin console → your realm → Clients → Create client → OpenID Connect:',
55
+ ' 1. Client authentication: On. Authentication flow: Standard flow.',
56
+ ' 2. Valid redirect URIs: the URI above (exactly; no wildcard).',
57
+ ' 3. Credentials tab: copy the client secret.',
58
+ ' 4. Each person needs an email with "Email verified" on, or sign-in is refused.',
59
+ 'Issuer: https://<keycloak-host>/realms/<realm>',
60
+ ].join('\n'),
61
+ },
62
+ };
63
+ const kindOption = {
64
+ kind: {
65
+ type: 'string',
66
+ description: '`oidc` (OpenID Connect: Google, Entra ID, Okta, Keycloak…) or `saml`.',
67
+ },
68
+ };
69
+ /** The provider's fields as flags; `--spec` takes anything else, as JSON. */
70
+ const configOptions = {
71
+ ...kindOption,
72
+ name: {
73
+ type: 'string',
74
+ description: 'What the sign-in button says ("Sign in with …").',
75
+ },
76
+ domains: {
77
+ type: 'string',
78
+ multiple: true,
79
+ description: 'An email domain whose people sign in with it (`acme.com`); repeatable or comma-separated.',
80
+ },
81
+ issuer: { type: 'string', description: 'OIDC: the issuer URL.' },
82
+ 'client-id': { type: 'string', description: 'OIDC: the client ID.' },
83
+ 'client-secret-ref': {
84
+ type: 'string',
85
+ description: "OIDC: the NAME of the client secret in Kindgi's secret store (`kindgi secrets set <NAME>`), never the secret.",
86
+ },
87
+ 'idp-metadata': {
88
+ type: 'string',
89
+ description: "SAML: the identity provider's metadata XML, as `@<file>`.",
90
+ },
91
+ 'sp-signing-key-ref': {
92
+ type: 'string',
93
+ description: 'SAML: the NAME of the signing key, for identity providers that want signed requests.',
94
+ },
95
+ spec: {
96
+ type: 'string',
97
+ description: 'Any other provider fields, as inline JSON or `@<file>` (flags win).',
98
+ },
99
+ };
100
+ async function configFromFlags(ctx) {
101
+ const specText = stringFlag(ctx, 'spec');
102
+ const spec = specText === undefined ? {} : await readJsonInput(specText);
103
+ if (spec === null || typeof spec !== 'object' || Array.isArray(spec)) {
104
+ throw new Error('--spec must be a JSON object');
105
+ }
106
+ const domains = listFlag(ctx, 'domains')
107
+ .flatMap((d) => d.split(','))
108
+ .map((d) => d.trim())
109
+ .filter((d) => d !== '');
110
+ const metadataArg = stringFlag(ctx, 'idp-metadata');
111
+ if (metadataArg !== undefined && !metadataArg.startsWith('@')) {
112
+ throw new Error('--idp-metadata takes a file: --idp-metadata=@<path-to-metadata.xml>');
113
+ }
114
+ const flags = {
115
+ kind: stringFlag(ctx, 'kind'),
116
+ displayName: stringFlag(ctx, 'name'),
117
+ issuer: stringFlag(ctx, 'issuer'),
118
+ clientId: stringFlag(ctx, 'client-id'),
119
+ clientSecretRef: stringFlag(ctx, 'client-secret-ref'),
120
+ spSigningKeyRef: stringFlag(ctx, 'sp-signing-key-ref'),
121
+ ...(domains.length > 0 && { domains }),
122
+ ...(metadataArg !== undefined && {
123
+ idpMetadataXml: await readFile(metadataArg.slice(1), 'utf8'),
124
+ }),
125
+ };
126
+ for (const [k, v] of Object.entries(flags))
127
+ if (v === undefined)
128
+ delete flags[k];
129
+ return { ...spec, ...flags };
130
+ }
131
+ function kindFlag(ctx) {
132
+ const kind = stringFlag(ctx, 'kind');
133
+ if (kind === undefined || kind === 'oidc' || kind === 'saml')
134
+ return kind;
135
+ throw new Error('--kind must be `oidc` or `saml`');
136
+ }
137
+ /** What to send IT: the URLs for their side, and what to send back. */
138
+ export function handoffText(urls, idp) {
139
+ const { providerId, signIn } = urls;
140
+ const out = [];
141
+ if ('redirectUri' in signIn) {
142
+ out.push(`Sign-in with "${providerId}" (OpenID Connect). Send this to whoever runs your identity provider:`, '', ' Create an OpenID Connect web application (a confidential client) for Kindgi.', ` Redirect URI: ${signIn.redirectUri}`, ' Scopes: openid email profile', ' Let in only the people who should use Kindgi (assign users or groups).', '', ' Send back: the issuer URL and the client ID. The client secret goes into', " Kindgi's secret store under a name, never by email or chat:", ' kindgi secrets set <NAME> --env=<runtime env> --scope=tenant');
143
+ }
144
+ else {
145
+ out.push(`Sign-in with "${providerId}" (SAML). Send this to whoever runs your identity provider:`, '', ' Create a SAML 2.0 application for Kindgi.', ` ACS URL (single sign-on URL): ${signIn.acsUrl}`, ` Entity ID (audience): ${signIn.spEntityId}`, ` Service provider metadata: ${signIn.spMetadataUrl}`, ' Name ID: the email address (or an `email` attribute). Sign the assertions.', ' Let in only the people who should use Kindgi (assign users or groups).', '', " Send back: the identity provider's metadata XML.");
146
+ }
147
+ const steps = idp === undefined ? undefined : IDP_STEPS[idp];
148
+ if (steps !== undefined)
149
+ out.push('', steps.steps);
150
+ const guide = steps?.guide ?? ('redirectUri' in signIn ? 'oidc' : 'saml');
151
+ out.push('', `Step by step: ${GUIDES}/${guide}/`);
152
+ out.push('', 'Then register it:', 'redirectUri' in signIn
153
+ ? ` kindgi sso providers finish ${providerId} --kind=oidc --issuer=<issuer> --client-id=<client-id> --client-secret-ref=<NAME> --domains=<your-domain>`
154
+ : ` kindgi sso providers finish ${providerId} --kind=saml --idp-metadata=@<metadata.xml> --domains=<your-domain>`, '', 'These URLs stay the same after registering and after any `update`.');
155
+ return `${out.join('\n')}\n`;
156
+ }
157
+ const start = {
158
+ kind: 'leaf',
159
+ name: 'start',
160
+ description: 'Get the URLs to give your identity provider, before registering anything, and a message to send IT.',
161
+ usage: 'kindgi sso providers start <provider-id> --kind=oidc|saml [--idp=google|entra|okta|keycloak]',
162
+ optionSpec: {
163
+ ...kindOption,
164
+ idp: {
165
+ type: 'string',
166
+ description: 'Add the click-by-click steps for `google`, `entra`, `okta` or `keycloak` (OIDC).',
167
+ },
168
+ },
169
+ run: (ctx) => runSdkRendered(ctx, 'sso providers start', async () => {
170
+ const providerId = requiredPositional(ctx, 0, 'provider-id');
171
+ const idp = stringFlag(ctx, 'idp');
172
+ if (idp !== undefined && IDP_STEPS[idp] === undefined) {
173
+ throw new Error(`--idp must be one of: ${Object.keys(IDP_STEPS).join(', ')}`);
174
+ }
175
+ const kind = kindFlag(ctx) ?? (idp !== undefined ? IDP_STEPS[idp]?.kind : undefined);
176
+ const urls = await ctx
177
+ .client()
178
+ .auth.providers.signIn(providerId, kind === undefined ? undefined : { kind });
179
+ if (ctx.globals.formatRequested)
180
+ return renderJson(urls, ctx.globals.format);
181
+ return { stdout: handoffText(urls, idp), stderr: '' };
182
+ }),
183
+ };
184
+ const finish = {
185
+ kind: 'leaf',
186
+ name: 'finish',
187
+ description: 'Register the provider with what your identity provider gave back.',
188
+ usage: 'kindgi sso providers finish <provider-id> --domains=<d> (--kind=oidc --issuer=<url> --client-id=<id> --client-secret-ref=<NAME> | --kind=saml --idp-metadata=@<file>) [--name=<text>] [...]',
189
+ optionSpec: configOptions,
190
+ run: (ctx) => runSdk(ctx, 'sso providers finish', async () => {
191
+ const providerId = requiredPositional(ctx, 0, 'provider-id');
192
+ kindFlag(ctx);
193
+ const config = { ...(await configFromFlags(ctx)), providerId };
194
+ if (config.kind === undefined)
195
+ throw new Error('--kind=oidc|saml is required');
196
+ if (!Array.isArray(config.domains) || config.domains.length === 0) {
197
+ throw new Error("--domains=<your-domain> is required: sign-in is email first, so people find this provider by their email's domain");
198
+ }
199
+ return await ctx.client().auth.providers.register(config);
200
+ }),
201
+ };
202
+ const update = {
203
+ kind: 'leaf',
204
+ name: 'update',
205
+ description: "Change a provider; its URLs (on your identity provider's side) don't change.",
206
+ usage: 'kindgi sso providers update <provider-id> [--client-id=<id>] [--client-secret-ref=<NAME>] [--domains=<d>] [--name=<text>] [--remove=<field>] [...]',
207
+ optionSpec: {
208
+ ...configOptions,
209
+ remove: {
210
+ type: 'string',
211
+ multiple: true,
212
+ description: 'An optional field to remove (e.g. `displayName`, `domains`); repeatable.',
213
+ },
214
+ },
215
+ run: (ctx) => runSdk(ctx, 'sso providers update', async () => {
216
+ const providerId = requiredPositional(ctx, 0, 'provider-id');
217
+ kindFlag(ctx);
218
+ const changes = await configFromFlags(ctx);
219
+ for (const field of listFlag(ctx, 'remove').flatMap((f) => f.split(','))) {
220
+ if (field.trim() !== '')
221
+ changes[field.trim()] = null;
222
+ }
223
+ if (Object.keys(changes).length === 0)
224
+ throw new Error('Nothing to change: give a flag or --spec');
225
+ return await ctx
226
+ .client()
227
+ .auth.providers.update(providerId, changes);
228
+ }),
229
+ };
230
+ const get = {
231
+ kind: 'leaf',
232
+ name: 'get',
233
+ description: 'Show one provider, with the URLs your identity provider has.',
234
+ usage: 'kindgi sso providers get <provider-id>',
235
+ run: (ctx) => runSdk(ctx, 'sso providers get', async () => {
236
+ const providerId = requiredPositional(ctx, 0, 'provider-id');
237
+ return await ctx.client().auth.providers.get(providerId);
238
+ }),
239
+ };
240
+ const list = {
241
+ kind: 'leaf',
242
+ name: 'list',
243
+ description: "List this tenant's sign-in providers.",
244
+ usage: 'kindgi sso providers list',
245
+ run: (ctx) => runSdk(ctx, 'sso providers list', async () => await ctx.client().auth.providers.list(), {
246
+ rows: (page) => page.data,
247
+ columns: [
248
+ { header: 'PROVIDER', get: (p) => p.providerId },
249
+ { header: 'KIND', get: (p) => p.kind },
250
+ { header: 'NAME', get: (p) => p.displayName ?? '' },
251
+ { header: 'DOMAINS', get: (p) => (p.domains ?? []).join(',') },
252
+ ],
253
+ }),
254
+ };
255
+ const remove = {
256
+ kind: 'leaf',
257
+ name: 'remove',
258
+ description: "Stop signing in with a provider. Registering the same id again gives it the same URLs, but nobody's earlier sign-in carries over.",
259
+ usage: 'kindgi sso providers remove <provider-id>',
260
+ run: (ctx) => runSdk(ctx, 'sso providers remove', async () => {
261
+ const providerId = requiredPositional(ctx, 0, 'provider-id');
262
+ return await ctx.client().auth.providers.unregister(providerId);
263
+ }),
264
+ };
265
+ const test = {
266
+ kind: 'leaf',
267
+ name: 'test',
268
+ description: 'The link to try signing in with a provider, as a person at one of its domains.',
269
+ usage: 'kindgi sso providers test <provider-id> [--email=<someone@your-domain>]',
270
+ optionSpec: {
271
+ email: {
272
+ type: 'string',
273
+ description: "Whose sign-in to try; default: someone at the provider's first domain.",
274
+ },
275
+ },
276
+ run: (ctx) => runSdkRendered(ctx, 'sso providers test', async () => {
277
+ const providerId = requiredPositional(ctx, 0, 'provider-id');
278
+ const client = ctx.client();
279
+ const provider = await client.auth.providers.get(providerId);
280
+ const domain = provider.domains?.[0];
281
+ const email = stringFlag(ctx, 'email') ?? (domain === undefined ? undefined : `someone@${domain}`);
282
+ const options = await client.auth.signInOptions(email === undefined ? undefined : { email });
283
+ const option = options.data.find((o) => o.providerId === providerId);
284
+ const signInUrl = option === undefined ? undefined : new URL(option.signInUrl, ctx.apiUrl()).toString();
285
+ if (ctx.globals.formatRequested) {
286
+ return renderJson({ providerId, email, signInUrl: signInUrl ?? null }, ctx.globals.format);
287
+ }
288
+ if (signInUrl !== undefined) {
289
+ return {
290
+ stdout: [
291
+ `Open this in a browser and sign in as a person who's been added to this tenant:`,
292
+ ` ${signInUrl}`,
293
+ '',
294
+ 'Afterwards, the console shows who you are signed in as.',
295
+ '',
296
+ ].join('\n'),
297
+ stderr: '',
298
+ };
299
+ }
300
+ const why = email === undefined
301
+ ? `"${providerId}" has no domains. Sign-in is email first, so people find a provider by their email's domain: kindgi sso providers update ${providerId} --domains=<your-domain>`
302
+ : `No sign-in page offers "${providerId}" for ${email}: its domain isn't one of the provider's, or it isn't verified for this tenant (a runtime that serves several tenants routes a domain only once its operator lists it in KINDGI_AUTH_VERIFIED_DOMAINS).`;
303
+ return { stdout: '', stderr: `${why}\n`, exitCode: 1 };
304
+ }),
305
+ };
306
+ const providers = {
307
+ kind: 'group',
308
+ name: 'providers',
309
+ description: "Your organization's identity providers (Google, Entra ID, Okta, Keycloak, SAML…).",
310
+ subcommands: [start, finish, update, get, list, test, remove],
311
+ };
312
+ export const ssoCommand = {
313
+ kind: 'group',
314
+ name: 'sso',
315
+ description: "Sign-in with your organization's identity provider (single sign-on).",
316
+ subcommands: [providers],
317
+ };
318
+ //# sourceMappingURL=sso.js.map