@dotsetlabs/bellwether 0.10.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/CHANGELOG.md +291 -0
- package/LICENSE +21 -0
- package/README.md +739 -0
- package/dist/auth/credentials.d.ts +64 -0
- package/dist/auth/credentials.js +218 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/keychain.d.ts +64 -0
- package/dist/auth/keychain.js +268 -0
- package/dist/baseline/ab-testing.d.ts +80 -0
- package/dist/baseline/ab-testing.js +236 -0
- package/dist/baseline/ai-compatibility-scorer.d.ts +95 -0
- package/dist/baseline/ai-compatibility-scorer.js +606 -0
- package/dist/baseline/calibration.d.ts +77 -0
- package/dist/baseline/calibration.js +136 -0
- package/dist/baseline/category-matching.d.ts +85 -0
- package/dist/baseline/category-matching.js +289 -0
- package/dist/baseline/change-impact-analyzer.d.ts +98 -0
- package/dist/baseline/change-impact-analyzer.js +592 -0
- package/dist/baseline/comparator.d.ts +64 -0
- package/dist/baseline/comparator.js +916 -0
- package/dist/baseline/confidence.d.ts +55 -0
- package/dist/baseline/confidence.js +122 -0
- package/dist/baseline/converter.d.ts +61 -0
- package/dist/baseline/converter.js +585 -0
- package/dist/baseline/dependency-analyzer.d.ts +89 -0
- package/dist/baseline/dependency-analyzer.js +567 -0
- package/dist/baseline/deprecation-tracker.d.ts +133 -0
- package/dist/baseline/deprecation-tracker.js +322 -0
- package/dist/baseline/diff.d.ts +55 -0
- package/dist/baseline/diff.js +1584 -0
- package/dist/baseline/documentation-scorer.d.ts +205 -0
- package/dist/baseline/documentation-scorer.js +466 -0
- package/dist/baseline/embeddings.d.ts +118 -0
- package/dist/baseline/embeddings.js +251 -0
- package/dist/baseline/error-analyzer.d.ts +198 -0
- package/dist/baseline/error-analyzer.js +721 -0
- package/dist/baseline/evaluation/evaluator.d.ts +42 -0
- package/dist/baseline/evaluation/evaluator.js +323 -0
- package/dist/baseline/evaluation/expanded-dataset.d.ts +45 -0
- package/dist/baseline/evaluation/expanded-dataset.js +1164 -0
- package/dist/baseline/evaluation/golden-dataset.d.ts +58 -0
- package/dist/baseline/evaluation/golden-dataset.js +717 -0
- package/dist/baseline/evaluation/index.d.ts +15 -0
- package/dist/baseline/evaluation/index.js +15 -0
- package/dist/baseline/evaluation/types.d.ts +186 -0
- package/dist/baseline/evaluation/types.js +8 -0
- package/dist/baseline/external-dependency-detector.d.ts +181 -0
- package/dist/baseline/external-dependency-detector.js +524 -0
- package/dist/baseline/golden-output.d.ts +162 -0
- package/dist/baseline/golden-output.js +636 -0
- package/dist/baseline/health-scorer.d.ts +174 -0
- package/dist/baseline/health-scorer.js +451 -0
- package/dist/baseline/incremental-checker.d.ts +97 -0
- package/dist/baseline/incremental-checker.js +174 -0
- package/dist/baseline/index.d.ts +31 -0
- package/dist/baseline/index.js +42 -0
- package/dist/baseline/migration-generator.d.ts +137 -0
- package/dist/baseline/migration-generator.js +554 -0
- package/dist/baseline/migrations.d.ts +60 -0
- package/dist/baseline/migrations.js +197 -0
- package/dist/baseline/performance-tracker.d.ts +214 -0
- package/dist/baseline/performance-tracker.js +577 -0
- package/dist/baseline/pr-comment-generator.d.ts +117 -0
- package/dist/baseline/pr-comment-generator.js +546 -0
- package/dist/baseline/response-fingerprint.d.ts +127 -0
- package/dist/baseline/response-fingerprint.js +728 -0
- package/dist/baseline/response-schema-tracker.d.ts +129 -0
- package/dist/baseline/response-schema-tracker.js +420 -0
- package/dist/baseline/risk-scorer.d.ts +54 -0
- package/dist/baseline/risk-scorer.js +434 -0
- package/dist/baseline/saver.d.ts +89 -0
- package/dist/baseline/saver.js +554 -0
- package/dist/baseline/scenario-generator.d.ts +151 -0
- package/dist/baseline/scenario-generator.js +905 -0
- package/dist/baseline/schema-compare.d.ts +86 -0
- package/dist/baseline/schema-compare.js +557 -0
- package/dist/baseline/schema-evolution.d.ts +189 -0
- package/dist/baseline/schema-evolution.js +467 -0
- package/dist/baseline/semantic.d.ts +203 -0
- package/dist/baseline/semantic.js +908 -0
- package/dist/baseline/synonyms.d.ts +60 -0
- package/dist/baseline/synonyms.js +386 -0
- package/dist/baseline/telemetry.d.ts +165 -0
- package/dist/baseline/telemetry.js +294 -0
- package/dist/baseline/test-pruner.d.ts +120 -0
- package/dist/baseline/test-pruner.js +387 -0
- package/dist/baseline/types.d.ts +449 -0
- package/dist/baseline/types.js +5 -0
- package/dist/baseline/version.d.ts +138 -0
- package/dist/baseline/version.js +206 -0
- package/dist/cache/index.d.ts +5 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/response-cache.d.ts +151 -0
- package/dist/cache/response-cache.js +287 -0
- package/dist/ci/index.d.ts +60 -0
- package/dist/ci/index.js +342 -0
- package/dist/cli/commands/auth.d.ts +12 -0
- package/dist/cli/commands/auth.js +352 -0
- package/dist/cli/commands/badge.d.ts +3 -0
- package/dist/cli/commands/badge.js +74 -0
- package/dist/cli/commands/baseline-accept.d.ts +15 -0
- package/dist/cli/commands/baseline-accept.js +178 -0
- package/dist/cli/commands/baseline-migrate.d.ts +12 -0
- package/dist/cli/commands/baseline-migrate.js +164 -0
- package/dist/cli/commands/baseline.d.ts +14 -0
- package/dist/cli/commands/baseline.js +449 -0
- package/dist/cli/commands/beta.d.ts +10 -0
- package/dist/cli/commands/beta.js +231 -0
- package/dist/cli/commands/check.d.ts +11 -0
- package/dist/cli/commands/check.js +820 -0
- package/dist/cli/commands/cloud/badge.d.ts +3 -0
- package/dist/cli/commands/cloud/badge.js +74 -0
- package/dist/cli/commands/cloud/diff.d.ts +6 -0
- package/dist/cli/commands/cloud/diff.js +79 -0
- package/dist/cli/commands/cloud/history.d.ts +6 -0
- package/dist/cli/commands/cloud/history.js +102 -0
- package/dist/cli/commands/cloud/link.d.ts +9 -0
- package/dist/cli/commands/cloud/link.js +119 -0
- package/dist/cli/commands/cloud/login.d.ts +7 -0
- package/dist/cli/commands/cloud/login.js +499 -0
- package/dist/cli/commands/cloud/projects.d.ts +6 -0
- package/dist/cli/commands/cloud/projects.js +44 -0
- package/dist/cli/commands/cloud/shared.d.ts +7 -0
- package/dist/cli/commands/cloud/shared.js +42 -0
- package/dist/cli/commands/cloud/teams.d.ts +8 -0
- package/dist/cli/commands/cloud/teams.js +169 -0
- package/dist/cli/commands/cloud/upload.d.ts +8 -0
- package/dist/cli/commands/cloud/upload.js +181 -0
- package/dist/cli/commands/contract.d.ts +11 -0
- package/dist/cli/commands/contract.js +280 -0
- package/dist/cli/commands/discover.d.ts +3 -0
- package/dist/cli/commands/discover.js +82 -0
- package/dist/cli/commands/eval.d.ts +9 -0
- package/dist/cli/commands/eval.js +187 -0
- package/dist/cli/commands/explore.d.ts +11 -0
- package/dist/cli/commands/explore.js +437 -0
- package/dist/cli/commands/feedback.d.ts +9 -0
- package/dist/cli/commands/feedback.js +174 -0
- package/dist/cli/commands/golden.d.ts +12 -0
- package/dist/cli/commands/golden.js +407 -0
- package/dist/cli/commands/history.d.ts +10 -0
- package/dist/cli/commands/history.js +202 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.js +219 -0
- package/dist/cli/commands/interview.d.ts +3 -0
- package/dist/cli/commands/interview.js +903 -0
- package/dist/cli/commands/link.d.ts +10 -0
- package/dist/cli/commands/link.js +169 -0
- package/dist/cli/commands/login.d.ts +7 -0
- package/dist/cli/commands/login.js +499 -0
- package/dist/cli/commands/preset.d.ts +33 -0
- package/dist/cli/commands/preset.js +297 -0
- package/dist/cli/commands/profile.d.ts +33 -0
- package/dist/cli/commands/profile.js +286 -0
- package/dist/cli/commands/registry.d.ts +11 -0
- package/dist/cli/commands/registry.js +146 -0
- package/dist/cli/commands/shared.d.ts +79 -0
- package/dist/cli/commands/shared.js +196 -0
- package/dist/cli/commands/teams.d.ts +8 -0
- package/dist/cli/commands/teams.js +169 -0
- package/dist/cli/commands/test.d.ts +9 -0
- package/dist/cli/commands/test.js +500 -0
- package/dist/cli/commands/upload.d.ts +8 -0
- package/dist/cli/commands/upload.js +223 -0
- package/dist/cli/commands/validate-config.d.ts +6 -0
- package/dist/cli/commands/validate-config.js +35 -0
- package/dist/cli/commands/verify.d.ts +11 -0
- package/dist/cli/commands/verify.js +283 -0
- package/dist/cli/commands/watch.d.ts +12 -0
- package/dist/cli/commands/watch.js +253 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +178 -0
- package/dist/cli/interactive.d.ts +47 -0
- package/dist/cli/interactive.js +216 -0
- package/dist/cli/output/terminal-reporter.d.ts +19 -0
- package/dist/cli/output/terminal-reporter.js +104 -0
- package/dist/cli/output.d.ts +226 -0
- package/dist/cli/output.js +438 -0
- package/dist/cli/utils/env.d.ts +5 -0
- package/dist/cli/utils/env.js +14 -0
- package/dist/cli/utils/progress.d.ts +59 -0
- package/dist/cli/utils/progress.js +206 -0
- package/dist/cli/utils/server-context.d.ts +10 -0
- package/dist/cli/utils/server-context.js +36 -0
- package/dist/cloud/auth.d.ts +144 -0
- package/dist/cloud/auth.js +374 -0
- package/dist/cloud/client.d.ts +24 -0
- package/dist/cloud/client.js +65 -0
- package/dist/cloud/http-client.d.ts +38 -0
- package/dist/cloud/http-client.js +215 -0
- package/dist/cloud/index.d.ts +23 -0
- package/dist/cloud/index.js +25 -0
- package/dist/cloud/mock-client.d.ts +107 -0
- package/dist/cloud/mock-client.js +545 -0
- package/dist/cloud/types.d.ts +515 -0
- package/dist/cloud/types.js +15 -0
- package/dist/config/defaults.d.ts +160 -0
- package/dist/config/defaults.js +169 -0
- package/dist/config/loader.d.ts +24 -0
- package/dist/config/loader.js +122 -0
- package/dist/config/template.d.ts +42 -0
- package/dist/config/template.js +647 -0
- package/dist/config/validator.d.ts +2112 -0
- package/dist/config/validator.js +658 -0
- package/dist/constants/cloud.d.ts +107 -0
- package/dist/constants/cloud.js +110 -0
- package/dist/constants/core.d.ts +521 -0
- package/dist/constants/core.js +556 -0
- package/dist/constants/testing.d.ts +1283 -0
- package/dist/constants/testing.js +1568 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.js +10 -0
- package/dist/contract/index.d.ts +6 -0
- package/dist/contract/index.js +5 -0
- package/dist/contract/validator.d.ts +177 -0
- package/dist/contract/validator.js +574 -0
- package/dist/cost/index.d.ts +6 -0
- package/dist/cost/index.js +5 -0
- package/dist/cost/tracker.d.ts +134 -0
- package/dist/cost/tracker.js +313 -0
- package/dist/discovery/discovery.d.ts +16 -0
- package/dist/discovery/discovery.js +173 -0
- package/dist/discovery/types.d.ts +51 -0
- package/dist/discovery/types.js +2 -0
- package/dist/docs/agents.d.ts +3 -0
- package/dist/docs/agents.js +995 -0
- package/dist/docs/contract.d.ts +51 -0
- package/dist/docs/contract.js +1681 -0
- package/dist/docs/generator.d.ts +4 -0
- package/dist/docs/generator.js +4 -0
- package/dist/docs/html-reporter.d.ts +9 -0
- package/dist/docs/html-reporter.js +757 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +11 -0
- package/dist/docs/junit-reporter.d.ts +18 -0
- package/dist/docs/junit-reporter.js +210 -0
- package/dist/docs/report.d.ts +14 -0
- package/dist/docs/report.js +44 -0
- package/dist/docs/sarif-reporter.d.ts +19 -0
- package/dist/docs/sarif-reporter.js +335 -0
- package/dist/docs/shared.d.ts +35 -0
- package/dist/docs/shared.js +162 -0
- package/dist/docs/templates.d.ts +12 -0
- package/dist/docs/templates.js +76 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.js +6 -0
- package/dist/errors/retry.d.ts +92 -0
- package/dist/errors/retry.js +323 -0
- package/dist/errors/types.d.ts +321 -0
- package/dist/errors/types.js +584 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.js +32 -0
- package/dist/interview/dependency-resolver.d.ts +11 -0
- package/dist/interview/dependency-resolver.js +32 -0
- package/dist/interview/interviewer.d.ts +232 -0
- package/dist/interview/interviewer.js +1939 -0
- package/dist/interview/mock-response-generator.d.ts +7 -0
- package/dist/interview/mock-response-generator.js +102 -0
- package/dist/interview/orchestrator.d.ts +237 -0
- package/dist/interview/orchestrator.js +1296 -0
- package/dist/interview/rate-limiter.d.ts +15 -0
- package/dist/interview/rate-limiter.js +55 -0
- package/dist/interview/response-validator.d.ts +10 -0
- package/dist/interview/response-validator.js +132 -0
- package/dist/interview/schema-inferrer.d.ts +8 -0
- package/dist/interview/schema-inferrer.js +71 -0
- package/dist/interview/schema-test-generator.d.ts +71 -0
- package/dist/interview/schema-test-generator.js +834 -0
- package/dist/interview/smart-value-generator.d.ts +155 -0
- package/dist/interview/smart-value-generator.js +554 -0
- package/dist/interview/stateful-test-runner.d.ts +19 -0
- package/dist/interview/stateful-test-runner.js +106 -0
- package/dist/interview/types.d.ts +561 -0
- package/dist/interview/types.js +2 -0
- package/dist/llm/anthropic.d.ts +41 -0
- package/dist/llm/anthropic.js +355 -0
- package/dist/llm/client.d.ts +123 -0
- package/dist/llm/client.js +42 -0
- package/dist/llm/factory.d.ts +38 -0
- package/dist/llm/factory.js +145 -0
- package/dist/llm/fallback.d.ts +140 -0
- package/dist/llm/fallback.js +379 -0
- package/dist/llm/index.d.ts +18 -0
- package/dist/llm/index.js +15 -0
- package/dist/llm/ollama.d.ts +37 -0
- package/dist/llm/ollama.js +330 -0
- package/dist/llm/openai.d.ts +25 -0
- package/dist/llm/openai.js +320 -0
- package/dist/llm/token-budget.d.ts +161 -0
- package/dist/llm/token-budget.js +395 -0
- package/dist/logging/logger.d.ts +70 -0
- package/dist/logging/logger.js +130 -0
- package/dist/metrics/collector.d.ts +106 -0
- package/dist/metrics/collector.js +547 -0
- package/dist/metrics/index.d.ts +7 -0
- package/dist/metrics/index.js +7 -0
- package/dist/metrics/prometheus.d.ts +20 -0
- package/dist/metrics/prometheus.js +241 -0
- package/dist/metrics/types.d.ts +209 -0
- package/dist/metrics/types.js +5 -0
- package/dist/persona/builtins.d.ts +54 -0
- package/dist/persona/builtins.js +219 -0
- package/dist/persona/index.d.ts +8 -0
- package/dist/persona/index.js +8 -0
- package/dist/persona/loader.d.ts +30 -0
- package/dist/persona/loader.js +190 -0
- package/dist/persona/types.d.ts +144 -0
- package/dist/persona/types.js +5 -0
- package/dist/persona/validation.d.ts +94 -0
- package/dist/persona/validation.js +332 -0
- package/dist/prompts/index.d.ts +5 -0
- package/dist/prompts/index.js +5 -0
- package/dist/prompts/templates.d.ts +180 -0
- package/dist/prompts/templates.js +431 -0
- package/dist/registry/client.d.ts +49 -0
- package/dist/registry/client.js +191 -0
- package/dist/registry/index.d.ts +7 -0
- package/dist/registry/index.js +6 -0
- package/dist/registry/types.d.ts +140 -0
- package/dist/registry/types.js +6 -0
- package/dist/scenarios/evaluator.d.ts +43 -0
- package/dist/scenarios/evaluator.js +206 -0
- package/dist/scenarios/index.d.ts +10 -0
- package/dist/scenarios/index.js +9 -0
- package/dist/scenarios/loader.d.ts +20 -0
- package/dist/scenarios/loader.js +285 -0
- package/dist/scenarios/types.d.ts +153 -0
- package/dist/scenarios/types.js +8 -0
- package/dist/security/index.d.ts +17 -0
- package/dist/security/index.js +18 -0
- package/dist/security/payloads.d.ts +61 -0
- package/dist/security/payloads.js +268 -0
- package/dist/security/security-tester.d.ts +42 -0
- package/dist/security/security-tester.js +582 -0
- package/dist/security/types.d.ts +166 -0
- package/dist/security/types.js +8 -0
- package/dist/transport/base-transport.d.ts +59 -0
- package/dist/transport/base-transport.js +38 -0
- package/dist/transport/http-transport.d.ts +67 -0
- package/dist/transport/http-transport.js +238 -0
- package/dist/transport/mcp-client.d.ts +141 -0
- package/dist/transport/mcp-client.js +496 -0
- package/dist/transport/sse-transport.d.ts +88 -0
- package/dist/transport/sse-transport.js +316 -0
- package/dist/transport/stdio-transport.d.ts +43 -0
- package/dist/transport/stdio-transport.js +238 -0
- package/dist/transport/types.d.ts +125 -0
- package/dist/transport/types.js +16 -0
- package/dist/utils/concurrency.d.ts +123 -0
- package/dist/utils/concurrency.js +213 -0
- package/dist/utils/formatters.d.ts +16 -0
- package/dist/utils/formatters.js +37 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/jsonpath.d.ts +87 -0
- package/dist/utils/jsonpath.js +326 -0
- package/dist/utils/markdown.d.ts +113 -0
- package/dist/utils/markdown.js +265 -0
- package/dist/utils/network.d.ts +14 -0
- package/dist/utils/network.js +17 -0
- package/dist/utils/sanitize.d.ts +92 -0
- package/dist/utils/sanitize.js +191 -0
- package/dist/utils/semantic.d.ts +194 -0
- package/dist/utils/semantic.js +1051 -0
- package/dist/utils/smart-truncate.d.ts +94 -0
- package/dist/utils/smart-truncate.js +361 -0
- package/dist/utils/timeout.d.ts +153 -0
- package/dist/utils/timeout.js +205 -0
- package/dist/utils/yaml-parser.d.ts +58 -0
- package/dist/utils/yaml-parser.js +86 -0
- package/dist/validation/index.d.ts +32 -0
- package/dist/validation/index.js +32 -0
- package/dist/validation/semantic-test-generator.d.ts +50 -0
- package/dist/validation/semantic-test-generator.js +176 -0
- package/dist/validation/semantic-types.d.ts +66 -0
- package/dist/validation/semantic-types.js +94 -0
- package/dist/validation/semantic-validator.d.ts +38 -0
- package/dist/validation/semantic-validator.js +340 -0
- package/dist/verification/index.d.ts +6 -0
- package/dist/verification/index.js +5 -0
- package/dist/verification/types.d.ts +133 -0
- package/dist/verification/types.js +5 -0
- package/dist/verification/verifier.d.ts +30 -0
- package/dist/verification/verifier.js +309 -0
- package/dist/version.d.ts +19 -0
- package/dist/version.js +48 -0
- package/dist/workflow/auto-generator.d.ts +27 -0
- package/dist/workflow/auto-generator.js +513 -0
- package/dist/workflow/discovery.d.ts +40 -0
- package/dist/workflow/discovery.js +195 -0
- package/dist/workflow/executor.d.ts +82 -0
- package/dist/workflow/executor.js +611 -0
- package/dist/workflow/index.d.ts +10 -0
- package/dist/workflow/index.js +10 -0
- package/dist/workflow/loader.d.ts +24 -0
- package/dist/workflow/loader.js +194 -0
- package/dist/workflow/state-tracker.d.ts +98 -0
- package/dist/workflow/state-tracker.js +424 -0
- package/dist/workflow/types.d.ts +337 -0
- package/dist/workflow/types.js +5 -0
- package/package.json +94 -0
- package/schemas/bellwether-check.schema.json +651 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress bar utilities for CLI test display.
|
|
3
|
+
*/
|
|
4
|
+
import cliProgress from 'cli-progress';
|
|
5
|
+
import { suppressLogs, restoreLogLevel } from '../../logging/logger.js';
|
|
6
|
+
import { DISPLAY_LIMITS } from '../../constants.js';
|
|
7
|
+
/**
|
|
8
|
+
* Creates and manages a progress bar for test progress.
|
|
9
|
+
*/
|
|
10
|
+
export class InterviewProgressBar {
|
|
11
|
+
bar = null;
|
|
12
|
+
enabled;
|
|
13
|
+
started = false;
|
|
14
|
+
totalWork = 0;
|
|
15
|
+
toolWork = 0;
|
|
16
|
+
currentValue = 0;
|
|
17
|
+
currentPayload = {};
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
const stream = options.stream ?? process.stderr;
|
|
20
|
+
// Only enable progress bar if running in a TTY terminal
|
|
21
|
+
this.enabled = (options.enabled ?? true) && (stream.isTTY ?? false);
|
|
22
|
+
if (this.enabled) {
|
|
23
|
+
this.bar = new cliProgress.SingleBar({
|
|
24
|
+
format: '{bar} {percentage}% | {phase}: {item} ({current}/{phaseTotal}) | {questions} questions',
|
|
25
|
+
barCompleteChar: '\u2588',
|
|
26
|
+
barIncompleteChar: '\u2591',
|
|
27
|
+
hideCursor: true,
|
|
28
|
+
clearOnComplete: true,
|
|
29
|
+
stream,
|
|
30
|
+
// Force redraw on every update to prevent stale display
|
|
31
|
+
forceRedraw: true,
|
|
32
|
+
// Disable line wrapping to prevent display issues
|
|
33
|
+
linewrap: false,
|
|
34
|
+
// Synchronous updates prevent race conditions with terminal output
|
|
35
|
+
synchronousUpdate: true,
|
|
36
|
+
}, cliProgress.Presets.shades_classic);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Start the progress bar with initial values.
|
|
41
|
+
*/
|
|
42
|
+
start(totalTools, totalPersonas, totalPrompts = 0, totalResources = 0) {
|
|
43
|
+
if (!this.enabled || !this.bar)
|
|
44
|
+
return;
|
|
45
|
+
// Suppress logging while progress bar is active to prevent interference
|
|
46
|
+
suppressLogs();
|
|
47
|
+
// Calculate total work across all phases
|
|
48
|
+
this.toolWork = totalTools * totalPersonas;
|
|
49
|
+
this.totalWork = this.toolWork + totalPrompts + totalResources;
|
|
50
|
+
this.bar.start(this.totalWork, 0, {
|
|
51
|
+
phase: 'Starting',
|
|
52
|
+
item: '...',
|
|
53
|
+
current: 0,
|
|
54
|
+
phaseTotal: totalTools,
|
|
55
|
+
questions: 0,
|
|
56
|
+
});
|
|
57
|
+
this.started = true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Update the progress bar with current progress.
|
|
61
|
+
*/
|
|
62
|
+
update(progress) {
|
|
63
|
+
if (!this.enabled || !this.bar || !this.started)
|
|
64
|
+
return;
|
|
65
|
+
// Handle workflow phase differently
|
|
66
|
+
if (progress.phase === 'workflows' && progress.totalWorkflows) {
|
|
67
|
+
this.bar.update(progress.workflowsCompleted ?? 0, {
|
|
68
|
+
phase: 'Workflows',
|
|
69
|
+
item: progress.currentWorkflow ?? '...',
|
|
70
|
+
current: (progress.workflowsCompleted ?? 0) + 1,
|
|
71
|
+
phaseTotal: progress.totalWorkflows,
|
|
72
|
+
questions: progress.questionsAsked,
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Calculate completed work based on current phase
|
|
77
|
+
let completedWork;
|
|
78
|
+
let phaseLabel;
|
|
79
|
+
let currentItem;
|
|
80
|
+
let currentNum;
|
|
81
|
+
let totalNum;
|
|
82
|
+
if (progress.phase === 'interviewing') {
|
|
83
|
+
// Tools phase: count completed tools across personas
|
|
84
|
+
completedWork = progress.personasCompleted * progress.totalTools + progress.toolsCompleted;
|
|
85
|
+
phaseLabel = progress.currentPersona ?? 'Interviewing';
|
|
86
|
+
currentItem = progress.currentTool ?? '...';
|
|
87
|
+
currentNum = progress.toolsCompleted + 1;
|
|
88
|
+
totalNum = progress.totalTools;
|
|
89
|
+
}
|
|
90
|
+
else if (progress.phase === 'prompts') {
|
|
91
|
+
// Prompts phase: all tools done + prompts completed
|
|
92
|
+
completedWork = this.toolWork + (progress.promptsCompleted ?? 0);
|
|
93
|
+
phaseLabel = 'Prompts';
|
|
94
|
+
currentItem = progress.currentTool?.replace('prompt:', '') ?? '...';
|
|
95
|
+
currentNum = (progress.promptsCompleted ?? 0) + 1;
|
|
96
|
+
totalNum = progress.totalPrompts ?? 0;
|
|
97
|
+
}
|
|
98
|
+
else if (progress.phase === 'resources') {
|
|
99
|
+
// Resources phase: all tools done + all prompts done + resources completed
|
|
100
|
+
completedWork = this.toolWork + (progress.totalPrompts ?? 0) + (progress.resourcesCompleted ?? 0);
|
|
101
|
+
phaseLabel = 'Resources';
|
|
102
|
+
currentItem = progress.currentTool?.replace('resource:', '') ?? '...';
|
|
103
|
+
currentNum = (progress.resourcesCompleted ?? 0) + 1;
|
|
104
|
+
totalNum = progress.totalResources ?? 0;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Default/starting phase
|
|
108
|
+
completedWork = 0;
|
|
109
|
+
phaseLabel = 'Starting';
|
|
110
|
+
currentItem = '...';
|
|
111
|
+
currentNum = 0;
|
|
112
|
+
totalNum = progress.totalTools;
|
|
113
|
+
}
|
|
114
|
+
// Track current state for potential restart after logging
|
|
115
|
+
this.currentValue = completedWork;
|
|
116
|
+
this.currentPayload = {
|
|
117
|
+
phase: phaseLabel,
|
|
118
|
+
item: currentItem,
|
|
119
|
+
current: currentNum,
|
|
120
|
+
phaseTotal: totalNum,
|
|
121
|
+
questions: progress.questionsAsked,
|
|
122
|
+
};
|
|
123
|
+
this.bar.update(completedWork, this.currentPayload);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Stop and clear the progress bar.
|
|
127
|
+
*/
|
|
128
|
+
stop() {
|
|
129
|
+
if (!this.enabled || !this.bar || !this.started)
|
|
130
|
+
return;
|
|
131
|
+
this.bar.stop();
|
|
132
|
+
this.started = false;
|
|
133
|
+
// Restore logging after progress bar is done
|
|
134
|
+
restoreLogLevel();
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Log a message while the progress bar is active.
|
|
138
|
+
* Uses the same stream as the progress bar to avoid terminal overlap issues.
|
|
139
|
+
*/
|
|
140
|
+
log(message) {
|
|
141
|
+
if (!this.enabled || !this.bar || !this.started) {
|
|
142
|
+
console.log(message);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Stop the progress bar temporarily to prevent overlap
|
|
146
|
+
this.bar.stop();
|
|
147
|
+
// Write to stderr (same stream as progress bar) to avoid mixing streams
|
|
148
|
+
process.stderr.write(message + '\n');
|
|
149
|
+
// Restart the progress bar with tracked state
|
|
150
|
+
this.bar.start(this.totalWork, this.currentValue, this.currentPayload);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Format a startup banner for the check command.
|
|
155
|
+
*/
|
|
156
|
+
export function formatCheckBanner(options) {
|
|
157
|
+
const { serverCommand, toolCount } = options;
|
|
158
|
+
// Truncate server command if too long
|
|
159
|
+
const maxCmdLen = DISPLAY_LIMITS.BANNER_COMMAND_MAX_LENGTH;
|
|
160
|
+
const displayCmd = serverCommand.length > maxCmdLen
|
|
161
|
+
? serverCommand.substring(0, maxCmdLen - 3) + '...'
|
|
162
|
+
: serverCommand;
|
|
163
|
+
const lines = [
|
|
164
|
+
'Bellwether Check - Schema Validation & Drift Detection',
|
|
165
|
+
'',
|
|
166
|
+
'\u250C' + '\u2500'.repeat(50) + '\u2510',
|
|
167
|
+
`\u2502 Server: ${displayCmd.padEnd(38)}\u2502`,
|
|
168
|
+
`\u2502 Mode: ${'Check (free, deterministic)'.padEnd(38)}\u2502`,
|
|
169
|
+
];
|
|
170
|
+
if (toolCount !== undefined) {
|
|
171
|
+
lines.push(`\u2502 Tools: ${String(toolCount + ' discovered').padEnd(38)}\u2502`);
|
|
172
|
+
}
|
|
173
|
+
lines.push('\u2514' + '\u2500'.repeat(50) + '\u2518');
|
|
174
|
+
return lines.join('\n');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Format a startup banner for the explore command.
|
|
178
|
+
*/
|
|
179
|
+
export function formatExploreBanner(options) {
|
|
180
|
+
const { serverCommand, provider, model, personas, questionsPerTool, toolCount, } = options;
|
|
181
|
+
// Truncate server command if too long
|
|
182
|
+
const maxCmdLen = DISPLAY_LIMITS.BANNER_COMMAND_MAX_LENGTH;
|
|
183
|
+
const displayCmd = serverCommand.length > maxCmdLen
|
|
184
|
+
? serverCommand.substring(0, maxCmdLen - 3) + '...'
|
|
185
|
+
: serverCommand;
|
|
186
|
+
const personaList = personas.join(', ');
|
|
187
|
+
const personaLabel = `${personaList} (${personas.length})`;
|
|
188
|
+
const lines = [
|
|
189
|
+
'Bellwether Explore - Behavioral Documentation',
|
|
190
|
+
'',
|
|
191
|
+
'\u250C' + '\u2500'.repeat(50) + '\u2510',
|
|
192
|
+
`\u2502 Server: ${displayCmd.padEnd(38)}\u2502`,
|
|
193
|
+
`\u2502 Provider: ${provider.padEnd(38)}\u2502`,
|
|
194
|
+
`\u2502 Model: ${model.padEnd(38)}\u2502`,
|
|
195
|
+
`\u2502 Personas: ${personaLabel.padEnd(38)}\u2502`,
|
|
196
|
+
`\u2502 Questions: ${String(questionsPerTool + ' per tool').padEnd(38)}\u2502`,
|
|
197
|
+
];
|
|
198
|
+
if (toolCount !== undefined) {
|
|
199
|
+
lines.push(`\u2502 Tools: ${String(toolCount + ' discovered').padEnd(38)}\u2502`);
|
|
200
|
+
}
|
|
201
|
+
lines.push('\u2514' + '\u2500'.repeat(50) + '\u2518');
|
|
202
|
+
lines.push('');
|
|
203
|
+
lines.push('Tip: For drift detection, use "bellwether check" instead');
|
|
204
|
+
return lines.join('\n');
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ServerContext } from '../../interview/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extract server context from command and arguments.
|
|
4
|
+
*
|
|
5
|
+
* Analyzes the server command to provide hints about the server type
|
|
6
|
+
* (filesystem, database, git, etc.) and extracts path arguments for
|
|
7
|
+
* allowed directories.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractServerContextFromArgs(command: string, args: string[]): ServerContext;
|
|
10
|
+
//# sourceMappingURL=server-context.d.ts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract server context from command and arguments.
|
|
3
|
+
*
|
|
4
|
+
* Analyzes the server command to provide hints about the server type
|
|
5
|
+
* (filesystem, database, git, etc.) and extracts path arguments for
|
|
6
|
+
* allowed directories.
|
|
7
|
+
*/
|
|
8
|
+
export function extractServerContextFromArgs(command, args) {
|
|
9
|
+
const context = {
|
|
10
|
+
allowedDirectories: [],
|
|
11
|
+
constraints: [],
|
|
12
|
+
hints: [],
|
|
13
|
+
};
|
|
14
|
+
const fullCommand = `${command} ${args.join(' ')}`.toLowerCase();
|
|
15
|
+
const pathArgs = args.filter((arg) => arg.startsWith('/') && !arg.startsWith('--'));
|
|
16
|
+
if (fullCommand.includes('filesystem') || fullCommand.includes('file-system')) {
|
|
17
|
+
context.allowedDirectories = pathArgs;
|
|
18
|
+
if (context.allowedDirectories.length > 0) {
|
|
19
|
+
context.hints.push(`Filesystem server with allowed directories: ${context.allowedDirectories.join(', ')}`);
|
|
20
|
+
}
|
|
21
|
+
context.constraints.push('Operations limited to specified directories');
|
|
22
|
+
}
|
|
23
|
+
else if (fullCommand.includes('postgres') || fullCommand.includes('mysql') || fullCommand.includes('sqlite')) {
|
|
24
|
+
context.hints.push('Database server - SQL operations expected');
|
|
25
|
+
context.constraints.push('Database operations only');
|
|
26
|
+
}
|
|
27
|
+
else if (fullCommand.includes('git')) {
|
|
28
|
+
context.allowedDirectories = pathArgs;
|
|
29
|
+
context.hints.push('Git server - repository operations expected');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
context.allowedDirectories = pathArgs;
|
|
33
|
+
}
|
|
34
|
+
return context;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=server-context.js.map
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication module for Bellwether Cloud.
|
|
3
|
+
*
|
|
4
|
+
* Handles session storage, retrieval, and management.
|
|
5
|
+
* Sessions are stored in ~/.bellwether/session.json with restricted permissions.
|
|
6
|
+
*/
|
|
7
|
+
import type { StoredSession, ProjectLink, SessionTeam } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Directory for bellwether configuration.
|
|
10
|
+
*/
|
|
11
|
+
export declare const CONFIG_DIR: string;
|
|
12
|
+
/**
|
|
13
|
+
* Path to session file.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SESSION_FILE: string;
|
|
16
|
+
/**
|
|
17
|
+
* Environment variable name for session token.
|
|
18
|
+
*/
|
|
19
|
+
export declare const SESSION_ENV_VAR = "BELLWETHER_SESSION";
|
|
20
|
+
/**
|
|
21
|
+
* Environment variable name for API base URL.
|
|
22
|
+
*/
|
|
23
|
+
export declare const BASE_URL_ENV_VAR = "BELLWETHER_API_URL";
|
|
24
|
+
/**
|
|
25
|
+
* Environment variable name for team ID override.
|
|
26
|
+
*/
|
|
27
|
+
export declare const TEAM_ID_ENV_VAR = "BELLWETHER_TEAM_ID";
|
|
28
|
+
/**
|
|
29
|
+
* Session token prefix for validation.
|
|
30
|
+
*/
|
|
31
|
+
export declare const SESSION_PREFIX: "sess_";
|
|
32
|
+
/**
|
|
33
|
+
* Mock session prefix for development.
|
|
34
|
+
*/
|
|
35
|
+
export declare const MOCK_SESSION_PREFIX: "sess_mock_";
|
|
36
|
+
/**
|
|
37
|
+
* Ensure the config directory exists.
|
|
38
|
+
*/
|
|
39
|
+
export declare function ensureConfigDir(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get the stored session.
|
|
42
|
+
* Returns null if no session exists, session is expired, or file is corrupted.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getStoredSession(): StoredSession | null;
|
|
45
|
+
/**
|
|
46
|
+
* Save session to disk.
|
|
47
|
+
* File is created with 0600 permissions (owner read/write only).
|
|
48
|
+
*/
|
|
49
|
+
export declare function saveSession(session: StoredSession): void;
|
|
50
|
+
/**
|
|
51
|
+
* Clear the stored session.
|
|
52
|
+
*/
|
|
53
|
+
export declare function clearSession(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Get the session token.
|
|
56
|
+
*
|
|
57
|
+
* Priority:
|
|
58
|
+
* 1. BELLWETHER_SESSION environment variable
|
|
59
|
+
* 2. Stored session in ~/.bellwether/session.json
|
|
60
|
+
*/
|
|
61
|
+
export declare function getSessionToken(): string | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Get the API base URL.
|
|
64
|
+
*
|
|
65
|
+
* Priority:
|
|
66
|
+
* 1. BELLWETHER_API_URL environment variable
|
|
67
|
+
* 2. Default: https://api.bellwether.sh
|
|
68
|
+
*
|
|
69
|
+
* Security: Validates that custom URLs use HTTPS (except localhost for development).
|
|
70
|
+
*/
|
|
71
|
+
export declare function getBaseUrl(): string;
|
|
72
|
+
/**
|
|
73
|
+
* Check if a session token appears valid (strict format check).
|
|
74
|
+
* Validates against exact patterns to prevent injection.
|
|
75
|
+
*/
|
|
76
|
+
export declare function isValidSessionFormat(token: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Check if a session token is a mock session (for development).
|
|
79
|
+
*/
|
|
80
|
+
export declare function isMockSession(token: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Check if currently authenticated.
|
|
83
|
+
*/
|
|
84
|
+
export declare function isAuthenticated(): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Get the active team ID.
|
|
87
|
+
*
|
|
88
|
+
* Priority:
|
|
89
|
+
* 1. BELLWETHER_TEAM_ID environment variable
|
|
90
|
+
* 2. Team ID from project link (if in a linked project directory)
|
|
91
|
+
* 3. Active team ID from stored session
|
|
92
|
+
*/
|
|
93
|
+
export declare function getTeamId(projectDir?: string): string | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Get the active team details.
|
|
96
|
+
* Returns the full team object if available.
|
|
97
|
+
*/
|
|
98
|
+
export declare function getActiveTeam(projectDir?: string): SessionTeam | undefined;
|
|
99
|
+
/**
|
|
100
|
+
* Get all teams from the stored session.
|
|
101
|
+
*/
|
|
102
|
+
export declare function getSessionTeams(): SessionTeam[];
|
|
103
|
+
/**
|
|
104
|
+
* Set the active team in the stored session.
|
|
105
|
+
* Returns true if successful, false if team not found in session.
|
|
106
|
+
*/
|
|
107
|
+
export declare function setActiveTeam(teamId: string): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Update the session token in the stored session.
|
|
110
|
+
* Called when the server rotates the token and returns a new one.
|
|
111
|
+
*
|
|
112
|
+
* @param newToken - The new session token from the server
|
|
113
|
+
* @returns Promise that resolves when the session is updated
|
|
114
|
+
*/
|
|
115
|
+
export declare function updateSessionToken(newToken: string): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Directory name for per-project bellwether config.
|
|
118
|
+
*/
|
|
119
|
+
export declare const PROJECT_CONFIG_DIR = ".bellwether";
|
|
120
|
+
/**
|
|
121
|
+
* File name for project link configuration.
|
|
122
|
+
*/
|
|
123
|
+
export declare const LINK_FILE = "link.json";
|
|
124
|
+
/**
|
|
125
|
+
* Get the project link file path for a given directory.
|
|
126
|
+
*/
|
|
127
|
+
export declare function getLinkFilePath(projectDir?: string): string;
|
|
128
|
+
/**
|
|
129
|
+
* Get the linked project for the current directory.
|
|
130
|
+
*/
|
|
131
|
+
export declare function getLinkedProject(projectDir?: string): ProjectLink | null;
|
|
132
|
+
/**
|
|
133
|
+
* Save a project link for the current directory.
|
|
134
|
+
*/
|
|
135
|
+
export declare function saveProjectLink(link: ProjectLink, projectDir?: string): void;
|
|
136
|
+
/**
|
|
137
|
+
* Remove the project link for the current directory.
|
|
138
|
+
*/
|
|
139
|
+
export declare function removeProjectLink(projectDir?: string): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Check if the current directory is linked to a project.
|
|
142
|
+
*/
|
|
143
|
+
export declare function isLinked(projectDir?: string): boolean;
|
|
144
|
+
//# sourceMappingURL=auth.d.ts.map
|