@waratahlabs/canopy 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/LICENSE +21 -0
- package/README.md +323 -0
- package/SKILL.md +97 -0
- package/demo/data/openclaw-demo.tc.json +397 -0
- package/demo/data/openclaw-nemoclaw-demo.tc.json +475 -0
- package/demo/index.html +556 -0
- package/dist/adapters/a2a.d.ts +82 -0
- package/dist/adapters/a2a.d.ts.map +1 -0
- package/dist/adapters/a2a.js +215 -0
- package/dist/adapters/a2a.js.map +1 -0
- package/dist/adapters/a2a.test.d.ts +2 -0
- package/dist/adapters/a2a.test.d.ts.map +1 -0
- package/dist/adapters/a2a.test.js +196 -0
- package/dist/adapters/a2a.test.js.map +1 -0
- package/dist/adapters/langfuse.d.ts +28 -0
- package/dist/adapters/langfuse.d.ts.map +1 -0
- package/dist/adapters/langfuse.js +192 -0
- package/dist/adapters/langfuse.js.map +1 -0
- package/dist/adapters/n8n.d.ts +4 -0
- package/dist/adapters/n8n.d.ts.map +1 -0
- package/dist/adapters/n8n.js +89 -0
- package/dist/adapters/n8n.js.map +1 -0
- package/dist/adapters/openclaw.d.ts +58 -0
- package/dist/adapters/openclaw.d.ts.map +1 -0
- package/dist/adapters/openclaw.js +275 -0
- package/dist/adapters/openclaw.js.map +1 -0
- package/dist/adapters/types.d.ts +33 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/aivss/atlas/coverage-matrix.d.ts +12 -0
- package/dist/aivss/atlas/coverage-matrix.d.ts.map +1 -0
- package/dist/aivss/atlas/coverage-matrix.js +272 -0
- package/dist/aivss/atlas/coverage-matrix.js.map +1 -0
- package/dist/aivss/atlas/loader.d.ts +28 -0
- package/dist/aivss/atlas/loader.d.ts.map +1 -0
- package/dist/aivss/atlas/loader.js +126 -0
- package/dist/aivss/atlas/loader.js.map +1 -0
- package/dist/aivss/atlas/loader.test.d.ts +11 -0
- package/dist/aivss/atlas/loader.test.d.ts.map +1 -0
- package/dist/aivss/atlas/loader.test.js +111 -0
- package/dist/aivss/atlas/loader.test.js.map +1 -0
- package/dist/aivss/atlas/resolve-path.d.ts +34 -0
- package/dist/aivss/atlas/resolve-path.d.ts.map +1 -0
- package/dist/aivss/atlas/resolve-path.js +58 -0
- package/dist/aivss/atlas/resolve-path.js.map +1 -0
- package/dist/aivss/batch/batch-builder.d.ts +11 -0
- package/dist/aivss/batch/batch-builder.d.ts.map +1 -0
- package/dist/aivss/batch/batch-builder.js +75 -0
- package/dist/aivss/batch/batch-builder.js.map +1 -0
- package/dist/aivss/index.d.ts +21 -0
- package/dist/aivss/index.d.ts.map +1 -0
- package/dist/aivss/index.js +19 -0
- package/dist/aivss/index.js.map +1 -0
- package/dist/aivss/knowledge-base/kb-client.d.ts +9 -0
- package/dist/aivss/knowledge-base/kb-client.d.ts.map +1 -0
- package/dist/aivss/knowledge-base/kb-client.js +139 -0
- package/dist/aivss/knowledge-base/kb-client.js.map +1 -0
- package/dist/aivss/knowledge-base/kb-types.d.ts +21 -0
- package/dist/aivss/knowledge-base/kb-types.d.ts.map +1 -0
- package/dist/aivss/knowledge-base/kb-types.js +2 -0
- package/dist/aivss/knowledge-base/kb-types.js.map +1 -0
- package/dist/aivss/knowledge-base/search-builder.d.ts +7 -0
- package/dist/aivss/knowledge-base/search-builder.d.ts.map +1 -0
- package/dist/aivss/knowledge-base/search-builder.js +119 -0
- package/dist/aivss/knowledge-base/search-builder.js.map +1 -0
- package/dist/aivss/metrics/aa.d.ts +3 -0
- package/dist/aivss/metrics/aa.d.ts.map +1 -0
- package/dist/aivss/metrics/aa.js +26 -0
- package/dist/aivss/metrics/aa.js.map +1 -0
- package/dist/aivss/metrics/ad.d.ts +3 -0
- package/dist/aivss/metrics/ad.d.ts.map +1 -0
- package/dist/aivss/metrics/ad.js +30 -0
- package/dist/aivss/metrics/ad.js.map +1 -0
- package/dist/aivss/metrics/cs.d.ts +3 -0
- package/dist/aivss/metrics/cs.d.ts.map +1 -0
- package/dist/aivss/metrics/cs.js +50 -0
- package/dist/aivss/metrics/cs.js.map +1 -0
- package/dist/aivss/metrics/dc.d.ts +3 -0
- package/dist/aivss/metrics/dc.d.ts.map +1 -0
- package/dist/aivss/metrics/dc.js +30 -0
- package/dist/aivss/metrics/dc.js.map +1 -0
- package/dist/aivss/metrics/ds.d.ts +3 -0
- package/dist/aivss/metrics/ds.d.ts.map +1 -0
- package/dist/aivss/metrics/ds.js +26 -0
- package/dist/aivss/metrics/ds.js.map +1 -0
- package/dist/aivss/metrics/ei.d.ts +3 -0
- package/dist/aivss/metrics/ei.d.ts.map +1 -0
- package/dist/aivss/metrics/ei.js +30 -0
- package/dist/aivss/metrics/ei.js.map +1 -0
- package/dist/aivss/metrics/gv.d.ts +3 -0
- package/dist/aivss/metrics/gv.d.ts.map +1 -0
- package/dist/aivss/metrics/gv.js +34 -0
- package/dist/aivss/metrics/gv.js.map +1 -0
- package/dist/aivss/metrics/ll.d.ts +3 -0
- package/dist/aivss/metrics/ll.d.ts.map +1 -0
- package/dist/aivss/metrics/ll.js +30 -0
- package/dist/aivss/metrics/ll.js.map +1 -0
- package/dist/aivss/metrics/mr.d.ts +3 -0
- package/dist/aivss/metrics/mr.d.ts.map +1 -0
- package/dist/aivss/metrics/mr.js +26 -0
- package/dist/aivss/metrics/mr.js.map +1 -0
- package/dist/aivss/metrics/shared.d.ts +22 -0
- package/dist/aivss/metrics/shared.d.ts.map +1 -0
- package/dist/aivss/metrics/shared.js +70 -0
- package/dist/aivss/metrics/shared.js.map +1 -0
- package/dist/aivss/prompts/base-system-prompt.d.ts +2 -0
- package/dist/aivss/prompts/base-system-prompt.d.ts.map +1 -0
- package/dist/aivss/prompts/base-system-prompt.js +31 -0
- package/dist/aivss/prompts/base-system-prompt.js.map +1 -0
- package/dist/aivss/prompts/prompt-composer.d.ts +13 -0
- package/dist/aivss/prompts/prompt-composer.d.ts.map +1 -0
- package/dist/aivss/prompts/prompt-composer.js +21 -0
- package/dist/aivss/prompts/prompt-composer.js.map +1 -0
- package/dist/aivss/scoring/a2a-corpus.test.d.ts +28 -0
- package/dist/aivss/scoring/a2a-corpus.test.d.ts.map +1 -0
- package/dist/aivss/scoring/a2a-corpus.test.js +109 -0
- package/dist/aivss/scoring/a2a-corpus.test.js.map +1 -0
- package/dist/aivss/scoring/determinism.test.d.ts +16 -0
- package/dist/aivss/scoring/determinism.test.d.ts.map +1 -0
- package/dist/aivss/scoring/determinism.test.js +169 -0
- package/dist/aivss/scoring/determinism.test.js.map +1 -0
- package/dist/aivss/scoring/heuristic-scorer.d.ts +21 -0
- package/dist/aivss/scoring/heuristic-scorer.d.ts.map +1 -0
- package/dist/aivss/scoring/heuristic-scorer.js +299 -0
- package/dist/aivss/scoring/heuristic-scorer.js.map +1 -0
- package/dist/aivss/scoring/heuristic-scorer.test.d.ts +8 -0
- package/dist/aivss/scoring/heuristic-scorer.test.d.ts.map +1 -0
- package/dist/aivss/scoring/heuristic-scorer.test.js +150 -0
- package/dist/aivss/scoring/heuristic-scorer.test.js.map +1 -0
- package/dist/aivss/scoring/scoring-mode.d.ts +48 -0
- package/dist/aivss/scoring/scoring-mode.d.ts.map +1 -0
- package/dist/aivss/scoring/scoring-mode.js +64 -0
- package/dist/aivss/scoring/scoring-mode.js.map +1 -0
- package/dist/aivss/scoring/v4-engine.d.ts +15 -0
- package/dist/aivss/scoring/v4-engine.d.ts.map +1 -0
- package/dist/aivss/scoring/v4-engine.js +84 -0
- package/dist/aivss/scoring/v4-engine.js.map +1 -0
- package/dist/aivss/scoring/v4-engine.test.d.ts +16 -0
- package/dist/aivss/scoring/v4-engine.test.d.ts.map +1 -0
- package/dist/aivss/scoring/v4-engine.test.js +156 -0
- package/dist/aivss/scoring/v4-engine.test.js.map +1 -0
- package/dist/aivss/types.d.ts +92 -0
- package/dist/aivss/types.d.ts.map +1 -0
- package/dist/aivss/types.js +25 -0
- package/dist/aivss/types.js.map +1 -0
- package/dist/baseline/baseline.test.d.ts +2 -0
- package/dist/baseline/baseline.test.d.ts.map +1 -0
- package/dist/baseline/baseline.test.js +219 -0
- package/dist/baseline/baseline.test.js.map +1 -0
- package/dist/baseline/diff.d.ts +42 -0
- package/dist/baseline/diff.d.ts.map +1 -0
- package/dist/baseline/diff.js +124 -0
- package/dist/baseline/diff.js.map +1 -0
- package/dist/baseline/store.d.ts +51 -0
- package/dist/baseline/store.d.ts.map +1 -0
- package/dist/baseline/store.js +92 -0
- package/dist/baseline/store.js.map +1 -0
- package/dist/batch/anthropic-batch-runner.d.ts +50 -0
- package/dist/batch/anthropic-batch-runner.d.ts.map +1 -0
- package/dist/batch/anthropic-batch-runner.js +91 -0
- package/dist/batch/anthropic-batch-runner.js.map +1 -0
- package/dist/batch/bedrock-batch-runner.d.ts +90 -0
- package/dist/batch/bedrock-batch-runner.d.ts.map +1 -0
- package/dist/batch/bedrock-batch-runner.js +199 -0
- package/dist/batch/bedrock-batch-runner.js.map +1 -0
- package/dist/batch/providers/anthropic.d.ts +55 -0
- package/dist/batch/providers/anthropic.d.ts.map +1 -0
- package/dist/batch/providers/anthropic.js +103 -0
- package/dist/batch/providers/anthropic.js.map +1 -0
- package/dist/batch/providers/bedrock.d.ts +31 -0
- package/dist/batch/providers/bedrock.d.ts.map +1 -0
- package/dist/batch/providers/bedrock.js +42 -0
- package/dist/batch/providers/bedrock.js.map +1 -0
- package/dist/batch/providers/harness.d.ts +36 -0
- package/dist/batch/providers/harness.d.ts.map +1 -0
- package/dist/batch/providers/harness.js +65 -0
- package/dist/batch/providers/harness.js.map +1 -0
- package/dist/batch/providers/harness.test.d.ts +7 -0
- package/dist/batch/providers/harness.test.d.ts.map +1 -0
- package/dist/batch/providers/harness.test.js +84 -0
- package/dist/batch/providers/harness.test.js.map +1 -0
- package/dist/batch/providers/index.d.ts +82 -0
- package/dist/batch/providers/index.d.ts.map +1 -0
- package/dist/batch/providers/index.js +82 -0
- package/dist/batch/providers/index.js.map +1 -0
- package/dist/batch/providers/ollama.d.ts +68 -0
- package/dist/batch/providers/ollama.d.ts.map +1 -0
- package/dist/batch/providers/ollama.js +108 -0
- package/dist/batch/providers/ollama.js.map +1 -0
- package/dist/batch/response-parser.d.ts +45 -0
- package/dist/batch/response-parser.d.ts.map +1 -0
- package/dist/batch/response-parser.js +161 -0
- package/dist/batch/response-parser.js.map +1 -0
- package/dist/batch/types.d.ts +87 -0
- package/dist/batch/types.d.ts.map +1 -0
- package/dist/batch/types.js +8 -0
- package/dist/batch/types.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1037 -0
- package/dist/cli.js.map +1 -0
- package/dist/examples/a2a-assessment.d.ts +20 -0
- package/dist/examples/a2a-assessment.d.ts.map +1 -0
- package/dist/examples/a2a-assessment.js +115 -0
- package/dist/examples/a2a-assessment.js.map +1 -0
- package/dist/examples/batch-assessment.d.ts +18 -0
- package/dist/examples/batch-assessment.d.ts.map +1 -0
- package/dist/examples/batch-assessment.js +112 -0
- package/dist/examples/batch-assessment.js.map +1 -0
- package/dist/examples/batch-submission-flow.d.ts +2 -0
- package/dist/examples/batch-submission-flow.d.ts.map +1 -0
- package/dist/examples/batch-submission-flow.js +279 -0
- package/dist/examples/batch-submission-flow.js.map +1 -0
- package/dist/examples/demo-agent-definition.json +58 -0
- package/dist/examples/langfuse-assessment.d.ts +2 -0
- package/dist/examples/langfuse-assessment.d.ts.map +1 -0
- package/dist/examples/langfuse-assessment.js +46 -0
- package/dist/examples/langfuse-assessment.js.map +1 -0
- package/dist/examples/model-eval.d.ts +25 -0
- package/dist/examples/model-eval.d.ts.map +1 -0
- package/dist/examples/model-eval.js +94 -0
- package/dist/examples/model-eval.js.map +1 -0
- package/dist/examples/openclaw-assessment.d.ts +17 -0
- package/dist/examples/openclaw-assessment.d.ts.map +1 -0
- package/dist/examples/openclaw-assessment.js +79 -0
- package/dist/examples/openclaw-assessment.js.map +1 -0
- package/dist/examples/simple-assessment.d.ts +2 -0
- package/dist/examples/simple-assessment.d.ts.map +1 -0
- package/dist/examples/simple-assessment.js +146 -0
- package/dist/examples/simple-assessment.js.map +1 -0
- package/dist/examples/threat-model-demo.d.ts +2 -0
- package/dist/examples/threat-model-demo.d.ts.map +1 -0
- package/dist/examples/threat-model-demo.js +103 -0
- package/dist/examples/threat-model-demo.js.map +1 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +155 -0
- package/dist/index.js.map +1 -0
- package/dist/output/likec4-generator.d.ts +43 -0
- package/dist/output/likec4-generator.d.ts.map +1 -0
- package/dist/output/likec4-generator.js +287 -0
- package/dist/output/likec4-generator.js.map +1 -0
- package/dist/output/slot-filler.d.ts +6 -0
- package/dist/output/slot-filler.d.ts.map +1 -0
- package/dist/output/slot-filler.js +71 -0
- package/dist/output/slot-filler.js.map +1 -0
- package/dist/output/tc-assembler.d.ts +30 -0
- package/dist/output/tc-assembler.d.ts.map +1 -0
- package/dist/output/tc-assembler.js +227 -0
- package/dist/output/tc-assembler.js.map +1 -0
- package/dist/output/tc-types.d.ts +41 -0
- package/dist/output/tc-types.d.ts.map +1 -0
- package/dist/output/tc-types.js +5 -0
- package/dist/output/tc-types.js.map +1 -0
- package/dist/output/tc-validator.test.d.ts +9 -0
- package/dist/output/tc-validator.test.d.ts.map +1 -0
- package/dist/output/tc-validator.test.js +194 -0
- package/dist/output/tc-validator.test.js.map +1 -0
- package/dist/providers/anthropic.d.ts +9 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +30 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/bedrock.d.ts +9 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +38 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +14 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/types.d.ts +12 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +5 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/references/acsc-risks.d.ts +18 -0
- package/dist/references/acsc-risks.d.ts.map +1 -0
- package/dist/references/acsc-risks.js +232 -0
- package/dist/references/acsc-risks.js.map +1 -0
- package/dist/references/aicm.d.ts +41 -0
- package/dist/references/aicm.d.ts.map +1 -0
- package/dist/references/aicm.js +447 -0
- package/dist/references/aicm.js.map +1 -0
- package/dist/references/dstg-meaid.d.ts +59 -0
- package/dist/references/dstg-meaid.d.ts.map +1 -0
- package/dist/references/dstg-meaid.js +352 -0
- package/dist/references/dstg-meaid.js.map +1 -0
- package/dist/references/index.d.ts +20 -0
- package/dist/references/index.d.ts.map +1 -0
- package/dist/references/index.js +31 -0
- package/dist/references/index.js.map +1 -0
- package/dist/references/nemoclaw.d.ts +48 -0
- package/dist/references/nemoclaw.d.ts.map +1 -0
- package/dist/references/nemoclaw.js +140 -0
- package/dist/references/nemoclaw.js.map +1 -0
- package/dist/references/nist-ai-rmf.d.ts +31 -0
- package/dist/references/nist-ai-rmf.d.ts.map +1 -0
- package/dist/references/nist-ai-rmf.js +627 -0
- package/dist/references/nist-ai-rmf.js.map +1 -0
- package/dist/references/owasp-agentic-top10.d.ts +50 -0
- package/dist/references/owasp-agentic-top10.d.ts.map +1 -0
- package/dist/references/owasp-agentic-top10.js +202 -0
- package/dist/references/owasp-agentic-top10.js.map +1 -0
- package/dist/references/registry-parity.test.d.ts +17 -0
- package/dist/references/registry-parity.test.d.ts.map +1 -0
- package/dist/references/registry-parity.test.js +87 -0
- package/dist/references/registry-parity.test.js.map +1 -0
- package/dist/references/registry.d.ts +90 -0
- package/dist/references/registry.d.ts.map +1 -0
- package/dist/references/registry.js +29 -0
- package/dist/references/registry.js.map +1 -0
- package/dist/tools/model-eval.d.ts +97 -0
- package/dist/tools/model-eval.d.ts.map +1 -0
- package/dist/tools/model-eval.js +307 -0
- package/dist/tools/model-eval.js.map +1 -0
- package/package.json +105 -0
- package/schemas/threat-composer-v1.schema.json +966 -0
- package/vendor/atlas-release/ATLAS-2026.07.yaml +17877 -0
- package/vendor/atlas-release/README.md +41 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama BatchProvider implementation.
|
|
3
|
+
*
|
|
4
|
+
* Runs AIVSS metric assessments against any Ollama-compatible model. Works with
|
|
5
|
+
* both local Ollama (http://localhost:11434) and Ollama cloud (https://ollama.com/api).
|
|
6
|
+
*
|
|
7
|
+
* Unlike Bedrock/Anthropic, Ollama has no native async batch API — this provider
|
|
8
|
+
* runs requests with configurable concurrency against the /api/chat endpoint.
|
|
9
|
+
* Concurrency defaults to 1 (safe for local single-GPU setups); raise it for
|
|
10
|
+
* multi-GPU or cloud endpoints.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Local
|
|
14
|
+
* const provider = createBatchProvider({ type: "ollama", model: "llama3.2" });
|
|
15
|
+
*
|
|
16
|
+
* // Ollama cloud
|
|
17
|
+
* const provider = createBatchProvider({
|
|
18
|
+
* type: "ollama",
|
|
19
|
+
* model: "llama3.2",
|
|
20
|
+
* baseUrl: "https://ollama.com/api",
|
|
21
|
+
* apiKey: process.env.OLLAMA_API_KEY,
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Multi-GPU local with higher concurrency
|
|
25
|
+
* const provider = createBatchProvider({
|
|
26
|
+
* type: "ollama",
|
|
27
|
+
* model: "qwen2.5:7b",
|
|
28
|
+
* concurrency: 4,
|
|
29
|
+
* });
|
|
30
|
+
*/
|
|
31
|
+
import type { BatchProvider, BatchProviderOptions } from "../types.js";
|
|
32
|
+
import type { AgentDefinition, MetricAssessmentResponse } from "../../aivss/types.js";
|
|
33
|
+
export interface OllamaBatchConfig {
|
|
34
|
+
/**
|
|
35
|
+
* Model tag to run (e.g. "llama3.2", "qwen2.5:7b", "mistral", "gemma2:9b").
|
|
36
|
+
* Must be pulled locally first: `ollama pull <model>`.
|
|
37
|
+
*/
|
|
38
|
+
model: string;
|
|
39
|
+
/**
|
|
40
|
+
* API base URL. Use "https://ollama.com/api" for cloud, or a custom host.
|
|
41
|
+
* Default: "http://localhost:11434"
|
|
42
|
+
*/
|
|
43
|
+
baseUrl?: string;
|
|
44
|
+
/**
|
|
45
|
+
* API key for cloud endpoints. Not required for local Ollama.
|
|
46
|
+
* Sent as `Authorization: Bearer <apiKey>`.
|
|
47
|
+
*/
|
|
48
|
+
apiKey?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Number of concurrent inference requests. Default: 1.
|
|
51
|
+
* Raise for cloud or multi-GPU setups; keep at 1 for single-GPU local.
|
|
52
|
+
*/
|
|
53
|
+
concurrency?: number;
|
|
54
|
+
/** Max tokens per completion. Default: 2048. */
|
|
55
|
+
maxTokens?: number;
|
|
56
|
+
}
|
|
57
|
+
export declare class OllamaBatchProvider implements BatchProvider {
|
|
58
|
+
readonly name: string;
|
|
59
|
+
private readonly baseUrl;
|
|
60
|
+
private readonly model;
|
|
61
|
+
private readonly apiKey;
|
|
62
|
+
private readonly concurrency;
|
|
63
|
+
private readonly maxTokens;
|
|
64
|
+
constructor(config: OllamaBatchConfig);
|
|
65
|
+
runBatch(agents: AgentDefinition[], options: BatchProviderOptions): Promise<MetricAssessmentResponse[]>;
|
|
66
|
+
private callOllama;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/batch/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAc,MAAM,sBAAsB,CAAC;AAKlG,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+BD,qBAAa,mBAAoB,YAAW,aAAa;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,iBAAiB;IAS/B,QAAQ,CACZ,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,wBAAwB,EAAE,CAAC;YAoCxB,UAAU;CA+CzB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama BatchProvider implementation.
|
|
3
|
+
*
|
|
4
|
+
* Runs AIVSS metric assessments against any Ollama-compatible model. Works with
|
|
5
|
+
* both local Ollama (http://localhost:11434) and Ollama cloud (https://ollama.com/api).
|
|
6
|
+
*
|
|
7
|
+
* Unlike Bedrock/Anthropic, Ollama has no native async batch API — this provider
|
|
8
|
+
* runs requests with configurable concurrency against the /api/chat endpoint.
|
|
9
|
+
* Concurrency defaults to 1 (safe for local single-GPU setups); raise it for
|
|
10
|
+
* multi-GPU or cloud endpoints.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Local
|
|
14
|
+
* const provider = createBatchProvider({ type: "ollama", model: "llama3.2" });
|
|
15
|
+
*
|
|
16
|
+
* // Ollama cloud
|
|
17
|
+
* const provider = createBatchProvider({
|
|
18
|
+
* type: "ollama",
|
|
19
|
+
* model: "llama3.2",
|
|
20
|
+
* baseUrl: "https://ollama.com/api",
|
|
21
|
+
* apiKey: process.env.OLLAMA_API_KEY,
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Multi-GPU local with higher concurrency
|
|
25
|
+
* const provider = createBatchProvider({
|
|
26
|
+
* type: "ollama",
|
|
27
|
+
* model: "qwen2.5:7b",
|
|
28
|
+
* concurrency: 4,
|
|
29
|
+
* });
|
|
30
|
+
*/
|
|
31
|
+
import { buildBatchRequests } from "../../aivss/batch/batch-builder.js";
|
|
32
|
+
import { parseMetricResponse } from "../response-parser.js";
|
|
33
|
+
// ── Provider ─────────────────────────────────────────────────────────────────
|
|
34
|
+
export class OllamaBatchProvider {
|
|
35
|
+
constructor(config) {
|
|
36
|
+
this.model = config.model;
|
|
37
|
+
this.baseUrl = (config.baseUrl ?? "http://localhost:11434").replace(/\/$/, "");
|
|
38
|
+
this.apiKey = config.apiKey;
|
|
39
|
+
this.concurrency = config.concurrency ?? 1;
|
|
40
|
+
this.maxTokens = config.maxTokens ?? 2048;
|
|
41
|
+
this.name = `ollama-${config.model}`;
|
|
42
|
+
}
|
|
43
|
+
async runBatch(agents, options) {
|
|
44
|
+
const maxTokens = options.maxTokens ?? this.maxTokens;
|
|
45
|
+
const temperature = options.temperature ?? 0;
|
|
46
|
+
// Build all prompts using the existing batch-builder (reuses metric prompt logic)
|
|
47
|
+
const requests = await buildBatchRequests({
|
|
48
|
+
agents,
|
|
49
|
+
useKnowledgeBase: false,
|
|
50
|
+
model: this.model,
|
|
51
|
+
maxTokens,
|
|
52
|
+
temperature,
|
|
53
|
+
});
|
|
54
|
+
const total = requests.length;
|
|
55
|
+
let completed = 0;
|
|
56
|
+
const responses = [];
|
|
57
|
+
// Run with bounded concurrency
|
|
58
|
+
const queue = [...requests];
|
|
59
|
+
const workers = Array.from({ length: Math.min(this.concurrency, queue.length) }, async () => {
|
|
60
|
+
while (queue.length > 0) {
|
|
61
|
+
const req = queue.shift();
|
|
62
|
+
if (!req)
|
|
63
|
+
break;
|
|
64
|
+
const text = await this.callOllama(req.params.system, req.params.messages[0]?.content ?? "", maxTokens, temperature);
|
|
65
|
+
responses.push(parseMetricResponse(req.custom_id, text));
|
|
66
|
+
completed++;
|
|
67
|
+
options.onProgress?.(`${completed}/${total} — ${req.custom_id}`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
await Promise.all(workers);
|
|
71
|
+
return responses;
|
|
72
|
+
}
|
|
73
|
+
async callOllama(system, user, maxTokens, temperature) {
|
|
74
|
+
const body = {
|
|
75
|
+
model: this.model,
|
|
76
|
+
messages: [
|
|
77
|
+
{ role: "system", content: system },
|
|
78
|
+
{ role: "user", content: user },
|
|
79
|
+
],
|
|
80
|
+
stream: false,
|
|
81
|
+
options: {
|
|
82
|
+
num_predict: maxTokens,
|
|
83
|
+
temperature,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
const headers = {
|
|
87
|
+
"Content-Type": "application/json",
|
|
88
|
+
};
|
|
89
|
+
if (this.apiKey) {
|
|
90
|
+
headers["Authorization"] = `Bearer ${this.apiKey}`;
|
|
91
|
+
}
|
|
92
|
+
const resp = await fetch(`${this.baseUrl}/api/chat`, {
|
|
93
|
+
method: "POST",
|
|
94
|
+
headers,
|
|
95
|
+
body: JSON.stringify(body),
|
|
96
|
+
});
|
|
97
|
+
if (!resp.ok) {
|
|
98
|
+
const text = await resp.text().catch(() => "");
|
|
99
|
+
throw new Error(`Ollama API error ${resp.status} for model "${this.model}": ${text.slice(0, 200)}`);
|
|
100
|
+
}
|
|
101
|
+
const data = (await resp.json());
|
|
102
|
+
if (data.error) {
|
|
103
|
+
throw new Error(`Ollama model "${this.model}" error: ${data.error}`);
|
|
104
|
+
}
|
|
105
|
+
return data.message?.content ?? "";
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/batch/providers/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse raw Nova model output text into MetricAssessmentResponse.
|
|
3
|
+
*
|
|
4
|
+
* Each metric prompt instructs the model to return a JSON object with this shape:
|
|
5
|
+
* {
|
|
6
|
+
* "metricCode": "MR",
|
|
7
|
+
* "subCategoryScores": { "Evasion Resistance": "High", ... },
|
|
8
|
+
* "findings": ["finding text", ...],
|
|
9
|
+
* "deploymentBlocker": false,
|
|
10
|
+
* "atlasTechniques": ["AML.T0043", ...]
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* This parser is lenient: it strips markdown fences, falls back to Medium
|
|
14
|
+
* for any sub-category it cannot parse, and never throws — it returns a
|
|
15
|
+
* degraded response instead so one bad record doesn't abort the whole run.
|
|
16
|
+
*/
|
|
17
|
+
import type { MetricAssessmentResponse } from "../aivss/types.js";
|
|
18
|
+
/**
|
|
19
|
+
* Parse a single Nova output text for one metric assessment.
|
|
20
|
+
*
|
|
21
|
+
* @param recordId The batch recordId (e.g. "sales-agent-01-MR") — used for error messages.
|
|
22
|
+
* @param rawText Raw text from Nova's output.message.content[0].text
|
|
23
|
+
* @returns A MetricAssessmentResponse with agentId decoded from recordId.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseMetricResponse(recordId: string, rawText: string): MetricAssessmentResponse;
|
|
26
|
+
/**
|
|
27
|
+
* Parse all output records from a Bedrock batch job into MetricAssessmentResponse[].
|
|
28
|
+
* Records that errored at the Bedrock level (errorCode set) get a degraded response
|
|
29
|
+
* rather than being dropped entirely — keeps the assembler's coverage complete.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseBatchOutputRecords(records: Array<{
|
|
32
|
+
recordId: string;
|
|
33
|
+
modelOutput?: {
|
|
34
|
+
output?: {
|
|
35
|
+
message?: {
|
|
36
|
+
content?: Array<{
|
|
37
|
+
text?: string;
|
|
38
|
+
}>;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
errorCode?: string;
|
|
43
|
+
errorMessage?: string;
|
|
44
|
+
}>): MetricAssessmentResponse[];
|
|
45
|
+
//# sourceMappingURL=response-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parser.d.ts","sourceRoot":"","sources":["../../src/batch/response-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAc,wBAAwB,EAA8B,MAAM,mBAAmB,CAAC;AA6D1G;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,wBAAwB,CAuE1B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE;gBAAE,OAAO,CAAC,EAAE,KAAK,CAAC;oBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAC;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,GACD,wBAAwB,EAAE,CAoB5B"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse raw Nova model output text into MetricAssessmentResponse.
|
|
3
|
+
*
|
|
4
|
+
* Each metric prompt instructs the model to return a JSON object with this shape:
|
|
5
|
+
* {
|
|
6
|
+
* "metricCode": "MR",
|
|
7
|
+
* "subCategoryScores": { "Evasion Resistance": "High", ... },
|
|
8
|
+
* "findings": ["finding text", ...],
|
|
9
|
+
* "deploymentBlocker": false,
|
|
10
|
+
* "atlasTechniques": ["AML.T0043", ...]
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* This parser is lenient: it strips markdown fences, falls back to Medium
|
|
14
|
+
* for any sub-category it cannot parse, and never throws — it returns a
|
|
15
|
+
* degraded response instead so one bad record doesn't abort the whole run.
|
|
16
|
+
*/
|
|
17
|
+
import { METRIC_CODES } from "../aivss/types.js";
|
|
18
|
+
const SEVERITY_LABELS = new Set([
|
|
19
|
+
"Critical",
|
|
20
|
+
"High",
|
|
21
|
+
"Medium",
|
|
22
|
+
"Low",
|
|
23
|
+
"None",
|
|
24
|
+
]);
|
|
25
|
+
function isSeverityLabel(v) {
|
|
26
|
+
return typeof v === "string" && SEVERITY_LABELS.has(v);
|
|
27
|
+
}
|
|
28
|
+
function stripFences(raw) {
|
|
29
|
+
const trimmed = raw.trim();
|
|
30
|
+
if (trimmed.startsWith("```")) {
|
|
31
|
+
return trimmed
|
|
32
|
+
.replace(/^```(?:json)?\s*/i, "")
|
|
33
|
+
.replace(/```\s*$/m, "")
|
|
34
|
+
.trim();
|
|
35
|
+
}
|
|
36
|
+
return trimmed;
|
|
37
|
+
}
|
|
38
|
+
function extractJson(text) {
|
|
39
|
+
// Strip fences first
|
|
40
|
+
const stripped = stripFences(text);
|
|
41
|
+
// Find first { to last } to handle any preamble text
|
|
42
|
+
const start = stripped.indexOf("{");
|
|
43
|
+
const end = stripped.lastIndexOf("}");
|
|
44
|
+
if (start === -1 || end === -1 || end <= start)
|
|
45
|
+
return stripped;
|
|
46
|
+
return stripped.slice(start, end + 1);
|
|
47
|
+
}
|
|
48
|
+
function fallbackResponse(metricCode, reason) {
|
|
49
|
+
return {
|
|
50
|
+
metricCode,
|
|
51
|
+
subCategoryScores: {},
|
|
52
|
+
findings: [`[parse-error] ${reason} — sub-category scores defaulted to Medium`],
|
|
53
|
+
deploymentBlocker: false,
|
|
54
|
+
atlasTechniques: [],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Decode agentId and metricCode from a batch recordId of the form "{agentId}-{metricCode}".
|
|
59
|
+
* MetricCode is always the 2-char uppercase suffix; everything before the last hyphen is agentId.
|
|
60
|
+
* Agent IDs may contain hyphens (e.g. "sales-agent-01"), so we split at the last hyphen only.
|
|
61
|
+
*/
|
|
62
|
+
function decodeRecordId(recordId) {
|
|
63
|
+
const lastHyphen = recordId.lastIndexOf("-");
|
|
64
|
+
const rawMetric = lastHyphen >= 0 ? recordId.slice(lastHyphen + 1) : recordId;
|
|
65
|
+
const metricCode = METRIC_CODES.includes(rawMetric)
|
|
66
|
+
? rawMetric
|
|
67
|
+
: "CS";
|
|
68
|
+
const agentId = lastHyphen >= 0 ? recordId.slice(0, lastHyphen) : "";
|
|
69
|
+
return { agentId, metricCode };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Parse a single Nova output text for one metric assessment.
|
|
73
|
+
*
|
|
74
|
+
* @param recordId The batch recordId (e.g. "sales-agent-01-MR") — used for error messages.
|
|
75
|
+
* @param rawText Raw text from Nova's output.message.content[0].text
|
|
76
|
+
* @returns A MetricAssessmentResponse with agentId decoded from recordId.
|
|
77
|
+
*/
|
|
78
|
+
export function parseMetricResponse(recordId, rawText) {
|
|
79
|
+
const { agentId, metricCode } = decodeRecordId(recordId);
|
|
80
|
+
let parsed;
|
|
81
|
+
try {
|
|
82
|
+
parsed = JSON.parse(extractJson(rawText));
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
86
|
+
return fallbackResponse(metricCode, `JSON.parse failed for ${recordId}: ${msg}. Raw (first 200): ${rawText.slice(0, 200)}`);
|
|
87
|
+
}
|
|
88
|
+
// subCategoryScores — must be an object with string keys and SeverityLabel values
|
|
89
|
+
const rawScores = parsed.subCategoryScores;
|
|
90
|
+
const subCategoryScores = {};
|
|
91
|
+
if (rawScores && typeof rawScores === "object" && !Array.isArray(rawScores)) {
|
|
92
|
+
for (const [k, v] of Object.entries(rawScores)) {
|
|
93
|
+
subCategoryScores[k] = isSeverityLabel(v) ? v : "Medium";
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// findings
|
|
97
|
+
const rawFindings = parsed.findings;
|
|
98
|
+
const findings = Array.isArray(rawFindings)
|
|
99
|
+
? rawFindings.filter((f) => typeof f === "string")
|
|
100
|
+
: [];
|
|
101
|
+
// deploymentBlocker
|
|
102
|
+
const deploymentBlocker = typeof parsed.deploymentBlocker === "boolean" ? parsed.deploymentBlocker : false;
|
|
103
|
+
// atlasTechniques
|
|
104
|
+
const rawTechniques = parsed.atlasTechniques;
|
|
105
|
+
const atlasTechniques = Array.isArray(rawTechniques)
|
|
106
|
+
? rawTechniques.filter((t) => typeof t === "string")
|
|
107
|
+
: [];
|
|
108
|
+
// threatSlots — optional, present when batch prompt includes prose fields
|
|
109
|
+
const rawSlots = parsed.threatSlots;
|
|
110
|
+
let threatSlots;
|
|
111
|
+
if (rawSlots && typeof rawSlots === "object" && !Array.isArray(rawSlots)) {
|
|
112
|
+
threatSlots = {};
|
|
113
|
+
for (const [subCat, raw] of Object.entries(rawSlots)) {
|
|
114
|
+
if (!raw || typeof raw !== "object")
|
|
115
|
+
continue;
|
|
116
|
+
const s = raw;
|
|
117
|
+
threatSlots[subCat] = {
|
|
118
|
+
threatSource: typeof s.threatSource === "string" ? s.threatSource : "A threat actor",
|
|
119
|
+
prerequisites: typeof s.prerequisites === "string" ? s.prerequisites : "",
|
|
120
|
+
threatAction: typeof s.threatAction === "string" ? s.threatAction : `exploit ${subCat.toLowerCase()} weaknesses`,
|
|
121
|
+
threatImpact: typeof s.threatImpact === "string" ? s.threatImpact : "compromise the agent",
|
|
122
|
+
impactedGoal: Array.isArray(s.impactedGoal)
|
|
123
|
+
? s.impactedGoal.filter((g) => typeof g === "string")
|
|
124
|
+
: ["integrity"],
|
|
125
|
+
impactedAssets: Array.isArray(s.impactedAssets)
|
|
126
|
+
? s.impactedAssets.filter((a) => typeof a === "string")
|
|
127
|
+
: [],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
agentId: agentId || undefined,
|
|
133
|
+
metricCode,
|
|
134
|
+
subCategoryScores,
|
|
135
|
+
findings,
|
|
136
|
+
deploymentBlocker,
|
|
137
|
+
atlasTechniques,
|
|
138
|
+
threatSlots,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Parse all output records from a Bedrock batch job into MetricAssessmentResponse[].
|
|
143
|
+
* Records that errored at the Bedrock level (errorCode set) get a degraded response
|
|
144
|
+
* rather than being dropped entirely — keeps the assembler's coverage complete.
|
|
145
|
+
*/
|
|
146
|
+
export function parseBatchOutputRecords(records) {
|
|
147
|
+
return records.map((record) => {
|
|
148
|
+
const { agentId, metricCode } = decodeRecordId(record.recordId);
|
|
149
|
+
if (record.errorCode) {
|
|
150
|
+
const r = fallbackResponse(metricCode, `Bedrock error ${record.errorCode} for ${record.recordId}: ${record.errorMessage ?? "unknown"}`);
|
|
151
|
+
return { ...r, agentId: agentId || undefined };
|
|
152
|
+
}
|
|
153
|
+
const text = record.modelOutput?.output?.message?.content?.[0]?.text;
|
|
154
|
+
if (typeof text !== "string" || text.length === 0) {
|
|
155
|
+
const r = fallbackResponse(metricCode, `empty output for ${record.recordId}`);
|
|
156
|
+
return { ...r, agentId: agentId || undefined };
|
|
157
|
+
}
|
|
158
|
+
return parseMetricResponse(record.recordId, text);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=response-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parser.js","sourceRoot":"","sources":["../../src/batch/response-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for batch inference orchestration.
|
|
3
|
+
*
|
|
4
|
+
* BatchProvider is the extension point — implement this interface to add any
|
|
5
|
+
* batch inference backend (Bedrock, Anthropic Messages Batches, OpenAI Batch, etc.).
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentDefinition, MetricAssessmentResponse } from "../aivss/types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Options forwarded to every BatchProvider implementation.
|
|
10
|
+
* Providers may ignore fields they don't support.
|
|
11
|
+
*/
|
|
12
|
+
export interface BatchProviderOptions {
|
|
13
|
+
maxTokens?: number;
|
|
14
|
+
temperature?: number;
|
|
15
|
+
/** Called on each status change (e.g. polling tick). Provider-defined semantics. */
|
|
16
|
+
onProgress?: (status: string) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The extension point for batch inference backends.
|
|
20
|
+
*
|
|
21
|
+
* Implement this interface to add a new provider. Wire it into Canopy via
|
|
22
|
+
* `createBatchProvider()` in `src/batch/providers/index.ts`, then pass an
|
|
23
|
+
* instance to `assessWorkflow({ batchProvider })`.
|
|
24
|
+
*
|
|
25
|
+
* Contract:
|
|
26
|
+
* - `runBatch` must return one `MetricAssessmentResponse` per (agent × metric)
|
|
27
|
+
* combination — i.e. `agents.length × 9` responses covering all METRIC_CODES.
|
|
28
|
+
* - On partial failure, return degraded responses (empty subCategoryScores,
|
|
29
|
+
* descriptive finding) rather than throwing — keeps coverage complete.
|
|
30
|
+
* - Providers are responsible for all serialisation, auth, polling, and parsing.
|
|
31
|
+
*/
|
|
32
|
+
export interface BatchProvider {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
runBatch(agents: AgentDefinition[], options: BatchProviderOptions): Promise<MetricAssessmentResponse[]>;
|
|
35
|
+
}
|
|
36
|
+
export interface BedrockBatchConfig {
|
|
37
|
+
/** S3 bucket for JSONL input/output. Must exist and be accessible to roleArn. */
|
|
38
|
+
s3Bucket: string;
|
|
39
|
+
/**
|
|
40
|
+
* S3 key prefix for this job's files.
|
|
41
|
+
* Input lands at: {s3Prefix}/input/{jobName}.jsonl
|
|
42
|
+
* Output lands at: {s3Prefix}/output/{jobName}/
|
|
43
|
+
* Defaults to "canopy-batch".
|
|
44
|
+
*/
|
|
45
|
+
s3Prefix?: string;
|
|
46
|
+
/**
|
|
47
|
+
* IAM role ARN with bedrock:CreateModelInvocationJob + s3:PutObject + s3:GetObject.
|
|
48
|
+
* Required by Bedrock batch API.
|
|
49
|
+
*/
|
|
50
|
+
roleArn: string;
|
|
51
|
+
/** AWS region. Must match a region where the cross-region inference profile is available. Default: "us-east-1". */
|
|
52
|
+
region?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Cross-region inference profile ID for Nova 2 Lite.
|
|
55
|
+
* Nova 2 Lite only supports batch via cross-region profiles (no single-region batch support).
|
|
56
|
+
* Default: "us.amazon.nova-2-lite-v1:0"
|
|
57
|
+
*/
|
|
58
|
+
modelId?: string;
|
|
59
|
+
/** Max tokens per completion. Default: 2048. */
|
|
60
|
+
maxTokens?: number;
|
|
61
|
+
/** Poll interval in milliseconds. Default: 30_000 (30s). */
|
|
62
|
+
pollIntervalMs?: number;
|
|
63
|
+
/** Max total wait time in milliseconds. Default: 3_600_000 (1h). */
|
|
64
|
+
timeoutMs?: number;
|
|
65
|
+
}
|
|
66
|
+
export interface BatchJobResult {
|
|
67
|
+
jobArn: string;
|
|
68
|
+
jobName: string;
|
|
69
|
+
status: string;
|
|
70
|
+
s3OutputUri: string;
|
|
71
|
+
}
|
|
72
|
+
/** One line from the Bedrock batch output JSONL. */
|
|
73
|
+
export interface BatchOutputRecord {
|
|
74
|
+
recordId: string;
|
|
75
|
+
modelOutput?: {
|
|
76
|
+
output?: {
|
|
77
|
+
message?: {
|
|
78
|
+
content?: Array<{
|
|
79
|
+
text?: string;
|
|
80
|
+
}>;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
errorCode?: string;
|
|
85
|
+
errorMessage?: string;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/batch/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAInF;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CACN,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;CACxC;AAID,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mHAAmH;IACnH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE;YACP,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,EAAE,KAAK,CAAC;oBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAC,CAAC;aACpC,CAAC;SACH,CAAC;KACH,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for batch inference orchestration.
|
|
3
|
+
*
|
|
4
|
+
* BatchProvider is the extension point — implement this interface to add any
|
|
5
|
+
* batch inference backend (Bedrock, Anthropic Messages Batches, OpenAI Batch, etc.).
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/batch/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* Canopy CLI — multi-framework threat modelling for agentic AI systems.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* bunx @waratahlabs/canopy assess --input agents.json [--out model.tc.json]
|
|
7
|
+
* bunx @waratahlabs/canopy schema
|
|
8
|
+
* bunx @waratahlabs/canopy demo [--port 3000]
|
|
9
|
+
*
|
|
10
|
+
* Claude Code / Cursor agents: run `canopy schema` to get the AgentDefinition
|
|
11
|
+
* shape, construct the input JSON from the codebase under review, then run
|
|
12
|
+
* `canopy assess` to produce the threat model artifact.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|