@dforge-core/dforge-mcp 0.2.44 → 0.2.46-next

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 (89) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +3 -2
  3. package/dist/server.js +109 -84
  4. package/package.json +48 -46
  5. package/resources/docs/conventions.md +17 -14
  6. package/resources/docs/dsl-reference.md +15 -5
  7. package/resources/schemas/entity.schema.json +1 -1
  8. package/resources/schemas/registers.schema.json +8 -3
  9. package/scripts/install-skills.mjs +1 -0
  10. package/skills/dforge-1c-import/SKILL.md +374 -0
  11. package/skills/dforge-1c-import/references/environment.md +97 -0
  12. package/skills/dforge-1c-import/references/loading.md +161 -0
  13. package/skills/dforge-1c-import/references/measurements.md +210 -0
  14. package/skills/dforge-1c-import/references/print-forms.md +148 -0
  15. package/skills/dforge-1c-import/scripts/1c.py +178 -0
  16. package/skills/dforge-1c-import/scripts/README.md +110 -0
  17. package/skills/dforge-1c-import/scripts/lib/analyze.py +83 -0
  18. package/skills/dforge-1c-import/scripts/lib/attrs.py +278 -0
  19. package/skills/dforge-1c-import/scripts/lib/autospec.py +964 -0
  20. package/skills/dforge-1c-import/scripts/lib/binding.py +257 -0
  21. package/skills/dforge-1c-import/scripts/lib/bsl.py +811 -0
  22. package/skills/dforge-1c-import/scripts/lib/callgraph.py +717 -0
  23. package/skills/dforge-1c-import/scripts/lib/cli.py +53 -0
  24. package/skills/dforge-1c-import/scripts/lib/columnmap.py +346 -0
  25. package/skills/dforge-1c-import/scripts/lib/coverage.py +242 -0
  26. package/skills/dforge-1c-import/scripts/lib/custom.py +83 -0
  27. package/skills/dforge-1c-import/scripts/lib/delta.py +741 -0
  28. package/skills/dforge-1c-import/scripts/lib/deps.py +136 -0
  29. package/skills/dforge-1c-import/scripts/lib/docusage.py +105 -0
  30. package/skills/dforge-1c-import/scripts/lib/dump1c.py +251 -0
  31. package/skills/dforge-1c-import/scripts/lib/explore.py +55 -0
  32. package/skills/dforge-1c-import/scripts/lib/external.py +201 -0
  33. package/skills/dforge-1c-import/scripts/lib/extract_code.py +251 -0
  34. package/skills/dforge-1c-import/scripts/lib/forms.py +239 -0
  35. package/skills/dforge-1c-import/scripts/lib/genmodule.py +1432 -0
  36. package/skills/dforge-1c-import/scripts/lib/handlers.py +202 -0
  37. package/skills/dforge-1c-import/scripts/lib/handmap.py +142 -0
  38. package/skills/dforge-1c-import/scripts/lib/i18n_coverage.py +87 -0
  39. package/skills/dforge-1c-import/scripts/lib/idioms.py +273 -0
  40. package/skills/dforge-1c-import/scripts/lib/integrity.py +264 -0
  41. package/skills/dforge-1c-import/scripts/lib/inventory.py +535 -0
  42. package/skills/dforge-1c-import/scripts/lib/layers.py +106 -0
  43. package/skills/dforge-1c-import/scripts/lib/meta.py +315 -0
  44. package/skills/dforge-1c-import/scripts/lib/migrate.py +1299 -0
  45. package/skills/dforge-1c-import/scripts/lib/mxl.py +368 -0
  46. package/skills/dforge-1c-import/scripts/lib/naming.py +251 -0
  47. package/skills/dforge-1c-import/scripts/lib/paths.py +90 -0
  48. package/skills/dforge-1c-import/scripts/lib/peek.py +70 -0
  49. package/skills/dforge-1c-import/scripts/lib/posted.py +218 -0
  50. package/skills/dforge-1c-import/scripts/lib/posting.py +655 -0
  51. package/skills/dforge-1c-import/scripts/lib/printgen.py +239 -0
  52. package/skills/dforge-1c-import/scripts/lib/rebuild.py +194 -0
  53. package/skills/dforge-1c-import/scripts/lib/recorded.py +170 -0
  54. package/skills/dforge-1c-import/scripts/lib/recorders.py +94 -0
  55. package/skills/dforge-1c-import/scripts/lib/reftargets.py +95 -0
  56. package/skills/dforge-1c-import/scripts/lib/reportgen.py +157 -0
  57. package/skills/dforge-1c-import/scripts/lib/roles.py +33 -0
  58. package/skills/dforge-1c-import/scripts/lib/seedstate.py +488 -0
  59. package/skills/dforge-1c-import/scripts/lib/sizing.py +184 -0
  60. package/skills/dforge-1c-import/scripts/lib/spec.py +400 -0
  61. package/skills/dforge-1c-import/scripts/lib/statements.py +774 -0
  62. package/skills/dforge-1c-import/scripts/lib/subsystems.py +480 -0
  63. package/skills/dforge-1c-import/scripts/lib/terms.py +451 -0
  64. package/skills/dforge-1c-import/scripts/lib/terms_uk.py +555 -0
  65. package/skills/dforge-1c-import/scripts/lib/totals.py +387 -0
  66. package/skills/dforge-1c-import/scripts/lib/typemap.py +73 -0
  67. package/skills/dforge-1c-import/scripts/lib/unpack.py +136 -0
  68. package/skills/dforge-1c-import/scripts/lib/validate.py +508 -0
  69. package/skills/dforge-1c-import/scripts/project-template/contours.py +47 -0
  70. package/skills/dforge-1c-import/scripts/project-template/sources.py +14 -0
  71. package/skills/dforge-mcp-author/SKILL.md +8 -2
  72. package/skills/dforge-mcp-author/examples/column-security/entities/product.json +1 -1
  73. package/skills/dforge-mcp-author/examples/column-security/manifest.json +0 -1
  74. package/skills/dforge-mcp-author/examples/column-security/security/roles.json +2 -2
  75. package/skills/dforge-mcp-author/references/action-dsl.md +20 -7
  76. package/skills/dforge-mcp-author/references/conventions.md +7 -1
  77. package/skills/dforge-mcp-author/references/field-types.md +3 -2
  78. package/skills/dforge-mcp-author/references/formulas.md +5 -1
  79. package/skills/dforge-mcp-author/references/print-templates.md +5 -2
  80. package/skills/dforge-mcp-author/references/queries.md +1 -1
  81. package/skills/dforge-mcp-author/references/registers.md +18 -3
  82. package/skills/dforge-mcp-author/references/reports.md +4 -1
  83. package/skills/dforge-mcp-author/references/schema-import.md +1 -1
  84. package/skills/dforge-mcp-author/references/security.md +1 -1
  85. package/skills/dforge-mcp-author/references/translations.md +38 -15
  86. package/skills/dforge-mcp-author/references/validation-checklist.md +2 -3
  87. package/skills/dforge-module-build/SKILL.md +10 -1
  88. package/skills/dforge-module-ship/SKILL.md +31 -3
  89. package/skills/dforge-mcp-author/examples/column-security/translations/en-US.json +0 -35
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Separate the client's own development from the stock UTP configuration.
5
+
6
+ Stock 1C objects are CamelCase starting with a capital; this integrator prefixes
7
+ everything it added with a lowercase tag. Whatever carries a tag *and* holds data
8
+ is the real porting scope - the rest is vendor code we are not copying anyway.
9
+ """
10
+ from __future__ import print_function
11
+
12
+ import codecs
13
+ import collections
14
+ import json
15
+ import os
16
+ import re
17
+ import sys
18
+
19
+ import paths
20
+
21
+ OUT = paths.OUT
22
+ LOWER_PREFIX = re.compile(r"^([a-zа-яёіїє]{2,6})(?=[A-ZА-Я])")
23
+ FAMILIES = ("Reference", "Document", "InfoRg", "AccumRg", "Enum", "Chrc", "Acc", "AccRg")
24
+
25
+
26
+ def load(name):
27
+ with codecs.open(os.path.join(OUT, name), "r", "utf-8") as f:
28
+ return json.load(f)
29
+
30
+
31
+ def has_data(row):
32
+ return bool((row["rows"] or 0) or row["childRows"])
33
+
34
+
35
+ def main():
36
+ rows = load("report.json")
37
+
38
+ prefixes = collections.Counter()
39
+ for row in rows:
40
+ m = LOWER_PREFIX.match(row["name"] or "")
41
+ if m:
42
+ prefixes[m.group(1)] += 1
43
+ print("integrator prefixes found:")
44
+ for tag, n in prefixes.most_common(10):
45
+ print(" %-8s %d objects" % (tag, n))
46
+
47
+ tags = [t for t, n in prefixes.most_common() if n >= 3]
48
+ is_custom = lambda row: bool(LOWER_PREFIX.match(row["name"] or "")
49
+ and LOWER_PREFIX.match(row["name"]).group(1) in tags)
50
+
51
+ print("\n%-14s %7s %7s %11s %11s" % ("family", "total", "custom", "custom+data", "stock+data"))
52
+ print("-" * 56)
53
+ scope = []
54
+ for family in FAMILIES:
55
+ members = [r for r in rows if r["family"] == family]
56
+ if not members:
57
+ continue
58
+ custom = [r for r in members if is_custom(r)]
59
+ custom_used = [r for r in custom if has_data(r)]
60
+ stock_used = [r for r in members if has_data(r) and not is_custom(r)]
61
+ scope.extend(custom_used)
62
+ print("%-14s %7d %7d %11d %11d"
63
+ % (family, len(members), len(custom), len(custom_used), len(stock_used)))
64
+
65
+ scope.sort(key=lambda r: -((r["rows"] or 0) + r["childRows"]))
66
+ with codecs.open(os.path.join(OUT, "scope.md"), "w", "utf-8") as f:
67
+ f.write("# Client-specific objects that hold data\n\n")
68
+ f.write("| family | name | synonym | table | rows | child rows | cols |\n")
69
+ f.write("|---|---|---|---|---:|---:|---:|\n")
70
+ for r in scope:
71
+ f.write("| %s | %s | %s | %s | %s | %s | %s |\n"
72
+ % (r["family"], r["name"], r["synonym"] or "", r["physical"],
73
+ "{:,}".format(r["rows"] or 0), "{:,}".format(r["childRows"]), r["columns"]))
74
+ print("\ncustom objects with data: %d -> out/scope.md" % len(scope))
75
+
76
+ top = int(sys.argv[1]) if len(sys.argv) > 1 else 20
77
+ print()
78
+ for r in scope[:top]:
79
+ print(" %-10s %-42s %s" % (r["family"], r["name"], r["synonym"] or ""))
80
+
81
+
82
+ if __name__ == "__main__":
83
+ main()