@shibanet0/datamitsu-config 0.0.2-alpha-1 → 0.0.3-alpha-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 (68) hide show
  1. package/.oxlintrc.json +19 -0
  2. package/README.md +0 -10
  3. package/bin/{datamitsu.mjs → datamitsu.js} +3 -10
  4. package/bin/{tsc.mjs → tsc.js} +1 -1
  5. package/bin/{tsx.mjs → tsx.js} +1 -1
  6. package/dist/datamitsu-config/agents.md.d.ts +1 -0
  7. package/dist/datamitsu-config/app.eslint.d.ts +1 -0
  8. package/dist/datamitsu-config/constants.d.ts +4 -0
  9. package/dist/datamitsu-config/ignore.d.ts +1 -1
  10. package/dist/datamitsu-config/inline-config/eslint.d.ts +1 -0
  11. package/dist/datamitsu.d.ts +307 -36
  12. package/dist/s0/index.js +1 -1
  13. package/package.json +12 -79
  14. package/bin/mitsu.mjs +0 -52
  15. package/datamitsu.js +0 -3553
  16. package/dist/arrayFunc-E2CQDPH7.js +0 -24
  17. package/dist/arrow-return-style-QXEK7JRB.js +0 -8
  18. package/dist/boundaries-7E4X4KF5.js +0 -19
  19. package/dist/chunk-OYKSRJ7A.js +0 -54
  20. package/dist/clsx-M6OKU3PA.js +0 -8
  21. package/dist/command-3BA63SHO.js +0 -8
  22. package/dist/compat-6O7XHMYR.js +0 -8
  23. package/dist/cspell-NJAMCYWA.js +0 -8
  24. package/dist/deMorgan-X5NIQJEB.js +0 -18
  25. package/dist/depend-4TLGRJ4A.js +0 -8
  26. package/dist/escompat-2HZB2VKK.js +0 -8
  27. package/dist/eslint/index.js +0 -216
  28. package/dist/fsecond-U7QFID4J.js +0 -16
  29. package/dist/html-Q7HLWKMH.js +0 -17
  30. package/dist/i18next-XPRQSLOK.js +0 -8
  31. package/dist/import-MT776CTN.js +0 -31
  32. package/dist/javascript-KSG5RSYY.js +0 -36
  33. package/dist/jsdoc-T3RUTVU2.js +0 -8
  34. package/dist/json-ADTCTMIQ.js +0 -28
  35. package/dist/json-schema-validator-KJQPYPV7.js +0 -19
  36. package/dist/jsonc-5WI2LEKI.js +0 -11
  37. package/dist/jsx-a11y-36UJHF7N.js +0 -26
  38. package/dist/n-CF27VQ2A.js +0 -19
  39. package/dist/no-unsanitized-2CVGQCKY.js +0 -8
  40. package/dist/no-use-extend-native-W3ODJIMY.js +0 -19
  41. package/dist/oxlint-Z37R6LWE.js +0 -64
  42. package/dist/perfectionist-VM3ULM44.js +0 -104
  43. package/dist/playwright-MAN5QZRB.js +0 -19
  44. package/dist/pnpm-KEJEST6B.js +0 -15
  45. package/dist/prettier-3BKAYVNG.js +0 -18
  46. package/dist/promise-IOLHNOYU.js +0 -25
  47. package/dist/react-ZSFMBR63.js +0 -66
  48. package/dist/react-hooks-E3N7RURQ.js +0 -18
  49. package/dist/react-perf-3ZUXZLBE.js +0 -18
  50. package/dist/react-prefer-function-component-NSMHVGIJ.js +0 -19
  51. package/dist/react-refresh-RTFXBPGX.js +0 -18
  52. package/dist/react-you-might-not-need-an-effect-7LQCVBLO.js +0 -8
  53. package/dist/regexp-D6CKMCXH.js +0 -8
  54. package/dist/security-4AI7Q2BJ.js +0 -24
  55. package/dist/sonarjs-TX6OBUY7.js +0 -42
  56. package/dist/storybook-JDINFFX5.js +0 -19
  57. package/dist/stylistic-ID5P6T22.js +0 -18
  58. package/dist/toml-LIBZFTGW.js +0 -19
  59. package/dist/turbo-3YMDV64X.js +0 -19
  60. package/dist/typescript-KIXWXTZM.js +0 -42
  61. package/dist/unicorn-DIQEKCM2.js +0 -62
  62. package/dist/unused-imports-KTOMG7GT.js +0 -29
  63. package/dist/vanilla-extract-3GUV75D2.js +0 -21
  64. package/dist/vitest-OL2AMOGF.js +0 -20
  65. package/dist/yml-EIKYT3P5.js +0 -25
  66. /package/bin/{s0.mjs → s0.js} +0 -0
  67. /package/bin/{utils.mjs → utils.js} +0 -0
  68. /package/dist/datamitsu-config/{main.d.ts → datamitsu.config.d.ts} +0 -0
