@1aboveio/skills 0.20.2 → 0.20.4

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 (85) hide show
  1. package/README.md +14 -6
  2. package/package.json +1 -1
  3. package/runtime/skills/distribution/generated/recipes.json +220 -25
  4. package/runtime/skills/distribution/scripts/bundles.mjs +167 -48
  5. package/runtime/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +4 -0
  6. package/runtime/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
  7. package/skills/compliance/compliance-audit/LICENSE +3 -0
  8. package/skills/compliance/compliance-audit/SKILL.md +466 -0
  9. package/skills/compliance/compliance-audit/references/findings-schema.md +290 -0
  10. package/skills/compliance/compliance-audit/references/vars-checklist.md +1068 -0
  11. package/skills/compliance/compliance-audit/references/vars-findings-schema.md +395 -0
  12. package/skills/compliance/compliance-audit/scripts/reconcile_tracker.py +454 -0
  13. package/skills/compliance/compliance-audit/scripts/test_validate_tracker.py +90 -0
  14. package/skills/compliance/compliance-audit/scripts/validate_tracker.py +752 -0
  15. package/skills/compliance/doc-authenticity/LICENSE +3 -0
  16. package/skills/compliance/doc-authenticity/SKILL.md +158 -0
  17. package/skills/compliance/doc-authenticity/references/agreement.md +66 -0
  18. package/skills/compliance/doc-authenticity/references/bank-statement.md +150 -0
  19. package/skills/compliance/doc-authenticity/references/forensic-signals.md +157 -0
  20. package/skills/compliance/doc-authenticity/references/image-signals.md +114 -0
  21. package/skills/compliance/doc-authenticity/references/invoice.md +66 -0
  22. package/skills/compliance/doc-authenticity/references/issuer-profiles.md +86 -0
  23. package/skills/compliance/doc-authenticity/references/verdict-and-report.md +95 -0
  24. package/skills/compliance/doc-authenticity/references/verdict.schema.json +81 -0
  25. package/skills/compliance/doc-authenticity/scripts/image_forensics.py +294 -0
  26. package/skills/compliance/doc-authenticity/scripts/pdf_forensics.py +401 -0
  27. package/skills/compliance/doc-authenticity/scripts/validate_codes.py +224 -0
  28. package/skills/compliance/doc-authenticity/scripts/validate_verdict.py +308 -0
  29. package/skills/compliance/report-writing/LICENSE +3 -0
  30. package/skills/compliance/report-writing/SKILL.md +206 -0
  31. package/skills/compliance/report-writing/references/audit-report-template.md +121 -0
  32. package/skills/compliance/report-writing/references/external-assessment-template.md +167 -0
  33. package/skills/compliance/report-writing/references/management-report-template.md +145 -0
  34. package/skills/compliance/report-writing/references/vars-report-template.md +224 -0
  35. package/skills/document-utils/doc-to-md/LICENSE +3 -0
  36. package/skills/document-utils/doc-to-md/SKILL.md +77 -0
  37. package/skills/document-utils/doc-to-md/scripts/convert.py +157 -0
  38. package/skills/document-utils/reg-parser/LICENSE +3 -0
  39. package/skills/document-utils/reg-parser/SKILL.md +201 -0
  40. package/skills/document-utils/reg-parser/references/checklist-schema.md +223 -0
  41. package/skills/document-utils/reg-parser/references/checklists/hk-amlo-checklist.json +1306 -0
  42. package/skills/document-utils/reg-parser/references/checklists/hk-amlo-checklist.md +469 -0
  43. package/skills/document-utils/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.json +634 -0
  44. package/skills/document-utils/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.md +233 -0
  45. package/skills/document-utils/reg-parser/references/checklists/hk-mso-guideline-checklist.json +2194 -0
  46. package/skills/document-utils/reg-parser/references/checklists/hk-mso-guideline-checklist.md +771 -0
  47. package/skills/document-utils/reg-parser/references/checklists/kyc-aml-checklist.md +258 -0
  48. package/skills/document-utils/reg-parser/references/checklists/visa-vars-checklist.md +1058 -0
  49. package/skills/document-utils/reg-parser/references/mandates/hk-amlo-cap615.md +389 -0
  50. package/skills/document-utils/reg-parser/references/mandates/visa-vars.md +205 -0
  51. package/skills/document-utils/reg-parser/scripts/compare_checklist.py +228 -0
  52. package/skills/document-utils/reg-parser/scripts/dump_checklist.py +348 -0
  53. package/skills/document-utils/reg-parser/scripts/preprocess-mandate.sh +171 -0
  54. package/skills/document-utils/reg-parser/scripts/test_quarantine.sh +102 -0
  55. package/skills/document-utils/reg-parser/scripts/validate_checklist.py +532 -0
  56. package/skills/document-utils/reg-parser/scripts/validate_mandate.py +242 -0
  57. package/skills/engineering/engineering-runtime/coherence/workflow.json +16 -16
  58. package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +4 -0
  59. package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
  60. package/skills/payment/similar-domain/LICENSE +3 -0
  61. package/skills/payment/similar-domain/SKILL.md +178 -0
  62. package/skills/payment/similar-domain/references/entities.md +58 -0
  63. package/skills/payment/similar-domain/references/fingerprints.md +82 -0
  64. package/skills/payment/similar-domain/references/pivots.md +66 -0
  65. package/skills/payment/similar-domain/references/report-template.md +76 -0
  66. package/skills/payment/similar-domain/references/scoring.md +61 -0
  67. package/skills/payment/similar-domain/references/terminology.md +37 -0
  68. package/skills/payment/similar-domain/references/workflow.md +79 -0
  69. package/skills/payment/tld-detection/SKILL.md +76 -21
  70. package/skills/payment/tld-detection/references/clean.md +1 -1
  71. package/skills/payment/tld-detection/references/clustering.md +21 -6
  72. package/skills/payment/tld-detection/references/decision.md +7 -2
  73. package/skills/payment/tld-detection/references/fx-conversion.md +229 -0
  74. package/skills/payment/tld-detection/references/report-template.md +63 -27
  75. package/skills/payment/tld-detection/references/streams.md +90 -0
  76. package/skills/payment/tld-detection/references/terminology.md +15 -7
  77. package/skills/payment/tld-detection/references/workflow.md +1 -1
  78. package/skills/payment/tld-detection/scripts/detect_streams.py +542 -0
  79. package/skills/engineering/ensure-coverage/evals/evals.json +0 -125
  80. package/skills/engineering/rush-issues/evals/evals.json +0 -65
  81. package/skills/engineering/rush-release/evals/evals.json +0 -58
  82. package/skills/fullstack/shadcn/evals/evals.json +0 -90
  83. package/skills/payment/fraud-analysis/evals/evals.json +0 -40
  84. package/skills/payment/tld-detection/evals/evals.json +0 -107
  85. package/skills/payment/tld-detection/tests/test_detect_ladders.py +0 -132
