@kurot/cli 3.3.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +17 -5
  3. package/dist/commands/build.d.ts.map +1 -1
  4. package/dist/commands/build.js.map +1 -1
  5. package/dist/commands/clean.d.ts.map +1 -1
  6. package/dist/commands/clean.js.map +1 -1
  7. package/dist/commands/create.d.ts.map +1 -1
  8. package/dist/commands/create.js.map +1 -1
  9. package/dist/commands/dev.d.ts.map +1 -1
  10. package/dist/commands/dev.js.map +1 -1
  11. package/dist/core/components/discover-components.d.ts.map +1 -1
  12. package/dist/core/components/discover-components.js +27 -0
  13. package/dist/core/components/discover-components.js.map +1 -1
  14. package/dist/core/config.d.ts.map +1 -1
  15. package/dist/core/config.js +6 -0
  16. package/dist/core/config.js.map +1 -1
  17. package/dist/core/dev-server.d.ts +2 -2
  18. package/dist/core/dev-server.d.ts.map +1 -1
  19. package/dist/core/dev-server.js +78 -45
  20. package/dist/core/dev-server.js.map +1 -1
  21. package/dist/core/diagnostics/collector.d.ts +9 -0
  22. package/dist/core/diagnostics/collector.d.ts.map +1 -1
  23. package/dist/core/diagnostics/collector.js +12 -0
  24. package/dist/core/diagnostics/collector.js.map +1 -1
  25. package/dist/core/diagnostics/output.d.ts +1 -1
  26. package/dist/core/diagnostics/output.d.ts.map +1 -1
  27. package/dist/core/errors.d.ts +6 -0
  28. package/dist/core/errors.d.ts.map +1 -1
  29. package/dist/core/errors.js +6 -0
  30. package/dist/core/errors.js.map +1 -1
  31. package/dist/core/kui/codegen.js +63 -0
  32. package/dist/core/kui/codegen.js.map +1 -1
  33. package/dist/core/kui/kui-diagnostics.d.ts.map +1 -1
  34. package/dist/core/kui/kui-diagnostics.js.map +1 -1
  35. package/dist/core/kui/kui-parser.js +39 -0
  36. package/dist/core/kui/kui-parser.js.map +1 -1
  37. package/dist/core/kui/registry.d.ts.map +1 -1
  38. package/dist/core/kui/registry.js +9 -0
  39. package/dist/core/kui/registry.js.map +1 -1
  40. package/dist/core/kui/skin-module-builder.js +15 -0
  41. package/dist/core/kui/skin-module-builder.js.map +1 -1
  42. package/dist/core/kui/skin-parts-declaration.d.ts.map +1 -1
  43. package/dist/core/kui/skin-parts-declaration.js +27 -0
  44. package/dist/core/kui/skin-parts-declaration.js.map +1 -1
  45. package/dist/core/kui/source-location.d.ts +3 -0
  46. package/dist/core/kui/source-location.d.ts.map +1 -1
  47. package/dist/core/kui/source-location.js +3 -0
  48. package/dist/core/kui/source-location.js.map +1 -1
  49. package/dist/core/namespace-external-plugin.d.ts.map +1 -1
  50. package/dist/core/namespace-external-plugin.js +3 -0
  51. package/dist/core/namespace-external-plugin.js.map +1 -1
  52. package/dist/core/plugins/clean-output.d.ts.map +1 -1
  53. package/dist/core/plugins/clean-output.js +3 -0
  54. package/dist/core/plugins/clean-output.js.map +1 -1
  55. package/dist/core/plugins/compile-custom-namespaces.d.ts.map +1 -1
  56. package/dist/core/plugins/compile-custom-namespaces.js +15 -0
  57. package/dist/core/plugins/compile-custom-namespaces.js.map +1 -1
  58. package/dist/core/plugins/compile-engine.d.ts.map +1 -1
  59. package/dist/core/plugins/compile-engine.js +3 -0
  60. package/dist/core/plugins/compile-engine.js.map +1 -1
  61. package/dist/core/plugins/compile-kui.d.ts.map +1 -1
  62. package/dist/core/plugins/compile-kui.js +27 -0
  63. package/dist/core/plugins/compile-kui.js.map +1 -1
  64. package/dist/core/plugins/compile-source.d.ts.map +1 -1
  65. package/dist/core/plugins/compile-source.js +6 -0
  66. package/dist/core/plugins/compile-source.js.map +1 -1
  67. package/dist/core/plugins/component-catalog.d.ts.map +1 -1
  68. package/dist/core/plugins/component-catalog.js +3 -0
  69. package/dist/core/plugins/component-catalog.js.map +1 -1
  70. package/dist/core/plugins/copy-assets.d.ts.map +1 -1
  71. package/dist/core/plugins/copy-assets.js +3 -0
  72. package/dist/core/plugins/copy-assets.js.map +1 -1
  73. package/dist/core/plugins/generate-html.d.ts.map +1 -1
  74. package/dist/core/plugins/generate-html.js +3 -0
  75. package/dist/core/plugins/generate-html.js.map +1 -1
  76. package/dist/core/plugins/manifest.d.ts.map +1 -1
  77. package/dist/core/plugins/manifest.js +3 -0
  78. package/dist/core/plugins/manifest.js.map +1 -1
  79. package/dist/core/project.d.ts.map +1 -1
  80. package/dist/core/project.js +6 -0
  81. package/dist/core/project.js.map +1 -1
  82. package/dist/core/resource-asset-sync.d.ts +8 -0
  83. package/dist/core/resource-asset-sync.d.ts.map +1 -0
  84. package/dist/core/resource-asset-sync.js +121 -0
  85. package/dist/core/resource-asset-sync.js.map +1 -0
  86. package/dist/core/resource-watcher.d.ts +6 -0
  87. package/dist/core/resource-watcher.d.ts.map +1 -0
  88. package/dist/core/resource-watcher.js +54 -0
  89. package/dist/core/resource-watcher.js.map +1 -0
  90. package/dist/core/template.d.ts.map +1 -1
  91. package/dist/core/template.js.map +1 -1
  92. package/dist/utils/fs.d.ts.map +1 -1
  93. package/dist/utils/fs.js.map +1 -1
  94. package/dist/utils/logger.d.ts +15 -0
  95. package/dist/utils/logger.d.ts.map +1 -1
  96. package/dist/utils/logger.js +18 -0
  97. package/dist/utils/logger.js.map +1 -1
  98. package/docs/ai-context.md +14 -4
  99. package/docs/architecture.md +9 -3
  100. package/docs/dev-resource-watching.md +88 -0
  101. package/docs/label-text-layout.md +1 -1
  102. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"copy-assets.js","sourceRoot":"","sources":["../../../src/core/plugins/copy-assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU;IACzB,OAAO;QACN,IAAI,EAAE,aAAa;QACnB,KAAK,CAAC,KAAK,CAAC,GAAiB;YAC5B,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;YACxB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAAE,OAAO;YAEjD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAExE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;gBAC/C,IAAI,IAAI,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;gBACrC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAClD,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"copy-assets.js","sourceRoot":"","sources":["../../../src/core/plugins/copy-assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU;IACzB,OAAO;QACN,IAAI,EAAE,aAAa;QAEnB;;WAEG;QACH,KAAK,CAAC,KAAK,CAAC,GAAiB;YAC5B,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;YAExB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAAE,OAAO;YAEjD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAExE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAEtD,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;gBAC/C,IAAI,IAAI,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;gBACrC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAElD,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-html.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/generate-html.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAoD7C;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,WAAW,CAW1C;AAiCD;;GAEG;AACH,wBAAgB,UAAU,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CAuBR"}
1
+ {"version":3,"file":"generate-html.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/generate-html.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAoD7C;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,WAAW,CAgB1C;AAiCD;;GAEG;AACH,wBAAgB,UAAU,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CA0BR"}
@@ -61,6 +61,9 @@ const DEFAULT_TEMPLATE = `<!DOCTYPE html>
61
61
  export function generateHtml() {
62
62
  return {
63
63
  name: 'generate index.html',
64
+ /**
65
+ * Writes the entry page with generated scripts and import-map entries.
66
+ */
64
67
  async apply(ctx) {
65
68
  const entryScript = ctx.outputs.entryScript ?? 'main.js';
66
69
  const template = await loadTemplate(ctx.project);
@@ -1 +1 @@
1
- {"version":3,"file":"generate-html.js","sourceRoot":"","sources":["../../../src/core/plugins/generate-html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-html.js","sourceRoot":"","sources":["../../../src/core/plugins/generate-html.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,IAAI,WAAW,CAgB3C"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,IAAI,WAAW,CAqB3C"}
@@ -14,6 +14,9 @@ import { writeFile } from '../../utils/fs.js';
14
14
  export function writeManifest() {
15
15
  return {
16
16
  name: 'write manifest.json',
17
+ /**
18
+ * Writes the runtime script manifest for release builds.
19
+ */
17
20
  async apply(ctx) {
18
21
  if (ctx.project.mode !== 'release')
19
22
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/plugins/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO;QACN,IAAI,EAAE,qBAAqB;QAC3B,KAAK,CAAC,KAAK,CAAC,GAAiB;YAC5B,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO;YAE3C,MAAM,QAAQ,GAAG;gBAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC1C,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;aACxE,CAAC;YACF,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,EACjD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAC3C,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/plugins/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa;IAC5B,OAAO;QACN,IAAI,EAAE,qBAAqB;QAE3B;;WAEG;QACH,KAAK,CAAC,KAAK,CAAC,GAAiB;YAC5B,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO;YAE3C,MAAM,QAAQ,GAAG;gBAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC1C,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;aACxE,CAAC;YAEF,MAAM,SAAS,CACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,EACjD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAC3C,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IACnD;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAID;;GAEG;AACH,eAAO,MAAM,WAAW;;;CAAgE,CAAC;AAEzF;;GAEG;AACH,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAEjE;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCnE"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IACnD;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAID;;GAEG;AACH,eAAO,MAAM,WAAW;;;CAAgE,CAAC;AAEzF;;GAEG;AACH,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAEjE;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCnE"}
@@ -94,6 +94,9 @@ function resolveComponentConvention(root, config) {
94
94
  skinDir,
95
95
  };
96
96
  }
97
+ /**
98
+ * Checks that a configured path remains within its allowed root.
99
+ */
97
100
  function isWithin(directory, target) {
98
101
  const relative = path.relative(directory, target);
99
102
  return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
@@ -117,6 +120,9 @@ function detectEnginePackages(root) {
117
120
  */
118
121
  function timestamp() {
119
122
  const d = new Date();
123
+ /**
124
+ * Formats a timestamp field as two digits.
125
+ */
120
126
  const p = (n) => String(n).padStart(2, '0');
121
127
  return (String(d.getFullYear() % 100) +
122
128
  p(d.getMonth() + 1) +
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAsK1C,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAE1C;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAW,CAAC;AAEzF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAe;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,SAAS,GACd,IAAI,KAAK,SAAS;QACjB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC7D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC9E,IAAI,mBAAmB,EAAE,CAAC;QACzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,WAAW,CACpB,4CAA4C,mBAAmB,CAAC,MAAM,kCAAkC,mBAAmB,CAAC,MAAM,EAAE,CACpI,CAAC;QACH,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC;YACrB,MAAM,EAAE,mBAAmB,CAAC,MAAM;YAClC,SAAS,EAAE,mBAAmB,CAAC,SAAS;YACxC,UAAU;SACV,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACN,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;QACvC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;QACjC,SAAS;QACT,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5E,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAChF,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC;QAC1C,gBAAgB;QAChB,mBAAmB;QACnB,UAAU;KACV,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,IAAY,EAAE,UAA8C;IAC5F,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM;QACN,SAAS,EAAE,GAAG,0BAA0B,GAAG,MAAM,EAAE;QACnD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;KAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,0BAA0B,CAAC,IAAY,EAAE,MAAqB;IACtE,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC;IACzC,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,WAAW,CAAC,kFAAkF,CAAC,CAAC;IAC3G,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,WAAW,CAAC,qFAAqF,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO;QACN,MAAM,EAAE,UAAU,CAAC,SAAS;QAC5B,SAAS,EAAE,GAAG,0BAA0B,GAAG,UAAU,CAAC,SAAS,EAAE;QACjE,SAAS;QACT,OAAO;KACP,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,SAAiB,EAAE,MAAc;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACzC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAE/E,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;aACxC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,YAAY,CAAC;aACnE,IAAI,EAAE,CAAC;IACV,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IACjB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,CACN,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CACjB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/core/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Project } from './project.js';
2
+ /**
3
+ * Tracks source-owned assets only; generated themes and compiler outputs are never removed.
4
+ * All changed bytes are staged before publication. Individual renames are atomic,
5
+ * but a group of files is not an atomic transaction for concurrent HTTP readers.
6
+ */
7
+ export declare function createResourceAssetSync(project: Project): Promise<() => Promise<void>>;
8
+ //# sourceMappingURL=resource-asset-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-asset-sync.d.ts","sourceRoot":"","sources":["../../src/core/resource-asset-sync.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAwE5F"}
@@ -0,0 +1,121 @@
1
+ import { createHash } from 'node:crypto';
2
+ import * as fs from 'node:fs/promises';
3
+ import * as path from 'node:path';
4
+ import { KUI_THEME_OUTPUT_PATH } from './project.js';
5
+ /**
6
+ * Tracks source-owned assets only; generated themes and compiler outputs are never removed.
7
+ * All changed bytes are staged before publication. Individual renames are atomic,
8
+ * but a group of files is not an atomic transaction for concurrent HTTP readers.
9
+ */
10
+ export async function createResourceAssetSync(project) {
11
+ const destination = path.join(project.outputDir, 'resource');
12
+ /**
13
+ * Excludes authored KUI and generated themes from runtime asset ownership.
14
+ */
15
+ const accepts = (name) => !project.config.ui ||
16
+ (name !== path.basename(KUI_THEME_OUTPUT_PATH) && !name.endsWith('.kui.xml'));
17
+ let previous = new Map();
18
+ for (const file of await collectFiles(project.resourceDir, accepts)) {
19
+ previous.set(file, fingerprint(await fs.readFile(path.join(project.resourceDir, file))));
20
+ }
21
+ return async () => {
22
+ // Retry a bounded number of times when an editor renames files during a scan.
23
+ for (let attempt = 0;; attempt++) {
24
+ try {
25
+ await synchronize();
26
+ return;
27
+ }
28
+ catch (error) {
29
+ if (error.code !== 'ENOENT' || attempt >= 2)
30
+ throw error;
31
+ await new Promise(resolve => setTimeout(resolve, 50));
32
+ }
33
+ }
34
+ };
35
+ /**
36
+ * Stages changed assets and reconciles removed source-owned files.
37
+ */
38
+ async function synchronize() {
39
+ const staging = await fs.mkdtemp(path.join(project.outputDir, '.kurot-assets-'));
40
+ const next = new Map();
41
+ const changed = [];
42
+ try {
43
+ for (const file of await collectFiles(project.resourceDir, accepts)) {
44
+ const bytes = await fs.readFile(path.join(project.resourceDir, file));
45
+ const hash = fingerprint(bytes);
46
+ next.set(file, hash);
47
+ if (previous.get(file) === hash)
48
+ continue;
49
+ const stagedFile = path.join(staging, file);
50
+ await fs.mkdir(path.dirname(stagedFile), { recursive: true });
51
+ await fs.writeFile(stagedFile, bytes);
52
+ changed.push(file);
53
+ }
54
+ const removed = [...previous.keys()].filter(file => !next.has(file));
55
+ // Remove source-owned obsolete files first to allow file/directory replacements.
56
+ for (const file of removed) {
57
+ await fs.rm(path.join(destination, file), { force: true });
58
+ await removeEmptyParents(path.dirname(path.join(destination, file)), destination);
59
+ }
60
+ for (const file of changed) {
61
+ const target = path.join(destination, file);
62
+ await fs.mkdir(path.dirname(target), { recursive: true });
63
+ await fs.rename(path.join(staging, file), target);
64
+ }
65
+ previous = next;
66
+ }
67
+ finally {
68
+ await fs.rm(staging, { recursive: true, force: true });
69
+ }
70
+ }
71
+ }
72
+ /**
73
+ * Collects accepted runtime files in stable relative-path order.
74
+ */
75
+ async function collectFiles(directory, accepts, relative = '') {
76
+ let entries;
77
+ try {
78
+ entries = await fs.readdir(path.join(directory, relative), { withFileTypes: true });
79
+ }
80
+ catch (error) {
81
+ if (error.code === 'ENOENT' && relative === '')
82
+ return [];
83
+ throw error;
84
+ }
85
+ const files = [];
86
+ for (const entry of entries) {
87
+ const file = path.join(relative, entry.name);
88
+ if (entry.isDirectory()) {
89
+ files.push(...await collectFiles(directory, accepts, file));
90
+ }
91
+ else if (accepts(entry.name)) {
92
+ files.push(file);
93
+ }
94
+ }
95
+ return files.sort();
96
+ }
97
+ /**
98
+ * Removes empty output parents without deleting the resource root.
99
+ */
100
+ async function removeEmptyParents(directory, root) {
101
+ while (directory !== root) {
102
+ try {
103
+ await fs.rmdir(directory);
104
+ }
105
+ catch (error) {
106
+ const code = error.code;
107
+ if (code === 'ENOTEMPTY' || code === 'EEXIST')
108
+ return;
109
+ if (code !== 'ENOENT')
110
+ throw error;
111
+ }
112
+ directory = path.dirname(directory);
113
+ }
114
+ }
115
+ /**
116
+ * Hashes asset contents to avoid rewriting unchanged output files.
117
+ */
118
+ function fingerprint(bytes) {
119
+ return createHash('sha256').update(bytes).digest('hex');
120
+ }
121
+ //# sourceMappingURL=resource-asset-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-asset-sync.js","sourceRoot":"","sources":["../../src/core/resource-asset-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Watches only the resource subtree. A shallow parent watcher reconnects when
3
+ * the root is created or replaced without recursively watching node_modules.
4
+ */
5
+ export declare function watchResourceDirectory(directory: string, onChange: (file: string | undefined) => void): () => void;
6
+ //# sourceMappingURL=resource-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-watcher.d.ts","sourceRoot":"","sources":["../../src/core/resource-watcher.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAkDlH"}
@@ -0,0 +1,54 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ /**
4
+ * Watches only the resource subtree. A shallow parent watcher reconnects when
5
+ * the root is created or replaced without recursively watching node_modules.
6
+ */
7
+ export function watchResourceDirectory(directory, onChange) {
8
+ let watcher;
9
+ let identity;
10
+ /**
11
+ * Reattaches the recursive watcher when the resource root identity changes.
12
+ */
13
+ const reconnect = () => {
14
+ let next;
15
+ try {
16
+ const stat = fs.statSync(directory);
17
+ if (stat.isDirectory()) {
18
+ next = `${stat.dev}:${stat.ino}`;
19
+ }
20
+ }
21
+ catch (error) {
22
+ if (error.code !== 'ENOENT')
23
+ throw error;
24
+ }
25
+ if (next === identity)
26
+ return false;
27
+ watcher?.close();
28
+ watcher = undefined;
29
+ identity = next;
30
+ if (next !== undefined) {
31
+ watcher = fs.watch(directory, { recursive: true }, (_event, filename) => onChange(filename ?? undefined));
32
+ }
33
+ return true;
34
+ };
35
+ const parent = fs.watch(path.dirname(directory), (_event, filename) => {
36
+ if (filename && filename !== path.basename(directory))
37
+ return;
38
+ if (reconnect()) {
39
+ onChange(undefined);
40
+ }
41
+ });
42
+ try {
43
+ reconnect();
44
+ }
45
+ catch (error) {
46
+ parent.close();
47
+ throw error;
48
+ }
49
+ return () => {
50
+ parent.close();
51
+ watcher?.close();
52
+ };
53
+ }
54
+ //# sourceMappingURL=resource-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-watcher.js","sourceRoot":"","sources":["../../src/core/resource-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB,EAAE,QAA4C;IACrG,IAAI,OAAiC,CAAC;IACtC,IAAI,QAA4B,CAAC;IAEjC;;OAEG;IACH,MAAM,SAAS,GAAG,GAAY,EAAE;QAC/B,IAAI,IAAwB,CAAC;QAE7B,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACrE,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAEpC,OAAO,EAAE,KAAK,EAAE,CAAC;QACjB,OAAO,GAAG,SAAS,CAAC;QACpB,QAAQ,GAAG,IAAI,CAAC;QAEhB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC;QAC3G,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QACrE,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO;QAC9D,IAAI,SAAS,EAAE,EAAE,CAAC;YACjB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACJ,SAAS,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACb,CAAC;IAED,OAAO,GAAS,EAAE;QACjB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/core/template.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,eAAO,MAAM,SAAS,4BAA6B,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BzF"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/core/template.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,eAAO,MAAM,SAAS,4BAA6B,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/core/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/core/template.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1G;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/D"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1G;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,MAAkC;IAC1F,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAChE,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC5C,OAAO,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;SAChB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,MAAkC;IAC1F,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAChE,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC5C,OAAO,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;SAChB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
@@ -7,10 +7,25 @@ export declare function setLoggerEnabled(value: boolean): void;
7
7
  * Human-readable CLI logger with a consistent Kurot prefix and severity color.
8
8
  */
9
9
  export declare const logger: {
10
+ /**
11
+ * Writes an informational message.
12
+ */
10
13
  info: (msg: string) => void;
14
+ /**
15
+ * Writes a successful-operation message.
16
+ */
11
17
  success: (msg: string) => void;
18
+ /**
19
+ * Writes a warning message.
20
+ */
12
21
  warn: (msg: string) => void;
22
+ /**
23
+ * Writes an error message.
24
+ */
13
25
  error: (msg: string) => void;
26
+ /**
27
+ * Writes a build-stage message.
28
+ */
14
29
  step: (msg: string) => void;
15
30
  };
16
31
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;gBACN,MAAM,KAAG,IAAI;mBACV,MAAM,KAAG,IAAI;gBAChB,MAAM,KAAG,IAAI;iBACZ,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;CACzB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;IAClB;;OAEG;gBACS,MAAM,KAAG,IAAI;IAEzB;;OAEG;mBACY,MAAM,KAAG,IAAI;IAE5B;;OAEG;gBACS,MAAM,KAAG,IAAI;IAEzB;;OAEG;iBACU,MAAM,KAAG,IAAI;IAE1B;;OAEG;gBACS,MAAM,KAAG,IAAI;CACzB,CAAC"}
@@ -6,6 +6,9 @@ const cyan = '\x1b[36m';
6
6
  const dim = '\x1b[2m';
7
7
  const tag = `${cyan}[kurot]${reset}`;
8
8
  let enabled = true;
9
+ /**
10
+ * Writes human-readable logs only when logging is enabled.
11
+ */
9
12
  function write(method, message) {
10
13
  if (!enabled)
11
14
  return;
@@ -22,10 +25,25 @@ export function setLoggerEnabled(value) {
22
25
  * Human-readable CLI logger with a consistent Kurot prefix and severity color.
23
26
  */
24
27
  export const logger = {
28
+ /**
29
+ * Writes an informational message.
30
+ */
25
31
  info: (msg) => write('log', `${tag} ${msg}`),
32
+ /**
33
+ * Writes a successful-operation message.
34
+ */
26
35
  success: (msg) => write('log', `${tag} ${green}${msg}${reset}`),
36
+ /**
37
+ * Writes a warning message.
38
+ */
27
39
  warn: (msg) => write('warn', `${tag} ${yellow}${msg}${reset}`),
40
+ /**
41
+ * Writes an error message.
42
+ */
28
43
  error: (msg) => write('error', `${tag} ${red}${msg}${reset}`),
44
+ /**
45
+ * Writes a build-stage message.
46
+ */
29
47
  step: (msg) => write('log', `${tag} ${dim}›${reset} ${msg}`),
30
48
  };
31
49
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,GAAG,GAAG,SAAS,CAAC;AAEtB,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;AAErC,IAAI,OAAO,GAAG,IAAI,CAAC;AAEnB,SAAS,KAAK,CAAC,MAAgC,EAAE,OAAe;IAC/D,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC9C,OAAO,GAAG,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1D,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC7E,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC5E,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAC3E,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;CAC1E,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,GAAG,GAAG,SAAS,CAAC;AAEtB,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;AAErC,IAAI,OAAO,GAAG,IAAI,CAAC;AAEnB;;GAEG;AACH,SAAS,KAAK,CAAC,MAAgC,EAAE,OAAe;IAC/D,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC9C,OAAO,GAAG,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB;;OAEG;IACH,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAE1D;;OAEG;IACH,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAE7E;;OAEG;IACH,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAE5E;;OAEG;IACH,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAE3E;;OAEG;IACH,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;CAC1E,CAAC"}
@@ -1,8 +1,8 @@
1
1
  # @kurot/cli — AI context map
2
2
 
3
3
  Read this before exploring `src/`. [`architecture.md`](./architecture.md)
4
- explains the plugin pipeline. The package is `@kurot/cli@3.3.0`, runs on
5
- Node.js 20+, and is installed as a project dev dependency.
4
+ explains the plugin pipeline. The package is `@kurot/cli@3.3.1`, prepared for
5
+ publication, runs on Node.js 20+, and is installed as a project dev dependency.
6
6
 
7
7
  ## Directory map
8
8
 
@@ -16,6 +16,8 @@ src/
16
16
  │ ├── project.ts resolved paths, dependencies, namespaces
17
17
  │ ├── pipeline.ts BuildContext and ordered plugin runner
18
18
  │ ├── dev-server.ts static server and watchers
19
+ │ ├── resource-watcher.ts recursive resource + shallow parent watch/reconnect
20
+ │ ├── resource-asset-sync.ts content comparison, staged writes and deletion reconciliation
19
21
  │ ├── diagnostics/ stable codes and JSON/JSONL output
20
22
  │ ├── components/ reusable component discovery
21
23
  │ ├── kui/ UIDocument → SkinIR → ESM compiler
@@ -28,8 +30,11 @@ The 3.2.1 game template includes fixed style/locale configuration,
28
30
  English properties and licensed regular/bold font files. StyleManager finishes
29
31
  font loading before Main creates Player/Preloader; LocaleManager registers
30
32
  preload texts before creating the scene. See [game-template.md](game-template.md).
31
- Version 3.3.0 is prepared for publication with Label preset compilation and
33
+ Version 3.3.0 is published with Label preset compilation and
32
34
  published ui-document 0.11.0. It has no local document-kernel override.
35
+ Version 3.3.1 adds whole-resource dev synchronization, deletion/reconnect handling
36
+ and no-store responses. Installed CLI 3.3.0 lacks these fixes; source versions
37
+ do not prove that 3.3.1 has been published or adopted by consumers.
33
38
 
34
39
  ## KUI compilation
35
40
 
@@ -45,7 +50,7 @@ and layout apply to the runtime Skin, and its direct visual children become
45
50
  `property.state` attributes. Storage IDs and runtime mapping metadata are not
46
51
  authored XML fields.
47
52
 
48
- CLI 3.3.0 requires `@kurot/ui-document@^0.11.0`. Schema-defined strings, including
53
+ CLI 3.3.1 requires `@kurot/ui-document@^0.11.0`. Schema-defined strings, including
49
54
  numeric/boolean-looking text and state text, are literal attributes without
50
55
  backslash type escaping. Old synthetic prefixes become literal characters;
51
56
  do not migrate them silently. Numeric/boolean properties and schema-free
@@ -88,6 +93,11 @@ manual prefix cannot conflict with `ui.components.namespace`.
88
93
  `--strict` or release policy.
89
94
  - Machine diagnostic modes own stdout: build emits one JSON result; dev emits
90
95
  JSONL lifecycle events.
96
+ - Since 3.3.1, dev watches all resource assets even without UI, emits
97
+ resource-change for copy-only batches, retains KUI requirements across mixed
98
+ batches, and reconciles deletions. Browser refresh remains manual; HTTP is
99
+ no-store. Per-file staging/rename is not an atomic atlas pair transaction.
100
+ Read [dev resource watching](dev-resource-watching.md) for the exact boundaries.
91
101
  - `compileCustomNamespaces` must precede `compileSource`. Application-relative
92
102
  imports and generated `#ns/<prefix>` imports must resolve to one bundled class
93
103
  identity.
@@ -39,7 +39,7 @@ factory variables, property assignments, semantic layout children, and state
39
39
  property overrides. Document contracts, reusable instances, data bindings, and
40
40
  actions remain `UIDocument` concepts.
41
41
 
42
- CLI 3.3.0 consumes ui-document 0.11.x, retaining Label text-fitting metadata. The
42
+ CLI 3.3.1 consumes ui-document 0.11.x, retaining Label text-fitting metadata. The
43
43
  compiler emits `textFit`, `minFontSize`, base font sizes and state overrides;
44
44
  native UI owns measurement and derives drawing sizes after layout validation.
45
45
  See [Label compilation](label-text-layout.md). The application supplies UI
@@ -78,8 +78,14 @@ convention-based reusable components. A component change can affect its source
78
78
  namespace, paired skin, generated type declaration, and editor catalog, so that
79
79
  path refreshes all four outputs as one operation. The server preserves the last
80
80
  successful output after an invalid edit.
81
- The resource watcher includes the fixed style.json path, rebuilding skins when
82
- its palette or Label presets change; font loading remains an application responsibility.
81
+ Since 3.3.1, the resource watcher synchronizes all runtime assets even without UI,
82
+ and reconciles additions, deletions and directory replacement. Runtime-only
83
+ changes do not recompile skins. The fixed style.json and default.res.json paths
84
+ still trigger KUI compilation; font loading remains an application responsibility.
85
+ Changes are debounced and queued, with changed bytes staged before publication.
86
+ Browser refresh remains manual and HTTP responses use no-store. Individual
87
+ renames do not form an atomic multi-file transaction. See
88
+ [resource watching](dev-resource-watching.md).
83
89
 
84
90
  ## Diagnostics
85
91
 
@@ -0,0 +1,88 @@
1
+ # Development resource watching
2
+
3
+ Available in CLI 3.3.1, currently prepared for publication. No configuration or
4
+ dependency-range changes are required. Projects must install the new CLI to
5
+ receive these behaviors; installed CLI 3.3.0 does not include them.
6
+
7
+ ## Inputs and rebuilds
8
+
9
+ `kurot dev` watches the entire `resource/` subtree regardless of whether `ui` is
10
+ enabled. Runtime files do not need an extension allowlist or a special atlas
11
+ directory. This includes JSON configurations, PNG/JPEG/WebP, fonts, audio,
12
+ translations and other project-owned files.
13
+
14
+ | Input change | Action |
15
+ | --- | --- |
16
+ | KUI source, default.res.json or config/style.json in a UI project | Compile KUI and synchronize runtime assets |
17
+ | Runtime JSON, including config/locale.json and sheet JSON | Synchronize assets |
18
+ | PNG, fonts, language properties and other runtime files | Synchronize assets |
19
+ | Resource directory creation, replacement or deletion | Reconnect watcher and reconcile output; compile KUI when enabled |
20
+ | Reusable component source or skin | Retain component discovery/namespace/catalog rebuild and synchronize assets |
21
+
22
+ Changes to `kurot.config.ts`, dependencies or build configuration still require
23
+ restarting dev. Locale configuration is consumed by project code; the CLI does
24
+ not introduce a locale parser or mutate authored skins. A style edit may change
25
+ compiled skin assignments while its XML remains untouched.
26
+
27
+ The resource watcher uses recursive `fs.watch` on the resource directory plus a
28
+ shallow parent watcher, so it can reconnect when a missing root is created or an
29
+ existing root is replaced. It does not recursively watch dependencies or build
30
+ output. Native recursive watch support is required; setup failures are logged.
31
+
32
+ ## Batches and synchronization
33
+
34
+ Events are debounced for 100 ms. A batch retains its need for KUI compilation even
35
+ when a later event concerns only a runtime resource. Resource updates and
36
+ component rebuilds share a serialized queue. Failed KUI batches are retried on
37
+ subsequent resource edits before any resource synchronization can succeed.
38
+
39
+ Synchronization scans source assets, compares SHA-256 content hashes and writes
40
+ only changed files. It stages every changed file on the output filesystem before
41
+ publishing. Each changed file is renamed into place; source-owned deleted files
42
+ and empty parent directories are removed. Directory renames and file/directory
43
+ replacements are reconciled. Generated theme files, compiled bundles and catalogs
44
+ are not treated as source-owned assets. Identical contents are not rewritten.
45
+
46
+ Source renames during a scan are retried at most twice after an initial ENOENT
47
+ failure. Other errors are reported through a failed build-complete event; dev
48
+ stays running for the next edit. A failed scan leaves staged bytes unpublished.
49
+ Publication itself can fail after some files have been renamed: this is not a
50
+ rollback transaction.
51
+
52
+ A resource-only batch emits JSONL build-start with reason `resource-change`,
53
+ followed by build-complete after synchronization. Existing `kui-change` and
54
+ `source-change` reasons retain their meaning. Consumers should tolerate the
55
+ additional reason and refresh only after a successful build-complete event.
56
+
57
+ ## Preview and atlas boundaries
58
+
59
+ Browser refresh remains manual. Successful HTTP responses use
60
+ `Cache-Control: no-store`, so a reloaded preview requests current output files.
61
+ The CLI does not invalidate resources inside a running game's Core cache.
62
+ Reskin's existing reload-preview button can load synchronized assets without
63
+ restarting the dev process.
64
+
65
+ Atlas PNG and JSON can be saved together and handled in the same debounce batch.
66
+ The CLI copies bytes; it does not parse or validate atlas geometry, discover
67
+ source images, pack atlases or require an atlas dependency. It does not infer
68
+ when an external packer has finished a job.
69
+
70
+ **Debouncing and per-file atomic renames are not an atomic PNG/JSON transaction.**
71
+ Files saved farther apart can produce separate successful batches, and a request
72
+ during publication can observe different generations. For now, save both files
73
+ before refreshing. A tool requiring strict cross-process group consistency needs
74
+ a separate commit notification/version protocol; that is outside this change.
75
+
76
+ Every resource batch currently scans and hashes the complete source asset tree,
77
+ reading one file at a time and staging changed files on disk. This avoids retaining
78
+ all decoded assets in memory and avoids rewriting unchanged output, but scan I/O
79
+ still grows with total resource size. Path-based scan caches can be evaluated
80
+ separately for large projects.
81
+
82
+ ## Verification
83
+
84
+ `test/resource-watch.test.ts` starts actual CLI processes and verifies HTTP bytes,
85
+ cache headers, runtime-only updates without changed skin output, atlas atomic-save
86
+ events, locale/properties/fonts, rename/deletion, Core-only root creation/recreation,
87
+ mixed style/runtime changes, failure retention and recovery. Existing CLI KUI,
88
+ manifest, component and Label preset watch tests cover their respective rebuilds.