@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,447 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev Mode Session.
|
|
3
|
+
* Orchestrates LLM-MCP interactions with event emission.
|
|
4
|
+
*/
|
|
5
|
+
import { SessionLifecycleEventType, LLMContextEventType, LLMProposalEventType, ValidationEventType, } from '../../events/event-type.js';
|
|
6
|
+
import { makePromptID } from '../../types/factories.js';
|
|
7
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
8
|
+
import { logger } from '../../utils/logger.js';
|
|
9
|
+
import { DataManager } from './data-manager.js';
|
|
10
|
+
/**
|
|
11
|
+
* Dev Mode Session implementation.
|
|
12
|
+
*/
|
|
13
|
+
export class DevSession {
|
|
14
|
+
config;
|
|
15
|
+
state;
|
|
16
|
+
availableTools = [];
|
|
17
|
+
currentPromptId = null;
|
|
18
|
+
dataManager;
|
|
19
|
+
MAX_HISTORY_LENGTH = 50; // Max messages in LLM context
|
|
20
|
+
MAX_MESSAGE_SIZE = 10 * 1024; // 10KB per message
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.config = config;
|
|
23
|
+
this.state = {
|
|
24
|
+
conversationHistory: [],
|
|
25
|
+
toolCalls: [],
|
|
26
|
+
totalToolCalls: 0,
|
|
27
|
+
totalLLMCalls: 0,
|
|
28
|
+
startTime: new Date(),
|
|
29
|
+
};
|
|
30
|
+
this.dataManager = new DataManager(config.projectRoot);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Initialize the session.
|
|
34
|
+
* Loads available tools and emits session started event.
|
|
35
|
+
*/
|
|
36
|
+
async initialize() {
|
|
37
|
+
// Emit session started event
|
|
38
|
+
await this.config.eventEmitter.emit(SessionLifecycleEventType.SESSION_STARTED, {
|
|
39
|
+
project_name: this.config.config.project_name,
|
|
40
|
+
syrin_version: this.config.config.version,
|
|
41
|
+
});
|
|
42
|
+
// Load available tools from MCP server
|
|
43
|
+
try {
|
|
44
|
+
const tools = await this.config.mcpClientManager.getAvailableTools();
|
|
45
|
+
this.availableTools = tools.map(tool => ({
|
|
46
|
+
name: tool.name,
|
|
47
|
+
description: tool.description,
|
|
48
|
+
inputSchema: tool.inputSchema,
|
|
49
|
+
}));
|
|
50
|
+
// Emit tool registry loaded event
|
|
51
|
+
// Note: This would be TOOL_REGISTRY_LOADED, but we'll use what's available
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
55
|
+
throw new Error(`Failed to load tools: ${errorMessage}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Add user message to conversation history without processing.
|
|
60
|
+
* Useful for special commands that don't need LLM processing.
|
|
61
|
+
*/
|
|
62
|
+
addUserMessageToHistory(userInput) {
|
|
63
|
+
this.state.conversationHistory.push({
|
|
64
|
+
role: 'user',
|
|
65
|
+
content: userInput,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Process user input.
|
|
70
|
+
* This is the main entry point for handling user messages.
|
|
71
|
+
*/
|
|
72
|
+
async processUserInput(userInput) {
|
|
73
|
+
// Add user message to conversation history
|
|
74
|
+
this.addUserMessageToHistory(userInput);
|
|
75
|
+
// Process the conversation (may involve multiple LLM calls if tools are used)
|
|
76
|
+
await this.processConversation();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Process the conversation.
|
|
80
|
+
* Handles LLM calls and tool execution in a loop until final response.
|
|
81
|
+
*/
|
|
82
|
+
async processConversation() {
|
|
83
|
+
const maxIterations = 10; // Prevent infinite loops
|
|
84
|
+
let iteration = 0;
|
|
85
|
+
while (iteration < maxIterations) {
|
|
86
|
+
iteration++;
|
|
87
|
+
this.state.totalLLMCalls++;
|
|
88
|
+
// Generate prompt ID for this LLM call
|
|
89
|
+
const promptId = makePromptID(uuidv4());
|
|
90
|
+
this.currentPromptId = promptId;
|
|
91
|
+
// Build LLM context with tools
|
|
92
|
+
const llmRequest = this.buildLLMContext();
|
|
93
|
+
// Emit LLM context built event
|
|
94
|
+
await this.config.eventEmitter.emit(LLMContextEventType.LLM_CONTEXT_BUILT, {
|
|
95
|
+
prompt_id: promptId,
|
|
96
|
+
context: {
|
|
97
|
+
messages: llmRequest.messages.map(msg => ({
|
|
98
|
+
role: msg.role,
|
|
99
|
+
content: msg.content,
|
|
100
|
+
timestamp: new Date().toISOString(),
|
|
101
|
+
})),
|
|
102
|
+
tools: llmRequest.tools?.map(tool => ({
|
|
103
|
+
name: tool.name,
|
|
104
|
+
description: tool.description,
|
|
105
|
+
input_schema: tool.inputSchema,
|
|
106
|
+
})),
|
|
107
|
+
},
|
|
108
|
+
tool_definitions: this.availableTools.map(tool => ({
|
|
109
|
+
name: tool.name,
|
|
110
|
+
description: tool.description,
|
|
111
|
+
input_schema: tool.inputSchema,
|
|
112
|
+
})),
|
|
113
|
+
system_prompt: llmRequest.systemPrompt,
|
|
114
|
+
});
|
|
115
|
+
// Call LLM
|
|
116
|
+
const startTime = Date.now();
|
|
117
|
+
const llmResponse = await this.config.llmProvider.chat(llmRequest);
|
|
118
|
+
const duration = Date.now() - startTime;
|
|
119
|
+
// Add assistant response to conversation history
|
|
120
|
+
this.state.conversationHistory.push({
|
|
121
|
+
role: 'assistant',
|
|
122
|
+
content: llmResponse.content || '',
|
|
123
|
+
});
|
|
124
|
+
// Check if LLM wants to call tools
|
|
125
|
+
if (llmResponse.toolCalls && llmResponse.toolCalls.length > 0) {
|
|
126
|
+
// Process tool calls
|
|
127
|
+
const toolResults = await this.processToolCalls(llmResponse.toolCalls);
|
|
128
|
+
// Build post-tool prompt with tool results
|
|
129
|
+
const postToolPrompt = this.buildPostToolPrompt(llmResponse.toolCalls, toolResults);
|
|
130
|
+
// Emit post-tool LLM prompt built event
|
|
131
|
+
await this.config.eventEmitter.emit(LLMContextEventType.POST_TOOL_LLM_PROMPT_BUILT, {
|
|
132
|
+
prompt_id: promptId,
|
|
133
|
+
tool_call_result: toolResults[0] || {
|
|
134
|
+
tool_name: '',
|
|
135
|
+
arguments: {},
|
|
136
|
+
result: null,
|
|
137
|
+
duration_ms: 0,
|
|
138
|
+
},
|
|
139
|
+
context: {
|
|
140
|
+
messages: postToolPrompt.messages.map(msg => ({
|
|
141
|
+
role: msg.role,
|
|
142
|
+
content: msg.content,
|
|
143
|
+
timestamp: new Date().toISOString(),
|
|
144
|
+
})),
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
// Continue the loop to get final response from LLM
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
// No tool calls - emit final response and return
|
|
151
|
+
await this.config.eventEmitter.emit(LLMProposalEventType.LLM_FINAL_RESPONSE_GENERATED, {
|
|
152
|
+
response_text: llmResponse.content || '',
|
|
153
|
+
finish_reason: llmResponse.finishReason || 'stop',
|
|
154
|
+
token_count: llmResponse.usage?.totalTokens,
|
|
155
|
+
duration_ms: duration,
|
|
156
|
+
});
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// If we've exceeded max iterations, halt
|
|
160
|
+
await this.halt(`Maximum conversation iterations (${maxIterations}) exceeded`);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Build LLM context from conversation history and available tools.
|
|
164
|
+
* Truncates history to prevent context from growing too large.
|
|
165
|
+
*/
|
|
166
|
+
buildLLMContext() {
|
|
167
|
+
// Get recent conversation history (truncate if too long)
|
|
168
|
+
let messages = [...this.state.conversationHistory];
|
|
169
|
+
if (messages.length > this.MAX_HISTORY_LENGTH) {
|
|
170
|
+
// Keep most recent messages
|
|
171
|
+
messages = messages.slice(-this.MAX_HISTORY_LENGTH);
|
|
172
|
+
}
|
|
173
|
+
// Truncate individual messages if too large
|
|
174
|
+
messages = messages.map(msg => {
|
|
175
|
+
if (msg.content.length > this.MAX_MESSAGE_SIZE) {
|
|
176
|
+
return {
|
|
177
|
+
...msg,
|
|
178
|
+
content: msg.content.substring(0, this.MAX_MESSAGE_SIZE) +
|
|
179
|
+
'\n[... truncated, see tool result files for full data]',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return msg;
|
|
183
|
+
});
|
|
184
|
+
// Build system prompt
|
|
185
|
+
const systemPrompt = `You are ${this.config.config.agent_name}, an AI assistant with access to tools.
|
|
186
|
+
You can use the available tools to help the user. When you need to use a tool, make a tool call.
|
|
187
|
+
After tool execution, you will receive the results and can provide a final response to the user.
|
|
188
|
+
Note: Large tool results may be stored externally and referenced by ID. If you see a data reference ID,
|
|
189
|
+
you can request the full data if needed.`;
|
|
190
|
+
return {
|
|
191
|
+
messages,
|
|
192
|
+
tools: this.availableTools,
|
|
193
|
+
systemPrompt,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Process tool calls from LLM.
|
|
198
|
+
*/
|
|
199
|
+
async processToolCalls(toolCalls) {
|
|
200
|
+
const results = [];
|
|
201
|
+
// Deduplicate tool calls to prevent executing the same tool call multiple times
|
|
202
|
+
// This can happen if the LLM returns duplicate tool calls in a single response
|
|
203
|
+
// We deduplicate by tool name + normalized arguments to avoid redundant executions
|
|
204
|
+
const seenKeys = new Set();
|
|
205
|
+
const uniqueToolCalls = [];
|
|
206
|
+
const skippedDuplicates = [];
|
|
207
|
+
for (const toolCall of toolCalls) {
|
|
208
|
+
// Create a unique key from tool name + arguments (normalized JSON)
|
|
209
|
+
// This ensures we don't execute the same tool with the same arguments twice
|
|
210
|
+
const normalizedArgs = JSON.stringify(toolCall.arguments, Object.keys(toolCall.arguments).sort());
|
|
211
|
+
const key = `${toolCall.name}:${normalizedArgs}`;
|
|
212
|
+
if (seenKeys.has(key)) {
|
|
213
|
+
// Track skipped duplicates to inform the LLM
|
|
214
|
+
skippedDuplicates.push({
|
|
215
|
+
toolCall,
|
|
216
|
+
reason: `Duplicate tool call detected: ${toolCall.name} with identical arguments was already executed`,
|
|
217
|
+
});
|
|
218
|
+
// Use logger instead of console.warn for proper event tracking
|
|
219
|
+
logger.warn(`Skipping duplicate tool call: ${toolCall.name} with arguments ${normalizedArgs}`);
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
seenKeys.add(key);
|
|
223
|
+
uniqueToolCalls.push(toolCall);
|
|
224
|
+
}
|
|
225
|
+
// If we skipped duplicates, add them to conversation history so LLM knows
|
|
226
|
+
if (skippedDuplicates.length > 0) {
|
|
227
|
+
const skippedMessages = skippedDuplicates.map(({ toolCall, reason }) => `Tool call ${toolCall.name}(${JSON.stringify(toolCall.arguments)}) was skipped: ${reason}`);
|
|
228
|
+
this.state.conversationHistory.push({
|
|
229
|
+
role: 'assistant',
|
|
230
|
+
content: `Note: ${skippedDuplicates.length} duplicate tool call(s) were skipped:\n${skippedMessages.join('\n')}`,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
// Process only unique tool calls
|
|
234
|
+
for (const toolCall of uniqueToolCalls) {
|
|
235
|
+
// Emit LLM proposed tool call event
|
|
236
|
+
await this.config.eventEmitter.emit(LLMProposalEventType.LLM_PROPOSED_TOOL_CALL, {
|
|
237
|
+
tool_name: toolCall.name,
|
|
238
|
+
arguments: toolCall.arguments,
|
|
239
|
+
});
|
|
240
|
+
// Validate tool call
|
|
241
|
+
const validationResult = await this.validateToolCall(toolCall);
|
|
242
|
+
if (!validationResult.valid) {
|
|
243
|
+
// Validation failed - add error to conversation and continue
|
|
244
|
+
this.state.conversationHistory.push({
|
|
245
|
+
role: 'assistant',
|
|
246
|
+
content: `Tool call validation failed: ${validationResult.error}`,
|
|
247
|
+
});
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
// Execute tool
|
|
251
|
+
const startTime = Date.now();
|
|
252
|
+
let toolResult;
|
|
253
|
+
let toolError;
|
|
254
|
+
try {
|
|
255
|
+
toolResult = await this.config.mcpClientManager.executeTool(toolCall.name, toolCall.arguments, this.config.executionMode);
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
toolError = error instanceof Error ? error.message : String(error);
|
|
259
|
+
toolResult = { error: toolError };
|
|
260
|
+
}
|
|
261
|
+
const duration = Date.now() - startTime;
|
|
262
|
+
// Calculate result size
|
|
263
|
+
const resultSize = Buffer.byteLength(JSON.stringify(toolResult), 'utf8');
|
|
264
|
+
// Track tool call
|
|
265
|
+
const toolCallInfo = {
|
|
266
|
+
id: toolCall.id,
|
|
267
|
+
name: toolCall.name,
|
|
268
|
+
arguments: toolCall.arguments,
|
|
269
|
+
result: toolResult,
|
|
270
|
+
timestamp: new Date(),
|
|
271
|
+
duration,
|
|
272
|
+
};
|
|
273
|
+
// Externalize large results
|
|
274
|
+
if (DataManager.shouldExternalize(resultSize) && !toolError) {
|
|
275
|
+
const dataId = this.dataManager.store(toolResult, toolCall.name);
|
|
276
|
+
toolCallInfo.resultReference = dataId;
|
|
277
|
+
// Clear result from memory (keep reference only)
|
|
278
|
+
delete toolCallInfo.result;
|
|
279
|
+
// Add truncated message to conversation history
|
|
280
|
+
const sizeDisplay = DataManager.formatSize(resultSize);
|
|
281
|
+
this.state.conversationHistory.push({
|
|
282
|
+
role: 'assistant',
|
|
283
|
+
content: `Tool ${toolCall.name} executed. Large result (${sizeDisplay}) stored externally. Reference: ${dataId}`,
|
|
284
|
+
});
|
|
285
|
+
// Store reference in results for LLM (will need to load if needed)
|
|
286
|
+
results.push({
|
|
287
|
+
tool_name: toolCall.name,
|
|
288
|
+
arguments: toolCall.arguments,
|
|
289
|
+
result: {
|
|
290
|
+
_dataReference: dataId,
|
|
291
|
+
_message: `Large result (${sizeDisplay}) stored externally. Use reference ${dataId} to load.`,
|
|
292
|
+
},
|
|
293
|
+
duration_ms: duration,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
// Small result: store normally
|
|
298
|
+
results.push({
|
|
299
|
+
tool_name: toolCall.name,
|
|
300
|
+
arguments: toolCall.arguments,
|
|
301
|
+
result: toolResult,
|
|
302
|
+
duration_ms: duration,
|
|
303
|
+
});
|
|
304
|
+
// Add tool result to conversation history (truncate if needed)
|
|
305
|
+
const resultText = typeof toolResult === 'string'
|
|
306
|
+
? toolResult
|
|
307
|
+
: JSON.stringify(toolResult, null, 2);
|
|
308
|
+
// Truncate if too large
|
|
309
|
+
const truncatedResult = resultText.length > this.MAX_MESSAGE_SIZE
|
|
310
|
+
? resultText.substring(0, this.MAX_MESSAGE_SIZE) +
|
|
311
|
+
'\n[... truncated, result too large]'
|
|
312
|
+
: resultText;
|
|
313
|
+
this.state.conversationHistory.push({
|
|
314
|
+
role: 'assistant',
|
|
315
|
+
content: `Tool ${toolCall.name} executed${toolError ? ` with error: ${toolError}` : ''}. Result: ${truncatedResult}`,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
// Always add toolCallInfo to state (with or without result)
|
|
319
|
+
this.state.toolCalls.push(toolCallInfo);
|
|
320
|
+
this.state.totalToolCalls++;
|
|
321
|
+
}
|
|
322
|
+
return results;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Validate a tool call.
|
|
326
|
+
*/
|
|
327
|
+
async validateToolCall(toolCall) {
|
|
328
|
+
// Emit validation started event
|
|
329
|
+
await this.config.eventEmitter.emit(ValidationEventType.TOOL_CALL_VALIDATION_STARTED, {
|
|
330
|
+
tool_name: toolCall.name,
|
|
331
|
+
arguments: toolCall.arguments,
|
|
332
|
+
validation_rules: ['tool_exists', 'required_fields'],
|
|
333
|
+
});
|
|
334
|
+
// Find the tool definition
|
|
335
|
+
const toolDef = this.availableTools.find(tool => tool.name === toolCall.name);
|
|
336
|
+
if (!toolDef) {
|
|
337
|
+
const error = `Tool "${toolCall.name}" not found`;
|
|
338
|
+
await this.config.eventEmitter.emit(ValidationEventType.TOOL_CALL_VALIDATION_FAILED, {
|
|
339
|
+
tool_name: toolCall.name,
|
|
340
|
+
arguments: toolCall.arguments,
|
|
341
|
+
failure_reason: error,
|
|
342
|
+
validation_errors: [
|
|
343
|
+
{
|
|
344
|
+
message: error,
|
|
345
|
+
code: 'TOOL_NOT_FOUND',
|
|
346
|
+
},
|
|
347
|
+
],
|
|
348
|
+
});
|
|
349
|
+
return { valid: false, error };
|
|
350
|
+
}
|
|
351
|
+
// Basic validation - check if required fields are present
|
|
352
|
+
// More sophisticated validation can be added later
|
|
353
|
+
const schema = toolDef.inputSchema;
|
|
354
|
+
if (schema.required) {
|
|
355
|
+
for (const requiredField of schema.required) {
|
|
356
|
+
if (!(requiredField in toolCall.arguments)) {
|
|
357
|
+
const error = `Missing required argument: ${requiredField}`;
|
|
358
|
+
await this.config.eventEmitter.emit(ValidationEventType.TOOL_CALL_VALIDATION_FAILED, {
|
|
359
|
+
tool_name: toolCall.name,
|
|
360
|
+
arguments: toolCall.arguments,
|
|
361
|
+
failure_reason: error,
|
|
362
|
+
validation_errors: [
|
|
363
|
+
{
|
|
364
|
+
field: requiredField,
|
|
365
|
+
message: error,
|
|
366
|
+
code: 'MISSING_REQUIRED_ARGUMENT',
|
|
367
|
+
},
|
|
368
|
+
],
|
|
369
|
+
});
|
|
370
|
+
return { valid: false, error };
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// Validation passed
|
|
375
|
+
await this.config.eventEmitter.emit(ValidationEventType.TOOL_CALL_VALIDATION_PASSED, {
|
|
376
|
+
tool_name: toolCall.name,
|
|
377
|
+
arguments: toolCall.arguments,
|
|
378
|
+
validated_at: new Date().toISOString(),
|
|
379
|
+
});
|
|
380
|
+
return { valid: true };
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Build prompt after tool execution.
|
|
384
|
+
*/
|
|
385
|
+
buildPostToolPrompt(_toolCalls, _toolResults) {
|
|
386
|
+
// The conversation history already includes tool results
|
|
387
|
+
// Just return the current state
|
|
388
|
+
return {
|
|
389
|
+
messages: [...this.state.conversationHistory],
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get session state.
|
|
394
|
+
*/
|
|
395
|
+
getState() {
|
|
396
|
+
return { ...this.state };
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Get available tools.
|
|
400
|
+
*/
|
|
401
|
+
getAvailableTools() {
|
|
402
|
+
return [...this.availableTools];
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Complete the session.
|
|
406
|
+
*/
|
|
407
|
+
async complete() {
|
|
408
|
+
const duration = Date.now() - this.state.startTime.getTime();
|
|
409
|
+
await this.config.eventEmitter.emit(SessionLifecycleEventType.SESSION_COMPLETED, {
|
|
410
|
+
status: 'success',
|
|
411
|
+
duration_ms: duration,
|
|
412
|
+
total_tool_calls: this.state.totalToolCalls,
|
|
413
|
+
total_llm_calls: this.state.totalLLMCalls,
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Halt the session due to error.
|
|
418
|
+
*/
|
|
419
|
+
async halt(reason, errorCode) {
|
|
420
|
+
await this.config.eventEmitter.emit(SessionLifecycleEventType.SESSION_HALTED, {
|
|
421
|
+
reason,
|
|
422
|
+
error_code: errorCode,
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Clear conversation history.
|
|
427
|
+
*/
|
|
428
|
+
clearHistory() {
|
|
429
|
+
this.state.conversationHistory = [];
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Get tool result (loads from file if large data was externalized).
|
|
433
|
+
*/
|
|
434
|
+
getToolResult(toolCallInfo) {
|
|
435
|
+
if (toolCallInfo.resultReference) {
|
|
436
|
+
return this.dataManager.load(toolCallInfo.resultReference);
|
|
437
|
+
}
|
|
438
|
+
return toolCallInfo.result;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Get the data manager instance.
|
|
442
|
+
*/
|
|
443
|
+
getDataManager() {
|
|
444
|
+
return this.dataManager;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stack trace generation from events.
|
|
3
|
+
* Generates human-readable stack traces from event sequences to aid debugging.
|
|
4
|
+
*/
|
|
5
|
+
import type { EventStore } from '../../events/store.js';
|
|
6
|
+
import type { SessionID, EventID } from '../../types/ids.js';
|
|
7
|
+
import type { EventType } from '../../events/event-type.js';
|
|
8
|
+
/**
|
|
9
|
+
* Stack trace entry representing a single event in the trace.
|
|
10
|
+
*/
|
|
11
|
+
export interface StackTraceEntry {
|
|
12
|
+
/** Event ID */
|
|
13
|
+
eventId: EventID;
|
|
14
|
+
/** Event type */
|
|
15
|
+
eventType: EventType;
|
|
16
|
+
/** Timestamp */
|
|
17
|
+
timestamp: string;
|
|
18
|
+
/** Sequence number */
|
|
19
|
+
sequence: number;
|
|
20
|
+
/** Human-readable description */
|
|
21
|
+
description: string;
|
|
22
|
+
/** Additional context (tool name, error message, etc.) */
|
|
23
|
+
context?: Record<string, unknown>;
|
|
24
|
+
/** Indicates if this entry represents an error */
|
|
25
|
+
isError: boolean;
|
|
26
|
+
/** Indicates if this entry is a critical point in execution */
|
|
27
|
+
isCritical: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Stack trace result containing entries and metadata.
|
|
31
|
+
*/
|
|
32
|
+
export interface StackTrace {
|
|
33
|
+
/** Session ID */
|
|
34
|
+
sessionId: SessionID;
|
|
35
|
+
/** Stack trace entries in chronological order */
|
|
36
|
+
entries: StackTraceEntry[];
|
|
37
|
+
/** Total number of events in the session */
|
|
38
|
+
totalEvents: number;
|
|
39
|
+
/** Number of error events */
|
|
40
|
+
errorCount: number;
|
|
41
|
+
/** First error event (if any) */
|
|
42
|
+
firstError?: StackTraceEntry;
|
|
43
|
+
/** Summary of the trace */
|
|
44
|
+
summary: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Options for generating a stack trace.
|
|
48
|
+
*/
|
|
49
|
+
export interface StackTraceOptions {
|
|
50
|
+
/** Include all events or only critical/error events */
|
|
51
|
+
includeAll?: boolean;
|
|
52
|
+
/** Maximum number of entries to include */
|
|
53
|
+
maxEntries?: number;
|
|
54
|
+
/** Filter by specific event types */
|
|
55
|
+
eventTypes?: EventType[];
|
|
56
|
+
/** Filter by execution ID (for tool execution traces) */
|
|
57
|
+
executionId?: string;
|
|
58
|
+
/** Include context in entries */
|
|
59
|
+
includeContext?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate a stack trace from events for a given session.
|
|
63
|
+
*
|
|
64
|
+
* @param eventStore - Event store to query
|
|
65
|
+
* @param sessionId - Session ID to generate trace for
|
|
66
|
+
* @param options - Stack trace generation options
|
|
67
|
+
* @returns Stack trace
|
|
68
|
+
*/
|
|
69
|
+
export declare function generateStackTrace(eventStore: EventStore, sessionId: SessionID, options?: StackTraceOptions): Promise<StackTrace>;
|
|
70
|
+
/**
|
|
71
|
+
* Format a stack trace as a human-readable string.
|
|
72
|
+
*
|
|
73
|
+
* @param stackTrace - Stack trace to format
|
|
74
|
+
* @returns Formatted string
|
|
75
|
+
*/
|
|
76
|
+
export declare function formatStackTrace(stackTrace: StackTrace): string;
|
|
77
|
+
//# sourceMappingURL=stack-trace.d.ts.map
|