@syrin/cli 1.3.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 +15 -0
- package/README.md +302 -0
- package/dist/cli/commands/analyse.d.ts +16 -0
- package/dist/cli/commands/analyse.js +61 -0
- package/dist/cli/commands/dev.d.ts +23 -0
- package/dist/cli/commands/dev.js +419 -0
- package/dist/cli/commands/doctor.d.ts +10 -0
- package/dist/cli/commands/doctor.js +195 -0
- package/dist/cli/commands/index.d.ts +12 -0
- package/dist/cli/commands/index.js +12 -0
- package/dist/cli/commands/init.d.ts +16 -0
- package/dist/cli/commands/init.js +90 -0
- package/dist/cli/commands/list.d.ts +15 -0
- package/dist/cli/commands/list.js +50 -0
- package/dist/cli/commands/rollback.d.ts +12 -0
- package/dist/cli/commands/rollback.js +101 -0
- package/dist/cli/commands/test.d.ts +31 -0
- package/dist/cli/commands/test.js +88 -0
- package/dist/cli/commands/update.d.ts +9 -0
- package/dist/cli/commands/update.js +76 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.js +342 -0
- package/dist/cli/prompts/index.d.ts +5 -0
- package/dist/cli/prompts/index.js +5 -0
- package/dist/cli/prompts/init-prompt.d.ts +17 -0
- package/dist/cli/prompts/init-prompt.js +263 -0
- package/dist/cli/utils/command-error-handler.d.ts +14 -0
- package/dist/cli/utils/command-error-handler.js +35 -0
- package/dist/cli/utils/common-types.d.ts +24 -0
- package/dist/cli/utils/common-types.js +6 -0
- package/dist/cli/utils/connection-handler.d.ts +37 -0
- package/dist/cli/utils/connection-handler.js +90 -0
- package/dist/cli/utils/index.d.ts +11 -0
- package/dist/cli/utils/index.js +11 -0
- package/dist/cli/utils/option-parsers.d.ts +41 -0
- package/dist/cli/utils/option-parsers.js +92 -0
- package/dist/cli/utils/output-utils.d.ts +12 -0
- package/dist/cli/utils/output-utils.js +21 -0
- package/dist/cli/utils/transport-resolver.d.ts +33 -0
- package/dist/cli/utils/transport-resolver.js +82 -0
- package/dist/cli/utils/version-banner.d.ts +10 -0
- package/dist/cli/utils/version-banner.js +26 -0
- package/dist/config/env-checker.d.ts +37 -0
- package/dist/config/env-checker.js +136 -0
- package/dist/config/generator.d.ts +19 -0
- package/dist/config/generator.js +196 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.js +9 -0
- package/dist/config/loader.d.ts +19 -0
- package/dist/config/loader.js +57 -0
- package/dist/config/schema.d.ts +42 -0
- package/dist/config/schema.js +181 -0
- package/dist/config/syrin.template.yaml +127 -0
- package/dist/config/types.d.ts +87 -0
- package/dist/config/types.js +6 -0
- package/dist/constants/app.d.ts +9 -0
- package/dist/constants/app.js +9 -0
- package/dist/constants/commands.d.ts +43 -0
- package/dist/constants/commands.js +43 -0
- package/dist/constants/defaults.d.ts +18 -0
- package/dist/constants/defaults.js +18 -0
- package/dist/constants/env-vars.d.ts +11 -0
- package/dist/constants/env-vars.js +11 -0
- package/dist/constants/icons.d.ts +23 -0
- package/dist/constants/icons.js +23 -0
- package/dist/constants/index.d.ts +17 -0
- package/dist/constants/index.js +17 -0
- package/dist/constants/labels.d.ts +38 -0
- package/dist/constants/labels.js +42 -0
- package/dist/constants/links.d.ts +10 -0
- package/dist/constants/links.js +11 -0
- package/dist/constants/list.d.ts +10 -0
- package/dist/constants/list.js +9 -0
- package/dist/constants/llm.d.ts +26 -0
- package/dist/constants/llm.js +25 -0
- package/dist/constants/messages.d.ts +107 -0
- package/dist/constants/messages.js +138 -0
- package/dist/constants/paths.d.ts +29 -0
- package/dist/constants/paths.js +29 -0
- package/dist/constants/transport.d.ts +9 -0
- package/dist/constants/transport.js +8 -0
- package/dist/events/emitter.d.ts +64 -0
- package/dist/events/emitter.js +142 -0
- package/dist/events/event-type.d.ts +66 -0
- package/dist/events/event-type.js +81 -0
- package/dist/events/payloads/diagnostics.d.ts +24 -0
- package/dist/events/payloads/diagnostics.js +5 -0
- package/dist/events/payloads/index.d.ts +15 -0
- package/dist/events/payloads/index.js +6 -0
- package/dist/events/payloads/llm.d.ts +58 -0
- package/dist/events/payloads/llm.js +6 -0
- package/dist/events/payloads/registry.d.ts +28 -0
- package/dist/events/payloads/registry.js +5 -0
- package/dist/events/payloads/session.d.ts +32 -0
- package/dist/events/payloads/session.js +5 -0
- package/dist/events/payloads/testing.d.ts +17 -0
- package/dist/events/payloads/testing.js +5 -0
- package/dist/events/payloads/tool.d.ts +29 -0
- package/dist/events/payloads/tool.js +5 -0
- package/dist/events/payloads/transport.d.ts +30 -0
- package/dist/events/payloads/transport.js +5 -0
- package/dist/events/payloads/validation.d.ts +37 -0
- package/dist/events/payloads/validation.js +5 -0
- package/dist/events/payloads/workflow.d.ts +45 -0
- package/dist/events/payloads/workflow.js +5 -0
- package/dist/events/store/file-store.d.ts +37 -0
- package/dist/events/store/file-store.js +113 -0
- package/dist/events/store/index.d.ts +7 -0
- package/dist/events/store/index.js +6 -0
- package/dist/events/store/memory-store.d.ts +26 -0
- package/dist/events/store/memory-store.js +39 -0
- package/dist/events/store.d.ts +11 -0
- package/dist/events/store.js +2 -0
- package/dist/events/types.d.ts +14 -0
- package/dist/events/types.js +2 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +30 -0
- package/dist/presentation/analysis-ui.d.ts +24 -0
- package/dist/presentation/analysis-ui.js +158 -0
- package/dist/presentation/dev/chat-ui-types.d.ts +68 -0
- package/dist/presentation/dev/chat-ui-types.js +5 -0
- package/dist/presentation/dev/chat-ui.d.ts +61 -0
- package/dist/presentation/dev/chat-ui.js +714 -0
- package/dist/presentation/dev/components/assistant-message.d.ts +19 -0
- package/dist/presentation/dev/components/assistant-message.js +36 -0
- package/dist/presentation/dev/components/header.d.ts +16 -0
- package/dist/presentation/dev/components/header.js +22 -0
- package/dist/presentation/dev/components/index.d.ts +13 -0
- package/dist/presentation/dev/components/index.js +13 -0
- package/dist/presentation/dev/components/input-panel.d.ts +22 -0
- package/dist/presentation/dev/components/input-panel.js +43 -0
- package/dist/presentation/dev/components/message-component.d.ts +16 -0
- package/dist/presentation/dev/components/message-component.js +51 -0
- package/dist/presentation/dev/components/messages-list.d.ts +24 -0
- package/dist/presentation/dev/components/messages-list.js +48 -0
- package/dist/presentation/dev/components/system-message.d.ts +16 -0
- package/dist/presentation/dev/components/system-message.js +26 -0
- package/dist/presentation/dev/components/user-message.d.ts +21 -0
- package/dist/presentation/dev/components/user-message.js +35 -0
- package/dist/presentation/dev/components/welcome-banner.d.ts +24 -0
- package/dist/presentation/dev/components/welcome-banner.js +146 -0
- package/dist/presentation/dev/goodbye-messages.d.ts +31 -0
- package/dist/presentation/dev/goodbye-messages.js +100 -0
- package/dist/presentation/dev/index.d.ts +5 -0
- package/dist/presentation/dev/index.js +5 -0
- package/dist/presentation/dev/text-wrapper.d.ts +30 -0
- package/dist/presentation/dev/text-wrapper.js +74 -0
- package/dist/presentation/dev-ui.d.ts +33 -0
- package/dist/presentation/dev-ui.js +246 -0
- package/dist/presentation/doctor-ui.d.ts +40 -0
- package/dist/presentation/doctor-ui.js +157 -0
- package/dist/presentation/init-ui.d.ts +14 -0
- package/dist/presentation/init-ui.js +41 -0
- package/dist/presentation/list-ui.d.ts +44 -0
- package/dist/presentation/list-ui.js +139 -0
- package/dist/presentation/test-ui.d.ts +49 -0
- package/dist/presentation/test-ui.js +358 -0
- package/dist/runtime/analysis/analyser.d.ts +14 -0
- package/dist/runtime/analysis/analyser.js +88 -0
- package/dist/runtime/analysis/dependencies.d.ts +10 -0
- package/dist/runtime/analysis/dependencies.js +140 -0
- package/dist/runtime/analysis/index.d.ts +10 -0
- package/dist/runtime/analysis/index.js +10 -0
- package/dist/runtime/analysis/indexer.d.ts +10 -0
- package/dist/runtime/analysis/indexer.js +62 -0
- package/dist/runtime/analysis/loader.d.ts +15 -0
- package/dist/runtime/analysis/loader.js +47 -0
- package/dist/runtime/analysis/normalizer.d.ts +14 -0
- package/dist/runtime/analysis/normalizer.js +184 -0
- package/dist/runtime/analysis/rules/__test-helpers__.d.ts +18 -0
- package/dist/runtime/analysis/rules/__test-helpers__.js +40 -0
- package/dist/runtime/analysis/rules/base.d.ts +38 -0
- package/dist/runtime/analysis/rules/base.js +23 -0
- package/dist/runtime/analysis/rules/error-codes.d.ts +64 -0
- package/dist/runtime/analysis/rules/error-codes.js +73 -0
- package/dist/runtime/analysis/rules/errors/e000-tool-not-found.d.ts +35 -0
- package/dist/runtime/analysis/rules/errors/e000-tool-not-found.js +32 -0
- package/dist/runtime/analysis/rules/errors/e001-missing-output-schema.d.ts +22 -0
- package/dist/runtime/analysis/rules/errors/e001-missing-output-schema.js +30 -0
- package/dist/runtime/analysis/rules/errors/e002-underspecified-input.d.ts +24 -0
- package/dist/runtime/analysis/rules/errors/e002-underspecified-input.js +52 -0
- package/dist/runtime/analysis/rules/errors/e003-type-mismatch.d.ts +23 -0
- package/dist/runtime/analysis/rules/errors/e003-type-mismatch.js +73 -0
- package/dist/runtime/analysis/rules/errors/e004-free-text-propagation.d.ts +23 -0
- package/dist/runtime/analysis/rules/errors/e004-free-text-propagation.js +47 -0
- package/dist/runtime/analysis/rules/errors/e005-tool-ambiguity.d.ts +25 -0
- package/dist/runtime/analysis/rules/errors/e005-tool-ambiguity.js +73 -0
- package/dist/runtime/analysis/rules/errors/e006-param-not-in-description.d.ts +22 -0
- package/dist/runtime/analysis/rules/errors/e006-param-not-in-description.js +57 -0
- package/dist/runtime/analysis/rules/errors/e007-output-not-guaranteed.d.ts +23 -0
- package/dist/runtime/analysis/rules/errors/e007-output-not-guaranteed.js +56 -0
- package/dist/runtime/analysis/rules/errors/e008-circular-dependency.d.ts +22 -0
- package/dist/runtime/analysis/rules/errors/e008-circular-dependency.js +84 -0
- package/dist/runtime/analysis/rules/errors/e009-implicit-user-input.d.ts +23 -0
- package/dist/runtime/analysis/rules/errors/e009-implicit-user-input.js +89 -0
- package/dist/runtime/analysis/rules/errors/e010-non-serializable.d.ts +25 -0
- package/dist/runtime/analysis/rules/errors/e010-non-serializable.js +46 -0
- package/dist/runtime/analysis/rules/errors/e011-missing-tool-description.d.ts +24 -0
- package/dist/runtime/analysis/rules/errors/e011-missing-tool-description.js +33 -0
- package/dist/runtime/analysis/rules/errors/e012-side-effect-detected.d.ts +39 -0
- package/dist/runtime/analysis/rules/errors/e012-side-effect-detected.js +40 -0
- package/dist/runtime/analysis/rules/errors/e013-non-deterministic-output.d.ts +37 -0
- package/dist/runtime/analysis/rules/errors/e013-non-deterministic-output.js +34 -0
- package/dist/runtime/analysis/rules/errors/e013-output-explosion.d.ts +39 -0
- package/dist/runtime/analysis/rules/errors/e013-output-explosion.js +36 -0
- package/dist/runtime/analysis/rules/errors/e014-hidden-dependency.d.ts +42 -0
- package/dist/runtime/analysis/rules/errors/e014-hidden-dependency.js +46 -0
- package/dist/runtime/analysis/rules/errors/e014-output-explosion.d.ts +39 -0
- package/dist/runtime/analysis/rules/errors/e014-output-explosion.js +36 -0
- package/dist/runtime/analysis/rules/errors/e015-hidden-dependency.d.ts +42 -0
- package/dist/runtime/analysis/rules/errors/e015-hidden-dependency.js +46 -0
- package/dist/runtime/analysis/rules/errors/e015-unbounded-execution.d.ts +44 -0
- package/dist/runtime/analysis/rules/errors/e015-unbounded-execution.js +66 -0
- package/dist/runtime/analysis/rules/errors/e016-output-validation-failed.d.ts +43 -0
- package/dist/runtime/analysis/rules/errors/e016-output-validation-failed.js +42 -0
- package/dist/runtime/analysis/rules/errors/e016-unbounded-execution.d.ts +44 -0
- package/dist/runtime/analysis/rules/errors/e016-unbounded-execution.js +66 -0
- package/dist/runtime/analysis/rules/errors/e017-input-validation-failed.d.ts +57 -0
- package/dist/runtime/analysis/rules/errors/e017-input-validation-failed.js +80 -0
- package/dist/runtime/analysis/rules/errors/e017-output-validation-failed.d.ts +43 -0
- package/dist/runtime/analysis/rules/errors/e017-output-validation-failed.js +42 -0
- package/dist/runtime/analysis/rules/errors/e018-input-validation-failed.d.ts +57 -0
- package/dist/runtime/analysis/rules/errors/e018-input-validation-failed.js +80 -0
- package/dist/runtime/analysis/rules/errors/e018-tool-execution-failed.d.ts +38 -0
- package/dist/runtime/analysis/rules/errors/e018-tool-execution-failed.js +37 -0
- package/dist/runtime/analysis/rules/errors/e019-tool-execution-failed.d.ts +38 -0
- package/dist/runtime/analysis/rules/errors/e019-tool-execution-failed.js +37 -0
- package/dist/runtime/analysis/rules/errors/e019-unexpected-test-result.d.ts +65 -0
- package/dist/runtime/analysis/rules/errors/e019-unexpected-test-result.js +109 -0
- package/dist/runtime/analysis/rules/errors/e020-unexpected-test-result.d.ts +65 -0
- package/dist/runtime/analysis/rules/errors/e020-unexpected-test-result.js +109 -0
- package/dist/runtime/analysis/rules/errors/e100-missing-output-schema.d.ts +22 -0
- package/dist/runtime/analysis/rules/errors/e100-missing-output-schema.js +30 -0
- package/dist/runtime/analysis/rules/errors/e101-missing-tool-description.d.ts +24 -0
- package/dist/runtime/analysis/rules/errors/e101-missing-tool-description.js +33 -0
- package/dist/runtime/analysis/rules/errors/e102-underspecified-input.d.ts +24 -0
- package/dist/runtime/analysis/rules/errors/e102-underspecified-input.js +52 -0
- package/dist/runtime/analysis/rules/errors/e103-type-mismatch.d.ts +23 -0
- package/dist/runtime/analysis/rules/errors/e103-type-mismatch.js +72 -0
- package/dist/runtime/analysis/rules/errors/e104-param-not-in-description.d.ts +22 -0
- package/dist/runtime/analysis/rules/errors/e104-param-not-in-description.js +57 -0
- package/dist/runtime/analysis/rules/errors/e105-free-text-propagation.d.ts +23 -0
- package/dist/runtime/analysis/rules/errors/e105-free-text-propagation.js +47 -0
- package/dist/runtime/analysis/rules/errors/e106-output-not-guaranteed.d.ts +23 -0
- package/dist/runtime/analysis/rules/errors/e106-output-not-guaranteed.js +58 -0
- package/dist/runtime/analysis/rules/errors/e107-circular-dependency.d.ts +22 -0
- package/dist/runtime/analysis/rules/errors/e107-circular-dependency.js +84 -0
- package/dist/runtime/analysis/rules/errors/e108-implicit-user-input.d.ts +23 -0
- package/dist/runtime/analysis/rules/errors/e108-implicit-user-input.js +94 -0
- package/dist/runtime/analysis/rules/errors/e109-non-serializable.d.ts +25 -0
- package/dist/runtime/analysis/rules/errors/e109-non-serializable.js +44 -0
- package/dist/runtime/analysis/rules/errors/e110-tool-ambiguity.d.ts +25 -0
- package/dist/runtime/analysis/rules/errors/e110-tool-ambiguity.js +73 -0
- package/dist/runtime/analysis/rules/errors/e200-input-validation-failed.d.ts +57 -0
- package/dist/runtime/analysis/rules/errors/e200-input-validation-failed.js +71 -0
- package/dist/runtime/analysis/rules/errors/e300-output-validation-failed.d.ts +43 -0
- package/dist/runtime/analysis/rules/errors/e300-output-validation-failed.js +44 -0
- package/dist/runtime/analysis/rules/errors/e301-output-explosion.d.ts +39 -0
- package/dist/runtime/analysis/rules/errors/e301-output-explosion.js +36 -0
- package/dist/runtime/analysis/rules/errors/e400-tool-execution-failed.d.ts +38 -0
- package/dist/runtime/analysis/rules/errors/e400-tool-execution-failed.js +37 -0
- package/dist/runtime/analysis/rules/errors/e403-unbounded-execution.d.ts +44 -0
- package/dist/runtime/analysis/rules/errors/e403-unbounded-execution.js +66 -0
- package/dist/runtime/analysis/rules/errors/e500-side-effect-detected.d.ts +39 -0
- package/dist/runtime/analysis/rules/errors/e500-side-effect-detected.js +40 -0
- package/dist/runtime/analysis/rules/errors/e501-hidden-dependency.d.ts +47 -0
- package/dist/runtime/analysis/rules/errors/e501-hidden-dependency.js +46 -0
- package/dist/runtime/analysis/rules/errors/e600-unexpected-test-result.d.ts +65 -0
- package/dist/runtime/analysis/rules/errors/e600-unexpected-test-result.js +109 -0
- package/dist/runtime/analysis/rules/index.d.ts +18 -0
- package/dist/runtime/analysis/rules/index.js +94 -0
- package/dist/runtime/analysis/rules/warnings/w001-implicit-dependency.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w001-implicit-dependency.js +39 -0
- package/dist/runtime/analysis/rules/warnings/w002-free-text-without-normalization.d.ts +24 -0
- package/dist/runtime/analysis/rules/warnings/w002-free-text-without-normalization.js +40 -0
- package/dist/runtime/analysis/rules/warnings/w003-missing-examples.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w003-missing-examples.js +84 -0
- package/dist/runtime/analysis/rules/warnings/w004-overloaded-responsibility.d.ts +23 -0
- package/dist/runtime/analysis/rules/warnings/w004-overloaded-responsibility.js +96 -0
- package/dist/runtime/analysis/rules/warnings/w005-generic-description.d.ts +53 -0
- package/dist/runtime/analysis/rules/warnings/w005-generic-description.js +108 -0
- package/dist/runtime/analysis/rules/warnings/w006-optional-as-required.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w006-optional-as-required.js +44 -0
- package/dist/runtime/analysis/rules/warnings/w007-broad-output-schema.d.ts +23 -0
- package/dist/runtime/analysis/rules/warnings/w007-broad-output-schema.js +37 -0
- package/dist/runtime/analysis/rules/warnings/w008-multiple-entry-points.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w008-multiple-entry-points.js +97 -0
- package/dist/runtime/analysis/rules/warnings/w009-hidden-side-effects.d.ts +23 -0
- package/dist/runtime/analysis/rules/warnings/w009-hidden-side-effects.js +88 -0
- package/dist/runtime/analysis/rules/warnings/w010-output-not-reusable.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w010-output-not-reusable.js +81 -0
- package/dist/runtime/analysis/rules/warnings/w021-weak-schema.d.ts +40 -0
- package/dist/runtime/analysis/rules/warnings/w021-weak-schema.js +32 -0
- package/dist/runtime/analysis/rules/warnings/w022-high-entropy-output.d.ts +39 -0
- package/dist/runtime/analysis/rules/warnings/w022-high-entropy-output.js +36 -0
- package/dist/runtime/analysis/rules/warnings/w023-unstable-defaults.d.ts +38 -0
- package/dist/runtime/analysis/rules/warnings/w023-unstable-defaults.js +36 -0
- package/dist/runtime/analysis/rules/warnings/w100-implicit-dependency.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w100-implicit-dependency.js +89 -0
- package/dist/runtime/analysis/rules/warnings/w101-free-text-without-normalization.d.ts +24 -0
- package/dist/runtime/analysis/rules/warnings/w101-free-text-without-normalization.js +40 -0
- package/dist/runtime/analysis/rules/warnings/w102-missing-examples.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w102-missing-examples.js +76 -0
- package/dist/runtime/analysis/rules/warnings/w103-overloaded-responsibility.d.ts +23 -0
- package/dist/runtime/analysis/rules/warnings/w103-overloaded-responsibility.js +91 -0
- package/dist/runtime/analysis/rules/warnings/w104-generic-description.d.ts +53 -0
- package/dist/runtime/analysis/rules/warnings/w104-generic-description.js +108 -0
- package/dist/runtime/analysis/rules/warnings/w105-optional-as-required.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w105-optional-as-required.js +45 -0
- package/dist/runtime/analysis/rules/warnings/w106-broad-output-schema.d.ts +23 -0
- package/dist/runtime/analysis/rules/warnings/w106-broad-output-schema.js +37 -0
- package/dist/runtime/analysis/rules/warnings/w107-multiple-entry-points.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w107-multiple-entry-points.js +97 -0
- package/dist/runtime/analysis/rules/warnings/w108-hidden-side-effects.d.ts +23 -0
- package/dist/runtime/analysis/rules/warnings/w108-hidden-side-effects.js +94 -0
- package/dist/runtime/analysis/rules/warnings/w109-output-not-reusable.d.ts +22 -0
- package/dist/runtime/analysis/rules/warnings/w109-output-not-reusable.js +63 -0
- package/dist/runtime/analysis/rules/warnings/w110-weak-schema.d.ts +40 -0
- package/dist/runtime/analysis/rules/warnings/w110-weak-schema.js +32 -0
- package/dist/runtime/analysis/rules/warnings/w300-high-entropy-output.d.ts +39 -0
- package/dist/runtime/analysis/rules/warnings/w300-high-entropy-output.js +47 -0
- package/dist/runtime/analysis/rules/warnings/w301-unstable-defaults.d.ts +38 -0
- package/dist/runtime/analysis/rules/warnings/w301-unstable-defaults.js +36 -0
- package/dist/runtime/analysis/strict-mode.d.ts +21 -0
- package/dist/runtime/analysis/strict-mode.js +44 -0
- package/dist/runtime/analysis/types.d.ts +133 -0
- package/dist/runtime/analysis/types.js +6 -0
- package/dist/runtime/analysis/utils.d.ts +19 -0
- package/dist/runtime/analysis/utils.js +21 -0
- package/dist/runtime/dev/data-manager.d.ts +55 -0
- package/dist/runtime/dev/data-manager.js +87 -0
- package/dist/runtime/dev/event-mapper.d.ts +100 -0
- package/dist/runtime/dev/event-mapper.js +400 -0
- package/dist/runtime/dev/formatter.d.ts +94 -0
- package/dist/runtime/dev/formatter.js +236 -0
- package/dist/runtime/dev/index.d.ts +9 -0
- package/dist/runtime/dev/index.js +9 -0
- package/dist/runtime/dev/repl.d.ts +114 -0
- package/dist/runtime/dev/repl.js +310 -0
- package/dist/runtime/dev/session.d.ts +86 -0
- package/dist/runtime/dev/session.js +447 -0
- package/dist/runtime/dev/stack-trace.d.ts +77 -0
- package/dist/runtime/dev/stack-trace.js +286 -0
- package/dist/runtime/dev/types.d.ts +54 -0
- package/dist/runtime/dev/types.js +5 -0
- package/dist/runtime/llm/claude.d.ts +27 -0
- package/dist/runtime/llm/claude.js +150 -0
- package/dist/runtime/llm/factory.d.ts +30 -0
- package/dist/runtime/llm/factory.js +78 -0
- package/dist/runtime/llm/index.d.ts +10 -0
- package/dist/runtime/llm/index.js +10 -0
- package/dist/runtime/llm/ollama.d.ts +45 -0
- package/dist/runtime/llm/ollama.js +449 -0
- package/dist/runtime/llm/openai.d.ts +27 -0
- package/dist/runtime/llm/openai.js +170 -0
- package/dist/runtime/llm/provider.d.ts +32 -0
- package/dist/runtime/llm/provider.js +6 -0
- package/dist/runtime/llm/types.d.ts +55 -0
- package/dist/runtime/llm/types.js +6 -0
- package/dist/runtime/mcp/client/base.d.ts +40 -0
- package/dist/runtime/mcp/client/base.js +157 -0
- package/dist/runtime/mcp/client/manager.d.ts +91 -0
- package/dist/runtime/mcp/client/manager.js +248 -0
- package/dist/runtime/mcp/client/process.d.ts +31 -0
- package/dist/runtime/mcp/client/process.js +82 -0
- package/dist/runtime/mcp/connection.d.ts +63 -0
- package/dist/runtime/mcp/connection.js +449 -0
- package/dist/runtime/mcp/index.d.ts +9 -0
- package/dist/runtime/mcp/index.js +9 -0
- package/dist/runtime/mcp/list.d.ts +50 -0
- package/dist/runtime/mcp/list.js +65 -0
- package/dist/runtime/mcp/stdio-transport.d.ts +23 -0
- package/dist/runtime/mcp/stdio-transport.js +71 -0
- package/dist/runtime/mcp/types.d.ts +85 -0
- package/dist/runtime/mcp/types.js +6 -0
- package/dist/runtime/sandbox/executor.d.ts +102 -0
- package/dist/runtime/sandbox/executor.js +537 -0
- package/dist/runtime/sandbox/index.d.ts +9 -0
- package/dist/runtime/sandbox/index.js +9 -0
- package/dist/runtime/sandbox/io-monitor.d.ts +78 -0
- package/dist/runtime/sandbox/io-monitor.js +98 -0
- package/dist/runtime/sandbox/time-parser.d.ts +19 -0
- package/dist/runtime/sandbox/time-parser.js +67 -0
- package/dist/runtime/sandbox/types.d.ts +58 -0
- package/dist/runtime/sandbox/types.js +23 -0
- package/dist/runtime/test/behavior-observer.d.ts +61 -0
- package/dist/runtime/test/behavior-observer.js +140 -0
- package/dist/runtime/test/contract-loader.d.ts +41 -0
- package/dist/runtime/test/contract-loader.js +158 -0
- package/dist/runtime/test/contract-schema.d.ts +46 -0
- package/dist/runtime/test/contract-schema.js +107 -0
- package/dist/runtime/test/contract-types.d.ts +106 -0
- package/dist/runtime/test/contract-types.js +6 -0
- package/dist/runtime/test/dependency-tracker.d.ts +66 -0
- package/dist/runtime/test/dependency-tracker.js +80 -0
- package/dist/runtime/test/formatters.d.ts +18 -0
- package/dist/runtime/test/formatters.js +172 -0
- package/dist/runtime/test/index.d.ts +12 -0
- package/dist/runtime/test/index.js +13 -0
- package/dist/runtime/test/input-generator.d.ts +33 -0
- package/dist/runtime/test/input-generator.js +498 -0
- package/dist/runtime/test/mcp-root-detector.d.ts +31 -0
- package/dist/runtime/test/mcp-root-detector.js +105 -0
- package/dist/runtime/test/orchestrator.d.ts +131 -0
- package/dist/runtime/test/orchestrator.js +738 -0
- package/dist/runtime/test/output-validator.d.ts +44 -0
- package/dist/runtime/test/output-validator.js +262 -0
- package/dist/runtime/test/retry-tester.d.ts +44 -0
- package/dist/runtime/test/retry-tester.js +103 -0
- package/dist/runtime/test/runner.d.ts +28 -0
- package/dist/runtime/test/runner.js +55 -0
- package/dist/runtime/test/synthetic-input-generator.d.ts +11 -0
- package/dist/runtime/test/synthetic-input-generator.js +154 -0
- package/dist/runtime/test/test-runner.d.ts +28 -0
- package/dist/runtime/test/test-runner.js +55 -0
- package/dist/types/factories.d.ts +16 -0
- package/dist/types/factories.js +43 -0
- package/dist/types/ids.d.ts +16 -0
- package/dist/types/ids.js +2 -0
- package/dist/types/opaque.d.ts +4 -0
- package/dist/types/opaque.js +2 -0
- package/dist/utils/errors.d.ts +92 -0
- package/dist/utils/errors.js +97 -0
- package/dist/utils/gitignore.d.ts +11 -0
- package/dist/utils/gitignore.js +59 -0
- package/dist/utils/json-file-saver.d.ts +17 -0
- package/dist/utils/json-file-saver.js +81 -0
- package/dist/utils/json-formatter.d.ts +63 -0
- package/dist/utils/json-formatter.js +344 -0
- package/dist/utils/logger.d.ts +184 -0
- package/dist/utils/logger.js +330 -0
- package/dist/utils/package-manager.d.ts +30 -0
- package/dist/utils/package-manager.js +157 -0
- package/dist/utils/version-checker.d.ts +47 -0
- package/dist/utils/version-checker.js +167 -0
- package/dist/utils/version-display.d.ts +10 -0
- package/dist/utils/version-display.js +20 -0
- package/package.json +106 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E500: Side Effect Detected
|
|
3
|
+
*
|
|
4
|
+
* Condition: Tool attempts filesystem writes to project files (not temp directory)
|
|
5
|
+
*
|
|
6
|
+
* Why this is fatal:
|
|
7
|
+
* - Tools should not mutate project state
|
|
8
|
+
* - Breaks isolation and testability
|
|
9
|
+
* - Makes behavior unpredictable
|
|
10
|
+
*/
|
|
11
|
+
import { BaseRule } from '../base.js';
|
|
12
|
+
import type { AnalysisContext, Diagnostic } from '../../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Context for behavioral validation results.
|
|
15
|
+
* This extends the static analysis context with runtime observation data.
|
|
16
|
+
*/
|
|
17
|
+
export interface BehavioralContext {
|
|
18
|
+
/** Tool name */
|
|
19
|
+
toolName: string;
|
|
20
|
+
/** Side effects detected */
|
|
21
|
+
sideEffects: Array<{
|
|
22
|
+
operation: string;
|
|
23
|
+
path: string;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
declare class E500SideEffectDetectedRule extends BaseRule {
|
|
27
|
+
readonly id: "E500";
|
|
28
|
+
readonly severity: "error";
|
|
29
|
+
readonly ruleName = "Side Effect Detected";
|
|
30
|
+
readonly description = "Tool attempted filesystem write to project files. Tools should not mutate project state.";
|
|
31
|
+
check(_ctx: AnalysisContext): Diagnostic[];
|
|
32
|
+
/**
|
|
33
|
+
* Check with behavioral context (called from test orchestrator).
|
|
34
|
+
*/
|
|
35
|
+
checkWithBehavioralContext(behavioralCtx: BehavioralContext): Diagnostic[];
|
|
36
|
+
}
|
|
37
|
+
export declare const E500SideEffectDetected: E500SideEffectDetectedRule;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=e500-side-effect-detected.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E500: Side Effect Detected
|
|
3
|
+
*
|
|
4
|
+
* Condition: Tool attempts filesystem writes to project files (not temp directory)
|
|
5
|
+
*
|
|
6
|
+
* Why this is fatal:
|
|
7
|
+
* - Tools should not mutate project state
|
|
8
|
+
* - Breaks isolation and testability
|
|
9
|
+
* - Makes behavior unpredictable
|
|
10
|
+
*/
|
|
11
|
+
import { BaseRule } from '../base.js';
|
|
12
|
+
import { ERROR_CODES } from '../error-codes.js';
|
|
13
|
+
class E500SideEffectDetectedRule extends BaseRule {
|
|
14
|
+
id = ERROR_CODES.E500;
|
|
15
|
+
severity = 'error';
|
|
16
|
+
ruleName = 'Side Effect Detected';
|
|
17
|
+
description = 'Tool attempted filesystem write to project files. Tools should not mutate project state.';
|
|
18
|
+
check(_ctx) {
|
|
19
|
+
const diagnostics = [];
|
|
20
|
+
// This rule requires behavioral context (from runtime testing)
|
|
21
|
+
// It will be called with behavioral data from the test orchestrator
|
|
22
|
+
// For now, return empty - actual checking happens in test orchestrator
|
|
23
|
+
return diagnostics;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check with behavioral context (called from test orchestrator).
|
|
27
|
+
*/
|
|
28
|
+
checkWithBehavioralContext(behavioralCtx) {
|
|
29
|
+
const diagnostics = [];
|
|
30
|
+
if (behavioralCtx.sideEffects.length > 0) {
|
|
31
|
+
const sideEffectList = behavioralCtx.sideEffects
|
|
32
|
+
.map(se => ` - ${se.operation}: ${se.path}`)
|
|
33
|
+
.join('\n');
|
|
34
|
+
diagnostics.push(this.createDiagnostic(`Tool "${behavioralCtx.toolName}" attempted filesystem operations on project files:\n${sideEffectList}`, behavioralCtx.toolName, undefined, 'Remove filesystem writes or write only to temp directory. Tools should not mutate project state.'));
|
|
35
|
+
}
|
|
36
|
+
return diagnostics;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export const E500SideEffectDetected = new E500SideEffectDetectedRule();
|
|
40
|
+
//# sourceMappingURL=e500-side-effect-detected.js.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E501: Hidden Dependency
|
|
3
|
+
*
|
|
4
|
+
* Condition: Tool calls other tools during execution without declaring them in contract
|
|
5
|
+
*
|
|
6
|
+
* Why this is fatal:
|
|
7
|
+
* - Breaks isolation assumption
|
|
8
|
+
* - Creates hidden coupling
|
|
9
|
+
* - Makes tool behavior unpredictable
|
|
10
|
+
*/
|
|
11
|
+
import { BaseRule } from '../base.js';
|
|
12
|
+
import type { AnalysisContext, Diagnostic } from '../../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Context for hidden dependency detection.
|
|
15
|
+
*/
|
|
16
|
+
export interface HiddenDependencyContext {
|
|
17
|
+
/** Tool name */
|
|
18
|
+
toolName: string;
|
|
19
|
+
/** List of tool calls that are not declared */
|
|
20
|
+
hiddenDependencies: Array<{
|
|
21
|
+
toolName: string;
|
|
22
|
+
timestamp: number;
|
|
23
|
+
}>;
|
|
24
|
+
/** List of declared dependencies that don't exist in the MCP server */
|
|
25
|
+
missingDependencies?: string[];
|
|
26
|
+
/**
|
|
27
|
+
* Declared dependencies from contract.
|
|
28
|
+
* @todo Reserved for future validation/consumer use.
|
|
29
|
+
* Currently unused by checkWithBehavioralContext() but retained for potential
|
|
30
|
+
* future enhancements such as dependency validation or consumer tool analysis.
|
|
31
|
+
*/
|
|
32
|
+
declaredDependencies: string[];
|
|
33
|
+
}
|
|
34
|
+
declare class E501HiddenDependencyRule extends BaseRule {
|
|
35
|
+
readonly id: "E501";
|
|
36
|
+
readonly severity: "error";
|
|
37
|
+
readonly ruleName = "Hidden Dependency";
|
|
38
|
+
readonly description = "Tool calls other tools during execution without declaring them in contract. This breaks isolation.";
|
|
39
|
+
check(_ctx: AnalysisContext): Diagnostic[];
|
|
40
|
+
/**
|
|
41
|
+
* Check with behavioral context (called from test orchestrator).
|
|
42
|
+
*/
|
|
43
|
+
checkWithBehavioralContext(behavioralCtx: HiddenDependencyContext): Diagnostic[];
|
|
44
|
+
}
|
|
45
|
+
export declare const E501HiddenDependency: E501HiddenDependencyRule;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=e501-hidden-dependency.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E501: Hidden Dependency
|
|
3
|
+
*
|
|
4
|
+
* Condition: Tool calls other tools during execution without declaring them in contract
|
|
5
|
+
*
|
|
6
|
+
* Why this is fatal:
|
|
7
|
+
* - Breaks isolation assumption
|
|
8
|
+
* - Creates hidden coupling
|
|
9
|
+
* - Makes tool behavior unpredictable
|
|
10
|
+
*/
|
|
11
|
+
import { BaseRule } from '../base.js';
|
|
12
|
+
import { ERROR_CODES } from '../error-codes.js';
|
|
13
|
+
class E501HiddenDependencyRule extends BaseRule {
|
|
14
|
+
id = ERROR_CODES.E501;
|
|
15
|
+
severity = 'error';
|
|
16
|
+
ruleName = 'Hidden Dependency';
|
|
17
|
+
description = 'Tool calls other tools during execution without declaring them in contract. This breaks isolation.';
|
|
18
|
+
check(_ctx) {
|
|
19
|
+
// This rule requires behavioral context
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check with behavioral context (called from test orchestrator).
|
|
24
|
+
*/
|
|
25
|
+
checkWithBehavioralContext(behavioralCtx) {
|
|
26
|
+
const diagnostics = [];
|
|
27
|
+
// Check for hidden dependencies (tools called but not declared)
|
|
28
|
+
if (behavioralCtx.hiddenDependencies.length > 0) {
|
|
29
|
+
const dependencyList = behavioralCtx.hiddenDependencies
|
|
30
|
+
.map(dep => ` - ${dep.toolName}`)
|
|
31
|
+
.join('\n');
|
|
32
|
+
diagnostics.push(this.createDiagnostic(`Tool "${behavioralCtx.toolName}" called other tools without declaring them:\n${dependencyList}`, behavioralCtx.toolName, undefined, `Declare dependencies in contract (guarantees.dependencies: [${behavioralCtx.hiddenDependencies.map(d => `"${d.toolName}"`).join(', ')}]) or remove the tool calls.`));
|
|
33
|
+
}
|
|
34
|
+
// Check for missing dependencies (declared but don't exist in MCP server)
|
|
35
|
+
if (behavioralCtx.missingDependencies &&
|
|
36
|
+
behavioralCtx.missingDependencies.length > 0) {
|
|
37
|
+
const missingList = behavioralCtx.missingDependencies
|
|
38
|
+
.map(dep => ` - ${dep}`)
|
|
39
|
+
.join('\n');
|
|
40
|
+
diagnostics.push(this.createDiagnostic(`Tool "${behavioralCtx.toolName}" declares dependencies that don't exist in the MCP server:\n${missingList}`, behavioralCtx.toolName, undefined, `Remove non-existent dependencies from contract (guarantees.dependencies) or ensure these tools are implemented: [${behavioralCtx.missingDependencies.map(d => `"${d}"`).join(', ')}]`));
|
|
41
|
+
}
|
|
42
|
+
return diagnostics;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export const E501HiddenDependency = new E501HiddenDependencyRule();
|
|
46
|
+
//# sourceMappingURL=e501-hidden-dependency.js.map
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E600: Unexpected Test Result
|
|
3
|
+
*
|
|
4
|
+
* Condition: Test's actual outcome doesn't match its expectation
|
|
5
|
+
*
|
|
6
|
+
* Why this is fatal:
|
|
7
|
+
* - Test contract is inaccurate
|
|
8
|
+
* - Tool behavior doesn't match declared guarantees
|
|
9
|
+
* - Can cause false positives/negatives in validation
|
|
10
|
+
* - Indicates mismatch between expectations and reality
|
|
11
|
+
*/
|
|
12
|
+
import { BaseRule } from '../base.js';
|
|
13
|
+
import type { AnalysisContext, Diagnostic } from '../../types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Context for unexpected test result detection.
|
|
16
|
+
*/
|
|
17
|
+
export interface UnexpectedTestResultContext {
|
|
18
|
+
/** Tool name */
|
|
19
|
+
toolName: string;
|
|
20
|
+
/** Test name */
|
|
21
|
+
testName: string;
|
|
22
|
+
/** Test input */
|
|
23
|
+
testInput?: Record<string, unknown>;
|
|
24
|
+
/** Expected outcome (success/error/timeout) */
|
|
25
|
+
expectedOutcome: 'success' | 'error' | 'timeout';
|
|
26
|
+
/** Actual outcome (success/error/timeout) */
|
|
27
|
+
actualOutcome: 'success' | 'error' | 'timeout';
|
|
28
|
+
/** Expected error code (if expecting error) */
|
|
29
|
+
expectedErrorCode?: string;
|
|
30
|
+
/** Expected error type (if expecting error) */
|
|
31
|
+
expectedErrorType?: string;
|
|
32
|
+
/** Actual error code (if actual outcome is error) */
|
|
33
|
+
actualErrorCode?: string;
|
|
34
|
+
/** Actual error type (if actual outcome is error) */
|
|
35
|
+
actualErrorType?: string;
|
|
36
|
+
/** Expected error details (if expecting specific error) */
|
|
37
|
+
expectedError?: {
|
|
38
|
+
type?: string;
|
|
39
|
+
details?: Record<string, unknown>;
|
|
40
|
+
};
|
|
41
|
+
/** Actual error details (if actual outcome is error) */
|
|
42
|
+
actualError?: {
|
|
43
|
+
code?: string;
|
|
44
|
+
type?: string;
|
|
45
|
+
message?: string;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
declare class E600UnexpectedTestResultRule extends BaseRule {
|
|
49
|
+
readonly id: "E600";
|
|
50
|
+
readonly severity: "error";
|
|
51
|
+
readonly ruleName = "Unexpected Test Result";
|
|
52
|
+
readonly description = "Test's actual outcome doesn't match its expectation. Tool behavior doesn't match declared guarantees.";
|
|
53
|
+
check(_ctx: AnalysisContext): Diagnostic[];
|
|
54
|
+
/**
|
|
55
|
+
* Determine if a diagnostic should be created based on behavioral context.
|
|
56
|
+
*/
|
|
57
|
+
private shouldCreateDiagnostic;
|
|
58
|
+
/**
|
|
59
|
+
* Check with behavioral context (called from test orchestrator).
|
|
60
|
+
*/
|
|
61
|
+
checkWithBehavioralContext(behavioralCtx: UnexpectedTestResultContext): Diagnostic[];
|
|
62
|
+
}
|
|
63
|
+
export declare const E600UnexpectedTestResult: E600UnexpectedTestResultRule;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=e600-unexpected-test-result.d.ts.map
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* E600: Unexpected Test Result
|
|
3
|
+
*
|
|
4
|
+
* Condition: Test's actual outcome doesn't match its expectation
|
|
5
|
+
*
|
|
6
|
+
* Why this is fatal:
|
|
7
|
+
* - Test contract is inaccurate
|
|
8
|
+
* - Tool behavior doesn't match declared guarantees
|
|
9
|
+
* - Can cause false positives/negatives in validation
|
|
10
|
+
* - Indicates mismatch between expectations and reality
|
|
11
|
+
*/
|
|
12
|
+
import { BaseRule } from '../base.js';
|
|
13
|
+
import { ERROR_CODES } from '../error-codes.js';
|
|
14
|
+
class E600UnexpectedTestResultRule extends BaseRule {
|
|
15
|
+
id = ERROR_CODES.E600;
|
|
16
|
+
severity = 'error';
|
|
17
|
+
ruleName = 'Unexpected Test Result';
|
|
18
|
+
description = "Test's actual outcome doesn't match its expectation. Tool behavior doesn't match declared guarantees.";
|
|
19
|
+
check(_ctx) {
|
|
20
|
+
// This rule requires behavioral context
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Determine if a diagnostic should be created based on behavioral context.
|
|
25
|
+
*/
|
|
26
|
+
shouldCreateDiagnostic(behavioralCtx) {
|
|
27
|
+
// If outcomes don't match, create diagnostic
|
|
28
|
+
if (behavioralCtx.expectedOutcome !== behavioralCtx.actualOutcome) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
// Outcomes match - check if error details also match (for error cases)
|
|
32
|
+
if (behavioralCtx.expectedOutcome === 'error') {
|
|
33
|
+
const expectedType = behavioralCtx.expectedErrorType?.toLowerCase();
|
|
34
|
+
const actualType = behavioralCtx.actualErrorType?.toLowerCase();
|
|
35
|
+
if (expectedType && actualType && expectedType !== actualType) {
|
|
36
|
+
return true; // Type mismatch
|
|
37
|
+
}
|
|
38
|
+
if (expectedType && !actualType) {
|
|
39
|
+
return true; // Expected type but no actual type
|
|
40
|
+
}
|
|
41
|
+
const expectedCode = behavioralCtx.expectedErrorCode;
|
|
42
|
+
const actualCode = behavioralCtx.actualErrorCode;
|
|
43
|
+
if (expectedCode && actualCode && expectedCode !== actualCode) {
|
|
44
|
+
return true; // Code mismatch
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return false; // Everything matches
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check with behavioral context (called from test orchestrator).
|
|
51
|
+
*/
|
|
52
|
+
checkWithBehavioralContext(behavioralCtx) {
|
|
53
|
+
const diagnostics = [];
|
|
54
|
+
if (!this.shouldCreateDiagnostic(behavioralCtx)) {
|
|
55
|
+
return diagnostics;
|
|
56
|
+
}
|
|
57
|
+
// If we reach here, there's a mismatch - create diagnostic
|
|
58
|
+
let message = `Test "${behavioralCtx.testName}" in tool "${behavioralCtx.toolName}" expected `;
|
|
59
|
+
// Build expected description
|
|
60
|
+
if (behavioralCtx.expectedOutcome === 'success') {
|
|
61
|
+
message += 'success but got ';
|
|
62
|
+
if (behavioralCtx.actualOutcome === 'error') {
|
|
63
|
+
message += `error (${behavioralCtx.actualErrorCode || behavioralCtx.actualErrorType || 'unknown error'})`;
|
|
64
|
+
}
|
|
65
|
+
else if (behavioralCtx.actualOutcome === 'timeout') {
|
|
66
|
+
message += 'timeout';
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
message += behavioralCtx.actualOutcome;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (behavioralCtx.expectedOutcome === 'error') {
|
|
73
|
+
message += `error`;
|
|
74
|
+
if (behavioralCtx.expectedErrorType) {
|
|
75
|
+
message += ` of type "${behavioralCtx.expectedErrorType}"`;
|
|
76
|
+
}
|
|
77
|
+
if (behavioralCtx.expectedErrorCode) {
|
|
78
|
+
message += ` (code: ${behavioralCtx.expectedErrorCode})`;
|
|
79
|
+
}
|
|
80
|
+
message += ' but got ';
|
|
81
|
+
if (behavioralCtx.actualOutcome === 'success') {
|
|
82
|
+
message += 'success';
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
message += `${behavioralCtx.actualOutcome} (${behavioralCtx.actualErrorCode || behavioralCtx.actualErrorType || 'unknown error'})`;
|
|
86
|
+
}
|
|
87
|
+
if (behavioralCtx.actualErrorType &&
|
|
88
|
+
behavioralCtx.expectedErrorType &&
|
|
89
|
+
behavioralCtx.actualErrorType.toLowerCase() !==
|
|
90
|
+
behavioralCtx.expectedErrorType.toLowerCase()) {
|
|
91
|
+
message += ' with different type';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
message += `${behavioralCtx.expectedOutcome} but got ${behavioralCtx.actualOutcome}`;
|
|
96
|
+
}
|
|
97
|
+
diagnostics.push(this.createDiagnostic(message, behavioralCtx.toolName, undefined, 'Update test expectation to match actual tool behavior, or fix tool implementation to match declared guarantees. Ensure test expectations accurately reflect tool behavior.', {
|
|
98
|
+
testName: behavioralCtx.testName,
|
|
99
|
+
testInput: behavioralCtx.testInput,
|
|
100
|
+
expectedOutcome: behavioralCtx.expectedOutcome,
|
|
101
|
+
actualOutcome: behavioralCtx.actualOutcome,
|
|
102
|
+
expectedError: behavioralCtx.expectedError,
|
|
103
|
+
actualError: behavioralCtx.actualError,
|
|
104
|
+
}));
|
|
105
|
+
return diagnostics;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export const E600UnexpectedTestResult = new E600UnexpectedTestResultRule();
|
|
109
|
+
//# sourceMappingURL=e600-unexpected-test-result.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule registry.
|
|
3
|
+
* Exports all analysis rules.
|
|
4
|
+
*/
|
|
5
|
+
import type { Rule } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* All registered rules.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ALL_RULES: Rule[];
|
|
10
|
+
/**
|
|
11
|
+
* Get all error rules.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getErrorRules(): Rule[];
|
|
14
|
+
/**
|
|
15
|
+
* Get all warning rules.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getWarningRules(): Rule[];
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule registry.
|
|
3
|
+
* Exports all analysis rules.
|
|
4
|
+
*/
|
|
5
|
+
// Error rules (will be imported as we create them)
|
|
6
|
+
import { E000ToolNotFound } from './errors/e000-tool-not-found.js';
|
|
7
|
+
import { E100MissingOutputSchema } from './errors/e100-missing-output-schema.js';
|
|
8
|
+
import { E102UnderspecifiedRequiredInput } from './errors/e102-underspecified-input.js';
|
|
9
|
+
import { E103TypeMismatch } from './errors/e103-type-mismatch.js';
|
|
10
|
+
import { E105FreeTextPropagation } from './errors/e105-free-text-propagation.js';
|
|
11
|
+
import { E110ToolAmbiguity } from './errors/e110-tool-ambiguity.js';
|
|
12
|
+
import { E104ParamNotInDescription } from './errors/e104-param-not-in-description.js';
|
|
13
|
+
import { E106OutputNotGuaranteed } from './errors/e106-output-not-guaranteed.js';
|
|
14
|
+
import { E107CircularDependency } from './errors/e107-circular-dependency.js';
|
|
15
|
+
import { E108ImplicitUserInput } from './errors/e108-implicit-user-input.js';
|
|
16
|
+
import { E109NonSerializable } from './errors/e109-non-serializable.js';
|
|
17
|
+
import { E101MissingToolDescription } from './errors/e101-missing-tool-description.js';
|
|
18
|
+
import { E500SideEffectDetected } from './errors/e500-side-effect-detected.js';
|
|
19
|
+
import { E301OutputExplosion } from './errors/e301-output-explosion.js';
|
|
20
|
+
import { E501HiddenDependency } from './errors/e501-hidden-dependency.js';
|
|
21
|
+
import { E403UnboundedExecution } from './errors/e403-unbounded-execution.js';
|
|
22
|
+
import { E300OutputValidationFailed } from './errors/e300-output-validation-failed.js';
|
|
23
|
+
import { E200InputValidationFailed } from './errors/e200-input-validation-failed.js';
|
|
24
|
+
import { E400ToolExecutionFailed } from './errors/e400-tool-execution-failed.js';
|
|
25
|
+
import { E600UnexpectedTestResult } from './errors/e600-unexpected-test-result.js';
|
|
26
|
+
// Warning rules
|
|
27
|
+
import { W100ImplicitDependency } from './warnings/w100-implicit-dependency.js';
|
|
28
|
+
import { W101FreeTextWithoutNormalization } from './warnings/w101-free-text-without-normalization.js';
|
|
29
|
+
import { W102MissingExamples } from './warnings/w102-missing-examples.js';
|
|
30
|
+
import { W103OverloadedResponsibility } from './warnings/w103-overloaded-responsibility.js';
|
|
31
|
+
import { W104GenericDescription } from './warnings/w104-generic-description.js';
|
|
32
|
+
import { W105OptionalAsRequired } from './warnings/w105-optional-as-required.js';
|
|
33
|
+
import { W106BroadOutputSchema } from './warnings/w106-broad-output-schema.js';
|
|
34
|
+
import { W107MultipleEntryPoints } from './warnings/w107-multiple-entry-points.js';
|
|
35
|
+
import { W108HiddenSideEffects } from './warnings/w108-hidden-side-effects.js';
|
|
36
|
+
import { W109OutputNotReusable } from './warnings/w109-output-not-reusable.js';
|
|
37
|
+
import { W110WeakSchema } from './warnings/w110-weak-schema.js';
|
|
38
|
+
import { W300HighEntropyOutput } from './warnings/w300-high-entropy-output.js';
|
|
39
|
+
import { W301UnstableDefaults } from './warnings/w301-unstable-defaults.js';
|
|
40
|
+
/**
|
|
41
|
+
* All registered rules.
|
|
42
|
+
*/
|
|
43
|
+
export const ALL_RULES = [
|
|
44
|
+
// Error rules (blocking)
|
|
45
|
+
E000ToolNotFound,
|
|
46
|
+
E100MissingOutputSchema,
|
|
47
|
+
E102UnderspecifiedRequiredInput,
|
|
48
|
+
E103TypeMismatch,
|
|
49
|
+
E105FreeTextPropagation,
|
|
50
|
+
E110ToolAmbiguity,
|
|
51
|
+
E104ParamNotInDescription,
|
|
52
|
+
E106OutputNotGuaranteed,
|
|
53
|
+
E107CircularDependency,
|
|
54
|
+
E108ImplicitUserInput,
|
|
55
|
+
E109NonSerializable,
|
|
56
|
+
E101MissingToolDescription,
|
|
57
|
+
// Behavioral error rules (v1.3.0)
|
|
58
|
+
E500SideEffectDetected,
|
|
59
|
+
E301OutputExplosion,
|
|
60
|
+
E501HiddenDependency,
|
|
61
|
+
E403UnboundedExecution,
|
|
62
|
+
E300OutputValidationFailed,
|
|
63
|
+
E200InputValidationFailed,
|
|
64
|
+
E400ToolExecutionFailed,
|
|
65
|
+
E600UnexpectedTestResult,
|
|
66
|
+
// Warning rules (non-blocking)
|
|
67
|
+
W100ImplicitDependency,
|
|
68
|
+
W101FreeTextWithoutNormalization,
|
|
69
|
+
W102MissingExamples,
|
|
70
|
+
W103OverloadedResponsibility,
|
|
71
|
+
W104GenericDescription,
|
|
72
|
+
W105OptionalAsRequired,
|
|
73
|
+
W106BroadOutputSchema,
|
|
74
|
+
W107MultipleEntryPoints,
|
|
75
|
+
W108HiddenSideEffects,
|
|
76
|
+
W109OutputNotReusable,
|
|
77
|
+
// Behavioral warning rules (v1.3.0)
|
|
78
|
+
W110WeakSchema,
|
|
79
|
+
W300HighEntropyOutput,
|
|
80
|
+
W301UnstableDefaults,
|
|
81
|
+
];
|
|
82
|
+
/**
|
|
83
|
+
* Get all error rules.
|
|
84
|
+
*/
|
|
85
|
+
export function getErrorRules() {
|
|
86
|
+
return ALL_RULES.filter(rule => rule.severity === 'error');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get all warning rules.
|
|
90
|
+
*/
|
|
91
|
+
export function getWarningRules() {
|
|
92
|
+
return ALL_RULES.filter(rule => rule.severity === 'warning');
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W001: Implicit Tool Dependency
|
|
3
|
+
*
|
|
4
|
+
* Condition:
|
|
5
|
+
* - High confidence dependency inferred
|
|
6
|
+
* - Not stated explicitly in description
|
|
7
|
+
*
|
|
8
|
+
* Why:
|
|
9
|
+
* - LLM may not chain tools reliably
|
|
10
|
+
*/
|
|
11
|
+
import { BaseRule } from '../base.js';
|
|
12
|
+
import type { AnalysisContext, Diagnostic } from '../../types.js';
|
|
13
|
+
declare class W001ImplicitDependencyRule extends BaseRule {
|
|
14
|
+
readonly id = "W001";
|
|
15
|
+
readonly severity: "warning";
|
|
16
|
+
readonly ruleName = "Implicit Tool Dependency";
|
|
17
|
+
readonly description = "Tool appears to depend on another tool, but the dependency is implicit.";
|
|
18
|
+
check(ctx: AnalysisContext): Diagnostic[];
|
|
19
|
+
}
|
|
20
|
+
export declare const W001ImplicitDependency: W001ImplicitDependencyRule;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=w001-implicit-dependency.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W001: Implicit Tool Dependency
|
|
3
|
+
*
|
|
4
|
+
* Condition:
|
|
5
|
+
* - High confidence dependency inferred
|
|
6
|
+
* - Not stated explicitly in description
|
|
7
|
+
*
|
|
8
|
+
* Why:
|
|
9
|
+
* - LLM may not chain tools reliably
|
|
10
|
+
*/
|
|
11
|
+
import { BaseRule } from '../base.js';
|
|
12
|
+
class W001ImplicitDependencyRule extends BaseRule {
|
|
13
|
+
id = 'W001';
|
|
14
|
+
severity = 'warning';
|
|
15
|
+
ruleName = 'Implicit Tool Dependency';
|
|
16
|
+
description = 'Tool appears to depend on another tool, but the dependency is implicit.';
|
|
17
|
+
check(ctx) {
|
|
18
|
+
const diagnostics = [];
|
|
19
|
+
// Check medium to high confidence dependencies (0.6-0.8)
|
|
20
|
+
const implicitDeps = ctx.dependencies.filter(d => d.confidence >= 0.6 && d.confidence < 0.8);
|
|
21
|
+
for (const dep of implicitDeps) {
|
|
22
|
+
// Find the toTool to check its description
|
|
23
|
+
const toTool = ctx.indexes.toolIndex.get(dep.toTool.toLowerCase());
|
|
24
|
+
if (!toTool) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const description = toTool.description || '';
|
|
28
|
+
// Check if fromTool is mentioned in description
|
|
29
|
+
const fromToolNameLower = dep.fromTool.toLowerCase();
|
|
30
|
+
const descLower = description.toLowerCase();
|
|
31
|
+
if (!descLower.includes(fromToolNameLower)) {
|
|
32
|
+
diagnostics.push(this.createDiagnostic(`Tool "${dep.toTool}" appears to depend on "${dep.fromTool}", but the dependency is implicit.`, dep.toTool, dep.toField, `Mention "${dep.fromTool}" in the description of "${dep.toTool}" to make the dependency explicit.`));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return diagnostics;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export const W001ImplicitDependency = new W001ImplicitDependencyRule();
|
|
39
|
+
//# sourceMappingURL=w001-implicit-dependency.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W002: Free-Text Output Without Normalization
|
|
3
|
+
*
|
|
4
|
+
* Condition:
|
|
5
|
+
* - Output is string
|
|
6
|
+
* - Not constrained or normalized
|
|
7
|
+
* - Even if not chained
|
|
8
|
+
*
|
|
9
|
+
* Why:
|
|
10
|
+
* - Hard to reuse
|
|
11
|
+
* - Hard to evolve
|
|
12
|
+
*/
|
|
13
|
+
import { BaseRule } from '../base.js';
|
|
14
|
+
import type { AnalysisContext, Diagnostic } from '../../types.js';
|
|
15
|
+
declare class W002FreeTextWithoutNormalizationRule extends BaseRule {
|
|
16
|
+
readonly id = "W002";
|
|
17
|
+
readonly severity: "warning";
|
|
18
|
+
readonly ruleName = "Free-Text Output Without Normalization";
|
|
19
|
+
readonly description = "Tool returns unconstrained free text. Consider normalizing output.";
|
|
20
|
+
check(ctx: AnalysisContext): Diagnostic[];
|
|
21
|
+
}
|
|
22
|
+
export declare const W002FreeTextWithoutNormalization: W002FreeTextWithoutNormalizationRule;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=w002-free-text-without-normalization.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W002: Free-Text Output Without Normalization
|
|
3
|
+
*
|
|
4
|
+
* Condition:
|
|
5
|
+
* - Output is string
|
|
6
|
+
* - Not constrained or normalized
|
|
7
|
+
* - Even if not chained
|
|
8
|
+
*
|
|
9
|
+
* Why:
|
|
10
|
+
* - Hard to reuse
|
|
11
|
+
* - Hard to evolve
|
|
12
|
+
*/
|
|
13
|
+
import { BaseRule } from '../base.js';
|
|
14
|
+
class W002FreeTextWithoutNormalizationRule extends BaseRule {
|
|
15
|
+
id = 'W002';
|
|
16
|
+
severity = 'warning';
|
|
17
|
+
ruleName = 'Free-Text Output Without Normalization';
|
|
18
|
+
description = 'Tool returns unconstrained free text. Consider normalizing output.';
|
|
19
|
+
check(ctx) {
|
|
20
|
+
const diagnostics = [];
|
|
21
|
+
for (const tool of ctx.tools) {
|
|
22
|
+
for (const output of tool.outputs) {
|
|
23
|
+
// Check if output is unconstrained string
|
|
24
|
+
if (output.type !== 'string') {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const hasEnum = Boolean(output.enum && output.enum.length > 0);
|
|
28
|
+
const hasPattern = Boolean(output.pattern);
|
|
29
|
+
const hasDescription = Boolean(output.description && output.description.trim());
|
|
30
|
+
// If it's a string with no constraints, it's unconstrained free text
|
|
31
|
+
if (!hasEnum && !hasPattern && !hasDescription) {
|
|
32
|
+
diagnostics.push(this.createDiagnostic(`Tool "${tool.name}" returns unconstrained free text (field: "${output.name}"). Consider normalizing output.`, tool.name, output.name, `Add constraints to the output: enum values, regex pattern, or a clear description of the expected format.`));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return diagnostics;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export const W002FreeTextWithoutNormalization = new W002FreeTextWithoutNormalizationRule();
|
|
40
|
+
//# sourceMappingURL=w002-free-text-without-normalization.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W003: Missing Examples for User-Facing Inputs
|
|
3
|
+
*
|
|
4
|
+
* Condition:
|
|
5
|
+
* - Tool takes user-provided input
|
|
6
|
+
* - No examples provided
|
|
7
|
+
*
|
|
8
|
+
* Why:
|
|
9
|
+
* - LLM guessing increases error rate
|
|
10
|
+
*/
|
|
11
|
+
import { BaseRule } from '../base.js';
|
|
12
|
+
import type { AnalysisContext, Diagnostic } from '../../types.js';
|
|
13
|
+
declare class W003MissingExamplesRule extends BaseRule {
|
|
14
|
+
readonly id = "W003";
|
|
15
|
+
readonly severity: "warning";
|
|
16
|
+
readonly ruleName = "Missing Examples for User-Facing Inputs";
|
|
17
|
+
readonly description = "Tool accepts user-provided input but has no examples. LLM accuracy may be reduced.";
|
|
18
|
+
check(ctx: AnalysisContext): Diagnostic[];
|
|
19
|
+
}
|
|
20
|
+
export declare const W003MissingExamples: W003MissingExamplesRule;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=w003-missing-examples.d.ts.map
|