@alisio/sdk 0.1.0-alpha.6 → 0.1.0-alpha.7
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 +78 -42
- package/dist/index.d.ts +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
# @alisio/sdk
|
|
2
2
|
|
|
3
|
-
The typed plugin contract for [Alisio](https://github.com/GustavoGutierrez/alisio)
|
|
4
|
-
helpers (`definePlugin`, `textResult`)
|
|
3
|
+
**The typed plugin contract for [Alisio](https://github.com/GustavoGutierrez/alisio).** Types plus
|
|
4
|
+
two tiny helpers (`definePlugin`, `textResult`) — no runtime dependencies and no provider SDKs.
|
|
5
|
+
|
|
6
|
+
## What it is
|
|
7
|
+
|
|
8
|
+
`@alisio/sdk` is what plugins depend on. It declares the `Plugin` and `PluginAPI` shapes, the tool
|
|
9
|
+
and provider contracts, compaction and session hooks, the SQLite storage port and the extension
|
|
10
|
+
points. A plugin ships JavaScript, declares the `alisio-plugin` npm keyword and lists
|
|
11
|
+
`@alisio/sdk` as a peer dependency. Because the package is types-only plus helpers, it is safe to
|
|
12
|
+
import from any runtime Alisio runs on.
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npm i @alisio/sdk # peer dependency of every plugin; use it in devDependencies too
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick start: your first plugin
|
|
5
21
|
|
|
6
22
|
```ts
|
|
7
23
|
import { definePlugin, textResult } from "@alisio/sdk";
|
|
@@ -24,35 +40,64 @@ export default definePlugin({
|
|
|
24
40
|
});
|
|
25
41
|
```
|
|
26
42
|
|
|
43
|
+
Load it with `alisio --plugin ./dist/index.js` (path) or `alisio install npm:acme-hello` (npm
|
|
44
|
+
package). See [Writing plugins](https://gustavogutierrez.github.io/alisio/plugins) for the full
|
|
45
|
+
walkthrough including tool permissions, naming/prefix rules and an example package.
|
|
46
|
+
|
|
47
|
+
## The PluginAPI
|
|
48
|
+
|
|
49
|
+
Everything a plugin registers is removed automatically when it unloads; every `register`/`on`
|
|
50
|
+
returns an unregister function.
|
|
51
|
+
|
|
52
|
+
- **tools** — `tools.register(ToolDefinition)`; effects `read | write | process | external |
|
|
53
|
+
internal`, optional `paths()` for write checks, `concurrent` for same-turn parallel calls.
|
|
54
|
+
- **commands** — `commands.register(name, handler, { description?, argumentHint? })`, invoked as
|
|
55
|
+
`/command plugin.id:name args`.
|
|
56
|
+
- **events** — versioned `RunEvent`s (`schemaVersion: 1`).
|
|
57
|
+
- **context** — `context.register(() => Promise<string>)` adds text to the model context.
|
|
58
|
+
- **resources** — `skills(path)`, `prompts(path)`, `agents(path)` and `list(kind)` for skill,
|
|
59
|
+
prompt-template and agent-definition directories.
|
|
60
|
+
- **state** — small per-plugin JSON state persisted in the session database.
|
|
61
|
+
- **compaction** — `compaction.register({ beforeCompact, afterCompact })` contributes instructions,
|
|
62
|
+
extra summarizer output fields, recalled context and reports.
|
|
63
|
+
- **session** — `session.onStart(info)` (text injected on a fresh session) and
|
|
64
|
+
`session.onEnd(info)` (called on `/clear`, `/exit`, quit; bounded by a timeout).
|
|
65
|
+
- **model** — provider-agnostic `model.complete(request)`; plugins never import provider SDKs.
|
|
66
|
+
- **models** — credential-free `models.list()` / `models.resolve(reference)` over configured
|
|
67
|
+
`/connect` profiles.
|
|
68
|
+
- **providers** — `providers.register(registration)` adds a selectable model provider to `/connect`;
|
|
69
|
+
registrations coexist instead of competing.
|
|
70
|
+
- **storage** — `storage.sqlite(path)` opens a private (0600) SQLite file (FTS5 available); the
|
|
71
|
+
host provides the driver, so plugins never depend on a specific runtime.
|
|
72
|
+
- **sessions** — child sessions (`spawn`, `create`, `run`, `get`, `children`, `cancel`, `enqueue`,
|
|
73
|
+
…): separate conversations with fresh context and narrowed permissions that never exceed the
|
|
74
|
+
parent.
|
|
75
|
+
- **ui** — `status`, `panel`, `select`, `askQuestions`, `open`, `interactive()`; interactive-only
|
|
76
|
+
calls resolve `undefined` headless instead of hanging.
|
|
77
|
+
|
|
27
78
|
## Extension points
|
|
28
79
|
|
|
29
|
-
Typed, generic extension points let plugins replace parts of the experience without core
|
|
30
|
-
|
|
80
|
+
Typed, generic extension points let plugins replace parts of the experience without core changes.
|
|
81
|
+
Today: `mascot`, `startup-screen` and `websearch`.
|
|
31
82
|
|
|
32
83
|
```ts
|
|
33
84
|
api.extensions.register("mascot", {
|
|
34
85
|
id: "kite",
|
|
35
86
|
render: ({ terminal }) => (terminal.unicode ? [" ◢◣", " ◢██◣", " ◥██◤", " ◥◤"] : [" /\\", " / \\", " \\ /", " \\/"]),
|
|
36
87
|
}, { priority: 10 });
|
|
37
|
-
|
|
38
|
-
api.extensions.register("websearch", {
|
|
39
|
-
id: "brave-example",
|
|
40
|
-
search: async (query) => [{ title: "...", url: "https://...", snippet: "..." }],
|
|
41
|
-
}, { priority: 10 });
|
|
42
88
|
```
|
|
43
89
|
|
|
44
|
-
The highest `priority` wins; ties break by plugin `id`, then registration order
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
plugin is also accepted. Plugins are identified by `id` (not `name`).
|
|
90
|
+
The highest `priority` wins; ties break by plugin `id`, then registration order (reported as
|
|
91
|
+
`extension_conflict`). A renderable provider receives only its context (`terminal.color`,
|
|
92
|
+
`unicode`, `columns`); output is sanitized and clamped, and a failing provider falls back to the
|
|
93
|
+
default. `websearch` fully replaces Alisio's built-in search-provider resolution while registered.
|
|
94
|
+
A declarative `extensions` field on the plugin is accepted too, at priority 0. Plugins are
|
|
95
|
+
identified by `id`, not `name`.
|
|
51
96
|
|
|
52
97
|
## Prompt templates
|
|
53
98
|
|
|
54
|
-
`api.resources.prompts("./prompts")` registers a directory of Markdown templates that become
|
|
55
|
-
|
|
99
|
+
`api.resources.prompts("./prompts")` registers a directory of Markdown templates that become slash
|
|
100
|
+
commands (for example `/review src/app.ts`):
|
|
56
101
|
|
|
57
102
|
```md
|
|
58
103
|
---
|
|
@@ -67,27 +112,18 @@ Review $1 carefully. Extra focus: $ARGUMENTS
|
|
|
67
112
|
Precedence: built-in < plugin < user (`~/.config/alisio/prompts`) < trusted project
|
|
68
113
|
(`.alisio/prompts`).
|
|
69
114
|
|
|
70
|
-
##
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
calls made by a labeled child session; mirrors `ApprovalRequest.label`.
|
|
86
|
-
- `ToolDefinition.concurrent`: run alongside other read/concurrent calls of the same turn.
|
|
87
|
-
|
|
88
|
-
The API covers tools, commands, events, context providers, compaction hooks, session start/end
|
|
89
|
-
hooks, provider-agnostic `model.complete`, a SQLite storage port and UI status. Publish plugins as
|
|
90
|
-
JavaScript with the `alisio-plugin` keyword and `@alisio/sdk` as a peer dependency. Guide:
|
|
91
|
-
[Writing plugins](https://gustavogutierrez.github.io/alisio/plugins).
|
|
92
|
-
|
|
93
|
-
Maintainer: Gustavo Gutiérrez · License: MIT
|
|
115
|
+
## Publishing
|
|
116
|
+
|
|
117
|
+
Publish plugins as JavaScript with the `alisio-plugin` keyword and `@alisio/sdk` as a peer
|
|
118
|
+
dependency; the entry resolves from `exports["."]`, then `main`, then `./index.js`. Guide:
|
|
119
|
+
[Writing plugins](https://gustavogutierrez.github.io/alisio/plugins) ·
|
|
120
|
+
[Publishing](https://gustavogutierrez.github.io/alisio/publishing).
|
|
121
|
+
|
|
122
|
+
## Requirements
|
|
123
|
+
|
|
124
|
+
Node.js **>= 22.16** (types-only package; consumers run on Node or Bun).
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
MIT. Maintained by Gustavo Gutiérrez Mercado. Source: <https://github.com/GustavoGutierrez/alisio> ·
|
|
129
|
+
npm: <https://www.npmjs.com/settings/alisio/packages>.
|
package/dist/index.d.ts
CHANGED
|
@@ -442,6 +442,8 @@ export interface ChildRunResult {
|
|
|
442
442
|
output: number;
|
|
443
443
|
};
|
|
444
444
|
error?: string;
|
|
445
|
+
/** True when the child hit its turn limit: `text` is a usable partial result, not an error. */
|
|
446
|
+
turnsExceeded?: boolean;
|
|
445
447
|
}
|
|
446
448
|
/** Generic tree node contributed to an interactive panel (e.g. running agents). */
|
|
447
449
|
export interface PanelNode {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alisio/sdk",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.7",
|
|
4
4
|
"description": "Typed plugin SDK for Alisio: the stable contract for tools, commands, context, compaction and session hooks, model completions and storage. Types only plus tiny helpers; zero runtime dependencies.",
|
|
5
5
|
"author": "Gustavo Gutiérrez",
|
|
6
6
|
"license": "MIT",
|