@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,116 @@
1
+ /**
2
+ * How `kindgi dev` shows logs. The runtime container and the pack service
3
+ * write `@kindgi/log` records as JSON; `kindgi dev` reads them and prints
4
+ * them for a person, each tagged with where it came from:
5
+ *
6
+ * [runtime] 14:02:11.123 INFO [http] GET /v1/runs 200 12ms requestId=…
7
+ * [pack] 14:02:11.130 INFO [pack] tool acme.lookup ok 12ms runId=…
8
+ *
9
+ * Levels are set where the records are written (`KINDGI_LOG_LEVEL` and
10
+ * `KINDGI_LOG_LEVELS` for the runtime, the pack service and the indexer),
11
+ * and checked again here for a source that ignores them.
12
+ * `--log-format=json` writes the records as they came, one per line on
13
+ * stdout, for `| jq`; everything else stays on stderr. `--quiet` keeps
14
+ * errors only. A line that isn't a record (pack code's own output, an
15
+ * older runtime's) is shown as it is.
16
+ */
17
+ import { type LogLevel, type LogRecord } from '@kindgi/log';
18
+ import type { OptionValue } from '../parse.js';
19
+ /** Where a line came from: its tag. */
20
+ export type DevLogSource = 'runtime' | 'pack';
21
+ /** What `kindgi dev` writes for one line: lines of text for a stream. */
22
+ export interface DevOutput {
23
+ readonly stream: 'stdout' | 'stderr';
24
+ readonly lines: readonly string[];
25
+ }
26
+ /** The log flags, checked: `--log-level`, `--log` (each), `--log-format`, `--quiet`. */
27
+ export interface DevLogFlags {
28
+ readonly level?: LogLevel;
29
+ readonly levels: Readonly<Record<string, LogLevel>>;
30
+ readonly format: 'pretty' | 'json';
31
+ readonly quiet: boolean;
32
+ }
33
+ /** How `kindgi dev` shows logs this session. */
34
+ export interface DevLogView {
35
+ /** The level for subsystems `levels` doesn't name. */
36
+ readonly level: LogLevel;
37
+ /** Per-subsystem levels, dotted children included (`pack` covers `pack.tool`). */
38
+ readonly levels: Readonly<Record<string, LogLevel>>;
39
+ readonly format: 'pretty' | 'json';
40
+ /** Colours in pretty lines: stderr is a terminal and `NO_COLOR` is unset. */
41
+ readonly color: boolean;
42
+ /** `--quiet`: errors only. */
43
+ readonly quiet: boolean;
44
+ }
45
+ /** Before the flags are read: everything shown, plain. */
46
+ export declare const DEFAULT_DEV_LOG_VIEW: DevLogView;
47
+ type Checked<T> = {
48
+ readonly kind: 'ok';
49
+ readonly value: T;
50
+ } | {
51
+ readonly kind: 'error';
52
+ readonly message: string;
53
+ };
54
+ /** The log flags from the command line, or what's wrong with one. */
55
+ export declare function parseDevLogFlags(options: {
56
+ readonly level: OptionValue;
57
+ readonly log: OptionValue;
58
+ readonly format: OptionValue;
59
+ readonly quiet: boolean;
60
+ }): Checked<DevLogFlags>;
61
+ /**
62
+ * The session's view: the flags first, then `KINDGI_LOG_LEVEL` and
63
+ * `KINDGI_LOG_LEVELS` (the shell's, then the env files'), then `info`.
64
+ * `--quiet` is `error` unless `--log-level` says otherwise.
65
+ */
66
+ export declare function resolveDevLogView(flags: DevLogFlags, input: {
67
+ /** The shell's environment. */
68
+ readonly env: Readonly<Record<string, string | undefined>>;
69
+ /** The env files' `KINDGI_*` values. */
70
+ readonly files: Readonly<Record<string, string>>;
71
+ /** Whether stderr is a terminal. */
72
+ readonly isTTY: boolean;
73
+ }): Checked<DevLogView>;
74
+ /** The levels a source gets, so it writes only what's shown. */
75
+ export declare function sourceLogLevels(view: DevLogView): Record<string, string>;
76
+ /**
77
+ * The levels the runtime gets: the view's, with its `boot` record kept
78
+ * (`boot` at info at least). In JSON the runtime writes its banner as that
79
+ * record, and `kindgi dev` waits for it to know the runtime serves, so a
80
+ * higher level (`--quiet`, `--log-level=warn`) would leave it waiting.
81
+ * Whether the banner is shown is still the view's.
82
+ */
83
+ export declare function runtimeLogLevels(view: DevLogView): Record<string, string>;
84
+ /**
85
+ * The settings a source `kindgi dev` reads gets: the levels shown, as
86
+ * records (the pack service and the indexer; the runtime container adds
87
+ * the format itself, since a runtime you run writes to your terminal).
88
+ */
89
+ export declare function sourceLogEnv(view: DevLogView): Record<string, string>;
90
+ /** A line as a record, when it is one (the five fixed fields, a known level). */
91
+ export declare function parseRecord(line: string): LogRecord | undefined;
92
+ /**
93
+ * A line as text a person reads, for checks on what a source said and
94
+ * for a failure's last lines: a record pretty (the banner as its lines),
95
+ * anything else as it is.
96
+ */
97
+ export declare function textLines(line: string): readonly string[];
98
+ /** Whether the view shows a record at `level` from `subsystem`. */
99
+ export declare function shows(view: DevLogView, level: LogLevel, subsystem: string): boolean;
100
+ /** A record, as `kindgi dev` shows it: `undefined` when its level is filtered out. */
101
+ export declare function showRecord(source: DevLogSource, record: LogRecord, raw: string, view: DevLogView): DevOutput | undefined;
102
+ /**
103
+ * A line that isn't a record, as `kindgi dev` shows it: tagged, on
104
+ * stderr. `--quiet` keeps only what a source wrote on stderr.
105
+ */
106
+ export declare function showText(source: DevLogSource, line: string, view: DevLogView, stream: 'stdout' | 'stderr'): DevOutput | undefined;
107
+ /** A line a source wrote, as `kindgi dev` shows it, or `undefined` to leave it out. */
108
+ export declare function showLine(source: DevLogSource, line: string, view: DevLogView, stream?: 'stdout' | 'stderr'): DevOutput | undefined;
109
+ /**
110
+ * What pack code printed while the indexer loaded it: shown at `debug`
111
+ * (subsystem `pack.index`), where it used to be dropped. A record it
112
+ * wrote is shown as any record.
113
+ */
114
+ export declare function showIndexerLine(line: string, view: DevLogView, now?: () => Date): DevOutput | undefined;
115
+ export {};
116
+ //# sourceMappingURL=log-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-view.d.ts","sourceRoot":"","sources":["../../src/dev/log-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * How `kindgi dev` shows logs. The runtime container and the pack service
5
+ * write `@kindgi/log` records as JSON; `kindgi dev` reads them and prints
6
+ * them for a person, each tagged with where it came from:
7
+ *
8
+ * [runtime] 14:02:11.123 INFO [http] GET /v1/runs 200 12ms requestId=…
9
+ * [pack] 14:02:11.130 INFO [pack] tool acme.lookup ok 12ms runId=…
10
+ *
11
+ * Levels are set where the records are written (`KINDGI_LOG_LEVEL` and
12
+ * `KINDGI_LOG_LEVELS` for the runtime, the pack service and the indexer),
13
+ * and checked again here for a source that ignores them.
14
+ * `--log-format=json` writes the records as they came, one per line on
15
+ * stdout, for `| jq`; everything else stays on stderr. `--quiet` keeps
16
+ * errors only. A line that isn't a record (pack code's own output, an
17
+ * older runtime's) is shown as it is.
18
+ */
19
+ import { LOG_LEVELS, SEVERITY, formatPretty, levelEnabled, levelFor, parseLogLevel, parseLogLevels, } from '@kindgi/log';
20
+ /** Before the flags are read: everything shown, plain. */
21
+ export const DEFAULT_DEV_LOG_VIEW = {
22
+ level: 'info',
23
+ levels: {},
24
+ format: 'pretty',
25
+ color: false,
26
+ quiet: false,
27
+ };
28
+ /** The log flags from the command line, or what's wrong with one. */
29
+ export function parseDevLogFlags(options) {
30
+ let level;
31
+ if (typeof options.level === 'string') {
32
+ level = parseLogLevel(options.level);
33
+ if (level === undefined) {
34
+ return {
35
+ kind: 'error',
36
+ message: `--log-level must be one of ${LOG_LEVELS.join(', ')}, got "${options.level}".`,
37
+ };
38
+ }
39
+ }
40
+ const levels = {};
41
+ const entries = typeof options.log === 'string' ? [options.log] : Array.isArray(options.log) ? options.log : [];
42
+ for (const entry of entries) {
43
+ const parsed = parseLogLevels(entry);
44
+ if (parsed.kind === 'err')
45
+ return { kind: 'error', message: `--log: ${parsed.message}.` };
46
+ Object.assign(levels, parsed.levels);
47
+ }
48
+ const format = typeof options.format === 'string' ? options.format.trim().toLowerCase() : 'pretty';
49
+ if (format !== 'pretty' && format !== 'json') {
50
+ return {
51
+ kind: 'error',
52
+ message: `--log-format must be pretty or json, got "${String(options.format)}".`,
53
+ };
54
+ }
55
+ return {
56
+ kind: 'ok',
57
+ value: { ...(level !== undefined && { level }), levels, format, quiet: options.quiet },
58
+ };
59
+ }
60
+ /**
61
+ * The session's view: the flags first, then `KINDGI_LOG_LEVEL` and
62
+ * `KINDGI_LOG_LEVELS` (the shell's, then the env files'), then `info`.
63
+ * `--quiet` is `error` unless `--log-level` says otherwise.
64
+ */
65
+ export function resolveDevLogView(flags, input) {
66
+ const setting = (name) => {
67
+ const value = input.env[name] ?? input.files[name];
68
+ return value === undefined || value.trim() === '' ? undefined : value;
69
+ };
70
+ let level = flags.level;
71
+ let levels = {};
72
+ if (flags.quiet) {
73
+ level ??= 'error';
74
+ }
75
+ else {
76
+ const rawLevel = setting('KINDGI_LOG_LEVEL');
77
+ if (level === undefined && rawLevel !== undefined) {
78
+ level = parseLogLevel(rawLevel);
79
+ if (level === undefined) {
80
+ return {
81
+ kind: 'error',
82
+ message: `KINDGI_LOG_LEVEL must be one of ${LOG_LEVELS.join(', ')}, got "${rawLevel}".`,
83
+ };
84
+ }
85
+ }
86
+ const rawLevels = setting('KINDGI_LOG_LEVELS');
87
+ if (rawLevels !== undefined) {
88
+ const parsed = parseLogLevels(rawLevels);
89
+ if (parsed.kind === 'err') {
90
+ return { kind: 'error', message: `KINDGI_LOG_LEVELS: ${parsed.message}.` };
91
+ }
92
+ levels = parsed.levels;
93
+ }
94
+ }
95
+ const color = flags.format === 'pretty' && input.isTTY && (input.env.NO_COLOR ?? '') === '';
96
+ return {
97
+ kind: 'ok',
98
+ value: {
99
+ level: level ?? 'info',
100
+ levels: { ...levels, ...flags.levels },
101
+ format: flags.format,
102
+ color,
103
+ quiet: flags.quiet,
104
+ },
105
+ };
106
+ }
107
+ /** The levels a source gets, so it writes only what's shown. */
108
+ export function sourceLogLevels(view) {
109
+ const levels = Object.entries(view.levels)
110
+ .map(([subsystem, level]) => `${subsystem}=${level}`)
111
+ .join(',');
112
+ return {
113
+ KINDGI_LOG_LEVEL: view.level,
114
+ ...(levels !== '' && { KINDGI_LOG_LEVELS: levels }),
115
+ };
116
+ }
117
+ /**
118
+ * The levels the runtime gets: the view's, with its `boot` record kept
119
+ * (`boot` at info at least). In JSON the runtime writes its banner as that
120
+ * record, and `kindgi dev` waits for it to know the runtime serves, so a
121
+ * higher level (`--quiet`, `--log-level=warn`) would leave it waiting.
122
+ * Whether the banner is shown is still the view's.
123
+ */
124
+ export function runtimeLogLevels(view) {
125
+ return shows(view, 'info', 'boot')
126
+ ? sourceLogLevels(view)
127
+ : sourceLogLevels({ ...view, levels: { ...view.levels, boot: 'info' } });
128
+ }
129
+ /**
130
+ * The settings a source `kindgi dev` reads gets: the levels shown, as
131
+ * records (the pack service and the indexer; the runtime container adds
132
+ * the format itself, since a runtime you run writes to your terminal).
133
+ */
134
+ export function sourceLogEnv(view) {
135
+ return { KINDGI_LOG_FORMAT: 'json', ...sourceLogLevels(view) };
136
+ }
137
+ /** A line as a record, when it is one (the five fixed fields, a known level). */
138
+ export function parseRecord(line) {
139
+ if (!line.startsWith('{'))
140
+ return undefined;
141
+ let parsed;
142
+ try {
143
+ parsed = JSON.parse(line);
144
+ }
145
+ catch {
146
+ return undefined;
147
+ }
148
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
149
+ return undefined;
150
+ const r = parsed;
151
+ return typeof r.time === 'string' &&
152
+ typeof r.level === 'string' &&
153
+ LOG_LEVELS.includes(r.level) &&
154
+ typeof r.subsystem === 'string' &&
155
+ typeof r.message === 'string'
156
+ ? r
157
+ : undefined;
158
+ }
159
+ /**
160
+ * The runtime's banner, when the record carries it: in JSON the runtime
161
+ * writes its boot lines as one `boot` record with them as `lines`.
162
+ */
163
+ function bootLines(record) {
164
+ const lines = record.lines;
165
+ return record.subsystem === 'boot' &&
166
+ Array.isArray(lines) &&
167
+ lines.every((l) => typeof l === 'string')
168
+ ? lines
169
+ : undefined;
170
+ }
171
+ /**
172
+ * A line as text a person reads, for checks on what a source said and
173
+ * for a failure's last lines: a record pretty (the banner as its lines),
174
+ * anything else as it is.
175
+ */
176
+ export function textLines(line) {
177
+ const record = parseRecord(line);
178
+ if (record === undefined)
179
+ return [line];
180
+ return bootLines(record) ?? formatPretty(record).split('\n');
181
+ }
182
+ /** Whether the view shows a record at `level` from `subsystem`. */
183
+ export function shows(view, level, subsystem) {
184
+ return levelEnabled(level, levelFor(subsystem, view.levels, view.level));
185
+ }
186
+ /** A record, as `kindgi dev` shows it: `undefined` when its level is filtered out. */
187
+ export function showRecord(source, record, raw, view) {
188
+ if (!shows(view, record.level, record.subsystem))
189
+ return undefined;
190
+ if (view.format === 'json')
191
+ return { stream: 'stdout', lines: [raw] };
192
+ const text = bootLines(record) ?? formatPretty(record, { color: view.color }).split('\n');
193
+ return { stream: 'stderr', lines: text.map((l) => `[${source}] ${l}`) };
194
+ }
195
+ /**
196
+ * A line that isn't a record, as `kindgi dev` shows it: tagged, on
197
+ * stderr. `--quiet` keeps only what a source wrote on stderr.
198
+ */
199
+ export function showText(source, line, view, stream) {
200
+ if (view.quiet && stream !== 'stderr')
201
+ return undefined;
202
+ return { stream: 'stderr', lines: [`[${source}] ${line}`] };
203
+ }
204
+ /** A line a source wrote, as `kindgi dev` shows it, or `undefined` to leave it out. */
205
+ export function showLine(source, line, view, stream = 'stdout') {
206
+ const record = parseRecord(line);
207
+ return record === undefined
208
+ ? showText(source, line, view, stream)
209
+ : showRecord(source, record, line, view);
210
+ }
211
+ /**
212
+ * What pack code printed while the indexer loaded it: shown at `debug`
213
+ * (subsystem `pack.index`), where it used to be dropped. A record it
214
+ * wrote is shown as any record.
215
+ */
216
+ export function showIndexerLine(line, view, now = () => new Date()) {
217
+ const record = parseRecord(line);
218
+ if (record !== undefined)
219
+ return showRecord('pack', record, line, view);
220
+ if (!shows(view, 'debug', 'pack.index'))
221
+ return undefined;
222
+ if (view.format === 'json')
223
+ return { stream: 'stderr', lines: [`[pack] ${line}`] };
224
+ const shown = {
225
+ time: now().toISOString(),
226
+ level: 'debug',
227
+ severity: SEVERITY.debug,
228
+ subsystem: 'pack.index',
229
+ message: line,
230
+ };
231
+ return { stream: 'stderr', lines: [`[pack] ${formatPretty(shown, { color: view.color })}`] };
232
+ }
233
+ //# sourceMappingURL=log-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-view.js","sourceRoot":"","sources":["../../src/dev/log-view.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,52 @@
1
1
  import type { PackLanguage } from '@kindgi/handler-runtime';
