@torus-engineering/tas-kit 1.11.1 → 1.12.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 (123) hide show
  1. package/.tas/README.md +334 -334
  2. package/{.claude → .tas/_platform/claude-code}/settings.json +0 -12
  3. package/{.claude → .tas/_platform}/hooks/code-quality.js +1 -1
  4. package/{.claude → .tas/_platform}/hooks/session-end.js +20 -25
  5. package/{.claude → .tas}/commands/ado-create.md +5 -4
  6. package/{.claude → .tas}/commands/ado-delete.md +5 -4
  7. package/{.claude → .tas}/commands/ado-update.md +5 -4
  8. package/{.claude → .tas}/commands/tas-adr.md +3 -3
  9. package/{.claude → .tas}/commands/tas-apitest-plan.md +2 -2
  10. package/{.claude → .tas}/commands/tas-apitest.md +4 -4
  11. package/{.claude → .tas}/commands/tas-bug.md +6 -6
  12. package/{.claude → .tas}/commands/tas-design.md +3 -3
  13. package/{.claude → .tas}/commands/tas-dev.md +11 -14
  14. package/{.claude → .tas}/commands/tas-epic.md +3 -3
  15. package/{.claude → .tas}/commands/tas-feature.md +4 -4
  16. package/{.claude → .tas}/commands/tas-fix.md +5 -5
  17. package/{.claude → .tas}/commands/tas-init.md +1 -1
  18. package/{.claude → .tas}/commands/tas-plan.md +198 -198
  19. package/{.claude → .tas}/commands/tas-prd.md +3 -3
  20. package/{.claude → .tas}/commands/tas-review.md +17 -15
  21. package/{.claude → .tas}/commands/tas-sad.md +3 -3
  22. package/{.claude → .tas}/commands/tas-security.md +4 -4
  23. package/{.claude → .tas}/commands/tas-story.md +3 -3
  24. package/.tas/platforms.json +5 -0
  25. package/.tas/project-status-example.yaml +17 -17
  26. package/{.claude/skills/ado-integration/SKILL.md → .tas/rules/ado-integration.md} +5 -15
  27. package/{.claude/skills/api-design/SKILL.md → .tas/rules/common/api-design.md} +517 -530
  28. package/{.claude → .tas}/rules/common/code-review.md +30 -6
  29. package/{.claude/rules/common/post-review-agent.md → .tas/rules/common/post-implementation-review.md} +51 -49
  30. package/{.claude → .tas}/rules/common/project-status.md +80 -80
  31. package/{.claude → .tas}/rules/common/stack-detection.md +29 -29
  32. package/.tas/{checklists → rules/common}/story-done.md +12 -5
  33. package/{.claude/skills/tas-tdd/SKILL.md → .tas/rules/common/tdd.md} +4 -38
  34. package/{.claude → .tas}/rules/common/testing.md +3 -8
  35. package/{.claude → .tas}/rules/common/token-logging.md +36 -27
  36. package/{.claude → .tas}/rules/csharp/api-testing.md +171 -171
  37. package/{.claude → .tas}/rules/csharp/coding-style.md +0 -2
  38. package/{.claude → .tas}/rules/csharp/security.md +10 -0
  39. package/{.claude → .tas}/rules/python/coding-style.md +0 -2
  40. package/{.claude → .tas}/rules/typescript/coding-style.md +0 -2
  41. package/.tas/rules/typescript/patterns.md +142 -0
  42. package/.tas/rules/typescript/security.md +88 -0
  43. package/{.claude → .tas}/rules/typescript/testing.md +0 -4
  44. package/{.claude → .tas}/rules/web/coding-style.md +0 -2
  45. package/.tas/tas-example.yaml +125 -126
  46. package/.tas/templates/ADR.md +47 -47
  47. package/.tas/templates/Bug.md +67 -67
  48. package/.tas/templates/Design-Spec.md +36 -36
  49. package/.tas/templates/Epic.md +46 -46
  50. package/.tas/templates/Feature.md +1 -1
  51. package/.tas/templates/Security-Report.md +27 -27
  52. package/.tas/tools/tas-ado-readme.md +169 -169
  53. package/.tas/tools/tas-ado.py +621 -621
  54. package/README.md +334 -334
  55. package/bin/cli.js +91 -73
  56. package/lib/adapters/antigravity.js +137 -0
  57. package/lib/adapters/claude-code.js +35 -0
  58. package/lib/adapters/codex.js +163 -0
  59. package/lib/adapters/cursor.js +80 -0
  60. package/lib/adapters/index.js +20 -0
  61. package/lib/adapters/utils.js +81 -0
  62. package/lib/deleted-files.json +99 -0
  63. package/lib/install.js +403 -327
  64. package/package.json +4 -3
  65. package/.claude/agents/code-reviewer.md +0 -41
  66. package/.claude/agents/e2e-runner.md +0 -61
  67. package/.claude/agents/planner.md +0 -82
  68. package/.claude/agents/tdd-guide.md +0 -84
  69. package/.claude/commands/tas-verify.md +0 -51
  70. package/.claude/rules/typescript/patterns.md +0 -62
  71. package/.claude/rules/typescript/security.md +0 -28
  72. package/.claude/settings.local.json +0 -38
  73. package/.claude/skills/ai-regression-testing/SKILL.md +0 -364
  74. package/.claude/skills/architecture-decision-records/SKILL.md +0 -184
  75. package/.claude/skills/benchmark/SKILL.md +0 -98
  76. package/.claude/skills/browser-qa/SKILL.md +0 -92
  77. package/.claude/skills/canary-watch/SKILL.md +0 -104
  78. package/.claude/skills/js-backend-patterns/SKILL.md +0 -603
  79. package/.claude/skills/tas-conventions/SKILL.md +0 -65
  80. package/.claude/skills/tas-implementation-complete/SKILL.md +0 -100
  81. package/.claude/skills/token-logger/SKILL.md +0 -19
  82. package/.tas/checklists/code-review.md +0 -29
  83. package/.tas/checklists/security.md +0 -21
  84. /package/{.claude → .tas}/agents/architect.md +0 -0
  85. /package/{.claude → .tas}/agents/aws-reviewer.md +0 -0
  86. /package/{.claude → .tas}/agents/build-resolver.md +0 -0
  87. /package/{.claude → .tas}/agents/code-explorer.md +0 -0
  88. /package/{.claude → .tas}/agents/csharp-reviewer.md +0 -0
  89. /package/{.claude → .tas}/agents/database-reviewer.md +0 -0
  90. /package/{.claude → .tas}/agents/doc-updater.md +0 -0
  91. /package/{.claude → .tas}/agents/python-reviewer.md +0 -0
  92. /package/{.claude → .tas}/agents/security-reviewer.md +0 -0
  93. /package/{.claude → .tas}/agents/typescript-reviewer.md +0 -0
  94. /package/{.claude → .tas}/commands/ado-get.md +0 -0
  95. /package/{.claude → .tas}/commands/ado-status.md +0 -0
  96. /package/{.claude → .tas}/commands/tas-brainstorm.md +0 -0
  97. /package/{.claude → .tas}/commands/tas-e2e-mobile.md +0 -0
  98. /package/{.claude → .tas}/commands/tas-e2e-web.md +0 -0
  99. /package/{.claude → .tas}/commands/tas-e2e.md +0 -0
  100. /package/{.claude → .tas}/commands/tas-functest-mobile.md +0 -0
  101. /package/{.claude → .tas}/commands/tas-functest-web.md +0 -0
  102. /package/{.claude → .tas}/commands/tas-functest.md +0 -0
  103. /package/{.claude → .tas}/commands/tas-spec.md +0 -0
  104. /package/{.claude → .tas}/commands/tas-status.md +0 -0
  105. /package/{.claude → .tas}/rules/.gitkeep +0 -0
  106. /package/{.claude → .tas}/rules/common/hooks.md +0 -0
  107. /package/{.claude → .tas}/rules/common/patterns.md +0 -0
  108. /package/{.claude → .tas}/rules/common/security.md +0 -0
  109. /package/{.claude → .tas}/rules/csharp/hooks.md +0 -0
  110. /package/{.claude → .tas}/rules/csharp/patterns.md +0 -0
  111. /package/{.claude → .tas}/rules/csharp/testing.md +0 -0
  112. /package/{.claude → .tas}/rules/python/hooks.md +0 -0
  113. /package/{.claude → .tas}/rules/python/patterns.md +0 -0
  114. /package/{.claude → .tas}/rules/python/security.md +0 -0
  115. /package/{.claude → .tas}/rules/python/testing.md +0 -0
  116. /package/{.claude → .tas}/rules/typescript/hooks.md +0 -0
  117. /package/{.claude → .tas}/rules/web/design-quality.md +0 -0
  118. /package/{.claude → .tas}/rules/web/hooks.md +0 -0
  119. /package/{.claude → .tas}/rules/web/patterns.md +0 -0
  120. /package/{.claude → .tas}/rules/web/performance.md +0 -0
  121. /package/{.claude → .tas}/rules/web/security.md +0 -0
  122. /package/{.claude → .tas}/rules/web/testing.md +0 -0
  123. /package/{CLAUDE-Example.md → .tas/templates/AGENTS.md} +0 -0
