@abot-ai/runtime 1.8.0 → 1.8.1
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/README.md +216 -222
- package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
- package/dist/src/capabilities/tool-types.d.ts +4 -0
- package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
- package/dist/src/model-gateway/protocol/message-contract.js +1 -1
- package/dist/src/model-gateway/server/chat-handler.js +5 -7
- package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
- package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
- package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
- package/dist/src/runtime/capabilities/tool-availability.js +6 -0
- package/dist/src/runtime/context/capability-brief.d.ts +2 -2
- package/dist/src/runtime/context/capability-brief.js +3 -3
- package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
- package/dist/src/runtime/context/capability-descriptions.js +57 -20
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +6 -1
- package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
- package/dist/src/runtime/long-term-memory/initial-context.d.ts +17 -0
- package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
- package/dist/src/runtime/long-term-memory/projection.js +1 -1
- package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +2 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +5 -2
- package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +2 -1
- package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
- package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
- package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
- package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
- package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
- package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +3 -1
- package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
- package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -1
- package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
- package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
- package/dist/src/runtime/plugins/manifest-projection.js +3 -0
- package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
- package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
- package/dist/src/runtime/request/root-contract.d.ts +2 -0
- package/dist/src/runtime/request/root-execution-kernel.js +1 -0
- package/dist/src/runtime/request/runner.js +9 -3
- package/dist/src/runtime/request/supervisor-root-execution.js +6 -0
- package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
- package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
- package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
- package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
- package/dist/src/runtime/steps/execution-agent/format.js +2 -0
- package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
- package/dist/src/runtime/steps/execution-agent/input.js +22 -1
- package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
- package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
- package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/execution-agent/prompt.js +3 -4
- package/dist/src/runtime/steps/execution-agent/response-run.js +5 -11
- package/dist/src/runtime/steps/execution-agent/run.js +4 -1
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
- package/dist/src/runtime/steps/execution-agent/state-context.js +2 -39
- package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -0
- package/dist/src/runtime/steps/planner-decision/prompt.js +26 -49
- package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/input.js +5 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/prompt.js +6 -2
- package/dist/src/runtime/steps/supervisor-decision/run.d.ts +1 -0
- package/dist/src/runtime/steps/supervisor-decision/run.js +4 -0
- package/dist/src/runtime/steps/supervisor-response/run.d.ts +2 -0
- package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
- package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
- package/dist/src/web-ui/app/app.js +1 -0
- package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
- package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
- package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
- package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
- package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
- package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
- package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
- package/dist/src/web-ui/app/components/operations-summary.js +2 -1
- package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
- package/dist/src/web-ui/app/components/passive-learning/home.js +4 -1
- package/dist/src/web-ui/app/components/schedules/details.js +3 -2
- package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
- package/dist/src/web-ui/app/components/spark-chat/settings.js +1 -1
- package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
- package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
- package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
- package/dist/src/web-ui/app/components/system-host/native-windows-access.js +1 -1
- package/dist/src/web-ui/app/components/system-host/rendering.js +3 -3
- package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
- package/dist/src/web-ui/app/computer-access-feature.js +13 -1
- package/dist/src/web-ui/app/configuration-feature.js +2 -0
- package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
- package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +1 -1
- package/dist/src/web-ui/app/dashboard-feature.js +9 -0
- package/dist/src/web-ui/app/lib/reasoning-controls.js +6 -1
- package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
- package/dist/src/web-ui/app/styles/95-home-widgets.css +109 -0
- package/dist/src/web-ui/app/styles.css +1 -0
- package/docs/plugins.md +37 -32
- package/package.json +1 -1
- package/plugins/capability-brief/plugin.json +1 -1
- package/plugins/code-outline/plugin.json +1 -1
- package/plugins/document-reader/plugin.json +1 -1
- package/plugins/exec/plugin.json +1 -1
- package/plugins/filesystem/plugin.json +1 -1
- package/plugins/json-inspector/plugin.json +1 -1
- package/plugins/local-search/plugin.json +1 -1
- package/plugins/memory/plugin.json +1 -1
- package/plugins/project-orientation/plugin.json +1 -1
- package/plugins/system/plugin.json +1 -1
- package/plugins/system-probe/plugin.json +1 -1
- package/plugins/web/plugin.json +1 -1
package/README.md
CHANGED
|
@@ -1,294 +1,288 @@
|
|
|
1
1
|
# ABot Runtime
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
Scheduling uses the Runtime directly and requires no plugin or external bridge.
|
|
62
|
-
|
|
63
|
-
## Requirements
|
|
64
|
-
|
|
65
|
-
- Node.js `^20.19.0` or `>=22.12.0` (Node.js 21 is not supported)
|
|
66
|
-
- npm
|
|
67
|
-
- A configured model provider and model
|
|
3
|
+
**Put your language model to work with tools, memory, and repeatable workflows.**
|
|
4
|
+
|
|
5
|
+
ABot Runtime is an open-source TypeScript engine for AI agents that work with
|
|
6
|
+
files, use tools, retain useful context, and carry out multi-step tasks.
|
|
7
|
+
|
|
8
|
+
**Work locally, with a model you choose.** Run Ollama on your own machine and
|
|
9
|
+
keep task data local when generation, memory embeddings, SPARK models, and the
|
|
10
|
+
tools you use are all local. Hosted models, remote endpoints, Web access, and
|
|
11
|
+
other external tools can send relevant data outside your machine.
|
|
12
|
+
|
|
13
|
+
Use the bundled Web UI as your everyday workspace, or embed the same runtime
|
|
14
|
+
in your own application. Connect a local or hosted model, choose how it should
|
|
15
|
+
work, and keep visibility into its actions and results.
|
|
16
|
+
|
|
17
|
+
[Website](https://abot-ai.com/) · [Get started](#get-started) · [Documentation](#documentation) · [Releases](https://github.com/Dorshitrit/abot-runtime/releases)
|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
*Start from a Studio template, then choose your inputs, model, and permissions.*
|
|
22
|
+
|
|
23
|
+
## What can you do with ABot?
|
|
24
|
+
|
|
25
|
+
- **Research and produce something useful.** Compare public sources and save a
|
|
26
|
+
sourced Markdown brief with findings and open questions.
|
|
27
|
+
- **Work with documents and projects.** Summarize a document, explain a code
|
|
28
|
+
module, inspect configuration, or work with files using the enabled tools.
|
|
29
|
+
- **Automate recurring work.** Save a request as a scheduled Job, or build a
|
|
30
|
+
reusable Studio workflow that processes inputs through several steps.
|
|
31
|
+
- **Build an agent into your product.** Reuse ABot's execution, session, tool,
|
|
32
|
+
and event interfaces behind your own application.
|
|
33
|
+
|
|
34
|
+
These workflows use the models, plugins, credentials, and permissions you
|
|
35
|
+
configure.
|
|
36
|
+
|
|
37
|
+
## One engine, two execution routes
|
|
38
|
+
|
|
39
|
+
Different models benefit from different ways of working. ABot gives you two
|
|
40
|
+
routes within the same runtime:
|
|
41
|
+
|
|
42
|
+
| | Execution Agent (EA) | Supervisor (SUPER) |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| Designed for | Capable models that can take broader responsibility for a task | Models that benefit from smaller, focused responsibilities, including local models |
|
|
45
|
+
| How it works | The main agent selects and runs tools directly, with optional planning and audit advice | A Supervisor coordinates the request and delegates to Planner, Worker, and Reviewer roles when needed |
|
|
46
|
+
| Tool execution | Owned by the Execution Agent | Delegated to a Worker |
|
|
47
|
+
|
|
48
|
+
**EA gives capable models room to act. SUPER gives models a more structured
|
|
49
|
+
division of work.**
|
|
50
|
+
|
|
51
|
+
Both routes share tools, permission controls, conversations, persistence, and
|
|
52
|
+
execution infrastructure. Both can be used with local or hosted models.
|
|
53
|
+
Choose according to the model's capabilities and the tasks you want it to perform.
|
|
54
|
+
|
|
55
|
+
In the Web UI, select **Execution Agent** or **Supervisor** under a model's
|
|
56
|
+
**Execution route** setting. The choice belongs to the model profile.
|
|
57
|
+
|
|
58
|
+
Planning and review are available when needed; individual requests do not have
|
|
59
|
+
to pass through every role. Results still depend on the model, context window,
|
|
60
|
+
configuration, and available tools.
|
|
68
61
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
and pull a model you choose. OpenAI profiles require `OPENAI_API_KEY`. ABot
|
|
72
|
-
Runtime has no built-in default model.
|
|
62
|
+
See [Configuration](docs/configuration.md#request-runner) for technical policy
|
|
63
|
+
names, defaults, and model calibration.
|
|
73
64
|
|
|
74
|
-
##
|
|
65
|
+
## Get started
|
|
75
66
|
|
|
76
|
-
|
|
67
|
+
You need:
|
|
68
|
+
|
|
69
|
+
- Node.js `^20.19.0` or `>=22.12.0`; Node.js 21 is not supported
|
|
70
|
+
- npm
|
|
71
|
+
- An OpenAI or Ollama model connection
|
|
72
|
+
|
|
73
|
+
Create a directory for your ABot installation:
|
|
77
74
|
|
|
78
75
|
```bash
|
|
79
76
|
mkdir my-abot
|
|
80
77
|
cd my-abot
|
|
81
78
|
npm init -y
|
|
82
79
|
npm install @abot-ai/runtime
|
|
80
|
+
npx abot start
|
|
83
81
|
```
|
|
84
82
|
|
|
85
|
-
|
|
86
|
-
Web UI with one command:
|
|
83
|
+
Open [http://127.0.0.1:5177](http://127.0.0.1:5177).
|
|
87
84
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
npx abot start
|
|
91
|
-
```
|
|
85
|
+
The setup wizard guides you through connecting a provider, selecting a model,
|
|
86
|
+
choosing tools, and optionally enabling semantic memory.
|
|
92
87
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
- **OpenAI:** enter your API key and model ID.
|
|
89
|
+
- **Ollama:** install and start Ollama separately, download your chosen model,
|
|
90
|
+
and provide an address reachable from the Runtime.
|
|
96
91
|
|
|
97
|
-
|
|
92
|
+
ABot includes the provider adapters. You supply the model and any required
|
|
93
|
+
credentials. Configuration and runtime state are stored in your project.
|
|
98
94
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
Prefer command-line setup or running from source?
|
|
96
|
+
See [Installation](docs/installation.md) and
|
|
97
|
+
[Running Locally](docs/running-locally.md).
|
|
102
98
|
|
|
103
|
-
|
|
104
|
-
`execution-agent-v1` execution policy. Existing profiles are preserved unless
|
|
105
|
-
the user explicitly requests replacement.
|
|
99
|
+
## A workspace for everyday agent work
|
|
106
100
|
|
|
107
|
-
|
|
108
|
-
|
|
101
|
+
The included Web UI brings conversations, tools, models, and automation into
|
|
102
|
+
one place.
|
|
109
103
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
104
|
+
- Organize conversations and projects around working folders.
|
|
105
|
+
- Select models and their supported reasoning settings.
|
|
106
|
+
- Attach files and images, subject to model and tool support.
|
|
107
|
+
- Follow streaming responses, tool activity, results, and failures.
|
|
108
|
+
- Steer an active request, stop it, or queue the next message.
|
|
109
|
+
- Manage plugins, memories, schedules, and runtime configuration.
|
|
110
|
+
- Inspect persisted conversation history, request events, logs, and health.
|
|
111
|
+
- Review notifications and open the conversation or run behind them.
|
|
113
112
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
[ABot Spark](docs/long-term-memory.md#learning-from-computer-activity) adds optional
|
|
117
|
-
computer-activity learning and proactive suggestions, with separate controls and
|
|
118
|
-
daily usage limits. Collection and proactive messages are off by default.
|
|
113
|
+
The default Web UI connects directly to the local Runtime. An external bridge
|
|
114
|
+
is optional.
|
|
119
115
|
|
|
120
|
-
|
|
121
|
-
use one paired Companion. Desktop tools require the [SYSTEM platform dependencies
|
|
122
|
-
and permissions](plugins/system/README.md#execution-environments).
|
|
116
|
+
## Tools you can use and extend
|
|
123
117
|
|
|
124
|
-
|
|
118
|
+
The bundled public plugins cover:
|
|
125
119
|
|
|
126
|
-
|
|
120
|
+
| Area | Capabilities |
|
|
121
|
+
|---|---|
|
|
122
|
+
| Files and documents | Read, create, and edit files; extract document content |
|
|
123
|
+
| Development | Inspect projects, code structure, and JSON configuration |
|
|
124
|
+
| Local search | Find relevant content in accessible files |
|
|
125
|
+
| Commands and systems | Execute commands, inspect system information, and discover or launch applications where supported |
|
|
126
|
+
| Web research | Fetch public pages and search supported sources |
|
|
127
|
+
| Explicit memory | Save and retrieve records through dedicated memory tools |
|
|
127
128
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
[Ollama model library](https://ollama.com/library), then pull and verify that
|
|
131
|
-
exact model:
|
|
129
|
+
Select the plugins and tools available to your agent, then extend the catalog
|
|
130
|
+
with your own plugins through the public Plugin SDK.
|
|
132
131
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
Sensitive actions follow the selected approval mode. Tool availability also
|
|
133
|
+
depends on platform support, installed dependencies, and OS permissions.
|
|
134
|
+
Approved commands run with the Runtime user's OS authority; project folders
|
|
135
|
+
are not a shell sandbox.
|
|
137
136
|
|
|
138
|
-
|
|
137
|
+
For Web access:
|
|
139
138
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
- `web_fetch` retrieves a public HTTP(S) page without a search API key.
|
|
140
|
+
- `web_search` uses Brave Search when `BRAVE_SEARCH_API_KEY` is configured.
|
|
141
|
+
- Without a key, Light search discovers pages within a bounded catalog of
|
|
142
|
+
public sources. Its coverage is more limited than a whole-web search engine.
|
|
144
143
|
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
See [Plugins](docs/plugins.md) and
|
|
145
|
+
[Projects and Permissions](docs/projects-and-full-plus.md).
|
|
147
146
|
|
|
148
|
-
|
|
149
|
-
npm run init -- --provider ollama --model <model-id> --base-url http://<ollama-host>:11434
|
|
150
|
-
```
|
|
147
|
+
## Turn repeated work into automation
|
|
151
148
|
|
|
152
|
-
|
|
153
|
-
`local/runtime.config.json`. It also sets `LLM_RUNTIME_CONFIG_FILE` in `.env`
|
|
154
|
-
so the local commands use that config. Both the provider and model are explicit.
|
|
149
|
+
### Scheduled conversation requests
|
|
155
150
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
macOS host at `http://host.docker.internal:11434`; other WSL, container, and
|
|
160
|
-
remote layouts may require a different address.
|
|
151
|
+
Save a request to run later in its conversation, using its saved model and
|
|
152
|
+
permissions. Supported schedules include timers, one-time requests, intervals,
|
|
153
|
+
and daily, weekly, or monthly schedules.
|
|
161
154
|
|
|
162
|
-
|
|
155
|
+
Manage Jobs in the Web UI or through the model's built-in scheduling capability.
|
|
156
|
+
Each run leaves a record in its conversation.
|
|
163
157
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
```
|
|
158
|
+
The Runtime must be running when a Job is due. Missed offline occurrences and
|
|
159
|
+
failed runs are not retried automatically.
|
|
167
160
|
|
|
168
|
-
|
|
161
|
+
### ABot Studio
|
|
169
162
|
|
|
170
|
-
|
|
171
|
-
npm run web-ui
|
|
172
|
-
```
|
|
163
|
+
Build reusable workflows in a visual editor by combining tool and agent steps.
|
|
173
164
|
|
|
174
|
-
|
|
165
|
+
Studio supports:
|
|
175
166
|
|
|
176
|
-
|
|
167
|
+
- Sequential steps and parallel branches
|
|
168
|
+
- Connected inputs and reusable saved agents
|
|
169
|
+
- Starter templates for research, documents, development, and operations
|
|
170
|
+
- Manual runs, schedules, and folder polling
|
|
171
|
+
- Retained step outputs and execution records
|
|
172
|
+
- Separate draft, publication, activation, pause, and stop controls
|
|
177
173
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
```
|
|
174
|
+
For example, turn incoming documents into briefs, compare several sources,
|
|
175
|
+
or run a repeatable project inspection.
|
|
181
176
|
|
|
182
|
-
|
|
177
|
+
Conversations can help create and edit workflow drafts. Publication, activation,
|
|
178
|
+
and execution remain separate actions.
|
|
183
179
|
|
|
184
|
-
|
|
185
|
-
providers or profiles, give the new profile a unique id:
|
|
180
|
+
## Memory that carries useful context forward
|
|
186
181
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
```
|
|
182
|
+
Optional long-term memory helps retain selected facts and preferences across
|
|
183
|
+
conversations. Inspect, edit, and delete saved records from the Web UI.
|
|
190
184
|
|
|
191
|
-
|
|
192
|
-
|
|
185
|
+
Passive memory is disabled by default and requires an embedding model you
|
|
186
|
+
select. Configure it during setup or under **Memory → Setup**.
|
|
193
187
|
|
|
194
|
-
|
|
195
|
-
|
|
188
|
+
The explicit memory plugin is a separate tool-based option and does not require
|
|
189
|
+
passive memory to be enabled.
|
|
196
190
|
|
|
197
|
-
|
|
191
|
+
Runtime storage is local. Data sent for generation or embeddings is processed
|
|
192
|
+
by the provider you configure.
|
|
198
193
|
|
|
199
|
-
|
|
194
|
+
See [Long-Term Memory](docs/long-term-memory.md).
|
|
200
195
|
|
|
201
|
-
|
|
202
|
-
npm install @abot-ai/runtime
|
|
203
|
-
```
|
|
196
|
+
## SPARK: optional help from computer activity
|
|
204
197
|
|
|
205
|
-
|
|
198
|
+
SPARK adds learning from authorized computer activity and proactive suggestions
|
|
199
|
+
in its own persistent conversation.
|
|
206
200
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
loadRuntimeConfig,
|
|
211
|
-
} from "@abot-ai/runtime/runtime";
|
|
201
|
+
Use it to surface possible next steps from the context you allow it to observe.
|
|
202
|
+
A saved suggestion can open a regular work conversation with its retained
|
|
203
|
+
context; opening it does not start the work automatically.
|
|
212
204
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
205
|
+
Collection requires explicit consent. Collection, learning, and proactive
|
|
206
|
+
messages have separate controls, with application exclusions and usage limits.
|
|
207
|
+
Collection and proactive messages are off by default.
|
|
216
208
|
|
|
217
|
-
|
|
218
|
-
[examples/runtime-library-host.ts](examples/runtime-library-host.ts) for a
|
|
219
|
-
complete host and [Runtime Library](docs/runtime-library.md) for the supported
|
|
220
|
-
API surface.
|
|
209
|
+
Collected content may be sent to the learning model provider you select.
|
|
221
210
|
|
|
222
|
-
|
|
211
|
+
On native Windows, SPARK collection runs locally without Companion pairing.
|
|
212
|
+
Other deployment arrangements may require the shared Computer access setup
|
|
213
|
+
and platform permissions.
|
|
223
214
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
mechanism to select `local/runtime.config.json`.
|
|
215
|
+
See [SPARK and computer-activity learning](docs/long-term-memory.md#learning-from-computer-activity)
|
|
216
|
+
and [Computer access setup](docs/installation.md#computer-access-during-setup).
|
|
227
217
|
|
|
228
|
-
|
|
229
|
-
and optional bridge settings are configuration-driven. Secrets belong in
|
|
230
|
-
environment variables or a host secret store, never in committed config.
|
|
218
|
+
## Embed the same engine in your application
|
|
231
219
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
also be tuned per semantic step without adding provider-specific logic to the
|
|
235
|
-
runtime; see [Calibrating A Model By
|
|
236
|
-
Step](docs/configuration.md#calibrating-a-model-by-step).
|
|
220
|
+
Use ABot as a TypeScript library when you want your own interface, transport,
|
|
221
|
+
or application lifecycle.
|
|
237
222
|
|
|
238
|
-
|
|
223
|
+
Compose the default services through the public API:
|
|
239
224
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
from core-owned passive long-term memory.
|
|
225
|
+
```ts
|
|
226
|
+
import {
|
|
227
|
+
createDefaultRuntimeDependencies,
|
|
228
|
+
loadRuntimeConfig,
|
|
229
|
+
} from "@abot-ai/runtime/runtime";
|
|
246
230
|
|
|
247
|
-
|
|
231
|
+
const config = loadRuntimeConfig({ rootDir: process.cwd() });
|
|
232
|
+
const runtime = createDefaultRuntimeDependencies(config);
|
|
233
|
+
```
|
|
248
234
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
Without a key, it uses Light search: bounded discovery and ranking within a
|
|
252
|
-
catalog of public Hebrew and English sources, without an external search
|
|
253
|
-
engine. Light has limited coverage; an empty result does not mean the
|
|
254
|
-
information is absent from the web. A configured Brave key that fails does
|
|
255
|
-
not trigger an automatic switch to Light.
|
|
235
|
+
This creates the service composition. Your host supplies startup, shutdown,
|
|
236
|
+
and application integration, including a configured model gateway connection.
|
|
256
237
|
|
|
257
|
-
|
|
258
|
-
|
|
238
|
+
Use the default services or provide adapters for models, session storage,
|
|
239
|
+
tools, attachments, and events.
|
|
259
240
|
|
|
260
|
-
|
|
241
|
+
See the [complete host example](examples/runtime-library-host.ts),
|
|
242
|
+
[Runtime Library guide](docs/runtime-library.md), and
|
|
243
|
+
[public contracts](docs/runtime-public-contracts.md).
|
|
261
244
|
|
|
262
|
-
|
|
263
|
-
orchestration.
|
|
264
|
-
- The model gateway normalizes provider adapters, model profiles, and streaming
|
|
265
|
-
responses behind one runtime-facing contract.
|
|
266
|
-
- Plugins own tool implementations and declare their capabilities, operations,
|
|
267
|
-
parameters, skills, and required secrets.
|
|
268
|
-
- The Web UI and bridge are clients of the same runtime contracts.
|
|
245
|
+
## Platforms and current scope
|
|
269
246
|
|
|
270
|
-
|
|
247
|
+
ABot is available as an npm package with a browser-based Web UI on Windows,
|
|
248
|
+
Linux, and macOS, with separate WSL and Docker setup paths.
|
|
271
249
|
|
|
272
|
-
|
|
250
|
+
The [1.8.0 release](https://github.com/Dorshitrit/abot-runtime/releases/tag/v1.8.0)
|
|
251
|
+
includes native Windows support for the Runtime and the documented operations of
|
|
252
|
+
its bundled plugins. SYSTEM provides commands and application discovery and
|
|
253
|
+
launch; desktop observation and input (`computer_*`) are unavailable on native
|
|
254
|
+
Windows. Tool requirements, permissions, and limits still apply.
|
|
273
255
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
- [Configuration](docs/configuration.md)
|
|
277
|
-
- [Runtime Library](docs/runtime-library.md)
|
|
278
|
-
- [Passive Long-Term Memory](docs/long-term-memory.md)
|
|
279
|
-
- [Plugins](docs/plugins.md)
|
|
280
|
-
- [Troubleshooting](docs/troubleshooting.md)
|
|
256
|
+
The separate desktop shell remains in QA and is not included in npm or the
|
|
257
|
+
public source snapshot.
|
|
281
258
|
|
|
282
|
-
|
|
259
|
+
ABot Runtime is an early-stage project. The documented package exports define
|
|
260
|
+
its supported API; internal source paths may change between releases.
|
|
283
261
|
|
|
284
|
-
|
|
285
|
-
|
|
262
|
+
See [platform-specific plugin support](docs/plugins.md#native-windows-plugin-support)
|
|
263
|
+
and [Known Limitations](docs/known-limitations.md).
|
|
286
264
|
|
|
287
|
-
##
|
|
265
|
+
## Documentation
|
|
288
266
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
267
|
+
| Goal | Guide |
|
|
268
|
+
|---|---|
|
|
269
|
+
| Install ABot or run from source | [Installation](docs/installation.md) |
|
|
270
|
+
| Configure local services | [Running Locally](docs/running-locally.md) |
|
|
271
|
+
| Select models and execution policies | [Configuration](docs/configuration.md) |
|
|
272
|
+
| Use and build plugins | [Plugins](docs/plugins.md) |
|
|
273
|
+
| Understand projects and permissions | [Projects and FULL+](docs/projects-and-full-plus.md) |
|
|
274
|
+
| Configure memory and SPARK | [Long-Term Memory](docs/long-term-memory.md) |
|
|
275
|
+
| Embed the runtime | [Runtime Library](docs/runtime-library.md) |
|
|
276
|
+
| Understand the engine | [Architecture](docs/architecture.md) |
|
|
277
|
+
| Check operational boundaries | [Known Limitations](docs/known-limitations.md) |
|
|
278
|
+
| Diagnose setup and runtime issues | [Troubleshooting](docs/troubleshooting.md) |
|
|
279
|
+
|
|
280
|
+
## Contributing, security, and license
|
|
281
|
+
|
|
282
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines and
|
|
283
|
+
[SECURITY.md](SECURITY.md) for reporting vulnerabilities.
|
|
284
|
+
|
|
285
|
+
ABot Runtime is available under the [MIT License](LICENSE).
|
|
292
286
|
|
|
293
287
|
## Acknowledgements
|
|
294
288
|
|
|
@@ -9,6 +9,7 @@ export function parseToolDefinition(raw) {
|
|
|
9
9
|
}
|
|
10
10
|
const name = raw.name;
|
|
11
11
|
const pluginName = raw.pluginName;
|
|
12
|
+
const pluginDescription = raw.pluginDescription;
|
|
12
13
|
const description = raw.description;
|
|
13
14
|
const routingCapability = raw.routingCapability;
|
|
14
15
|
const controlsRefinement = raw.controlsRefinement;
|
|
@@ -27,6 +28,9 @@ export function parseToolDefinition(raw) {
|
|
|
27
28
|
(typeof pluginName !== "string" || pluginName.trim().length === 0)) {
|
|
28
29
|
throw new Error(`Invalid tool definition for ${name} (pluginName)`);
|
|
29
30
|
}
|
|
31
|
+
if (!hasSupportedPluginDescription(pluginDescription)) {
|
|
32
|
+
throw new Error(`Invalid tool definition for ${name} (pluginDescription)`);
|
|
33
|
+
}
|
|
30
34
|
if (!isRoutingCapability(routingCapability)) {
|
|
31
35
|
throw new Error(`Invalid tool definition for ${name} (routingCapability)`);
|
|
32
36
|
}
|
|
@@ -55,6 +59,7 @@ export function parseToolDefinition(raw) {
|
|
|
55
59
|
return {
|
|
56
60
|
name,
|
|
57
61
|
...(typeof pluginName === "string" ? { pluginName } : {}),
|
|
62
|
+
...(typeof pluginDescription === "string" ? { pluginDescription } : {}),
|
|
58
63
|
requiredPermissionMode: parseRequiredToolPermissionMode(raw.requiredPermissionMode, `${name}.requiredPermissionMode`),
|
|
59
64
|
...(typeof description === "string" ? { description } : {}),
|
|
60
65
|
routingCapability,
|
|
@@ -82,3 +87,6 @@ function hasSupportedDevelopmentRoles(value) {
|
|
|
82
87
|
return false;
|
|
83
88
|
return value.every(isDevelopmentRole);
|
|
84
89
|
}
|
|
90
|
+
function hasSupportedPluginDescription(value) {
|
|
91
|
+
return value === undefined || typeof value === "string";
|
|
92
|
+
}
|
|
@@ -107,6 +107,8 @@ export type ToolDefinition = {
|
|
|
107
107
|
name: string;
|
|
108
108
|
/** Runtime-owned provenance used when presenting tools by plugin. */
|
|
109
109
|
pluginName?: string;
|
|
110
|
+
/** Optional manifest-owned plugin description for passive discovery. */
|
|
111
|
+
pluginDescription?: string;
|
|
110
112
|
description?: string;
|
|
111
113
|
routingCapability: ToolRoutingCapability;
|
|
112
114
|
controlsRefinement?: ToolControlsRefinement;
|
|
@@ -143,6 +145,8 @@ export type ToolRequestAttachment = Readonly<{
|
|
|
143
145
|
/** Minimal config-filtered tool fact; consumers project it for their own context. */
|
|
144
146
|
export type ToolAvailabilityEntry = Readonly<{
|
|
145
147
|
toolName: string;
|
|
148
|
+
pluginName?: string;
|
|
149
|
+
pluginDescription?: string;
|
|
146
150
|
operationId: string;
|
|
147
151
|
summary: string;
|
|
148
152
|
catalogGroups: readonly ToolCatalogGroup[];
|
|
@@ -6,6 +6,7 @@ export declare function isModelGatewayToolCall(value: unknown): value is ModelGa
|
|
|
6
6
|
export declare function isAssistantToolCallMessage(value: unknown): value is ChatAssistantToolCallMessage;
|
|
7
7
|
export declare function isToolResultMessage(value: unknown): value is ChatToolResultMessage;
|
|
8
8
|
export declare function isTextChatMessage(value: unknown): value is ChatTextMessage;
|
|
9
|
+
export declare function isStrictTextChatMessage(value: unknown): value is ChatTextMessage;
|
|
9
10
|
export declare function hasModelGatewayToolInteractionLane(value: unknown): boolean;
|
|
10
11
|
/**
|
|
11
12
|
* Enforces the native tool-call continuation protocol whenever any tool-lane
|
|
@@ -115,7 +115,7 @@ export function isTextChatMessage(value) {
|
|
|
115
115
|
typeof value.content === "string" &&
|
|
116
116
|
!Object.prototype.hasOwnProperty.call(value, "toolCalls"));
|
|
117
117
|
}
|
|
118
|
-
function isStrictTextChatMessage(value) {
|
|
118
|
+
export function isStrictTextChatMessage(value) {
|
|
119
119
|
if (!isRecord(value) ||
|
|
120
120
|
!hasOnlyKeys(value, TEXT_MESSAGE_KEYS) ||
|
|
121
121
|
!isTextChatMessage(value)) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveModelInvocation } from "../policy/invocation-policy.js";
|
|
2
2
|
import { respondToGatewayHandlerError } from "./errors.js";
|
|
3
|
+
import { writeChatStreamResponse } from "./chat-stream-response.js";
|
|
3
4
|
import { sendText } from "./http-response.js";
|
|
4
5
|
import { applyConfiguredModelPolicy, emitResolvedModelInvocation, validateImageInvocationSupport, validateMessageInteractionRequest, } from "./invocation-validation.js";
|
|
5
6
|
import { createContextGuardedProviderFetch } from "./provider-fetch.js";
|
|
@@ -62,14 +63,11 @@ export function createChatHandler(options = {}, inputTokenMeasurements) {
|
|
|
62
63
|
if (result.kind !== "chat") {
|
|
63
64
|
throw new Error("model_provider_adapter_chat_result_invalid");
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
response.write(`${JSON.stringify(event)}\n`);
|
|
70
|
-
},
|
|
66
|
+
await writeChatStreamResponse({
|
|
67
|
+
invocation: result,
|
|
68
|
+
response,
|
|
69
|
+
abortSignal,
|
|
71
70
|
});
|
|
72
|
-
response.end();
|
|
73
71
|
}
|
|
74
72
|
catch (error) {
|
|
75
73
|
respondToGatewayHandlerError({
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ModelProviderChatInvocation } from "../providers/contracts.js";
|
|
2
|
+
import type { GatewayResponse } from "./contracts.js";
|
|
3
|
+
export declare function writeChatStreamResponse(params: {
|
|
4
|
+
invocation: ModelProviderChatInvocation;
|
|
5
|
+
response: GatewayResponse;
|
|
6
|
+
abortSignal: AbortSignal;
|
|
7
|
+
}): Promise<void>;
|