2
- /** The pack's code: its language, and for Python the interpreter (an argv prefix). */
2
+ /**
3
+ * The pack's code: its language, and how to run it — for Python the
4
+ * interpreter (an argv prefix), for Java the JDK and the build.
5
+ */
3
6
  export type PackCode = {
4
7
  readonly language: 'node';
5
8
  } | {
6
9
  readonly language: 'python';
7
10
  readonly python: readonly [string, ...string[]];
8
- };
11
+ } | JvmPackCode;
12
+ /** A JVM pack's code: Java's (built by Maven) or Scala's (built by sbt). */
13
+ export type JvmPackCode = JavaPackCode | ScalaPackCode;
14
+ /** Whether the pack's code runs on the JVM: kindgi-pack indexes and serves it. */
15
+ export declare function isJvmPackCode(code: PackCode | undefined): code is JvmPackCode;
16
+ /** What every JVM pack's code has: the JDK that runs it, and where its build's files go. */
17
+ interface JvmRuntime {
18
+ /** The JDK's `java`: `<javaHome>/bin/java`, or `java` on `PATH`. */
19
+ readonly java: string;
20
+ /** The JDK's home, passed on as `JAVA_HOME` (the build tool's and the launcher's JDK); absent: `java` on `PATH`. */
21
+ readonly javaHome?: string;
22
+ /** Where the build's files go (`devJvmDir`): the classpath `@argfile`, the launcher. */
23
+ readonly workDir: string;
24
+ }
25
+ /** A Scala pack's code: the JDK that runs it, the sbt that builds it, where the build's files go. */
26
+ export interface ScalaPackCode extends JvmRuntime {
27
+ readonly language: 'scala';
28
+ /** sbt, as an argv prefix: `dev.sbt`, else `sbt` on `PATH`. Builds go through its server (`--client`). */
29
+ readonly sbt: readonly [string, ...string[]];
30
+ /** `SBT_OPTS` from the host, for sbt only (a machine's own proxy or memory settings). */
31
+ readonly sbtEnv?: Readonly<Record<string, string>>;
32
+ }
33
+ /** A Java pack's code: the JDK that runs it, the Maven that builds it, where the build's files go. */
34
+ export interface JavaPackCode extends JvmRuntime {
35
+ readonly language: 'java';
36
+ /** Maven, as an argv prefix: `dev.maven`, else the pack's wrapper (`sh mvnw`), else `mvn`. */
37
+ readonly maven: readonly [string, ...string[]];
38
+ /**
39
+ * `MAVEN_ARGS` and `MAVEN_OPTS` from the host, for Maven only (a machine's
40
+ * own `-s settings.xml`, a proxy): never in the pack's environment.
41
+ */
42
+ readonly mavenEnv?: Readonly<Record<string, string>>;
43
+ }
44
+ /** The `@argfile` passing a JVM pack's classpath to `java` (written by its builder). */
45
+ export declare function javaArgsFile(code: JvmPackCode): string;
46
+ /** The launcher (`kindgi-pack-java`) extracted from the pack's kindgi-pack jar. */
47
+ export declare function javaLauncher(code: JvmPackCode): string;
48
+ /** The environment a JVM pack's children run with: the pack's, plus its JDK as `JAVA_HOME`. */
49
+ export declare function javaEnv(code: JvmPackCode, env: Readonly<Record<string, string>>): Readonly<Record<string, string>>;
9
50
  export declare const NODE_PACK_CODE: PackCode;
