@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.
- package/README.md +543 -0
- package/definitions/starter/code-validator.agent.yaml +134 -0
- package/definitions/starter/docs-validator.agent.yaml +142 -0
- package/definitions/starter/public-interface-validator.agent.yaml +138 -0
- package/definitions/starter/security-analyst.agent.yaml +144 -0
- package/definitions/starter/test-architect.agent.yaml +137 -0
- package/dist/ai/AIProvider.d.ts +198 -0
- package/dist/ai/AIProvider.d.ts.map +1 -0
- package/dist/ai/AIProvider.js +557 -0
- package/dist/ai/AIProvider.js.map +1 -0
- package/dist/ai/ModelCatalog.d.ts +78 -0
- package/dist/ai/ModelCatalog.d.ts.map +1 -0
- package/dist/ai/ModelCatalog.js +193 -0
- package/dist/ai/ModelCatalog.js.map +1 -0
- package/dist/ai/ShellExecutor.d.ts +42 -0
- package/dist/ai/ShellExecutor.d.ts.map +1 -0
- package/dist/ai/ShellExecutor.js +62 -0
- package/dist/ai/ShellExecutor.js.map +1 -0
- package/dist/ai/TokenBudgetTracker.d.ts +49 -0
- package/dist/ai/TokenBudgetTracker.d.ts.map +1 -0
- package/dist/ai/TokenBudgetTracker.js +61 -0
- package/dist/ai/TokenBudgetTracker.js.map +1 -0
- package/dist/ai/ToolAdapter.d.ts +25 -0
- package/dist/ai/ToolAdapter.d.ts.map +1 -0
- package/dist/ai/ToolAdapter.js +135 -0
- package/dist/ai/ToolAdapter.js.map +1 -0
- package/dist/ai/index.d.ts +6 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/client/UluOpsClient.d.ts +111 -0
- package/dist/client/UluOpsClient.d.ts.map +1 -0
- package/dist/client/UluOpsClient.js +329 -0
- package/dist/client/UluOpsClient.js.map +1 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +9 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors/UluOpsError.d.ts +10 -0
- package/dist/errors/UluOpsError.d.ts.map +1 -0
- package/dist/errors/UluOpsError.js +13 -0
- package/dist/errors/UluOpsError.js.map +1 -0
- package/dist/errors/index.d.ts +64 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +93 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/executor/AgentExecutor.d.ts +57 -0
- package/dist/executor/AgentExecutor.d.ts.map +1 -0
- package/dist/executor/AgentExecutor.js +331 -0
- package/dist/executor/AgentExecutor.js.map +1 -0
- package/dist/executor/CommandExecutor.d.ts +33 -0
- package/dist/executor/CommandExecutor.d.ts.map +1 -0
- package/dist/executor/CommandExecutor.js +183 -0
- package/dist/executor/CommandExecutor.js.map +1 -0
- package/dist/executor/PipelineExecutor.d.ts +55 -0
- package/dist/executor/PipelineExecutor.d.ts.map +1 -0
- package/dist/executor/PipelineExecutor.js +273 -0
- package/dist/executor/PipelineExecutor.js.map +1 -0
- package/dist/executor/ToolHandler.d.ts +47 -0
- package/dist/executor/ToolHandler.d.ts.map +1 -0
- package/dist/executor/ToolHandler.js +615 -0
- package/dist/executor/ToolHandler.js.map +1 -0
- package/dist/executor/WorkflowExecutor.d.ts +55 -0
- package/dist/executor/WorkflowExecutor.d.ts.map +1 -0
- package/dist/executor/WorkflowExecutor.js +368 -0
- package/dist/executor/WorkflowExecutor.js.map +1 -0
- package/dist/executor/preflight.d.ts +8 -0
- package/dist/executor/preflight.d.ts.map +1 -0
- package/dist/executor/preflight.js +102 -0
- package/dist/executor/preflight.js.map +1 -0
- package/dist/executor/symbols.d.ts +13 -0
- package/dist/executor/symbols.d.ts.map +1 -0
- package/dist/executor/symbols.js +102 -0
- package/dist/executor/symbols.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/OutputExtractor.d.ts +52 -0
- package/dist/parser/OutputExtractor.d.ts.map +1 -0
- package/dist/parser/OutputExtractor.js +818 -0
- package/dist/parser/OutputExtractor.js.map +1 -0
- package/dist/parser/outputSchemas.d.ts +223 -0
- package/dist/parser/outputSchemas.d.ts.map +1 -0
- package/dist/parser/outputSchemas.js +73 -0
- package/dist/parser/outputSchemas.js.map +1 -0
- package/dist/registry/RegistryClient.d.ts +75 -0
- package/dist/registry/RegistryClient.d.ts.map +1 -0
- package/dist/registry/RegistryClient.js +419 -0
- package/dist/registry/RegistryClient.js.map +1 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +2 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/types/agent.d.ts +406 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +2 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts +14 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js +2 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/command.d.ts +153 -0
- package/dist/types/command.d.ts.map +1 -0
- package/dist/types/command.js +2 -0
- package/dist/types/command.js.map +1 -0
- package/dist/types/config.d.ts +136 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/execution.d.ts +172 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +2 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/parser.d.ts +75 -0
- package/dist/types/parser.d.ts.map +1 -0
- package/dist/types/parser.js +2 -0
- package/dist/types/parser.js.map +1 -0
- package/dist/types/pipeline.d.ts +155 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +2 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/types/registry.d.ts +232 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +2 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/tools.d.ts +29 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +2 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/validation.d.ts +237 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +2 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types/workflow.d.ts +131 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +2 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/formatError.d.ts +6 -0
- package/dist/utils/formatError.d.ts.map +1 -0
- package/dist/utils/formatError.js +10 -0
- package/dist/utils/formatError.js.map +1 -0
- package/dist/utils/parseRef.d.ts +11 -0
- package/dist/utils/parseRef.d.ts.map +1 -0
- package/dist/utils/parseRef.js +16 -0
- package/dist/utils/parseRef.js.map +1 -0
- package/dist/utils/sumTokenMetrics.d.ts +9 -0
- package/dist/utils/sumTokenMetrics.d.ts.map +1 -0
- package/dist/utils/sumTokenMetrics.js +20 -0
- package/dist/utils/sumTokenMetrics.js.map +1 -0
- package/dist/utils/topoSort.d.ts +24 -0
- package/dist/utils/topoSort.d.ts.map +1 -0
- package/dist/utils/topoSort.js +60 -0
- package/dist/utils/topoSort.js.map +1 -0
- package/dist/validation/ValidationClient.d.ts +51 -0
- package/dist/validation/ValidationClient.d.ts.map +1 -0
- package/dist/validation/ValidationClient.js +179 -0
- package/dist/validation/ValidationClient.js.map +1 -0
- package/dist/validation/index.d.ts +2 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- 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}}"
|