@@ -0,0 +1,81 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+
4
+ export async function exists(p) {
5
+ return fs.access(p).then(() => true).catch(() => false);
6
+ }
7
+
8
+ export async function copyDir(src, dest) {
9
+ await fs.cp(src, dest, { recursive: true });
10
+ }
11
+
12
+ export async function listFilesRecursive(dir, ext = '') {
13
+ const results = [];
14
+ async function walk(current) {
15
+ const entries = await fs.readdir(current, { withFileTypes: true });
16
+ for (const e of entries) {
17
+ const full = path.join(current, e.name);
18
+ if (e.isDirectory()) await walk(full);
19
+ else if (!ext || e.name.endsWith(ext)) results.push(full);
20
+ }
21
+ }
22
+ await walk(dir);
23
+ return results;
24
+ }
25
+
26
+ export function parseFrontmatter(content) {
27
+ if (!content.startsWith('---')) return { frontmatter: {}, body: content };
28
+ const end = content.indexOf('\n---', 3);
29
+ if (end === -1) return { frontmatter: {}, body: content };
30
+ const yaml = content.slice(4, end);
31
+ const body = content.slice(end + 4).trimStart();
32
+ const frontmatter = {};
33
+ for (const line of yaml.split('\n')) {
34
+ const colon = line.indexOf(':');
35
+ if (colon > 0) {
36
+ const key = line.slice(0, colon).trim();
37
+ let val = line.slice(colon + 1).trim();
38
+ // handle multiline: only single-line values here
39
+ val = val.replace(/^["']|["']$/g, '');
40
+ frontmatter[key] = val;
41
+ }
42
+ }
43
+ return { frontmatter, body };
44
+ }
45
+
46
+ // Extract description: first non-empty, non-heading line after the H1
47
+ export function extractDescription(content, fallback = '') {
48
+ const lines = content.split('\n');
49
+ let pastH1 = false;
50
+ for (const line of lines) {
51
+ const trimmed = line.trim();
52
+ if (!pastH1) {
53
+ if (trimmed.startsWith('# ')) pastH1 = true;
54
+ continue;
55
+ }
56
+ if (trimmed && !trimmed.startsWith('#') && !trimmed.startsWith('|') && !trimmed.startsWith('-')) {
57
+ return trimmed.replace(/^Role:\s*/i, '').replace(/\*\*/g, '').slice(0, 150);
58
+ }
59
+ }
60
+ return fallback;
61
+ }
62
+
63
+ // Extract H1 title from markdown
64
+ export function extractH1(content) {
65
+ const match = content.match(/^#\s+(.+)$/m);
66
+ return match ? match[1].trim() : '';
67
+ }
68
+
69
+ // Extract command name from first line: "# /tas-dev $ARGUMENTS" → "tas-dev"
70
+ export function extractCommandName(content) {
71
+ const match = content.match(/^#\s+\/(\S+)/);
72
+ return match ? match[1] : '';
73
+ }
74
+
75
+ // Escape a string for use in YAML frontmatter value (single-line)
76
+ export function yamlValue(str) {
77
+ if (/[:#\[\]{},|>&*!'"\\]/.test(str) || str.includes('\n')) {
78
+ return `"${str.replace(/"/g, '\\"')}"`;
79
+ }
80
+ return str;
81
+ }
@@ -32,5 +32,104 @@
32
32
  ],
33
33
  "1.9.0": [
34
34
  ".claude/commands/tas-api-test.md"
35
+ ],
36
+ "1.12.0": [
37
+ ".claude/rules/.gitkeep",
38
+ ".claude/rules/common/code-review.md",
39
+ ".claude/rules/common/hooks.md",
40
+ ".claude/rules/common/patterns.md",
41
+ ".claude/rules/common/post-review-agent.md",
42
+ ".claude/rules/common/project-status.md",
43
+ ".claude/rules/common/security.md",
44
+ ".claude/rules/common/stack-detection.md",
45
+ ".claude/rules/common/testing.md",
46
+ ".claude/rules/common/token-logging.md",
47
+ ".claude/rules/csharp/api-testing.md",
48
+ ".claude/rules/csharp/coding-style.md",
49
+ ".claude/rules/csharp/hooks.md",
50
+ ".claude/rules/csharp/patterns.md",
51
+ ".claude/rules/csharp/security.md",
52
+ ".claude/rules/csharp/testing.md",
53
+ ".claude/rules/python/coding-style.md",
54
+ ".claude/rules/python/hooks.md",
55
+ ".claude/rules/python/patterns.md",
56
+ ".claude/rules/python/security.md",
57
+ ".claude/rules/python/testing.md",
58
+ ".claude/rules/typescript/coding-style.md",
59
+ ".claude/rules/typescript/hooks.md",
60
+ ".claude/rules/typescript/patterns.md",
61
+ ".claude/rules/typescript/security.md",
62
+ ".claude/rules/typescript/testing.md",
63
+ ".claude/rules/web/coding-style.md",
64
+ ".claude/rules/web/design-quality.md",
65
+ ".claude/rules/web/hooks.md",
66
+ ".claude/rules/web/patterns.md",
67
+ ".claude/rules/web/performance.md",
68
+ ".claude/rules/web/security.md",
69
+ ".claude/rules/web/testing.md",
70
+ ".tas/rules/common/post-review-agent.md",
71
+ ".claude/skills/ado-integration/SKILL.md",
72
+ ".claude/skills/ai-regression-testing/SKILL.md",
73
+ ".claude/skills/api-design/SKILL.md",
74
+ ".claude/skills/architecture-decision-records/SKILL.md",
75
+ ".claude/skills/benchmark/SKILL.md",
76
+ ".claude/skills/browser-qa/SKILL.md",
77
+ ".claude/skills/canary-watch/SKILL.md",
78
+ ".claude/skills/js-backend-patterns/SKILL.md",
79
+ ".claude/skills/tas-conventions/SKILL.md",
80
+ ".claude/skills/tas-implementation-complete/SKILL.md",
81
+ ".claude/skills/tas-tdd/SKILL.md",
82
+ ".claude/skills/token-logger/SKILL.md",
83
+ ".claude/agents/planner.md",
84
+ ".claude/agents/tdd-guide.md",
85
+ ".claude/agents/code-reviewer.md",
86
+ ".claude/agents/e2e-runner.md",
87
+ ".claude/commands/tas-verify.md",
88
+ ".tas/checklists/code-review.md",
89
+ ".tas/checklists/security.md",
90
+ ".tas/checklists/story-done.md",
91
+ ".claude/agents/architect.md",
92
+ ".claude/agents/aws-reviewer.md",
93
+ ".claude/agents/build-resolver.md",
94
+ ".claude/agents/code-explorer.md",
95
+ ".claude/agents/csharp-reviewer.md",
96
+ ".claude/agents/database-reviewer.md",
97
+ ".claude/agents/doc-updater.md",
98
+ ".claude/agents/python-reviewer.md",
99
+ ".claude/agents/security-reviewer.md",
100
+ ".claude/agents/typescript-reviewer.md",
101
+ ".claude/commands/ado-create.md",
102
+ ".claude/commands/ado-delete.md",
103
+ ".claude/commands/ado-get.md",
104
+ ".claude/commands/ado-status.md",
105
+ ".claude/commands/ado-update.md",
106
+ ".claude/commands/tas-adr.md",
107
+ ".claude/commands/tas-apitest-plan.md",
108
+ ".claude/commands/tas-apitest.md",
109
+ ".claude/commands/tas-brainstorm.md",
110
+ ".claude/commands/tas-bug.md",
111
+ ".claude/commands/tas-design.md",
112
+ ".claude/commands/tas-dev.md",
113
+ ".claude/commands/tas-e2e-mobile.md",
114
+ ".claude/commands/tas-e2e-web.md",
115
+ ".claude/commands/tas-e2e.md",
116
+ ".claude/commands/tas-epic.md",
117
+ ".claude/commands/tas-feature.md",
118
+ ".claude/commands/tas-fix.md",
119
+ ".claude/commands/tas-functest-mobile.md",
120
+ ".claude/commands/tas-functest-web.md",
121
+ ".claude/commands/tas-functest.md",
122
+ ".claude/commands/tas-init.md",
123
+ ".claude/commands/tas-plan.md",
124
+ ".claude/commands/tas-prd.md",
125
+ ".claude/commands/tas-review.md",
126
+ ".claude/commands/tas-sad.md",
127
+ ".claude/commands/tas-security.md",
128
+ ".claude/commands/tas-spec.md",
129
+ ".claude/commands/tas-status.md",
130
+ ".claude/commands/tas-story.md",
131
+ ".claude/hooks/code-quality.js",
132
+ ".claude/hooks/session-end.js",
133
+ ".claude/settings.json"
35
134
  ]
36
135
  }