@abot-ai/runtime 1.8.1 → 1.9.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/dist/scripts/runtime-setup-files.js +46 -2
- package/dist/src/model-gateway/client/chat.js +9 -5
- package/dist/src/model-gateway/client/invocation-error.d.ts +9 -0
- package/dist/src/model-gateway/client/invocation-error.js +30 -0
- package/dist/src/model-gateway/client/stream-consumer.js +9 -2
- package/dist/src/model-gateway/client/stream-parser.js +2 -1
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +5 -1
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +15 -1
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-execution.js +7 -5
- package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-snapshot.js +9 -2
- package/dist/src/runtime/automations/service.d.ts +1 -1
- package/dist/src/runtime/capabilities/automation-builder/tool-module.js +4 -4
- package/dist/src/runtime/capabilities/automations/draft-index.d.ts +1 -1
- package/dist/src/runtime/capabilities/automations/tool-module.js +4 -4
- package/dist/src/runtime/capabilities/core-tool-contracts.d.ts +29 -0
- package/dist/src/runtime/capabilities/core-tool-contracts.js +38 -0
- package/dist/src/runtime/capabilities/knowledge-skills/read-many.d.ts +4 -0
- package/dist/src/runtime/capabilities/knowledge-skills/read-many.js +21 -0
- package/dist/src/runtime/capabilities/knowledge-skills/read-targets.d.ts +13 -0
- package/dist/src/runtime/capabilities/knowledge-skills/read-targets.js +44 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.d.ts +141 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.js +58 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-module.d.ts +4 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-module.js +78 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-output.d.ts +12 -0
- package/dist/src/runtime/capabilities/knowledge-skills/tool-output.js +21 -0
- package/dist/src/runtime/capabilities/knowledge-skills/write-contract.d.ts +77 -0
- package/dist/src/runtime/capabilities/knowledge-skills/write-contract.js +28 -0
- package/dist/src/runtime/capabilities/knowledge-skills/write-operations.d.ts +3 -0
- package/dist/src/runtime/capabilities/knowledge-skills/write-operations.js +34 -0
- package/dist/src/runtime/capabilities/scheduling/tool-module.js +3 -3
- package/dist/src/runtime/composition.d.ts +5 -0
- package/dist/src/runtime/context/capability-result-compaction-source.d.ts +3 -1
- package/dist/src/runtime/context/capability-result-compaction-source.js +13 -1
- package/dist/src/runtime/context/core-skill-read-context.d.ts +16 -0
- package/dist/src/runtime/context/core-skill-read-context.js +76 -0
- package/dist/src/runtime/context/exact-evidence-match.d.ts +3 -0
- package/dist/src/runtime/context/exact-evidence-match.js +34 -0
- package/dist/src/runtime/context/model-step-compaction.js +20 -6
- package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.d.ts +9 -0
- package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.js +38 -0
- package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +2 -0
- package/dist/src/runtime/context/semantic-compaction/prompt.js +7 -7
- package/dist/src/runtime/context/semantic-compaction/run.js +10 -3
- package/dist/src/runtime/context/semantic-compaction/super-source-integrity.js +33 -3
- package/dist/src/runtime/context/session-artifact-paths.d.ts +2 -1
- package/dist/src/runtime/context/session-artifact-paths.js +2 -1
- package/dist/src/runtime/context/session-memory/model-step-controller.d.ts +2 -2
- package/dist/src/runtime/context/super-worker-compaction-failure.d.ts +1 -1
- package/dist/src/runtime/context/super-worker-compaction-failure.js +2 -1
- package/dist/src/runtime/context/super-worker-compaction-sidecar.d.ts +2 -1
- package/dist/src/runtime/context/super-worker-compaction-sidecar.js +9 -3
- package/dist/src/runtime/default-environment-adapters.d.ts +2 -1
- package/dist/src/runtime/default-environment-adapters.js +5 -1
- package/dist/src/runtime/knowledge-skills/available-skills-projection.d.ts +17 -0
- package/dist/src/runtime/knowledge-skills/available-skills-projection.js +66 -0
- package/dist/src/runtime/knowledge-skills/available-skills.d.ts +7 -0
- package/dist/src/runtime/knowledge-skills/available-skills.js +17 -0
- package/dist/src/runtime/knowledge-skills/builtins/abot-studio.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/abot-studio.js +27 -0
- package/dist/src/runtime/knowledge-skills/builtins/computer-use.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +34 -0
- package/dist/src/runtime/knowledge-skills/builtins/skill-creator.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/skill-creator.js +29 -0
- package/dist/src/runtime/knowledge-skills/builtins/technical-work.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +27 -0
- package/dist/src/runtime/knowledge-skills/catalog.d.ts +2 -0
- package/dist/src/runtime/knowledge-skills/catalog.js +12 -0
- package/dist/src/runtime/knowledge-skills/personal-contracts.d.ts +48 -0
- package/dist/src/runtime/knowledge-skills/personal-contracts.js +29 -0
- package/dist/src/runtime/knowledge-skills/personal-documents.d.ts +6 -0
- package/dist/src/runtime/knowledge-skills/personal-documents.js +56 -0
- package/dist/src/runtime/knowledge-skills/personal-management.d.ts +9 -0
- package/dist/src/runtime/knowledge-skills/personal-management.js +64 -0
- package/dist/src/runtime/knowledge-skills/personal-repository.d.ts +6 -0
- package/dist/src/runtime/knowledge-skills/personal-repository.js +76 -0
- package/dist/src/runtime/knowledge-skills/personal-store.d.ts +4 -0
- package/dist/src/runtime/knowledge-skills/personal-store.js +33 -0
- package/dist/src/runtime/knowledge-skills/read-evidence.d.ts +3 -0
- package/dist/src/runtime/knowledge-skills/read-evidence.js +13 -0
- package/dist/src/runtime/knowledge-skills/store.d.ts +19 -0
- package/dist/src/runtime/knowledge-skills/store.js +41 -0
- package/dist/src/runtime/local-application.d.ts +2 -1
- package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -0
- package/dist/src/runtime/local-host/app-service-dispatch.js +5 -0
- package/dist/src/runtime/local-host/client-services.d.ts +3 -1
- package/dist/src/runtime/local-host/client-services.js +3 -2
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +1 -0
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +1 -1
- package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.d.ts +5 -0
- package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.js +28 -0
- package/dist/src/runtime/long-term-memory/initial-context.d.ts +1 -0
- package/dist/src/runtime/model/context-compaction-admission.d.ts +1 -0
- package/dist/src/runtime/model/context-compaction-admission.js +35 -1
- package/dist/src/runtime/model/context-compaction-contracts.d.ts +9 -1
- package/dist/src/runtime/model/invoke-step.js +6 -2
- package/dist/src/runtime/model/provider-failure.d.ts +13 -0
- package/dist/src/runtime/model/provider-failure.js +37 -0
- package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
- package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +2 -0
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +2 -1
- package/dist/src/runtime/orchestration/role-calls/command-decoder.js +3 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.d.ts +4 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.js +48 -0
- package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +3 -0
- package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +6 -3
- package/dist/src/runtime/orchestration/role-calls/contracts.js +3 -3
- package/dist/src/runtime/orchestration/role-calls/skill-read.d.ts +47 -0
- package/dist/src/runtime/orchestration/role-calls/skill-read.js +196 -0
- package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.js +4 -2
- package/dist/src/runtime/orchestration/worker-capabilities/binding/create-binding.js +4 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +1 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
- package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -3
- package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.d.ts +2 -0
- package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.js +7 -2
- package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.d.ts +19 -0
- package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.js +43 -0
- package/dist/src/runtime/plugins/loader.js +7 -6
- package/dist/src/runtime/request/approval-wait/preflight.js +1 -0
- package/dist/src/runtime/request/bound-runtime-handler.js +1 -0
- package/dist/src/runtime/request/contracts.d.ts +2 -0
- package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +2 -2
- package/dist/src/runtime/request/execution-scope-surfaces.d.ts +2 -0
- package/dist/src/runtime/request/execution-scope-surfaces.js +7 -0
- package/dist/src/runtime/request/execution-scope.d.ts +6 -2
- package/dist/src/runtime/request/execution-scope.js +11 -0
- package/dist/src/runtime/request/payload-settled-evidence.d.ts +11 -0
- package/dist/src/runtime/request/payload-settled-evidence.js +29 -0
- package/dist/src/runtime/request/prepared-execution.js +2 -0
- package/dist/src/runtime/request/role-call-delegation-events.d.ts +19 -0
- package/dist/src/runtime/request/role-call-delegation-events.js +52 -0
- package/dist/src/runtime/request/role-call-return-events.d.ts +19 -0
- package/dist/src/runtime/request/role-call-return-events.js +63 -0
- package/dist/src/runtime/request/role-executor-composition.js +2 -2
- package/dist/src/runtime/request/root-capability-binding.d.ts +24 -0
- package/dist/src/runtime/request/root-capability-binding.js +57 -0
- package/dist/src/runtime/request/root-capability-catalog.d.ts +16 -0
- package/dist/src/runtime/request/root-capability-catalog.js +20 -0
- package/dist/src/runtime/request/root-contract.d.ts +11 -1
- package/dist/src/runtime/request/root-execution-kernel.js +35 -68
- package/dist/src/runtime/request/root-reference-action.d.ts +15 -0
- package/dist/src/runtime/request/root-reference-action.js +48 -0
- package/dist/src/runtime/request/root-skill-read.d.ts +13 -0
- package/dist/src/runtime/request/root-skill-read.js +102 -0
- package/dist/src/runtime/request/runner.js +10 -0
- package/dist/src/runtime/request/super-payload-context-failure.js +13 -4
- package/dist/src/runtime/request/supervisor-root-execution.js +48 -1
- package/dist/src/runtime/request/supervisor-skill-edit-target.d.ts +9 -0
- package/dist/src/runtime/request/supervisor-skill-edit-target.js +25 -0
- package/dist/src/runtime/request/supervisor-skill-payload-context.d.ts +21 -0
- package/dist/src/runtime/request/supervisor-skill-payload-context.js +91 -0
- package/dist/src/runtime/request/supervisor-skill-write-preparation.d.ts +25 -0
- package/dist/src/runtime/request/supervisor-skill-write-preparation.js +71 -0
- package/dist/src/runtime/request/worker-capability-composition.d.ts +4 -1
- package/dist/src/runtime/request/worker-capability-composition.js +4 -1
- package/dist/src/runtime/request/worker-capability-payload.d.ts +1 -1
- package/dist/src/runtime/request/worker-capability-payload.js +44 -37
- package/dist/src/runtime/runtime-environment.d.ts +2 -0
- package/dist/src/runtime/runtime-environment.js +12 -1
- package/dist/src/runtime/scheduler/contracts.d.ts +4 -0
- package/dist/src/runtime/scheduler/run-list-filter.d.ts +11 -0
- package/dist/src/runtime/scheduler/run-list-filter.js +56 -0
- package/dist/src/runtime/scheduler/run-list-query.d.ts +2 -2
- package/dist/src/runtime/scheduler/run-list-query.js +4 -1
- package/dist/src/runtime/steps/auditor-decision/contracts.d.ts +2 -0
- package/dist/src/runtime/steps/auditor-decision/evidence-representation.d.ts +2 -2
- package/dist/src/runtime/steps/auditor-decision/evidence-representation.js +2 -34
- package/dist/src/runtime/steps/auditor-decision/input.js +21 -3
- package/dist/src/runtime/steps/auditor-decision/projection.js +5 -0
- package/dist/src/runtime/steps/auditor-decision/prompt.d.ts +1 -1
- package/dist/src/runtime/steps/auditor-decision/prompt.js +14 -3
- package/dist/src/runtime/steps/capability-execution-guidance.d.ts +7 -0
- package/dist/src/runtime/steps/capability-execution-guidance.js +28 -0
- package/dist/src/runtime/steps/capability-execution-instructions.d.ts +0 -2
- package/dist/src/runtime/steps/capability-execution-instructions.js +0 -2
- package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +5 -2
- package/dist/src/runtime/steps/execution-agent/capability-result-context.js +22 -3
- package/dist/src/runtime/steps/execution-agent/compaction.d.ts +3 -2
- package/dist/src/runtime/steps/execution-agent/compaction.js +9 -1
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +14 -14
- package/dist/src/runtime/steps/execution-agent/input.js +14 -2
- package/dist/src/runtime/steps/execution-agent/prompt.js +40 -38
- package/dist/src/runtime/steps/execution-agent/refinement-input.d.ts +1 -0
- package/dist/src/runtime/steps/execution-agent/refinement-prompt.js +4 -1
- package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
- package/dist/src/runtime/steps/execution-agent/response-run.js +1 -1
- package/dist/src/runtime/steps/execution-agent/run.js +1 -1
- package/dist/src/runtime/steps/execution-agent/state-context.js +1 -1
- package/dist/src/runtime/steps/knowledge-skill-instructions.d.ts +3 -0
- package/dist/src/runtime/steps/knowledge-skill-instructions.js +3 -0
- package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -2
- package/dist/src/runtime/steps/planner-decision/capability-brief.js +5 -1
- package/dist/src/runtime/steps/planner-decision/input.d.ts +2 -2
- package/dist/src/runtime/steps/planner-decision/input.js +7 -1
- package/dist/src/runtime/steps/planner-decision/prompt.js +3 -0
- package/dist/src/runtime/steps/planner-graph/input.d.ts +2 -2
- package/dist/src/runtime/steps/planner-graph/input.js +9 -8
- package/dist/src/runtime/steps/planner-graph/prompt.js +2 -2
- package/dist/src/runtime/steps/planner-graph/run.d.ts +2 -2
- package/dist/src/runtime/steps/planner-graph/run.js +5 -5
- package/dist/src/runtime/steps/planner-graph/skill-guidance.d.ts +5 -0
- package/dist/src/runtime/steps/planner-graph/skill-guidance.js +62 -0
- package/dist/src/runtime/steps/reviewer-decision/final-evidence.d.ts +1 -0
- package/dist/src/runtime/steps/reviewer-decision/final-evidence.js +3 -1
- package/dist/src/runtime/steps/reviewer-decision/input.d.ts +3 -1
- package/dist/src/runtime/steps/reviewer-decision/input.js +2 -22
- package/dist/src/runtime/steps/reviewer-decision/model-context.d.ts +21 -0
- package/dist/src/runtime/steps/reviewer-decision/model-context.js +32 -1
- package/dist/src/runtime/steps/reviewer-decision/projection.js +4 -0
- package/dist/src/runtime/steps/reviewer-decision/prompt.d.ts +1 -1
- package/dist/src/runtime/steps/reviewer-decision/prompt.js +15 -4
- package/dist/src/runtime/steps/reviewer-decision/run.d.ts +2 -0
- package/dist/src/runtime/steps/reviewer-decision/run.js +6 -0
- package/dist/src/runtime/steps/skill-read-decision.d.ts +34 -0
- package/dist/src/runtime/steps/skill-read-decision.js +91 -0
- package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +22 -0
- package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +132 -0
- package/dist/src/runtime/steps/supervisor-decision/capability-brief.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-decision/capability-brief.js +9 -2
- package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +12 -3
- package/dist/src/runtime/steps/supervisor-decision/contracts.js +3 -0
- package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +37 -0
- package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +124 -0
- package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +5 -1
- package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +4 -0
- package/dist/src/runtime/steps/supervisor-decision/format.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/format.js +2 -0
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +7 -1
- package/dist/src/runtime/steps/supervisor-decision/input.js +30 -11
- package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/parser.js +11 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +26 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +39 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +17 -0
- package/dist/src/runtime/steps/supervisor-decision/preparation.js +65 -0
- package/dist/src/runtime/steps/supervisor-decision/presentation.d.ts +13 -0
- package/dist/src/runtime/steps/supervisor-decision/presentation.js +47 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +4 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +96 -109
- package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -0
- package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-decision/resume.js +20 -0
- package/dist/src/runtime/steps/supervisor-decision/run.d.ts +6 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +73 -159
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +21 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +29 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +16 -0
- package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +44 -0
- package/dist/src/runtime/steps/supervisor-response/input.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-response/input.js +5 -0
- package/dist/src/runtime/steps/supervisor-response/prompt.js +2 -0
- package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +3 -0
- package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +24 -4
- package/dist/src/runtime/steps/supervisor-response/run.d.ts +5 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/contract.d.ts +43 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/contract.js +85 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/input.d.ts +35 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/input.js +87 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/run.d.ts +10 -0
- package/dist/src/runtime/steps/supervisor-skill-authoring/run.js +35 -0
- package/dist/src/runtime/steps/supervisor-skill-instructions.d.ts +4 -0
- package/dist/src/runtime/steps/supervisor-skill-instructions.js +4 -0
- package/dist/src/runtime/steps/worker-capability-scope-decision.js +14 -1
- package/dist/src/runtime/steps/worker-decision/contracts.d.ts +1 -0
- package/dist/src/runtime/steps/worker-decision/input/execution-guidance.d.ts +5 -0
- package/dist/src/runtime/steps/worker-decision/input/execution-guidance.js +31 -0
- package/dist/src/runtime/steps/worker-decision/input/prompt-context.js +2 -25
- package/dist/src/runtime/steps/worker-decision/input/reference-context.js +4 -0
- package/dist/src/runtime/steps/worker-decision/prompt.js +6 -2
- package/dist/src/runtime/steps/worker-decision/result-author.js +6 -0
- package/dist/src/web-ui/app/app-bootstrap.js +3 -0
- package/dist/src/web-ui/app/app.js +6 -1
- package/dist/src/web-ui/app/components/automations/run-history-controls.js +77 -0
- package/dist/src/web-ui/app/components/automations/run-history.js +55 -0
- package/dist/src/web-ui/app/components/automations/run.js +3 -8
- package/dist/src/web-ui/app/components/automations/workspace.js +11 -2
- package/dist/src/web-ui/app/components/conversation-role-cards.js +27 -0
- package/dist/src/web-ui/app/components/conversation-role-delegations.d.ts +12 -0
- package/dist/src/web-ui/app/components/conversation-role-delegations.js +24 -0
- package/dist/src/web-ui/app/components/conversation-role-history.d.ts +13 -0
- package/dist/src/web-ui/app/components/conversation-role-history.js +81 -0
- package/dist/src/web-ui/app/components/conversation-role-returns.d.ts +12 -0
- package/dist/src/web-ui/app/components/conversation-role-returns.js +23 -0
- package/dist/src/web-ui/app/components/onboarding-workspace-access.js +1 -1
- package/dist/src/web-ui/app/components/skills/workspace.js +119 -0
- package/dist/src/web-ui/app/components/workspace-shell.js +11 -1
- package/dist/src/web-ui/app/controllers/automation-read-projection.js +8 -4
- package/dist/src/web-ui/app/controllers/automation-run-actions.js +3 -1
- package/dist/src/web-ui/app/controllers/automation-run-history.js +159 -0
- package/dist/src/web-ui/app/controllers/automations-controller.js +27 -11
- package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +6 -2
- package/dist/src/web-ui/app/controllers/realtime-event-controller.js +22 -1
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +7 -1
- package/dist/src/web-ui/app/controllers/skills-controller.js +237 -0
- package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +5 -0
- package/dist/src/web-ui/app/lib/conversation-role-model.js +63 -5
- package/dist/src/web-ui/app/lib/event-presentation.js +34 -0
- package/dist/src/web-ui/app/lib/role-delegation-event.d.ts +18 -0
- package/dist/src/web-ui/app/lib/role-delegation-event.js +47 -0
- package/dist/src/web-ui/app/lib/role-return-event.d.ts +19 -0
- package/dist/src/web-ui/app/lib/role-return-event.js +36 -0
- package/dist/src/web-ui/app/lib/tool-activity-event.js +8 -6
- package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +50 -0
- package/dist/src/web-ui/app/lib/workspace-route.js +1 -0
- package/dist/src/web-ui/app/services/runtime-web-client/automations.d.ts +9 -1
- package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
- package/dist/src/web-ui/app/services/runtime-web-client/skills.js +23 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
- package/dist/src/web-ui/app/skills-feature.js +36 -0
- package/dist/src/web-ui/app/styles/24-conversation-role-cards.css +58 -0
- package/dist/src/web-ui/app/styles/40-skills.css +34 -0
- package/dist/src/web-ui/app/styles/50-automations.css +24 -3
- package/dist/src/web-ui/app/styles/95-home-widgets.css +2 -1
- package/dist/src/web-ui/app/styles.css +1 -0
- package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
- package/dist/src/web-ui/app/ui-behavior.js +1 -0
- package/dist/src/web-ui/client-state/store.js +3 -2
- package/dist/src/web-ui/client-state/transaction-order.d.ts +2 -0
- package/dist/src/web-ui/client-state/transaction-order.js +18 -0
- package/dist/src/web-ui/local-runtime/api-router.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/api-router.js +7 -0
- package/dist/src/web-ui/local-runtime/automation-routes.js +2 -1
- package/dist/src/web-ui/local-runtime/automation-run-page.d.ts +5 -0
- package/dist/src/web-ui/local-runtime/automation-run-page.js +26 -0
- package/dist/src/web-ui/local-runtime/skill-management-routes.d.ts +18 -0
- package/dist/src/web-ui/local-runtime/skill-management-routes.js +118 -0
- package/docs/configuration.md +8 -0
- package/docs/runtime-public-contracts.md +37 -0
- package/examples/request-runner.config.example.json +3 -0
- package/package.json +1 -1
- package/plugins/web/skills/web_fetch_skill/SKILL.md +1 -2
- package/plugins/web/skills/web_search_skill/SKILL.md +3 -7
- package/src/runtime/README.md +96 -1
|
@@ -5,6 +5,14 @@ import {
|
|
|
5
5
|
titleCaseEventValue,
|
|
6
6
|
} from "./event-presentation.js";
|
|
7
7
|
import { textOf } from "./text-format.js";
|
|
8
|
+
import {
|
|
9
|
+
isRoleDelegationEvent,
|
|
10
|
+
projectRoleDelegationEvent,
|
|
11
|
+
} from "./role-delegation-event.js";
|
|
12
|
+
import {
|
|
13
|
+
isRoleReturnEvent,
|
|
14
|
+
projectRoleReturnEvent,
|
|
15
|
+
} from "./role-return-event.js";
|
|
8
16
|
import { countToolInvocations } from "./tool-invocation-count.js";
|
|
9
17
|
import { projectToolActivityEvent } from "./tool-activity-event.js";
|
|
10
18
|
import { correlateToolApprovalActivity } from "./tool-approval-activity.js";
|
|
@@ -32,13 +40,16 @@ const ROLE_RESPONSIBILITIES = Object.freeze({
|
|
|
32
40
|
});
|
|
33
41
|
|
|
34
42
|
function latestRoleAction(group) {
|
|
43
|
+
if (group.summarySupersededByReturn) return "";
|
|
44
|
+
if (!group.latestEvent) return "";
|
|
35
45
|
if (group.toolActions.some((action) => !action.legacy)) {
|
|
36
|
-
return group.latestRoleEvent
|
|
46
|
+
return group.latestRoleEvent && !isSupervisorSkillActivity(group.latestRoleEvent)
|
|
37
47
|
? roleActivitySummary(group.latestRoleEvent)
|
|
38
48
|
: "";
|
|
39
49
|
}
|
|
40
50
|
const toolEvent = group.toolEvents.at(-1);
|
|
41
|
-
|
|
51
|
+
const event = toolEvent || group.latestEvent;
|
|
52
|
+
return isSupervisorSkillActivity(event) ? "" : roleActivitySummary(event);
|
|
42
53
|
}
|
|
43
54
|
|
|
44
55
|
function belongsToRoleRequest(event, requestId) {
|
|
@@ -64,14 +75,20 @@ function orderedRequestActivity(events, requestId) {
|
|
|
64
75
|
for (const event of events) {
|
|
65
76
|
if (!belongsToRoleRequest(event, requestId)) continue;
|
|
66
77
|
const position = activityPosition(event);
|
|
67
|
-
|
|
78
|
+
const delegation = projectRoleDelegationEvent(event);
|
|
79
|
+
const receipt = projectRoleReturnEvent(event);
|
|
80
|
+
if (!position && !delegation && !receipt) {
|
|
68
81
|
unique.push({ event, position });
|
|
69
82
|
continue;
|
|
70
83
|
}
|
|
71
|
-
|
|
84
|
+
let identity;
|
|
85
|
+
if (receipt) identity = `return:${receipt.id}`;
|
|
86
|
+
else if (delegation) identity = `delegation:${delegation.id}`;
|
|
87
|
+
else identity = `${position.domain}:${position.value}`;
|
|
72
88
|
if (seen.has(identity)) continue;
|
|
73
89
|
seen.add(identity);
|
|
74
90
|
unique.push({ event, position });
|
|
91
|
+
if (!position) continue;
|
|
75
92
|
const domain = domains.get(position.domain) || { events: [], next: 0 };
|
|
76
93
|
domain.events.push({ event, position });
|
|
77
94
|
domains.set(position.domain, domain);
|
|
@@ -104,8 +121,14 @@ function isToolActivityEvent(event) {
|
|
|
104
121
|
return activityEventName(event).startsWith("tool.");
|
|
105
122
|
}
|
|
106
123
|
|
|
124
|
+
function isSupervisorSkillActivity(event) {
|
|
125
|
+
return event.stage === "supervisor" && event.phase === "skills"
|
|
126
|
+
&& !isToolActivityEvent(event);
|
|
127
|
+
}
|
|
128
|
+
|
|
107
129
|
function roleActivityStage(event) {
|
|
108
130
|
if (isToolActivityEvent(event)) return "";
|
|
131
|
+
if (isRoleDelegationEvent(event) || isRoleReturnEvent(event)) return "";
|
|
109
132
|
return textOf(event.stage).trim();
|
|
110
133
|
}
|
|
111
134
|
|
|
@@ -114,6 +137,7 @@ function hasSupportedRoleStage(stage) {
|
|
|
114
137
|
}
|
|
115
138
|
|
|
116
139
|
function isFailedRoleActivity(event) {
|
|
140
|
+
if (!event) return false;
|
|
117
141
|
if (isToolActivityEvent(event)) return false;
|
|
118
142
|
return (textOf(event.tone) || eventTone(event)) === "failed";
|
|
119
143
|
}
|
|
@@ -134,6 +158,10 @@ function createRoleGroup(role, event) {
|
|
|
134
158
|
latestRoleEvent: null,
|
|
135
159
|
toolEvents: [],
|
|
136
160
|
toolActions: [],
|
|
161
|
+
skillActivities: [],
|
|
162
|
+
delegations: [],
|
|
163
|
+
returns: [],
|
|
164
|
+
summarySupersededByReturn: false,
|
|
137
165
|
};
|
|
138
166
|
}
|
|
139
167
|
|
|
@@ -153,6 +181,7 @@ function buildRoleCard(group, activeRole, streaming) {
|
|
|
153
181
|
const active = isActiveRoleActivity(group, activeRole, streaming);
|
|
154
182
|
const toolCount = countToolInvocations(group.toolEvents);
|
|
155
183
|
const toolSummary = summarizeConversationTools(group.toolActions);
|
|
184
|
+
const roleIdentityRecorded = group.latestRoleEvent || group.delegations[0];
|
|
156
185
|
let tone = "recorded";
|
|
157
186
|
if (active) tone = "active";
|
|
158
187
|
if (failed) tone = "failed";
|
|
@@ -160,12 +189,17 @@ function buildRoleCard(group, activeRole, streaming) {
|
|
|
160
189
|
id: group.role,
|
|
161
190
|
role: group.role,
|
|
162
191
|
title:
|
|
163
|
-
group.role === "supervisor" && !
|
|
192
|
+
group.role === "supervisor" && !roleIdentityRecorded
|
|
164
193
|
? "Root agent"
|
|
165
194
|
: ROLE_TITLES[group.role],
|
|
166
195
|
responsibility: ROLE_RESPONSIBILITIES[group.role],
|
|
167
196
|
phaseLabel: titleCaseEventValue(group.phase),
|
|
168
197
|
summary: latestRoleAction(group),
|
|
198
|
+
...(group.skillActivities.length > 0
|
|
199
|
+
? { skillActivities: group.skillActivities }
|
|
200
|
+
: {}),
|
|
201
|
+
...(group.delegations.length > 0 ? { delegations: group.delegations } : {}),
|
|
202
|
+
...(group.returns.length > 0 ? { returns: group.returns } : {}),
|
|
169
203
|
toolActions: group.toolActions,
|
|
170
204
|
facts: toolSummary
|
|
171
205
|
? [toolSummary]
|
|
@@ -203,6 +237,23 @@ export function buildConversationRoleCards({
|
|
|
203
237
|
continue;
|
|
204
238
|
}
|
|
205
239
|
|
|
240
|
+
const delegation = projectRoleDelegationEvent(event);
|
|
241
|
+
if (delegation) {
|
|
242
|
+
const group = groups.get("supervisor") || createRoleGroup("supervisor", null);
|
|
243
|
+
group.delegations.push(delegation);
|
|
244
|
+
groups.set("supervisor", group);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const receipt = projectRoleReturnEvent(event);
|
|
249
|
+
if (receipt) {
|
|
250
|
+
const group = groups.get("planner") || createRoleGroup("planner", null);
|
|
251
|
+
group.returns.push(receipt);
|
|
252
|
+
group.summarySupersededByReturn = true;
|
|
253
|
+
groups.set("planner", group);
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
|
|
206
257
|
const stage = roleActivityStage(event);
|
|
207
258
|
if (stage) {
|
|
208
259
|
activeRole = "";
|
|
@@ -212,6 +263,13 @@ export function buildConversationRoleCards({
|
|
|
212
263
|
group.phase = textOf(event.phase);
|
|
213
264
|
group.latestEvent = event;
|
|
214
265
|
group.latestRoleEvent = event;
|
|
266
|
+
group.summarySupersededByReturn = false;
|
|
267
|
+
if (isSupervisorSkillActivity(event)) {
|
|
268
|
+
group.skillActivities.push({
|
|
269
|
+
summary: roleActivitySummary(event),
|
|
270
|
+
tone: textOf(event.tone) || eventTone(event),
|
|
271
|
+
});
|
|
272
|
+
}
|
|
215
273
|
groups.set(stage, group);
|
|
216
274
|
}
|
|
217
275
|
}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { textOf } from "./text-format.js";
|
|
2
2
|
import { isStopResult } from "./request-stop-state.js";
|
|
3
|
+
import {
|
|
4
|
+
isRoleDelegationEvent,
|
|
5
|
+
projectRoleDelegationEvent,
|
|
6
|
+
} from "./role-delegation-event.js";
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
isRoleReturnEvent,
|
|
10
|
+
projectRoleReturnEvent,
|
|
11
|
+
} from "./role-return-event.js";
|
|
3
12
|
|
|
4
13
|
function canMergeEventTimelineEntries(previous, event, name, summary) {
|
|
5
14
|
if (!previous) return false;
|
|
15
|
+
if (isRoleDelegationEvent(previous) || isRoleDelegationEvent(event)) return false;
|
|
16
|
+
if (isRoleReturnEvent(previous) || isRoleReturnEvent(event)) return false;
|
|
6
17
|
if (previous.name !== name) return false;
|
|
7
18
|
if (previous.summary !== summary) return false;
|
|
8
19
|
if (previous.tone !== event.tone) return false;
|
|
@@ -119,7 +130,22 @@ export function getPlanItemPayload(message) {
|
|
|
119
130
|
};
|
|
120
131
|
}
|
|
121
132
|
|
|
133
|
+
function isMissingSkillLookup(message) {
|
|
134
|
+
if (message.type !== "event") return false;
|
|
135
|
+
if (message.stage !== "supervisor") return false;
|
|
136
|
+
if (message.phase !== "skills") return false;
|
|
137
|
+
// Runtime-owned status text, before or after event enrichment.
|
|
138
|
+
const name = textOf(message.name || message.rawType);
|
|
139
|
+
const status = textOf(message.message || name);
|
|
140
|
+
return (name === "runtime.state" || name === status)
|
|
141
|
+
&& status === "Skill lookup failed: knowledge_skill_not_found";
|
|
142
|
+
}
|
|
143
|
+
|
|
122
144
|
export function formatEventLabel(message) {
|
|
145
|
+
const receipt = projectRoleReturnEvent(message);
|
|
146
|
+
if (receipt) return receipt.outcome === "failed" ? "Planner failed" : "Returned result";
|
|
147
|
+
const delegation = projectRoleDelegationEvent(message);
|
|
148
|
+
if (delegation) return `Delegated to ${titleCaseEventValue(delegation.childRole)}`;
|
|
123
149
|
const name = textOf(message.name || message.rawType || message.type);
|
|
124
150
|
const status = textOf(message.status);
|
|
125
151
|
const phase = textOf(message.phase);
|
|
@@ -155,6 +181,7 @@ export function formatEventLabel(message) {
|
|
|
155
181
|
if (name === "request.failed" || message.type === "failed") {
|
|
156
182
|
return isStopResult(message) ? "Response stopped" : "Response failed";
|
|
157
183
|
}
|
|
184
|
+
if (isMissingSkillLookup(message)) return "Skill not found";
|
|
158
185
|
if (name === "runtime.state") {
|
|
159
186
|
return status || textOf(message.output) || "Runtime state";
|
|
160
187
|
}
|
|
@@ -180,6 +207,11 @@ function uncompletedToolLabel(message, name) {
|
|
|
180
207
|
}
|
|
181
208
|
|
|
182
209
|
export function formatEventDetail(message) {
|
|
210
|
+
const receipt = projectRoleReturnEvent(message);
|
|
211
|
+
if (receipt) return receipt.summary;
|
|
212
|
+
const delegation = projectRoleDelegationEvent(message);
|
|
213
|
+
if (delegation) return delegation.objective;
|
|
214
|
+
if (isMissingSkillLookup(message)) return "";
|
|
183
215
|
if (isStopResult(message)) return "Stopped by you.";
|
|
184
216
|
const parts = [];
|
|
185
217
|
const name = textOf(message.name || message.rawType || message.type);
|
|
@@ -209,10 +241,12 @@ export function formatEventDetail(message) {
|
|
|
209
241
|
}
|
|
210
242
|
|
|
211
243
|
export function eventTone(message) {
|
|
244
|
+
if (isRoleReturnEvent(message)) return "neutral";
|
|
212
245
|
const name = textOf(message.name || message.type);
|
|
213
246
|
const normalized = name.toLowerCase();
|
|
214
247
|
if (isStopResult(message)) return "neutral";
|
|
215
248
|
if (isUncompletedToolEvent(message)) return "neutral";
|
|
249
|
+
if (isMissingSkillLookup(message)) return "neutral";
|
|
216
250
|
if (
|
|
217
251
|
message.ok === false ||
|
|
218
252
|
textOf(message.status).toLowerCase() === "failed" ||
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface RoleDelegation {
|
|
2
|
+
id: string;
|
|
3
|
+
generation: string;
|
|
4
|
+
callerCallId: string;
|
|
5
|
+
callerRole: "supervisor";
|
|
6
|
+
childCallId: string;
|
|
7
|
+
childRole: "planner" | "worker" | "researcher" | "reviewer";
|
|
8
|
+
objective: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export declare function isRoleDelegationEvent(event: unknown): boolean;
|
|
12
|
+
export declare function projectRoleDelegationEvent(
|
|
13
|
+
event: Record<string, unknown>,
|
|
14
|
+
): RoleDelegation | null;
|
|
15
|
+
export declare function hasRecordedRoleDelegation(
|
|
16
|
+
events: Record<string, unknown>[],
|
|
17
|
+
delegation: RoleDelegation,
|
|
18
|
+
): boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const DELEGATED_ROLES = new Set([
|
|
2
|
+
"planner", "worker", "researcher", "reviewer",
|
|
3
|
+
]);
|
|
4
|
+
|
|
5
|
+
export function isRoleDelegationEvent(event) {
|
|
6
|
+
return (event?.eventName || event?.name || event?.rawType || event?.type)
|
|
7
|
+
=== "role.delegated";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function hasDelegationIdentity(value) {
|
|
11
|
+
if (typeof value !== "string") return false;
|
|
12
|
+
return value.trim().length > 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function hasDelegationObjective(value) {
|
|
16
|
+
if (typeof value !== "string") return false;
|
|
17
|
+
if (value.length > 8_192) return false;
|
|
18
|
+
return value.trim().length > 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Explicit committed delegation evidence, without inferred role or objective data. */
|
|
22
|
+
export function projectRoleDelegationEvent(event) {
|
|
23
|
+
if (!isRoleDelegationEvent(event)) return null;
|
|
24
|
+
const source = event.roleDelegation || event;
|
|
25
|
+
if (source.callerRole !== "supervisor") return null;
|
|
26
|
+
if (!DELEGATED_ROLES.has(source.childRole)) return null;
|
|
27
|
+
if (!hasDelegationIdentity(event.requestId)) return null;
|
|
28
|
+
if (!hasDelegationIdentity(source.callerCallId)) return null;
|
|
29
|
+
if (!hasDelegationIdentity(source.childCallId)) return null;
|
|
30
|
+
if (!hasDelegationObjective(source.objective)) return null;
|
|
31
|
+
if (source.generation !== undefined && typeof source.generation !== "string")
|
|
32
|
+
return null;
|
|
33
|
+
const generation = source.generation || "";
|
|
34
|
+
return {
|
|
35
|
+
id: JSON.stringify([event.requestId, generation, source.childCallId]),
|
|
36
|
+
generation,
|
|
37
|
+
callerCallId: source.callerCallId,
|
|
38
|
+
callerRole: source.callerRole,
|
|
39
|
+
childCallId: source.childCallId,
|
|
40
|
+
childRole: source.childRole,
|
|
41
|
+
objective: source.objective,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function hasRecordedRoleDelegation(events, delegation) {
|
|
46
|
+
return events.some((event) => event.roleDelegation?.id === delegation.id);
|
|
47
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface RoleReturn {
|
|
2
|
+
id: string;
|
|
3
|
+
generation: string;
|
|
4
|
+
callerCallId: string;
|
|
5
|
+
callerRole: "supervisor";
|
|
6
|
+
childCallId: string;
|
|
7
|
+
childRole: "planner";
|
|
8
|
+
outcome: "completed" | "failed";
|
|
9
|
+
summary: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export declare function isRoleReturnEvent(event: unknown): boolean;
|
|
13
|
+
export declare function projectRoleReturnEvent(
|
|
14
|
+
event: Record<string, unknown>,
|
|
15
|
+
): RoleReturn | null;
|
|
16
|
+
export declare function hasRecordedRoleReturn(
|
|
17
|
+
events: Record<string, unknown>[],
|
|
18
|
+
receipt: RoleReturn,
|
|
19
|
+
): boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function isRoleReturnEvent(event) {
|
|
2
|
+
return (event?.eventName || event?.name || event?.rawType || event?.type)
|
|
3
|
+
=== "role.returned";
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
function hasReturnIdentity(value) {
|
|
7
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function projectRoleReturnEvent(event) {
|
|
11
|
+
if (!isRoleReturnEvent(event)) return null;
|
|
12
|
+
const source = event.roleReturn || event;
|
|
13
|
+
if (source.callerRole !== "supervisor") return null;
|
|
14
|
+
if (source.childRole !== "planner") return null;
|
|
15
|
+
if (source.outcome !== "completed" && source.outcome !== "failed") return null;
|
|
16
|
+
if (!hasReturnIdentity(event.requestId)) return null;
|
|
17
|
+
if (!hasReturnIdentity(source.callerCallId)) return null;
|
|
18
|
+
if (!hasReturnIdentity(source.childCallId)) return null;
|
|
19
|
+
if (typeof source.summary !== "string" || !source.summary.trim()) return null;
|
|
20
|
+
if (source.generation !== undefined && typeof source.generation !== "string") return null;
|
|
21
|
+
const generation = source.generation || "";
|
|
22
|
+
return {
|
|
23
|
+
id: JSON.stringify([event.requestId, generation, source.childCallId]),
|
|
24
|
+
generation,
|
|
25
|
+
callerCallId: source.callerCallId,
|
|
26
|
+
callerRole: source.callerRole,
|
|
27
|
+
childCallId: source.childCallId,
|
|
28
|
+
childRole: source.childRole,
|
|
29
|
+
outcome: source.outcome,
|
|
30
|
+
summary: source.summary,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function hasRecordedRoleReturn(events, receipt) {
|
|
35
|
+
return events.some((event) => event.roleReturn?.id === receipt.id);
|
|
36
|
+
}
|
|
@@ -2,6 +2,7 @@ import { getRecord, titleCaseEventValue } from "./event-presentation.js";
|
|
|
2
2
|
import { projectConversationFileReference } from "./conversation-file-reference.js";
|
|
3
3
|
import { computerInputFields } from "./tool-computer-activity-fields.js";
|
|
4
4
|
import { automationActivityFields } from "./tool-automation-activity-fields.js";
|
|
5
|
+
import { skillActivityFields } from "./tool-skill-activity-fields.js";
|
|
5
6
|
import {
|
|
6
7
|
processInputFields,
|
|
7
8
|
processResultFields,
|
|
@@ -193,10 +194,11 @@ export function projectToolActivityEvent(message) {
|
|
|
193
194
|
const params = getRecord(meta.params);
|
|
194
195
|
const inputMeta = { ...meta, params };
|
|
195
196
|
const fileReference = projectConversationFileReference(message);
|
|
196
|
-
const
|
|
197
|
+
const skill = skillActivityFields(meta, tool, completed, message.ok);
|
|
198
|
+
const activity = skill ?? automationActivityFields(meta, tool);
|
|
197
199
|
return {
|
|
198
200
|
...(fileReference ? { fileReference } : {}),
|
|
199
|
-
...(
|
|
201
|
+
...(activity?.activityTitle ? { activityTitle: activity.activityTitle } : {}),
|
|
200
202
|
name,
|
|
201
203
|
tool,
|
|
202
204
|
executionId: boundedText(message.executionId, 200).trim(),
|
|
@@ -206,7 +208,7 @@ export function projectToolActivityEvent(message) {
|
|
|
206
208
|
beforeExternalExecution: message.stage === "before_external_execution",
|
|
207
209
|
intent: boundedText(message.intent || meta.intent),
|
|
208
210
|
target: boundedText(
|
|
209
|
-
|
|
211
|
+
activity?.target ||
|
|
210
212
|
meta.source ||
|
|
211
213
|
meta.displayTarget ||
|
|
212
214
|
meta.path ||
|
|
@@ -215,10 +217,10 @@ export function projectToolActivityEvent(message) {
|
|
|
215
217
|
meta.id ||
|
|
216
218
|
meta.savedId,
|
|
217
219
|
),
|
|
218
|
-
sent: [...inputFields(inputMeta, completed, tool), ...(
|
|
220
|
+
sent: [...inputFields(inputMeta, completed, tool), ...(activity?.sent || [])],
|
|
219
221
|
received: terminal ? resultFields(meta, tool, message.ok) : [],
|
|
220
|
-
preview: terminal ? boundedText(meta.outputPreview, 1_200) : "",
|
|
221
|
-
previewTruncated: terminal && hasClippedPreview(meta),
|
|
222
|
+
preview: terminal && !skill ? boundedText(meta.outputPreview, 1_200) : "",
|
|
223
|
+
previewTruncated: terminal && !skill && hasClippedPreview(meta),
|
|
222
224
|
partial: terminal && hasPartialSource(meta),
|
|
223
225
|
outcome: completedOutcome(meta),
|
|
224
226
|
ok: typeof message.ok === "boolean" ? message.ok : null,
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const ACTION_TITLES = Object.freeze({
|
|
2
|
+
list_skills: "List skills",
|
|
3
|
+
read_skill: "Read skill",
|
|
4
|
+
read_skills: "Read skills",
|
|
5
|
+
create_skill: "Create skill",
|
|
6
|
+
update_skill: "Edit skill",
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
function boundedSkillText(value, limit) {
|
|
10
|
+
if (typeof value !== "string") return "";
|
|
11
|
+
const text = value.trim();
|
|
12
|
+
if (text.length <= limit) return text;
|
|
13
|
+
return `${text.slice(0, limit - 1)}…`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function isSkillReadAction(action) {
|
|
17
|
+
return action === "read_skill" || action === "read_skills";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function hasSuccessfulSkillResult(action, completed, ok) {
|
|
21
|
+
if (action === "list_skills" || !Object.hasOwn(ACTION_TITLES, action)) return false;
|
|
22
|
+
if (!completed) return false;
|
|
23
|
+
return ok === true;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Decode declared display metadata only; never inspect a Skill body or tool output. */
|
|
27
|
+
export function skillActivityFields(meta, tool, completed, ok) {
|
|
28
|
+
if (tool !== "abot_skills") return null;
|
|
29
|
+
const action = boundedSkillText(meta.skillAction, 128);
|
|
30
|
+
const activityTitle = Object.hasOwn(ACTION_TITLES, action)
|
|
31
|
+
? ACTION_TITLES[action]
|
|
32
|
+
: "";
|
|
33
|
+
const sent = [];
|
|
34
|
+
if (activityTitle) sent.push({ label: "Action", value: activityTitle });
|
|
35
|
+
if (action === "list_skills" || !activityTitle) return { activityTitle, target: "", sent };
|
|
36
|
+
|
|
37
|
+
const readAction = isSkillReadAction(action);
|
|
38
|
+
const referenceLimit = readAction ? 160 : 128;
|
|
39
|
+
const referenceLabel = readAction ? "Skill reference" : "Skill ID";
|
|
40
|
+
const skillId = action === "read_skills"
|
|
41
|
+
? boundedSkillText(Array.isArray(meta.skillIds)
|
|
42
|
+
? meta.skillIds.slice(0, 8).map((id) => boundedSkillText(id, referenceLimit)).filter(Boolean).join(", ")
|
|
43
|
+
: "", 160)
|
|
44
|
+
: boundedSkillText(meta.skillId, referenceLimit) || (completed && ok === true ? boundedSkillText(meta.savedSkillId, 128) : "");
|
|
45
|
+
const skillTitle = hasSuccessfulSkillResult(action, completed, ok)
|
|
46
|
+
? boundedSkillText(meta.skillTitle, 160)
|
|
47
|
+
: "";
|
|
48
|
+
if (skillId) sent.push({ label: action === "read_skills" ? "Skill references" : referenceLabel, value: skillId });
|
|
49
|
+
return { activityTitle, target: skillTitle || boundedSkillText(meta.skillName, 160) || skillId, sent };
|
|
50
|
+
}
|
|
@@ -6,6 +6,14 @@ export type AutomationDraftResponse = Readonly<{
|
|
|
6
6
|
validation?: Record<string, unknown> | null;
|
|
7
7
|
}>;
|
|
8
8
|
|
|
9
|
+
export type AutomationRunHistoryQuery = Readonly<{
|
|
10
|
+
limit?: number;
|
|
11
|
+
cursor?: string;
|
|
12
|
+
status?: string;
|
|
13
|
+
from?: string;
|
|
14
|
+
to?: string;
|
|
15
|
+
}>;
|
|
16
|
+
|
|
9
17
|
export type AutomationRequests = Readonly<{
|
|
10
18
|
supportsAutomations(): boolean;
|
|
11
19
|
listAutomations(environmentId?: string): Promise<{ automations: Record<string, unknown>[] }>;
|
|
@@ -22,7 +30,7 @@ export type AutomationRequests = Readonly<{
|
|
|
22
30
|
setAutomationPermission(automationId: string, input: { expectedGrantRevision: number; mode: "full_access" | "full_plus"; operations: OperationRef[] }, environmentId?: string): Promise<Record<string, unknown>>;
|
|
23
31
|
getAutomationCatalog(automationId: string, environmentId?: string): Promise<Record<string, unknown>>;
|
|
24
32
|
startAutomationRun(automationId: string, idempotencyKey: string, environmentId?: string): Promise<Record<string, unknown>>;
|
|
25
|
-
listAutomationRuns(automationId: string, environmentId?: string): Promise<Record<string, unknown>>;
|
|
33
|
+
listAutomationRuns(automationId: string, environmentId?: string, query?: AutomationRunHistoryQuery): Promise<Record<string, unknown>>;
|
|
26
34
|
getAutomationRun(runId: string, environmentId?: string): Promise<Record<string, unknown>>;
|
|
27
35
|
getAutomationStepEvidence(runId: string, nodeId: string, environmentId?: string, full?: boolean): Promise<Record<string, unknown>>;
|
|
28
36
|
stopAutomationRun(runId: string, environmentId?: string): Promise<Record<string, unknown>>;
|
|
@@ -14,6 +14,14 @@ export function createAutomationRequests({ requestApi, getEnvironmentId, getConf
|
|
|
14
14
|
const post = (url, input) => requestAutomation(url, {
|
|
15
15
|
method: "POST", body: JSON.stringify(input),
|
|
16
16
|
});
|
|
17
|
+
const historyPath = (automationId, environmentId, query) => {
|
|
18
|
+
const params = new URLSearchParams();
|
|
19
|
+
for (const key of ["limit", "cursor", "status", "from", "to"])
|
|
20
|
+
if (query[key] !== undefined && query[key] !== null && query[key] !== "")
|
|
21
|
+
params.set(key, String(query[key]));
|
|
22
|
+
const suffix = params.size ? `&${params}` : "";
|
|
23
|
+
return `${path(`/${encodeURIComponent(automationId)}/runs`, environmentId)}${suffix}`;
|
|
24
|
+
};
|
|
17
25
|
return {
|
|
18
26
|
supportsAutomations,
|
|
19
27
|
listAutomations: (environmentId) => requestAutomation(path("", environmentId)),
|
|
@@ -59,8 +67,8 @@ export function createAutomationRequests({ requestApi, getEnvironmentId, getConf
|
|
|
59
67
|
},
|
|
60
68
|
startAutomationRun: (automationId, idempotencyKey, environmentId) =>
|
|
61
69
|
post(path(`/${encodeURIComponent(automationId)}/run`, environmentId), { idempotencyKey }),
|
|
62
|
-
listAutomationRuns: (automationId, environmentId) =>
|
|
63
|
-
requestAutomation(
|
|
70
|
+
listAutomationRuns: (automationId, environmentId, query = {}) =>
|
|
71
|
+
requestAutomation(historyPath(automationId, environmentId, query)),
|
|
64
72
|
getAutomationRun: (runId, environmentId) => requestAutomation(runPath(runId, environmentId)),
|
|
65
73
|
getAutomationStepEvidence: (runId, nodeId, environmentId, full = false) => requestAutomation(
|
|
66
74
|
`/automation-runs/${encodeURIComponent(runId)}/steps/${encodeURIComponent(nodeId)}?environment=${encodeURIComponent(environmentId || getEnvironmentId())}${full ? "&full=1" : ""}`),
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function createSkillRequests({ requestApi, getEnvironmentId, getConfig }) {
|
|
2
|
+
const supportsSkills = () => getConfig()?.backend === "runtime";
|
|
3
|
+
const path = (suffix, environmentId) =>
|
|
4
|
+
`/runtime/skills${suffix}?environment=${encodeURIComponent(environmentId)}`;
|
|
5
|
+
function request(suffix, environmentId, options) {
|
|
6
|
+
if (!supportsSkills()) throw new Error("Skills require the local Runtime backend.");
|
|
7
|
+
return requestApi(path(suffix, environmentId), options);
|
|
8
|
+
}
|
|
9
|
+
const identity = (id) => `/${encodeURIComponent(id)}`;
|
|
10
|
+
return {
|
|
11
|
+
supportsSkills,
|
|
12
|
+
createPersonalSkill: ({ name, description, content }, environmentId = getEnvironmentId()) =>
|
|
13
|
+
request("", environmentId, { method: "POST", body: JSON.stringify({ name, description, content }) }),
|
|
14
|
+
listPersonalSkills: (environmentId = getEnvironmentId()) => request("", environmentId),
|
|
15
|
+
readPersonalSkill: (id, environmentId = getEnvironmentId()) => request(identity(id), environmentId),
|
|
16
|
+
updatePersonalSkill: (id, content, expectedRevision, environmentId = getEnvironmentId()) =>
|
|
17
|
+
request(identity(id), environmentId, { method: "PATCH", body: JSON.stringify({ content, expectedRevision }) }),
|
|
18
|
+
archivePersonalSkill: (id, expectedRevision, environmentId = getEnvironmentId()) =>
|
|
19
|
+
request(`${identity(id)}/archive`, environmentId, { method: "POST", body: JSON.stringify({ expectedRevision }) }),
|
|
20
|
+
restorePersonalSkill: (id, expectedRevision, environmentId = getEnvironmentId()) =>
|
|
21
|
+
request(`${identity(id)}/restore`, environmentId, { method: "POST", body: JSON.stringify({ expectedRevision }) }),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createSkillRequests } from "./runtime-web-client/skills.js";
|
|
1
2
|
import { createNotificationRequests } from "./runtime-web-client/notifications.js";
|
|
2
3
|
import { createSparkChatRequests } from "./runtime-web-client/spark-chat.js";
|
|
3
4
|
import { createProjectRequests } from "./runtime-web-client/projects.js";
|
|
@@ -380,6 +381,7 @@ export function createRuntimeWebClient({
|
|
|
380
381
|
...createProjectRequests({ requestApi, getEnvironmentId, getConfig }),
|
|
381
382
|
...createToolApprovalRequests({ requestApi, getEnvironmentId, getConfig }),
|
|
382
383
|
...createNotificationRequests({ requestApi, getEnvironmentId, getConfig }),
|
|
384
|
+
...createSkillRequests({ requestApi, getEnvironmentId, getConfig }),
|
|
383
385
|
...createSparkChatRequests({ requestApi, getEnvironmentId, getConfig }),
|
|
384
386
|
};
|
|
385
387
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createSkillsController } from "./controllers/skills-controller.js";
|
|
2
|
+
import { mountSkillsWorkspace, createSkillsWorkspace } from "./components/skills/workspace.js";
|
|
3
|
+
|
|
4
|
+
export function createSkillsFeature({ dom, client, shell, getEnvironmentId,
|
|
5
|
+
documentRoot = document, viewport = window }) {
|
|
6
|
+
mountSkillsWorkspace(dom, documentRoot);
|
|
7
|
+
let view;
|
|
8
|
+
const controller = createSkillsController({ client, getEnvironmentId,
|
|
9
|
+
confirmDiscard: (message) => viewport.confirm(message), render: (snapshot) => view?.render(snapshot) });
|
|
10
|
+
view = createSkillsWorkspace({ root: dom.skillsRoot, actions: controller,
|
|
11
|
+
confirmArchive: (message) => viewport.confirm(message) });
|
|
12
|
+
view.render(controller.snapshot());
|
|
13
|
+
shell.addWorkspaceGuard(({ from, to }) => {
|
|
14
|
+
if (from !== "skills" || to === "skills") return true;
|
|
15
|
+
return controller.prepareLeave();
|
|
16
|
+
});
|
|
17
|
+
shell.subscribeWorkspaceChange((workspace) => controller.setActive(workspace === "skills"));
|
|
18
|
+
function bind() {
|
|
19
|
+
// Bind after the canonical transition: rejected raw changes never clear drafts.
|
|
20
|
+
dom.environmentSelect.addEventListener("change", () => controller.environmentChanged());
|
|
21
|
+
viewport.addEventListener("beforeunload", (event) => {
|
|
22
|
+
if (!controller.isDirty()) return;
|
|
23
|
+
event.preventDefault();
|
|
24
|
+
event.returnValue = "";
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function refreshAvailability() {
|
|
28
|
+
const available = client.supportsSkills();
|
|
29
|
+
dom.skillsWorkspaceButton.hidden = !available;
|
|
30
|
+
dom.skillsWorkspaceButton.disabled = !available || dom.skillsWorkspaceButton.dataset.onboardingBlocked === "true";
|
|
31
|
+
if (!available) controller.setActive(false);
|
|
32
|
+
}
|
|
33
|
+
shell.subscribeRuntimeAvailabilityChange(refreshAvailability);
|
|
34
|
+
return { bind, refreshAvailability, prepareEnvironmentChange: controller.prepareLeave,
|
|
35
|
+
isWorkspaceAvailable: (destination) => destination !== "skills" || client.supportsSkills() };
|
|
36
|
+
}
|
|
@@ -332,3 +332,61 @@
|
|
|
332
332
|
overflow-y: auto;
|
|
333
333
|
scrollbar-gutter: stable;
|
|
334
334
|
}
|
|
335
|
+
|
|
336
|
+
.conversation-role-history {
|
|
337
|
+
display: grid;
|
|
338
|
+
gap: 8px;
|
|
339
|
+
margin: 0;
|
|
340
|
+
padding: 0;
|
|
341
|
+
list-style: none;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.conversation-role-history + .conversation-role-summary {
|
|
345
|
+
margin-block-start: 8px;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.conversation-role-history-toggle {
|
|
349
|
+
display: grid;
|
|
350
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
351
|
+
gap: 3px 8px;
|
|
352
|
+
cursor: pointer;
|
|
353
|
+
list-style: none;
|
|
354
|
+
border-radius: 4px;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.conversation-role-history-toggle::-webkit-details-marker {
|
|
358
|
+
display: none;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.conversation-role-history-toggle:focus-visible {
|
|
362
|
+
outline: 2px solid var(--role-accent);
|
|
363
|
+
outline-offset: 3px;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.conversation-role-history-label,
|
|
367
|
+
.conversation-role-history-chevron {
|
|
368
|
+
color: var(--role-accent);
|
|
369
|
+
font-size: var(--font-size-xs);
|
|
370
|
+
line-height: 1.5;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.conversation-role-history-text {
|
|
374
|
+
grid-column: 1 / -1;
|
|
375
|
+
display: -webkit-box;
|
|
376
|
+
-webkit-box-orient: vertical;
|
|
377
|
+
-webkit-line-clamp: 2;
|
|
378
|
+
overflow: hidden;
|
|
379
|
+
white-space: pre-wrap;
|
|
380
|
+
overflow-wrap: anywhere;
|
|
381
|
+
font-size: var(--font-size-md);
|
|
382
|
+
line-height: 1.6;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.conversation-role-history-item[open] .conversation-role-history-text {
|
|
386
|
+
display: block;
|
|
387
|
+
-webkit-line-clamp: unset;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.conversation-role-history-item[open] .conversation-role-history-chevron {
|
|
391
|
+
transform: rotate(180deg);
|
|
392
|
+
}
|