@@ -1,132 +0,0 @@
1
- from collections import Counter
2
- import csv
3
- from decimal import Decimal
4
- import importlib.util
5
- import json
6
- from pathlib import Path
7
- import subprocess
8
- import sys
9
- import tempfile
10
- import unittest
11
-
12
-
13
- sys.dont_write_bytecode = True
14
- SCRIPT = Path(__file__).parents[1] / "scripts" / "detect_ladders.py"
15
- SPEC = importlib.util.spec_from_file_location("detect_ladders", SCRIPT)
16
- MODULE = importlib.util.module_from_spec(SPEC)
17
- assert SPEC.loader is not None
18
- sys.modules[SPEC.name] = MODULE
19
- SPEC.loader.exec_module(MODULE)
20
-
21
-
22
- def pair(amount: str) -> tuple[str, Decimal]:
23
- return "USD", Decimal(amount)
24
-
25
-
26
- class DetectLaddersTest(unittest.TestCase):
27
- def detect(self, values: dict[str, int], cap: str = "0.15"):
28
- counts = Counter({pair(amount): count for amount, count in values.items()})
29
- return MODULE.detect_ladders(
30
- counts,
31
- sum(counts.values()),
32
- MODULE.LadderConfig({"USD": Decimal(cap)}),
33
- )[0]
34
-
35
- def test_detects_tight_exact_ladder(self):
36
- ladders = self.detect({"28.03": 131, "56.04": 117, "112.09": 65, "224.19": 27, "70.00": 100})
37
- amounts = {amount for _, amount in ladders[0]["pairs"]}
38
- self.assertEqual(amounts, {Decimal("28.03"), Decimal("56.04"), Decimal("112.09"), Decimal("224.19")})
39
-
40
- def test_keeps_multiple_exact_anchors_at_one_level(self):
41
- ladders = self.detect({"14.41": 34, "14.52": 25, "28.94": 43, "57.96": 29, "80.00": 100})
42
- levels = next(ladder["levels"] for ladder in ladders if pair("28.94") in ladder["pairs"])
43
- self.assertEqual(levels[-1], {pair("14.41"), pair("14.52")})
44
-
45
- def test_rejects_upper_amount_outside_absolute_cap(self):
46
- ladders = self.detect({"14.41": 34, "28.94": 43, "57.96": 29, "116.85": 29, "80.00": 100})
47
- ladder = next(ladder for ladder in ladders if pair("14.41") in ladder["pairs"])
48
- self.assertNotIn(pair("116.85"), ladder["pairs"])
49
-
50
- def test_requires_explicit_currency_cap(self):
51
- with self.assertRaisesRegex(ValueError, "missing absolute residual cap"):
52
- MODULE.detect_ladders(Counter({pair("10"): 10}), 10, MODULE.LadderConfig({}))
53
-
54
- def test_ignores_currency_below_rung_pool_threshold(self):
55
- counts = Counter({pair("10"): 1000, ("EUR", Decimal("9.99")): 1})
56
- ladders, _ = MODULE.detect_ladders(counts, 1001, MODULE.LadderConfig({"USD": Decimal("0.15")}))
57
- self.assertEqual(ladders, [])
58
-
59
- def test_sensitivity_reports_coverage_by_cap(self):
60
- counts = Counter({pair("14.41"): 34, pair("28.94"): 43, pair("57.96"): 29})
61
- rows = MODULE.sensitivity_analysis(
62
- counts,
63
- sum(counts.values()),
64
- MODULE.LadderConfig({"USD": Decimal("0.15")}),
65
- "USD",
66
- [Decimal("0.10"), Decimal("0.15")],
67
- )
68
- self.assertEqual([row["ladder_count"] for row in rows], [0, 1])
69
-
70
- def test_keeps_below_threshold_family_out_of_clusters(self):
71
- counts = Counter({pair("10"): 32, pair("20"): 32, pair("40"): 32})
72
- ladders, metadata = MODULE.detect_ladders(
73
- counts,
74
- 96,
75
- MODULE.LadderConfig({"USD": Decimal("0.15")}),
76
- )
77
- self.assertEqual(ladders, [])
78
- self.assertEqual(metadata["below_threshold"][0]["attempts"], 96)
79
-
80
- def test_same_pair_can_belong_to_different_partitions(self):
81
- entries = []
82
- amounts = (("10", 40), ("20", 40), ("40", 40))
83
- for partition in ("alpha", "beta"):
84
- for amount, count in amounts:
85
- entries.extend([(partition, pair(amount))] * count)
86
- _, ladders, _ = MODULE.detect_partitioned_ladders(
87
- entries,
88
- MODULE.LadderConfig({"USD": Decimal("0.15")}),
89
- )
90
- self.assertEqual(len(ladders), 2)
91
- self.assertEqual({ladder["partition"] for ladder in ladders}, {"alpha", "beta"})
92
-
93
- def test_requires_at_least_three_levels(self):
94
- self.assertEqual(self.detect({"10": 60, "20": 60, "70": 100}), [])
95
-
96
- def test_rejects_non_two_x_relationships(self):
97
- self.assertEqual(self.detect({"10": 40, "30": 40, "90": 40}), [])
98
-
99
- def test_cli_attributes_bin_country_after_descriptor_ladder(self):
100
- with tempfile.TemporaryDirectory() as directory:
101
- csv_path = Path(directory) / "clean.csv"
102
- with csv_path.open("w", encoding="utf-8", newline="") as handle:
103
- writer = csv.DictWriter(handle, fieldnames=["descriptor", "country", "currency", "amount"])
104
- writer.writeheader()
105
- for country in ("US", "GB"):
106
- for amount in ("10", "20", "40"):
107
- writer.writerows(
108
- {"descriptor": "ACME", "country": country, "currency": "USD", "amount": amount}
109
- for _ in range(20)
110
- )
111
- result = subprocess.run(
112
- [
113
- sys.executable,
114
- str(SCRIPT),
115
- str(csv_path),
116
- "--descriptor-column", "descriptor",
117
- "--bin-country-column", "country",
118
- "--currency-column", "currency",
119
- "--amount-column", "amount",
120
- "--cap", "USD=0.15",
121
- ],
122
- check=True,
123
- capture_output=True,
124
- text=True,
125
- )
126
- payload = json.loads(result.stdout)
127
- self.assertEqual(len(payload["ladders"]), 1)
128
- self.assertEqual(payload["ladders"][0]["bin_country_components"], {"US": 60, "GB": 60})
129
-
130
-
131
- if __name__ == "__main__":
132
- unittest.main()