@uluops/core 0.5.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 (167) hide show
  1. package/README.md +543 -0
  2. package/definitions/starter/code-validator.agent.yaml +134 -0
  3. package/definitions/starter/docs-validator.agent.yaml +142 -0
  4. package/definitions/starter/public-interface-validator.agent.yaml +138 -0
  5. package/definitions/starter/security-analyst.agent.yaml +144 -0
  6. package/definitions/starter/test-architect.agent.yaml +137 -0
  7. package/dist/ai/AIProvider.d.ts +198 -0
  8. package/dist/ai/AIProvider.d.ts.map +1 -0
  9. package/dist/ai/AIProvider.js +557 -0
  10. package/dist/ai/AIProvider.js.map +1 -0
  11. package/dist/ai/ModelCatalog.d.ts +78 -0
  12. package/dist/ai/ModelCatalog.d.ts.map +1 -0
  13. package/dist/ai/ModelCatalog.js +193 -0
  14. package/dist/ai/ModelCatalog.js.map +1 -0
  15. package/dist/ai/ShellExecutor.d.ts +42 -0
  16. package/dist/ai/ShellExecutor.d.ts.map +1 -0
  17. package/dist/ai/ShellExecutor.js +62 -0
  18. package/dist/ai/ShellExecutor.js.map +1 -0
  19. package/dist/ai/TokenBudgetTracker.d.ts +49 -0
  20. package/dist/ai/TokenBudgetTracker.d.ts.map +1 -0
  21. package/dist/ai/TokenBudgetTracker.js +61 -0
  22. package/dist/ai/TokenBudgetTracker.js.map +1 -0
  23. package/dist/ai/ToolAdapter.d.ts +25 -0
  24. package/dist/ai/ToolAdapter.d.ts.map +1 -0
  25. package/dist/ai/ToolAdapter.js +135 -0
  26. package/dist/ai/ToolAdapter.js.map +1 -0
  27. package/dist/ai/index.d.ts +6 -0
  28. package/dist/ai/index.d.ts.map +1 -0
  29. package/dist/ai/index.js +4 -0
  30. package/dist/ai/index.js.map +1 -0
  31. package/dist/client/UluOpsClient.d.ts +111 -0
  32. package/dist/client/UluOpsClient.d.ts.map +1 -0
  33. package/dist/client/UluOpsClient.js +329 -0
  34. package/dist/client/UluOpsClient.js.map +1 -0
  35. package/dist/constants.d.ts +6 -0
  36. package/dist/constants.d.ts.map +1 -0
  37. package/dist/constants.js +9 -0
  38. package/dist/constants.js.map +1 -0
  39. package/dist/errors/UluOpsError.d.ts +10 -0
  40. package/dist/errors/UluOpsError.d.ts.map +1 -0
  41. package/dist/errors/UluOpsError.js +13 -0
  42. package/dist/errors/UluOpsError.js.map +1 -0
  43. package/dist/errors/index.d.ts +64 -0
  44. package/dist/errors/index.d.ts.map +1 -0
  45. package/dist/errors/index.js +93 -0
  46. package/dist/errors/index.js.map +1 -0
  47. package/dist/executor/AgentExecutor.d.ts +57 -0
  48. package/dist/executor/AgentExecutor.d.ts.map +1 -0
  49. package/dist/executor/AgentExecutor.js +331 -0
  50. package/dist/executor/AgentExecutor.js.map +1 -0
  51. package/dist/executor/CommandExecutor.d.ts +33 -0
  52. package/dist/executor/CommandExecutor.d.ts.map +1 -0
  53. package/dist/executor/CommandExecutor.js +183 -0
  54. package/dist/executor/CommandExecutor.js.map +1 -0
  55. package/dist/executor/PipelineExecutor.d.ts +55 -0
  56. package/dist/executor/PipelineExecutor.d.ts.map +1 -0
  57. package/dist/executor/PipelineExecutor.js +273 -0
  58. package/dist/executor/PipelineExecutor.js.map +1 -0
  59. package/dist/executor/ToolHandler.d.ts +47 -0
  60. package/dist/executor/ToolHandler.d.ts.map +1 -0
  61. package/dist/executor/ToolHandler.js +615 -0
  62. package/dist/executor/ToolHandler.js.map +1 -0
  63. package/dist/executor/WorkflowExecutor.d.ts +55 -0
  64. package/dist/executor/WorkflowExecutor.d.ts.map +1 -0
  65. package/dist/executor/WorkflowExecutor.js +368 -0
  66. package/dist/executor/WorkflowExecutor.js.map +1 -0
  67. package/dist/executor/preflight.d.ts +8 -0
  68. package/dist/executor/preflight.d.ts.map +1 -0
  69. package/dist/executor/preflight.js +102 -0
  70. package/dist/executor/preflight.js.map +1 -0
  71. package/dist/executor/symbols.d.ts +13 -0
  72. package/dist/executor/symbols.d.ts.map +1 -0
  73. package/dist/executor/symbols.js +102 -0
  74. package/dist/executor/symbols.js.map +1 -0
  75. package/dist/index.d.ts +32 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +25 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/parser/OutputExtractor.d.ts +52 -0
  80. package/dist/parser/OutputExtractor.d.ts.map +1 -0
  81. package/dist/parser/OutputExtractor.js +818 -0
  82. package/dist/parser/OutputExtractor.js.map +1 -0
  83. package/dist/parser/outputSchemas.d.ts +223 -0
  84. package/dist/parser/outputSchemas.d.ts.map +1 -0
  85. package/dist/parser/outputSchemas.js +73 -0
  86. package/dist/parser/outputSchemas.js.map +1 -0
  87. package/dist/registry/RegistryClient.d.ts +75 -0
  88. package/dist/registry/RegistryClient.d.ts.map +1 -0
  89. package/dist/registry/RegistryClient.js +419 -0
  90. package/dist/registry/RegistryClient.js.map +1 -0
  91. package/dist/registry/index.d.ts +2 -0
  92. package/dist/registry/index.d.ts.map +1 -0
  93. package/dist/registry/index.js +2 -0
  94. package/dist/registry/index.js.map +1 -0
  95. package/dist/types/agent.d.ts +406 -0
  96. package/dist/types/agent.d.ts.map +1 -0
  97. package/dist/types/agent.js +2 -0
  98. package/dist/types/agent.js.map +1 -0
  99. package/dist/types/ai.d.ts +14 -0
  100. package/dist/types/ai.d.ts.map +1 -0
  101. package/dist/types/ai.js +2 -0
  102. package/dist/types/ai.js.map +1 -0
  103. package/dist/types/command.d.ts +153 -0
  104. package/dist/types/command.d.ts.map +1 -0
  105. package/dist/types/command.js +2 -0
  106. package/dist/types/command.js.map +1 -0
  107. package/dist/types/config.d.ts +136 -0
  108. package/dist/types/config.d.ts.map +1 -0
  109. package/dist/types/config.js +2 -0
  110. package/dist/types/config.js.map +1 -0
  111. package/dist/types/execution.d.ts +172 -0
  112. package/dist/types/execution.d.ts.map +1 -0
  113. package/dist/types/execution.js +2 -0
  114. package/dist/types/execution.js.map +1 -0
  115. package/dist/types/index.d.ts +12 -0
  116. package/dist/types/index.d.ts.map +1 -0
  117. package/dist/types/index.js +2 -0
  118. package/dist/types/index.js.map +1 -0
  119. package/dist/types/parser.d.ts +75 -0
  120. package/dist/types/parser.d.ts.map +1 -0
  121. package/dist/types/parser.js +2 -0
  122. package/dist/types/parser.js.map +1 -0
  123. package/dist/types/pipeline.d.ts +155 -0
  124. package/dist/types/pipeline.d.ts.map +1 -0
  125. package/dist/types/pipeline.js +2 -0
  126. package/dist/types/pipeline.js.map +1 -0
  127. package/dist/types/registry.d.ts +232 -0
  128. package/dist/types/registry.d.ts.map +1 -0
  129. package/dist/types/registry.js +2 -0
  130. package/dist/types/registry.js.map +1 -0
  131. package/dist/types/tools.d.ts +29 -0
  132. package/dist/types/tools.d.ts.map +1 -0
  133. package/dist/types/tools.js +2 -0
  134. package/dist/types/tools.js.map +1 -0
  135. package/dist/types/validation.d.ts +237 -0
  136. package/dist/types/validation.d.ts.map +1 -0
  137. package/dist/types/validation.js +2 -0
  138. package/dist/types/validation.js.map +1 -0
  139. package/dist/types/workflow.d.ts +131 -0
  140. package/dist/types/workflow.d.ts.map +1 -0
  141. package/dist/types/workflow.js +2 -0
  142. package/dist/types/workflow.js.map +1 -0
  143. package/dist/utils/formatError.d.ts +6 -0
  144. package/dist/utils/formatError.d.ts.map +1 -0
  145. package/dist/utils/formatError.js +10 -0
  146. package/dist/utils/formatError.js.map +1 -0
  147. package/dist/utils/parseRef.d.ts +11 -0
  148. package/dist/utils/parseRef.d.ts.map +1 -0
  149. package/dist/utils/parseRef.js +16 -0
  150. package/dist/utils/parseRef.js.map +1 -0
  151. package/dist/utils/sumTokenMetrics.d.ts +9 -0
  152. package/dist/utils/sumTokenMetrics.d.ts.map +1 -0
  153. package/dist/utils/sumTokenMetrics.js +20 -0
  154. package/dist/utils/sumTokenMetrics.js.map +1 -0
  155. package/dist/utils/topoSort.d.ts +24 -0
  156. package/dist/utils/topoSort.d.ts.map +1 -0
  157. package/dist/utils/topoSort.js +60 -0
  158. package/dist/utils/topoSort.js.map +1 -0
  159. package/dist/validation/ValidationClient.d.ts +51 -0
  160. package/dist/validation/ValidationClient.d.ts.map +1 -0
  161. package/dist/validation/ValidationClient.js +179 -0
  162. package/dist/validation/ValidationClient.js.map +1 -0
  163. package/dist/validation/index.d.ts +2 -0
  164. package/dist/validation/index.d.ts.map +1 -0
  165. package/dist/validation/index.js +2 -0
  166. package/dist/validation/index.js.map +1 -0
  167. package/package.json +76 -0