package/.oxlintrc.json CHANGED
@@ -9,21 +9,40 @@
9
9
  },
10
10
  "rules": {
11
11
  "sort-keys": "off",
12
+ "no-duplicate-imports": "off",
12
13
  "unicorn/prefer-query-selector": "off",
14
+ "no-lonely-if": "off",
13
15
  "unicorn/prefer-string-raw": "off",
14
16
  "array-type": "off",
17
+ "no-negated-condition": "off",
15
18
  "arrow-body-style": "off",
19
+ "unicorn/prefer-global-this": "off",
20
+ "unicorn/consistent-function-scoping": "off",
21
+ "array-callback-return": "off",
22
+ "new-cap": "off",
23
+ "prefer-exponentiation-operator": "off",
24
+ "typescript-eslint/ban-types": "off",
25
+ "unicorn/prefer-top-level-await": "off",
26
+ "max-params": "off",
27
+ "no-promise-executor-return": "off",
28
+ "unicorn/no-useless-collection-argument": "off",
29
+ "unicorn/no-lonely-if": "off",
30
+ "no-map-spread": "off",
16
31
  "capitalized-comments": "off",
32
+ "unicorn/prefer-array-some": "off",
17
33
  "eqeqeq": "off",
34
+ "func-names": "off",
18
35
  "func-style": "off",
19
36
  "id-length": "off",
20
37
  "init-declarations": "off",
21
38
  "max-lines": "off",
22
39
  "max-lines-per-function": "off",
40
+ "max-statements": "off",
23
41
  "no-await-in-loop": "off",
24
42
  "no-inline-comments": "off",
25
43
  "no-magic-numbers": "off",
26
44
  "no-ternary": "off",
45
+ "no-unused-vars": "off",
27
46
  "no-warning-comments": "off",
28
47
  "prefer-destructuring": "off",
29
48
  "prefer-template": "off",
package/README.md CHANGED
@@ -1,11 +1 @@
1
1
  # datamitsu-config
2
-
3
- ## TODO
4
-
5
- - sqlfluff
6
-
7
- ### oxlint
8
-
9
- нужно включить, но конфликтует с prettier:
10
-
11
- - "unicorn/empty-brace-spaces": "off",
@@ -3,7 +3,7 @@
3
3
  import { spawn } from "node:child_process";
4
4
  import { join } from "node:path";
5
5
 
6
- import { getBinaryFilepath } from "./utils.mjs";
6
+ import { getBinaryFilepath } from "./utils.js";
7
7
 
8
8
  const arguments_ = process.argv.slice(2);
9
9
 
@@ -15,23 +15,16 @@ const child = spawn(
15
15
  "node",
16
16
  [
17
17
  getBinaryFilepath("@datamitsu/datamitsu/package.json", "../bin/index.js"),
18
- "--config",
19
- join(import.meta.dirname, "../datamitsu.js"),
18
+ "--before-config",
19
+ join(import.meta.dirname, "../datamitsu.config.js"),
20
20
  ...arguments_,
21
21
  ],
22
22
  {
23
23
  env: {
24
24
  ...process.env,
25
25
  DATAMITSU_APP_COMMITLINT_BINARY_FILEPATH: getBinaryFilepath("@commitlint/cli", "../cli.js"),
26
- DATAMITSU_APP_ESLINT_BINARY_FILEPATH: getBinaryFilepath("eslint", "../../bin/eslint.js"),
27
- DATAMITSU_APP_KNIP_BINARY_FILEPATH: getBinaryFilepath("knip", "../../bin/knip.js"),
28
26
  DATAMITSU_APP_OXLINT_BINARY_FILEPATH: getBinaryFilepath("oxlint", "../../bin/oxlint"),
29
27
  DATAMITSU_APP_PRETTIER_BINARY_FILEPATH: getBinaryFilepath("prettier", "../bin/prettier.cjs"),
30
- DATAMITSU_APP_SORT_PACKAGE_JSON_BINARY_FILEPATH: getBinaryFilepath(
31
- "sort-package-json",
32
- "../cli.js",
33
- ),
34
- DATAMITSU_APP_SYNCPACK_BINARY_FILEPATH: getBinaryFilepath("syncpack/index.cjs", ""),
35
28
  DATAMITSU_APP_TSC_BINARY_FILEPATH: getBinaryFilepath("typescript/package.json", "../bin/tsc"),
36
29
  DATAMITSU_PACKAGE_NAME: process.env.DATAMITSU_PACKAGE_NAME || "@shibanet0/datamitsu-config",
37
30
  },
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { spawn } from "node:child_process";
4
4
 
5
- import { getBinaryFilepath } from "./utils.mjs";
5
+ import { getBinaryFilepath } from "./utils.js";
6
6
 
7
7
  const args = process.argv.slice(2);
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { spawn } from "node:child_process";
4
4
 
5
- import { getBinaryFilepath } from "./utils.mjs";
5
+ import { getBinaryFilepath } from "./utils.js";
6
6
 
7
7
  console.log(getBinaryFilepath("tsx", "../../dist/cli.mjs"));
8
8
 
@@ -0,0 +1 @@
1
+ export declare const AGENTS_MD: string;
@@ -0,0 +1 @@
1
+ export declare const eslintApp: BinManager.App;
@@ -1,3 +1,7 @@
1
+ export declare const runtimeVersions: {
2
+ node: string;
3
+ python: string;
4
+ };
1
5
  export declare const indentSettings: Record<string, {
2
6
  indentWidth: number;
3
7
  lineWidth: number;
@@ -1 +1 @@
1
- export declare const ignoreGroups: tools.Ignore.IgnoreMap<"Build outputs" | "Cache & temporary files" | "Dependencies" | "Environment" | "Golang specific" | "IDE & OS" | "Logs" | "Other" | "Pulumi" | "Security & Secrets" | "Testing">;
1
+ export declare const ignoreGroups: tools.Ignore.IgnoreMap<"Build outputs" | "Cache & temporary files" | "Claude Code project files" | "Dependencies" | "Environment" | "Golang specific" | "IDE & OS" | "Logs" | "Other" | "Pulumi" | "ralphex progress logs" | "Security & Secrets" | "Testing">;
@@ -0,0 +1 @@
1
+ export declare const data = "tar.br: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";
@@ -1,7 +1,77 @@
1
1
  // prettier-ignore
2
2
  declare global {
3
+ /**
4
+ * Color functions for terminal output. All functions accept any number of arguments,
5
+ * join them with spaces, and return a string with ANSI color codes applied.
6
+ * Respects NO_COLOR, FORCE_COLOR, and CLICOLOR environment variables.
7
+ * Colors are composable: `colors.bold(colors.red("error"))`.
8
+ */
9
+ const colors: {
10
+ // Background colors
11
+ bgBlack(...args: unknown[]): string;
12
+ bgBlue(...args: unknown[]): string;
13
+ bgCyan(...args: unknown[]): string;
14
+ bgGreen(...args: unknown[]): string;
15
+ // Bright background colors
16
+ bgHiBlack(...args: unknown[]): string;
17
+ bgHiBlue(...args: unknown[]): string;
18
+ bgHiCyan(...args: unknown[]): string;
19
+ bgHiGreen(...args: unknown[]): string;
20
+
21
+ bgHiMagenta(...args: unknown[]): string;
22
+ bgHiRed(...args: unknown[]): string;
23
+ bgHiWhite(...args: unknown[]): string;
24
+ bgHiYellow(...args: unknown[]): string;
25
+ bgMagenta(...args: unknown[]): string;
26
+ bgRed(...args: unknown[]): string;
27
+ bgWhite(...args: unknown[]): string;
28
+ bgYellow(...args: unknown[]): string;
29
+
30
+ // Foreground colors
31
+ black(...args: unknown[]): string;
32
+ blink(...args: unknown[]): string;
33
+ blinkRapid(...args: unknown[]): string;
34
+ blue(...args: unknown[]): string;
35
+ // Text attributes
36
+ bold(...args: unknown[]): string;
37
+ concealed(...args: unknown[]): string;
38
+ cyan(...args: unknown[]): string;
39
+ faint(...args: unknown[]): string;
40
+ green(...args: unknown[]): string;
41
+
42
+ // Bright foreground colors
43
+ hiBlack(...args: unknown[]): string;
44
+ hiBlue(...args: unknown[]): string;
45
+ hiCyan(...args: unknown[]): string;
46
+ hiGreen(...args: unknown[]): string;
47
+ hiMagenta(...args: unknown[]): string;
48
+ hiRed(...args: unknown[]): string;
49
+ hiWhite(...args: unknown[]): string;
50
+ hiYellow(...args: unknown[]): string;
51
+
52
+ italic(...args: unknown[]): string;
53
+ magenta(...args: unknown[]): string;
54
+ red(...args: unknown[]): string;
55
+ reverse(...args: unknown[]): string;
56
+ strikethrough(...args: unknown[]): string;
57
+ underline(...args: unknown[]): string;
58
+ white(...args: unknown[]): string;
59
+ yellow(...args: unknown[]): string;
60
+ };
61
+
3
62
  function getConfig(config: config.Config): config.Config;
4
63
 
64
+ /**
65
+ * Optional export. Declares remote parent configs to load before this config.
66
+ * Remote configs are resolved depth-first and their results are chained as input.
67
+ * Hash is REQUIRED for every entry — missing or empty hash causes an immediate error.
68
+ * @example
69
+ * function getRemoteConfigs() {
70
+ * return [{ url: "https://example.com/base-config.ts", hash: "sha256:abcdef..." }];
71
+ * }
72
+ */
73
+ function getRemoteConfigs(): Array<{ hash: string; url: string }>;
74
+
5
75
  namespace SysList {
6
76
  type ArchType = "aarch64" | "amd64" | "arm64";
7
77
 
@@ -40,13 +110,13 @@ declare global {
40
110
  /**
41
111
  * Get relative path from base to target
42
112
  * @param targetPath - Target path
43
- * @param basePath - Base path (defaults to current working directory from facts().cwd)
113
+ * @param basePath - Base path (defaults to git repository root, or cwd if not in a git repo)
44
114
  * @returns Relative path from base to target
45
115
  * @throws Error if relative path cannot be computed
46
116
  * @example
47
- * // Relative to cwd
117
+ * // Relative to rootPath (git root)
48
118
  * const relPath = tools.Path.rel("/home/user/project/file.txt");
49
- * // If cwd is "/home/user", returns: "project/file.txt"
119
+ * // If rootPath is "/home/user/project", returns: "file.txt"
50
120
  *
51
121
  * @example
52
122
  * // Relative to custom base
@@ -118,6 +188,21 @@ declare global {
118
188
  */
119
189
  function stringify<T extends string>(groups: IgnoreMap<T>, groupOrder?: T[]): string;
120
190
  }
191
+
192
+ /**
193
+ * Config link utilities for referencing managed config files in .datamitsu/
194
+ */
195
+ namespace Config {
196
+ /**
197
+ * Get relative path from a directory to a managed config link in .datamitsu/
198
+ * @param appName - The app that owns the link
199
+ * @param linkName - The link name in .datamitsu/
200
+ * @param fromPath - The directory to compute the relative path from
201
+ * @returns Relative path from fromPath to .datamitsu/linkName
202
+ * @throws TypeError if linkName is not found or doesn't belong to appName
203
+ */
204
+ function linkPath(appName: string, linkName: string, fromPath: string): string;
205
+ }
121
206
  }
122
207
 
123
208
  namespace config {
@@ -131,6 +216,14 @@ declare global {
131
216
  */
132
217
  apps?: BinManager.MapOfApps;
133
218
 
219
+ /**
220
+ * Ignore rules in .datamitsuignore syntax.
221
+ * Applied alongside file-based .datamitsuignore rules.
222
+ * Rules from multiple configs are concatenated (append).
223
+ * @example ["**\/*.generated.ts: eslint, prettier", "vendor/**: *"]
224
+ */
225
+ ignoreRules?: string[];
226
+
134
227
  /**
135
228
  * Config file initialization
136
229
  */
@@ -146,6 +239,11 @@ declare global {
146
239
  */
147
240
  projectTypes?: MapOfProjectTypes;
148
241
 
242
+ /**
243
+ * Runtime definitions for managed package managers (UV, PNPM)
244
+ */
245
+ runtimes?: BinManager.MapOfRuntimes;
246
+
149
247
  /**
150
248
  * Tool definitions
151
249
  */
@@ -205,7 +303,7 @@ declare global {
205
303
  /**
206
304
  * Function that generates file content
207
305
  * Receives context about the project including existing file content if present
208
- * Optional when deleteOnly is true
306
+ * Optional when deleteOnly is true or linkTarget is set
209
307
  */
210
308
  content?: (context: ConfigContext) => string;
211
309
 
@@ -216,6 +314,15 @@ declare global {
216
314
  */
217
315
  deleteOnly?: boolean;
218
316
 
317
+ /**
318
+ * Relative path to the symlink target, resolved from the directory of the symlink itself.
319
+ * When set, creates a symlink instead of writing file content.
320
+ * Content function is ignored when linkTarget is set.
321
+ * @example "AGENTS.md" // symlink in same directory
322
+ * @example "../AGENTS.md" // symlink to parent directory
323
+ */
324
+ linkTarget?: string;
325
+
219
326
  /**
220
327
  * All other known filenames for this config
221
328
  * These will be DELETED during install to avoid conflicts
@@ -348,13 +455,16 @@ declare global {
348
455
  */
349
456
  interface ToolOperation {
350
457
  /**
351
- * Arguments to pass to the command
352
- * Special placeholders:
353
- * - {file} - replaced with file path (per-file scope)
354
- * - {files} - replaced with space-separated file list (batch mode)
355
- * - {root} - replaced with project root path
458
+ * Arguments to pass to the command.
459
+ * Template placeholders are expanded by the executor before execution:
460
+ * - {file} - single file path (per-file scope)
461
+ * - {files} - space-separated file list (batch mode)
462
+ * - {root} - git repository root (or cwd if not in a git repo)
463
+ * - {cwd} - per-project working directory
464
+ * - {toolCache} - per-project, per-tool cache directory (cache/{projectPath}/{toolName}/)
356
465
  * @example ["--fix", "{file}"]
357
466
  * @example ["--noEmit", "--project", "{root}"]
467
+ * @example ["--cache-location", "{toolCache}/eslint"]
358
468
  */
359
469
  args: string[];
360
470
 
@@ -366,9 +476,9 @@ declare global {
366
476
  batch?: boolean;
367
477
 
368
478
  /**
369
- * Command to execute (app name from MapOfApps)
479
+ * App to execute (app name from MapOfApps)
370
480
  */
371
- command: string;
481
+ app: string;
372
482
 
373
483
  /**
374
484
  * Extra environment variables for this operation
@@ -412,7 +522,7 @@ declare global {
412
522
  * // ESLint - runs in each project
413
523
  * {
414
524
  * scope: "per-project",
415
- * command: "eslint",
525
+ * app: "eslint",
416
526
  * args: ["--quiet", "{files}"],
417
527
  * globs: ["**\/*.ts", "**\/*.js"]
418
528
  * }
@@ -420,7 +530,7 @@ declare global {
420
530
  * // syncpack - runs once for the entire monorepo
421
531
  * {
422
532
  * scope: "repository",
423
- * command: "syncpack",
533
+ * app: "syncpack",
424
534
  * args: ["lint"],
425
535
  * globs: ["**\/package.json"]
426
536
  * }
@@ -428,7 +538,7 @@ declare global {
428
538
  * // shfmt - formats each shell file separately
429
539
  * {
430
540
  * scope: "per-file",
431
- * command: "shfmt",
541
+ * app: "shfmt",
432
542
  * args: ["-w", "{file}"],
433
543
  * globs: ["**\/*.sh"]
434
544
  * }
@@ -451,19 +561,67 @@ declare global {
451
561
 
452
562
  namespace BinManager {
453
563
  interface App {
564
+ /**
565
+ * Named archives to extract into the app's install directory.
566
+ * Archive names can be referenced in Links to create symlinks.
567
+ * Archives are extracted before Files are written, allowing Files to override.
568
+ */
569
+ archives?: Record<string, ArchiveSpec>;
454
570
  binary?: AppConfigBinary;
455
- pnpm?: AppConfigPNPM;
571
+ /**
572
+ * Human-readable description of the app, shown in exec listing.
573
+ */
574
+ description?: string;
575
+ files?: Record<string, string>;
576
+ fnm?: AppConfigFNM;
577
+ jvm?: AppConfigJVM;
578
+ /**
579
+ * Symlinks to create in .datamitsu/ directory, mapping link name to relative path in install directory.
580
+ */
581
+ links?: Record<string, string>;
456
582
  required?: boolean;
457
583
  shell?: AppConfigShell;
458
- uvx?: AppConfigUVX;
584
+ uv?: AppConfigUV;
585
+ /**
586
+ * Version check configuration for verify-all command.
587
+ * Absent: use default ["--version"] args.
588
+ * { disabled: true }: skip version check.
589
+ * { args: ["version"] }: use custom args.
590
+ */
591
+ versionCheck?: AppVersionCheck;
459
592
  }
460
593
 
461
594
  interface AppConfigBinary {
462
595
  binaries: MapOfBinaries;
596
+ /**
597
+ * Version string for display purposes (e.g. from GitHub release tag).
598
+ */
599
+ version?: string;
463
600
  }
464
601
 
465
- interface AppConfigPNPM {
602
+ interface AppConfigFNM {
603
+ binPath: string;
604
+ dependencies?: Record<string, string>;
605
+ /**
606
+ * Lock file content for reproducible installs.
607
+ * When prefixed with "br:", the content is brotli-compressed and base64-encoded.
608
+ * Plain text is also accepted for backward compatibility.
609
+ * Generate via: datamitsu config lockfile <appName>
610
+ */
611
+ lockFile?: string;
466
612
  packageName: string;
613
+ runtime?: string;
614
+ version: string;
615
+ }
616
+
617
+ interface AppConfigJVM {
618
+ jarHash: string;
619
+ jarUrl: string;
620
+ /**
621
+ * Optional main class for JARs that aren't executable.
622
+ */
623
+ mainClass?: string;
624
+ runtime?: string;
467
625
  version: string;
468
626
  }
469
627
 
@@ -473,14 +631,73 @@ declare global {
473
631
  name: string;
474
632
  }
475
633
 
476
- interface AppConfigUVX {
634
+ interface AppConfigUV {
635
+ /**
636
+ * Lock file content for reproducible installs.
637
+ * When prefixed with "br:", the content is brotli-compressed and base64-encoded.
638
+ * Plain text is also accepted for backward compatibility.
639
+ * Generate via: datamitsu config lockfile <appName>
640
+ */
641
+ lockFile?: string;
477
642
  packageName: string;
643
+ /**
644
+ * Python version constraint for pyproject.toml requires-python field.
645
+ * If not set, defaults to ">=3.12".
646
+ * @example ">=3.10"
647
+ */
648
+ requiresPython?: string;
649
+ runtime?: string;
478
650
  version: string;
479
651
  }
480
652
 
653
+ interface AppVersionCheck {
654
+ /**
655
+ * Custom arguments for version check. Defaults to ["--version"] if absent.
656
+ */
657
+ args?: string[];
658
+ /**
659
+ * Skip version check for this app.
660
+ */
661
+ disabled?: boolean;
662
+ }
663
+
664
+ /**
665
+ * Archive specification for bundling directory trees with apps.
666
+ * Supports inline (brotli-compressed tar) and external (URL) formats.
667
+ * Archives are extracted before Files are written, allowing Files to override.
668
+ */
669
+ interface ArchiveSpec {
670
+ /** Archive format (tar-based only) */
671
+ format?: "tar" | "tar.bz2" | "tar.gz" | "tar.xz" | "tar.zst";
672
+
673
+ /**
674
+ * SHA-256 hash (64 lowercase hex characters).
675
+ * Required for external archives per security policy.
676
+ */
677
+ hash?: string;
678
+
679
+ /**
680
+ * Inline archive: brotli-compressed tar + base64 with "tar.br:" prefix.
681
+ * Maximum decompressed size: 50 MiB.
682
+ * @example "tar.br:GxsAACBdU6xBxGN0YXIg..."
683
+ */
684
+ inline?: string;
685
+
686
+ /**
687
+ * External archive URL (requires hash and format).
688
+ * Downloaded and SHA-256 verified before extraction.
689
+ */
690
+ url?: string;
691
+ }
692
+
481
693
  interface BinaryOsArchInfo {
482
694
  binaryPath?: string;
483
695
  contentType: BinContentType;
696
+ /**
697
+ * When true, extracts the entire archive to a directory instead of a single binary.
698
+ * Used for runtimes like JDK that need the full directory tree (bin/, lib/, etc.).
699
+ */
700
+ extractDir?: boolean;
484
701
 
485
702
  hash: string;
486
703
  /** @default sha256 */
@@ -508,11 +725,81 @@ declare global {
508
725
  type MapOfBinaries = Partial<
509
726
  Record<SysList.OsType, Partial<Record<SysList.ArchType, BinaryOsArchInfo>>>
510
727
  >;
728
+
729
+ type MapOfRuntimes = Record<string, RuntimeConfig>;
730
+
731
+ interface RuntimeConfig {
732
+ /**
733
+ * FNM-specific runtime configuration (nodeVersion, pnpmVersion).
734
+ * Required when kind is "fnm".
735
+ */
736
+ fnm?: RuntimeConfigFNM;
737
+ /**
738
+ * JVM-specific runtime configuration (javaVersion).
739
+ * Required when kind is "jvm".
740
+ */
741
+ jvm?: RuntimeConfigJVM;
742
+ kind: RuntimeKind;
743
+ managed?: RuntimeConfigManaged;
744
+ mode: RuntimeMode;
745
+ /**
746
+ * When true, all apps using this runtime must have a lockFile configured.
747
+ * Validation fails if an app references this runtime without a lockFile.
748
+ * @default false
749
+ */
750
+ requireLockfile?: boolean;
751
+ system?: RuntimeConfigSystem;
752
+ /**
753
+ * UV-specific runtime configuration (pythonVersion).
754
+ * Optional when kind is "uv".
755
+ */
756
+ uv?: RuntimeConfigUV;
757
+ }
758
+
759
+ interface RuntimeConfigFNM {
760
+ nodeVersion: string;
761
+ /**
762
+ * SHA-256 hash of the PNPM tarball for integrity verification.
763
+ * Required per security policy: all downloads must have a pinned hash.
764
+ */
765
+ pnpmHash: string;
766
+ pnpmVersion: string;
767
+ }
768
+
769
+ interface RuntimeConfigJVM {
770
+ javaVersion: string;
771
+ }
772
+
773
+ interface RuntimeConfigManaged {
774
+ binaries: MapOfBinaries;
775
+ }
776
+
777
+ interface RuntimeConfigSystem {
778
+ command: string;
779
+ /**
780
+ * Optional version string for manual cache invalidation when system runtime version changes.
781
+ */
782
+ systemVersion?: string;
783
+ }
784
+
785
+ interface RuntimeConfigUV {
786
+ pythonVersion?: string;
787
+ }
788
+
789
+ type RuntimeKind = "fnm" | "jvm" | "uv";
790
+
791
+ type RuntimeMode = "managed" | "system";
511
792
  }
512
793
 
513
794
  /**
514
- * Facts about the project environment
515
- * Collected automatically on engine initialization
795
+ * Facts about the project environment.
796
+ * Collected automatically on engine initialization.
797
+ *
798
+ * Path-related fields have been removed. Use template placeholders in tool
799
+ * operation args instead:
800
+ * - `{cwd}` - current working directory
801
+ * - `{root}` - git repository root (or cwd if not in git)
802
+ * - `{toolCache}` - per-project, per-tool cache directory (cache/{projectPath}/{toolName}/)
516
803
  */
517
804
  interface Facts {
518
805
  /**
@@ -531,11 +818,6 @@ declare global {
531
818
  */
532
819
  binaryPath: string;
533
820
 
534
- /**
535
- * Current working directory where the tool was invoked
536
- */
537
- cwd: string;
538
-
539
821
  /**
540
822
  * Environment variables with the package prefix (e.g., CHANGE_ME_*)
541
823
  * Only includes variables that start with the prefix defined in ldflags.EnvPrefix
@@ -543,12 +825,6 @@ declare global {
543
825
  */
544
826
  env: Record<string, string>;
545
827
 
546
- /**
547
- * Root directory of the git repository (handles submodules)
548
- * Empty string if not in a git repository
549
- */
550
- gitRoot: string;
551
-
552
828
  /**
553
829
  * Whether we're inside a git repository
554
830
  */
@@ -568,11 +844,6 @@ declare global {
568
844
  * Package name from ldflags
569
845
  */
570
846
  packageName: string;
571
-
572
- /**
573
- * Project root (same as gitRoot or cwd if not in git)
574
- */
575
- projectRoot: string;
576
847
  }
577
848
 
578
849
  /**
package/dist/s0/index.js CHANGED
@@ -15,7 +15,7 @@ import { execa } from "execa";
15
15
  import { fileURLToPath } from "url";
16
16
  var Datamitsu = class {
17
17
  get binaryPath() {
18
- return fileURLToPath(import.meta.resolve("../../bin/datamitsu.mjs"));
18
+ return fileURLToPath(import.meta.resolve("../../bin/datamitsu.js"));
19
19
  }
20
20
  get globalFlags() {
21
21
  const flags = [];