10
51
  type Outcome<T> = {
11
52
  readonly kind: 'ok';
@@ -23,8 +64,31 @@ type Outcome<T> = {
23
64
  * 3. `python3` on `PATH`.
24
65
  */
25
66
  export declare function resolvePackPython(packDir: string, config: Readonly<Record<string, unknown>> | undefined): Promise<Outcome<readonly [string, ...string[]]>>;
26
- /** The pack code for a language, with the interpreter resolved for Python. */
27
- export declare function resolvePackCode(language: PackLanguage, packDir: string, config: Readonly<Record<string, unknown>> | undefined): Promise<Outcome<PackCode>>;
67
+ /**
68
+ * The JDK and the Maven that run and build a Java pack:
69
+ *
70
+ * - the JDK: `dev.javaHome` in the config, else `JAVA_HOME`, else `java`
71
+ * on `PATH`;
72
+ * - Maven: `dev.maven` (an argv, such as `["mvn", "-s", "settings.xml"]`),
73
+ * else the pack's wrapper (`mvnw`, run with `sh`), else `mvn` on `PATH`.
74
+ *
75
+ * A Java pack's service starts through a POSIX shell script (the launcher
76
+ * keeps its token out of the JVM's environment): on Windows, `kindgi dev`
77
+ * runs it under WSL.
78
+ */
79
+ export declare function resolvePackJava(packDir: string, config: Readonly<Record<string, unknown>> | undefined, hostEnv: Readonly<Record<string, string | undefined>>, platform?: NodeJS.Platform): Promise<Outcome<JavaPackCode>>;
80
+ /**
81
+ * The JDK and the sbt that run and build a Scala pack:
82
+ *
83
+ * - the JDK, as for a Java pack: `dev.javaHome`, else `JAVA_HOME`, else
84
+ * `java` on `PATH`;
85
+ * - sbt: `dev.sbt` (an argv, such as `["sbt", "-Dsbt.override.build.repos=true"]`),
86
+ * else `sbt` on `PATH`. Builds go through its server (`sbt --client`),
87
+ * so a save compiles without starting a JVM.
88
+ */
89
+ export declare function resolvePackScala(packDir: string, config: Readonly<Record<string, unknown>> | undefined, hostEnv: Readonly<Record<string, string | undefined>>, platform?: NodeJS.Platform): Promise<Outcome<ScalaPackCode>>;
90
+ /** The pack code for a language, with the interpreter or the JDK resolved. */
91
+ export declare function resolvePackCode(language: PackLanguage, packDir: string, config: Readonly<Record<string, unknown>> | undefined, hostEnv?: Readonly<Record<string, string | undefined>>): Promise<Outcome<PackCode>>;
28
92
  /**
29
93
  * Check the pack's Python can run pack code (`import kindgi.pack`), with the
30
94
  * pack's environment and from the pack's directory — so a missing
@@ -32,5 +96,16 @@ export declare function resolvePackCode(language: PackLanguage, packDir: string,
32
96
  * failure.
33
97
  */
34
98
  export declare function checkPackPython(python: readonly [string, ...string[]], env: Readonly<Record<string, string>>, packDir?: string): Promise<Outcome<string>>;
99
+ /** The oldest JDK a JVM pack runs on (kindgi-pack's baseline). */
100
+ export declare const MIN_JAVA_MAJOR = 17;
101
+ /**
102
+ * Check a JVM pack's JDK (17 or later) and its build tool (Maven or sbt)
103
+ * start, with the pack's environment — so a missing JDK or build tool is one
104
+ * clear line at boot instead of a build failure. Whether the pack has
105
+ * kindgi-pack shows at its first build.
106
+ */
107
+ export declare function checkPackJvm(code: JvmPackCode, env: Readonly<Record<string, string>>, packDir?: string): Promise<Outcome<string>>;
108
+ /** `17.0.6` → 17; `1.8.0_392` → 8. */
109
+ export declare function javaMajor(version: string): number | undefined;
35
110
  export {};
36
111
  //# sourceMappingURL=pack-code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pack-code.d.ts","sourceRoot":"","sources":["../../src/dev/pack-code.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,sFAAsF;AACtF,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC;AAErF,eAAO,MAAM,cAAc,EAAE,QAA+B,CAAC;AAE7D,KAAK,OAAO,CAAC,CAAC,IACV;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC1C;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,GACpD,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CA+BlD;AAED,8EAA8E;AAC9E,wBAAsB,eAAe,CACnC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,GACpD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAK5B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EACtC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAyD1B"}
1
+ {"version":3,"file":"pack-code.d.ts","sourceRoot":"","sources":["../../src/dev/pack-code.ts"],"names":[],"mappings":"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"}