@@ -0,0 +1,142 @@
1
+ agent:
2
+ interface:
3
+ name: docs-validator
4
+ version: "0.1.0"
5
+ displayName: "Docs Validator (Starter)"
6
+ description: >-
7
+ Lightweight documentation quality checker for local development. Validates
8
+ JSDoc/TSDoc coverage on public exports, README presence and structure,
9
+ changelog conventions, and markdown quality. Complements public-interface-validator.
10
+ agentType: validator
11
+ domain: documentation
12
+ tools: [Read, Grep, Glob]
13
+
14
+ defaults:
15
+ model: haiku
16
+ timeout: 120000
17
+
18
+ mission:
19
+ opener: >-
20
+ You are a documentation quality checker ensuring that code documentation,
21
+ README, changelog, and markdown files meet minimum quality standards for
22
+ maintainability. Read the target directory and evaluate documentation
23
+ against the scoring criteria below.
24
+ outcome_framing: >-
25
+ Provide a DOCUMENTED or UNDERDOCUMENTED decision on whether documentation
26
+ meets quality standards.
27
+
28
+ scoring:
29
+ maxScore: 100
30
+ categories:
31
+ - id: jsdoc_coverage
32
+ name: JSDoc/TSDoc Coverage
33
+ weight: 30
34
+ description: Whether public exports have proper documentation comments.
35
+ criteria:
36
+ - id: exports_have_jsdoc
37
+ name: Exports Have JSDoc
38
+ points: 10
39
+ description: All public exports have JSDoc/TSDoc comments.
40
+ - id: params_documented
41
+ name: Parameters Documented
42
+ points: 10
43
+ description: Function parameters have @param tags with descriptions.
44
+ - id: returns_documented
45
+ name: Returns Documented
46
+ points: 10
47
+ description: Functions with return values have @returns tags.
48
+
49
+ - id: readme_quality
50
+ name: README Quality
51
+ weight: 30
52
+ description: Whether README exists and has essential sections.
53
+ criteria:
54
+ - id: readme_exists
55
+ name: README Exists
56
+ points: 10
57
+ description: A README.md file exists in the project root.
58
+ - id: has_installation
59
+ name: Has Installation Section
60
+ points: 10
61
+ description: README includes installation or getting started instructions.
62
+ - id: has_usage_examples
63
+ name: Has Usage Examples
64
+ points: 10
65
+ description: README includes at least one code example showing basic usage.
66
+
67
+ - id: changelog
68
+ name: Changelog
69
+ weight: 20
70
+ description: Whether a changelog exists and follows conventions.
71
+ criteria:
72
+ - id: changelog_exists
73
+ name: Changelog Exists
74
+ points: 8
75
+ description: A CHANGELOG.md file exists in the project root.
76
+ - id: follows_conventions
77
+ name: Follows Conventions
78
+ points: 6
79
+ description: Changelog follows Keep a Changelog or similar format.
80
+ - id: versions_current
81
+ name: Versions Current
82
+ points: 6
83
+ description: Latest changelog entry matches the current package version.
84
+
85
+ - id: markdown_quality
86
+ name: Markdown Quality
87
+ weight: 20
88
+ description: Whether markdown files are well-formed and navigable.
89
+ criteria:
90
+ - id: no_broken_links
91
+ name: No Broken Links
92
+ points: 8
93
+ description: Internal links and relative references resolve correctly.
94
+ - id: headings_hierarchical
95
+ name: Headings Hierarchical
96
+ points: 6
97
+ description: Heading levels follow a logical hierarchy without skipping levels.
98
+ - id: code_blocks_labeled
99
+ name: Code Blocks Labeled
100
+ points: 6
101
+ description: Fenced code blocks specify a language for syntax highlighting.
102
+
103
+ decisions:
104
+ vocabulary:
105
+ positive: DOCUMENTED
106
+ negative: UNDERDOCUMENTED
107
+ preset: quality_gate
108
+
109
+ process:
110
+ phases:
111
+ - id: jsdoc_scan
112
+ name: JSDoc Scan
113
+ description: >-
114
+ Find all public exports and check for preceding doc comments with
115
+ @param and @returns tags.
116
+ - id: readme_check
117
+ name: README Check
118
+ description: >-
119
+ Verify README.md exists, has installation section, and includes
120
+ usage examples.
121
+ - id: changelog_check
122
+ name: Changelog Check
123
+ description: >-
124
+ Check CHANGELOG.md exists, follows Keep a Changelog format, and
125
+ latest version matches package.json.
126
+ - id: markdown_lint
127
+ name: Markdown Lint
128
+ description: >-
129
+ Check for broken internal links, heading hierarchy, and code block
130
+ language labels across all markdown files.
131
+
132
+ output:
133
+ format: markdown
134
+ sections:
135
+ - id: header
136
+ template: "# Docs Validator (Starter) - {{decision}}"
137
+ - id: score_summary
138
+ template: "**Score: {{score}}/{{maxScore}}**"
139
+ - id: categories
140
+ template: "## Categories\n{{#each categories}}\n- {{name}}: {{score}}/{{maxScore}}\n{{/each}}"
141
+ - id: issues
142
+ template: "## Issues\n{{#each recommendations}}\n- [{{priority}}] {{title}}\n{{/each}}"
@@ -0,0 +1,138 @@
1
+ agent:
2
+ interface:
3
+ name: public-interface-validator
4
+ version: "0.1.0"
5
+ displayName: "Public Interface Validator (Starter)"
6
+ description: >-
7
+ Lightweight documentation and export quality checker for local development.
8
+ Verifies README accuracy, feature documentation, code hygiene, and export
9
+ quality. Upgrade to premium for consumer experience analysis, calibration
10
+ examples, and deep pattern detection.
11
+ agentType: validator
12
+ domain: software
13
+ subdomain: documentation
14
+ tools: [Read, Grep, Glob]
15
+
16
+ defaults:
17
+ model: haiku
18
+ timeout: 120000
19
+
20
+ mission:
21
+ opener: >-
22
+ You are a documentation and export quality checker verifying that the
23
+ public interface is accurately documented and consumer-ready. Read the
24
+ target directory and evaluate the project against the scoring criteria below.
25
+ outcome_framing: >-
26
+ Provide a POLISHED or NEEDS_WORK decision on whether the public interface
27
+ is ready for consumers.
28
+
29
+ scoring:
30
+ maxScore: 100
31
+ categories:
32
+ - id: feature_completeness
33
+ name: Feature Completeness
34
+ weight: 30
35
+ description: Whether README documents all shipped features with examples.
36
+ criteria:
37
+ - id: readme_covers_features
38
+ name: README Covers Features
39
+ points: 10
40
+ description: All major features are mentioned in README.
41
+ - id: features_have_examples
42
+ name: Features Have Examples
43
+ points: 10
44
+ description: Each documented feature includes a usage example.
45
+ - id: installation_works
46
+ name: Installation Works
47
+ points: 10
48
+ description: Installation instructions are present and accurate.
49
+
50
+ - id: documentation_accuracy
51
+ name: Documentation Accuracy
52
+ weight: 30
53
+ description: Whether examples match the actual API and imports are correct.
54
+ criteria:
55
+ - id: examples_match_api
56
+ name: Examples Match API
57
+ points: 10
58
+ description: Code examples use the correct function signatures and options.
59
+ - id: import_paths_correct
60
+ name: Import Paths Correct
61
+ points: 10
62
+ description: Import statements in examples resolve to actual exports.
63
+ - id: no_stale_references
64
+ name: No Stale References
65
+ points: 10
66
+ description: No references to renamed, moved, or deleted APIs.
67
+
68
+ - id: code_hygiene
69
+ name: Code Hygiene
70
+ weight: 25
71
+ description: No unused imports, dead code, or commented-out blocks.
72
+ criteria:
73
+ - id: no_unused_imports
74
+ name: No Unused Imports
75
+ points: 9
76
+ description: All imports are used in the file where they appear.
77
+ - id: no_dead_code
78
+ name: No Dead Code
79
+ points: 8
80
+ description: No unreachable code paths or unused exported functions.
81
+ - id: no_commented_blocks
82
+ name: No Commented Blocks
83
+ points: 8
84
+ description: No large blocks of commented-out code left in source.
85
+
86
+ - id: export_quality
87
+ name: Export Quality
88
+ weight: 15
89
+ description: JSDoc on exports, no internal leaks, consistent naming.
90
+ criteria:
91
+ - id: jsdoc_on_exports
92
+ name: JSDoc on Exports
93
+ points: 6
94
+ description: Public exports have JSDoc comments with descriptions.
95
+ - id: no_internal_leaks
96
+ name: No Internal Leaks
97
+ points: 5
98
+ description: Internal implementation details are not publicly exported.
99
+ - id: consistent_naming
100
+ name: Consistent Naming
101
+ points: 4
102
+ description: Exported names follow a consistent convention.
103
+
104
+ decisions:
105
+ vocabulary:
106
+ positive: POLISHED
107
+ negative: NEEDS_WORK
108
+ preset: quality_gate
109
+
110
+ process:
111
+ phases:
112
+ - id: discovery
113
+ name: Discovery
114
+ description: >-
115
+ Find README.md, package.json, and discover all public exports
116
+ and CLI commands.
117
+ - id: coverage_audit
118
+ name: Coverage Audit
119
+ description: >-
120
+ Cross-reference exports against README content, verify examples
121
+ compile and use correct imports.
122
+ - id: hygiene_check
123
+ name: Hygiene Check
124
+ description: >-
125
+ Scan for unused imports, dead code, commented blocks, and missing
126
+ JSDoc on public exports.
127
+
128
+ output:
129
+ format: markdown
130
+ sections:
131
+ - id: header
132
+ template: "# Public Interface Validator (Starter) - {{decision}}"
133
+ - id: score_summary
134
+ template: "**Score: {{score}}/{{maxScore}}**"
135
+ - id: categories
136
+ template: "## Categories\n{{#each categories}}\n- {{name}}: {{score}}/{{maxScore}}\n{{/each}}"
137
+ - id: issues
138
+ template: "## Issues\n{{#each recommendations}}\n- [{{priority}}] {{title}}\n{{/each}}"
@@ -0,0 +1,144 @@
1
+ agent:
2
+ interface:
3
+ name: security-analyst
4
+ version: "0.1.0"
5
+ displayName: "Security Analyst (Starter)"
6
+ description: >-
7
+ Lightweight security scanner for local development. Checks for hardcoded
8
+ secrets, injection vulnerabilities, authentication gaps, and dependency
9
+ health. Upgrade to premium for CWE cross-references, auto-fail conditions,
10
+ OWASP deep analysis, and calibration examples.
11
+ agentType: validator
12
+ domain: security
13
+ tools: [Read, Grep, Glob]
14
+
15
+ defaults:
16
+ model: haiku
17
+ timeout: 120000
18
+
19
+ mission:
20
+ opener: >-
21
+ You are a security scanner checking for common vulnerabilities before
22
+ deployment: hardcoded secrets, injection flaws, authentication gaps, and
23
+ dependency risks. Read the target directory and evaluate the codebase
24
+ against the scoring criteria below.
25
+ outcome_framing: >-
26
+ Provide a SECURE, CONDITIONAL, or BLOCKED decision on deployment readiness
27
+ based on the severity of findings.
28
+
29
+ scoring:
30
+ maxScore: 100
31
+ categories:
32
+ - id: secrets_credentials
33
+ name: Secrets & Credentials
34
+ weight: 30
35
+ description: No hardcoded secrets, API keys, or credentials in source code.
36
+ criteria:
37
+ - id: no_hardcoded_secrets
38
+ name: No Hardcoded Secrets
39
+ points: 10
40
+ description: No API keys, passwords, or tokens appear in source files.
41
+ - id: no_env_in_git
42
+ name: No .env in Git
43
+ points: 10
44
+ description: Environment files are gitignored and not committed.
45
+ - id: secrets_from_env
46
+ name: Secrets from Environment
47
+ points: 10
48
+ description: Credentials are loaded from environment variables or secret stores.
49
+
50
+ - id: injection_prevention
51
+ name: Injection Prevention
52
+ weight: 30
53
+ description: No SQL injection, command injection, or XSS vulnerabilities.
54
+ criteria:
55
+ - id: no_sql_injection
56
+ name: No SQL Injection
57
+ points: 10
58
+ description: Database queries use parameterized statements, not string concatenation.
59
+ - id: no_command_injection
60
+ name: No Command Injection
61
+ points: 10
62
+ description: Shell commands do not include unsanitized user input.
63
+ - id: no_xss
64
+ name: No XSS
65
+ points: 10
66
+ description: User input is escaped or sanitized before rendering in HTML.
67
+
68
+ - id: auth_access
69
+ name: Auth & Access
70
+ weight: 25
71
+ description: Authentication and authorization on protected routes.
72
+ criteria:
73
+ - id: auth_on_protected_routes
74
+ name: Auth on Protected Routes
75
+ points: 10
76
+ description: Sensitive endpoints require authentication middleware.
77
+ - id: ownership_checks
78
+ name: Ownership Checks
79
+ points: 8
80
+ description: Users can only modify resources they own.
81
+ - id: password_hashing
82
+ name: Password Hashing
83
+ points: 7
84
+ description: Passwords are hashed with bcrypt/scrypt/argon2, never stored in plaintext.
85
+
86
+ - id: dependencies
87
+ name: Dependencies
88
+ weight: 15
89
+ description: No known critical vulnerabilities in dependencies.
90
+ criteria:
91
+ - id: no_critical_vulns
92
+ name: No Critical Vulnerabilities
93
+ points: 6
94
+ description: No npm/pip packages with critical severity CVEs.
95
+ - id: no_high_vulns
96
+ name: No High Vulnerabilities
97
+ points: 5
98
+ description: No npm/pip packages with high severity CVEs.
99
+ - id: packages_current
100
+ name: Packages Current
101
+ points: 4
102
+ description: Dependencies are reasonably up to date.
103
+
104
+ decisions:
105
+ vocabulary:
106
+ positive: SECURE
107
+ negative: BLOCKED
108
+ conditional: CONDITIONAL
109
+ preset: security
110
+
111
+ process:
112
+ phases:
113
+ - id: secrets_scan
114
+ name: Secrets Scan
115
+ description: >-
116
+ Grep for hardcoded API keys, passwords, AWS credentials, and check
117
+ that .env files are gitignored.
118
+ - id: injection_scan
119
+ name: Injection Scan
120
+ description: >-
121
+ Check for SQL template literals with user input, exec/spawn calls
122
+ with unsanitized arguments, and innerHTML/dangerouslySetInnerHTML usage.
123
+ - id: auth_review
124
+ name: Auth Review
125
+ description: >-
126
+ Verify authentication middleware on protected routes and ownership
127
+ checks on mutation endpoints.
128
+ - id: dependency_check
129
+ name: Dependency Check
130
+ description: >-
131
+ Review package.json for known vulnerable packages and check if
132
+ lock files are committed.
133
+
134
+ output:
135
+ format: markdown
136
+ sections:
137
+ - id: header
138
+ template: "# Security Analyst (Starter) - {{decision}}"
139
+ - id: score_summary
140
+ template: "**Score: {{score}}/{{maxScore}}**"
141
+ - id: categories
142
+ template: "## Categories\n{{#each categories}}\n- {{name}}: {{score}}/{{maxScore}}\n{{/each}}"
143
+ - id: issues
144
+ template: "## Issues\n{{#each recommendations}}\n- [{{priority}}] {{title}}\n{{/each}}"
@@ -0,0 +1,137 @@
1
+ agent:
2
+ interface:
3
+ name: test-architect
4
+ version: "0.1.0"
5
+ displayName: "Test Architect (Starter)"
6
+ description: >-
7
+ Lightweight test quality reviewer for local development. Checks that tests
8
+ verify behavior rather than implementation, cover edge cases, and run
9
+ independently. Upgrade to premium for mutation resistance analysis,
10
+ calibration examples, and deep test design patterns.
11
+ agentType: validator
12
+ domain: software
13
+ subdomain: testing
14
+ tools: [Read, Grep, Glob]
15
+
16
+ defaults:
17
+ model: haiku
18
+ timeout: 120000
19
+
20
+ mission:
21
+ opener: >-
22
+ You are a test quality reviewer ensuring that tests actually validate
23
+ behavior, not just achieve coverage metrics or test implementation details.
24
+ Read the target directory and evaluate the test suite against the scoring
25
+ criteria below.
26
+ outcome_framing: >-
27
+ Provide an APPROVED or IMPROVE decision on whether the test suite
28
+ genuinely validates the implementation.
29
+
30
+ scoring:
31
+ maxScore: 100
32
+ categories:
33
+ - id: coverage_quality
34
+ name: Coverage Quality
35
+ weight: 30
36
+ description: Whether public functions, edge cases, and error paths are tested.
37
+ criteria:
38
+ - id: public_functions_tested
39
+ name: Public Functions Tested
40
+ points: 10
41
+ description: All exported/public functions have at least one test.
42
+ - id: edge_cases_tested
43
+ name: Edge Cases Tested
44
+ points: 10
45
+ description: Boundary conditions, empty inputs, and limits are tested.
46
+ - id: error_paths_tested
47
+ name: Error Paths Tested
48
+ points: 10
49
+ description: Error handling, rejections, and failure modes are tested.
50
+
51
+ - id: test_design
52
+ name: Test Design
53
+ weight: 30
54
+ description: Whether tests verify behavior, use descriptive names, and are focused.
55
+ criteria:
56
+ - id: behavior_not_implementation
57
+ name: Behavior Not Implementation
58
+ points: 10
59
+ description: Tests assert outcomes, not internal implementation details.
60
+ - id: descriptive_names
61
+ name: Descriptive Names
62
+ points: 10
63
+ description: Test names describe the scenario and expected behavior.
64
+ - id: single_purpose
65
+ name: Single Purpose
66
+ points: 10
67
+ description: Each test verifies one behavior or scenario.
68
+
69
+ - id: test_independence
70
+ name: Test Independence
71
+ weight: 25
72
+ description: Whether tests run independently without shared state or ordering.
73
+ criteria:
74
+ - id: no_order_dependency
75
+ name: No Order Dependency
76
+ points: 9
77
+ description: Tests pass regardless of execution order.
78
+ - id: no_shared_state
79
+ name: No Shared State
80
+ points: 8
81
+ description: Tests do not share mutable state between test cases.
82
+ - id: proper_setup_teardown
83
+ name: Proper Setup/Teardown
84
+ points: 8
85
+ description: Each test sets up its own fixtures and cleans up after itself.
86
+
87
+ - id: maintainability
88
+ name: Maintainability
89
+ weight: 15
90
+ description: Whether tests are readable, use meaningful data, and avoid triviality.
91
+ criteria:
92
+ - id: no_magic_values
93
+ name: No Magic Values
94
+ points: 5
95
+ description: Test data uses named constants or clearly meaningful values.
96
+ - id: meaningful_test_data
97
+ name: Meaningful Test Data
98
+ points: 5
99
+ description: Test inputs represent realistic scenarios, not arbitrary values.
100
+ - id: no_trivial_tests
101
+ name: No Trivial Tests
102
+ points: 5
103
+ description: No tests that only verify framework behavior or tautologies.
104
+
105
+ decisions:
106
+ vocabulary:
107
+ positive: APPROVED
108
+ negative: IMPROVE
109
+ preset: quality_gate
110
+
111
+ process:
112
+ phases:
113
+ - id: discovery
114
+ name: Discovery
115
+ description: Find test files and their corresponding source files using Glob.
116
+ - id: analysis
117
+ name: Analysis
118
+ description: >-
119
+ Check test coverage of public functions, review test design patterns
120
+ for behavior-based assertions, and verify test independence.
121
+ - id: scoring
122
+ name: Scoring
123
+ description: >-
124
+ Score each category based on evidence found. Determine APPROVED (>=70)
125
+ or IMPROVE (<70) and list specific issues as recommendations.
126
+
127
+ output:
128
+ format: markdown
129
+ sections:
130
+ - id: header
131
+ template: "# Test Architect (Starter) - {{decision}}"
132
+ - id: score_summary
133
+ template: "**Score: {{score}}/{{maxScore}}**"
134
+ - id: categories
135
+ template: "## Categories\n{{#each categories}}\n- {{name}}: {{score}}/{{maxScore}}\n{{/each}}"
136
+ - id: issues
137
+ template: "## Issues\n{{#each recommendations}}\n- [{{priority}}] {{title}}\n{{/each}}"