@intentic/extension-api 1.312.0 → 1.313.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/README.md +11 -4
- package/dist/api.d.ts +4 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +13 -18
- package/dist/background.js.map +1 -1
- package/dist/server.d.ts +29 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +2 -2
- package/src/api.ts +6 -0
- package/src/background.ts +21 -23
- package/src/server.ts +44 -0
- package/src/surface.json +124 -0
- package/src/version.ts +10 -1
package/README.md
CHANGED
|
@@ -13,18 +13,25 @@ flowchart LR
|
|
|
13
13
|
|
|
14
14
|
- There is no ambient global. The host hands `IntenticApi` to `activate(api, context)`, and everything registered
|
|
15
15
|
returns a `Disposable`. A manifest's `server` bundle gets `ExtensionServerApi` in a Node process shared by every
|
|
16
|
-
enabled extension, and reaches daemon routes only as far as `permissions.daemon` allows.
|
|
16
|
+
enabled extension, and reaches daemon routes only as far as `permissions.daemon` allows. The browser half reaches
|
|
17
|
+
its own backend through `api.backend`, by a path relative to its namespace, never by spelling `/x/<id>`.
|
|
18
|
+
- An extension gives the agent tools one way: `contributes.tools`, served by `api.tools.serve((card) => [...])` in
|
|
19
|
+
the backend. The host owns the MCP transport, each call's deadline and the card lookup, and hands the card's
|
|
20
|
+
settings with every call; the daemon mounts the server into every turn on every runtime. A plugin's `.mcp.json` is
|
|
21
|
+
deprecated, and a cli card's `mcp` is kept one release as an alias.
|
|
17
22
|
- This package is published to npm, and its API only grows within a major. `extensionApiVersion` moves
|
|
18
23
|
with every surface change (additive is a minor), and a manifest's `engines.intentic` range is matched against it at
|
|
19
24
|
load, failing closed. The editor's `surface-guard.test.ts` fails when the surface moves without a new entry in
|
|
20
|
-
`src/surface.json
|
|
25
|
+
`src/surface.json`, which records the api's members and, from 2.20.0, a digest of the whole generated manifest
|
|
26
|
+
schema, since a host's parse drops a field it does not know at any depth.
|
|
21
27
|
- Helpers every extension needs live here too: sandbox-scoped module state (`sandboxRef`, cleared on every sandbox
|
|
22
28
|
switch), background polling for rail badges, `sandboxLedger` (whose writes reject rather than overwrite a file they
|
|
23
29
|
could not read), `sandboxDocument` (a file of the extension's own read through the `conversions` its shape has had,
|
|
24
|
-
and written with what a newer version of the extension put in it kept
|
|
30
|
+
by the contract's `readDocument`, and written with what a newer version of the extension put in it kept; every handle
|
|
31
|
+
on one path shares one write queue), SSE and ndjson stream reading, and the
|
|
25
32
|
payload for `api.workspace.openDiff`.
|
|
26
33
|
- Contribution points: `agent`, `automationTemplates`, `bin`, `capabilities`, `commands`, `documents`,
|
|
27
|
-
`environment`, `files`, `listener`, `processes`, `settings`, `viewers` and `views`, plus the manifest's top-level
|
|
34
|
+
`environment`, `files`, `listener`, `processes`, `settings`, `tools`, `viewers` and `views`, plus the manifest's top-level
|
|
28
35
|
fields, all read off `CONTRIBUTION_POINTS` in
|
|
29
36
|
[extension-manifest](../extension-manifest/src/points/index.ts).
|
|
30
37
|
- `./protocol` exports only the version and the engines matcher, for the daemon, which cannot load the Vue-dependent
|
package/dist/api.d.ts
CHANGED
|
@@ -76,6 +76,10 @@ export interface ProcessStatus {
|
|
|
76
76
|
}
|
|
77
77
|
export interface IntenticApi {
|
|
78
78
|
readonly apiVersion: string;
|
|
79
|
+
readonly backend: {
|
|
80
|
+
request(path: string, init?: RequestInit): Promise<Response>;
|
|
81
|
+
json<T>(path: string, init?: RequestInit): Promise<T>;
|
|
82
|
+
};
|
|
79
83
|
readonly views: {
|
|
80
84
|
register(view: ViewRegistration): Disposable;
|
|
81
85
|
};
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK7D,MAAM,WAAW,UAAU;IACvB,OAAO,IAAI,IAAI,CAAC;CACnB;AAID,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAGnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACxD;AAID,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAMnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAEtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAID,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IAElC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAID,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAIvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAGnD,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;IAGzG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,KAAK,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAGjF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,SAAS,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;IAEzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAErC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAEtC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CAC3C;AAID,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IAG7C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CAC/C;AAID,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC/B;AAID,MAAM,WAAW,4BAA4B;IAEzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAGpB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAE7D,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CAC3C;AAID,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAExD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAExC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK7D,MAAM,WAAW,UAAU;IACvB,OAAO,IAAI,IAAI,CAAC;CACnB;AAID,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAGnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACxD;AAID,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAMnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAEtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAID,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IAElC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAID,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAIvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAGnD,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;IAGzG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,KAAK,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAGjF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,SAAS,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;IAEzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAErC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAEtC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CAC3C;AAID,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IAG7C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CAC/C;AAID,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC/B;AAID,MAAM,WAAW,4BAA4B;IAEzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAGpB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAE7D,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CAC3C;AAID,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAExD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAExC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAG5B,QAAQ,CAAC,OAAO,EAAE;QACd,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KACzD,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE;QACZ,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,UAAU,CAAC;KAChD,CAAC;IAGF,QAAQ,CAAC,OAAO,EAAE;QACd,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAAC;KACpD,CAAC;IAGF,QAAQ,CAAC,SAAS,EAAE;QAChB,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,GAAG,UAAU,CAAC;QAG7D,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACxC,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE;QAEf,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,UAAU,CAAC;QAChF,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAClE,CAAC;IAEF,QAAQ,CAAC,QAAQ,EAAE;QACf,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;QAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,UAAU,CAAC;KAC5D,CAAC;IAGF,QAAQ,CAAC,OAAO,EAAE;QAGd,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC,OAAO,eAAe,CAAC,CAAC;QAE3D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAGtD,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1C,SAAS,IAAI,OAAO,CAAC;QAErB,GAAG,CAAC,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,OAAO,EAAE,CAAC;QAErD,MAAM,IAAI,MAAM,GAAG,SAAS,CAAC;QAI7B,IAAI,IAAI,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;QAKhF,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;KAChD,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAEhB,KAAK,IAAI,SAAS,SAAS,EAAE,CAAC;QAC9B,YAAY,IAAI,SAAS,eAAe,EAAE,CAAC;QAC3C,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,UAAU,CAAC;QAI9C,OAAO,IAAI,MAAM,GAAG,SAAS,CAAC;QAC9B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;QAC9C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,UAAU,CAAC;QAGhF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAGjC,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,GAAG,UAAU,CAAC;QAG1E,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,GAAG,UAAU,CAAC;QAG3E,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,GAAG,UAAU,CAAC;QAG3E,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;QAGrC,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;QAIrC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QAGhD,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAGlD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACpD,CAAC;IAEF,QAAQ,CAAC,SAAS,EAAE;QAChB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACrC,CAAC;IAEF,QAAQ,CAAC,QAAQ,EAAE;QAEf,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAE5B,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;KAChC,CAAC;IAGF,QAAQ,CAAC,IAAI,EAAE;QAGX,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAErC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAEjC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAG1C,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC,CAAC;IAGF,QAAQ,CAAC,MAAM,EAAE;QAGb,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAGpC,QAAQ,CAAC,SAAS,EAAE;YAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;SACvC,GAAG,WAAW,CAAC;QAEhB,IAAI,CAAC,OAAO,EAAE;YACV,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;YAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;YAEpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YAErC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;YAE7B,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;aAAE,GAAG,SAAS,CAAC;SAC9F,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;KACxC,CAAC;IAEF,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAG1C,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAGxC,QAAQ,CAAC,KAAK,EAAE;QAEZ,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAG1C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,GAAG,IAAI,CAAC;KAC9G,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE;QACZ,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC;QACzB,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,UAAU,CAAC;KACvE,CAAC;IAIF,QAAQ,CAAC,QAAQ,EAAE;QACf,OAAO,IAAI,WAAW,GAAG,OAAO,CAAC;QACjC,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,KAAK,IAAI,GAAG,UAAU,CAAC;KAChF,CAAC;CACL;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;CACxC;AAGD,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC;AAU3E,MAAM,WAAW,iBAAiB;IAE9B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;CACjF;AAID,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,UAAU,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CACzC"}
|
package/dist/background.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,UAAU,EAIf,KAAK,WAAW,EASnB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAOxD,MAAM,WAAW,WAAW,CAAC,CAAC;IAE1B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvB,KAAK,IAAI,UAAU,CAAC;IAEpB,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IAEjC,QAAQ,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC;IAEjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE1B,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;CAC5C;AAqFD,eAAO,MAAM,WAAW,GAAI,CAAC,WAAW,kBAAkB,CAAC,CAAC,CAAC,KAAG,WAAW,CAAC,CAAC,CAsC5E,CAAC;AAKF,MAAM,WAAW,aAAa;IAE1B,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElE,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE;AAKD,eAAO,MAAM,aAAa,SAAU,MAAM,WAAW,QAAQ,MAAM,KAAG,aA8CrE,CAAC;AAKF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CAA+G,CAAC;AAMxI,MAAM,WAAW,eAAe,CAAC,CAAC;IAE9B,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAGnB,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IAErC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAEzC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACtC;AAMD,eAAO,MAAM,eAAe,GAAI,CAAC,QAAQ,MAAM,WAAW,QAAQ,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAC,KAAG,eAAe,CAAC,CAAC,CA0C/H,CAAC"}
|
package/dist/background.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at,
|
|
1
|
+
import { at, drop, dropAll, fold, mapValue, nested, pinDefault, readDocument, rename, retireEntries, retype, transform, } from "@intentic/sandbox-contract/documents";
|
|
2
2
|
import { sandboxRef, sandboxScopeGuard } from "./scope.js";
|
|
3
3
|
const WAKE_MS = 400;
|
|
4
4
|
const scheduledReads = [];
|
|
@@ -144,34 +144,29 @@ export const sandboxLedger = (host, path) => {
|
|
|
144
144
|
};
|
|
145
145
|
};
|
|
146
146
|
export const conversions = { at, drop, dropAll, fold, mapValue, nested, pinDefault, rename, retireEntries, retype, transform };
|
|
147
|
+
const queues = new Map();
|
|
147
148
|
export const sandboxDocument = (host, path, options) => {
|
|
148
|
-
const
|
|
149
|
-
const
|
|
149
|
+
const shape = { history: options.history ?? [], granularity: options.granularity ?? `object` };
|
|
150
|
+
const readAs = async () => {
|
|
150
151
|
const answer = await host().sandbox.rpc.workspace.file({ path });
|
|
151
|
-
|
|
152
|
-
return undefined;
|
|
153
|
-
}
|
|
154
|
-
return convert(JSON.parse(answer.content));
|
|
152
|
+
return answer.present ? readDocument(answer.content, shape, { kind: `whole`, parse: (raw) => options.parse(raw) }) : undefined;
|
|
155
153
|
};
|
|
156
154
|
const read = async () => {
|
|
157
155
|
try {
|
|
158
|
-
|
|
159
|
-
return (raw === undefined ? undefined : options.parse(raw)) ?? options.fallback();
|
|
156
|
+
return (await readAs())?.value ?? options.fallback();
|
|
160
157
|
}
|
|
161
158
|
catch {
|
|
162
159
|
return options.fallback();
|
|
163
160
|
}
|
|
164
161
|
};
|
|
165
|
-
let queue = Promise.resolve();
|
|
166
162
|
const update = (change) => {
|
|
167
163
|
const run = async () => {
|
|
168
164
|
const current = sandboxScopeGuard();
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
throw new Error(`${path} holds what this version of the extension cannot read; it is left as it is`);
|
|
165
|
+
const stored = await readAs();
|
|
166
|
+
if (stored !== undefined && stored.value === undefined) {
|
|
167
|
+
throw new Error(`${path} holds what this version of the extension cannot read; it is left as it is`, { cause: stored.problems[0] });
|
|
173
168
|
}
|
|
174
|
-
const before =
|
|
169
|
+
const before = stored?.value ?? options.fallback();
|
|
175
170
|
const after = change(before);
|
|
176
171
|
if (after === before) {
|
|
177
172
|
return true;
|
|
@@ -179,12 +174,12 @@ export const sandboxDocument = (host, path, options) => {
|
|
|
179
174
|
if (!current()) {
|
|
180
175
|
return false;
|
|
181
176
|
}
|
|
182
|
-
const written =
|
|
177
|
+
const written = stored === undefined ? after : stored.carry(after);
|
|
183
178
|
await host().workspace.write(path, `${JSON.stringify(written, undefined, 2)}\n`);
|
|
184
179
|
return true;
|
|
185
180
|
};
|
|
186
|
-
const next =
|
|
187
|
-
|
|
181
|
+
const next = (queues.get(path) ?? Promise.resolve()).then(run, run);
|
|
182
|
+
queues.set(path, next.catch(() => undefined));
|
|
188
183
|
return next;
|
|
189
184
|
};
|
|
190
185
|
return { read, update };
|
package/dist/background.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,EAAE,
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
import type { sandboxContract } from "@intentic/sandbox-contract";
|
|
2
2
|
import type { ContractRouterClient } from "@orpc/contract";
|
|
3
|
+
export interface ToolCard {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly config: Readonly<Record<string, string>>;
|
|
6
|
+
}
|
|
7
|
+
export type ToolContent = {
|
|
8
|
+
readonly type: "text";
|
|
9
|
+
readonly text: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly type: "image";
|
|
12
|
+
readonly data: string;
|
|
13
|
+
readonly mimeType: string;
|
|
14
|
+
};
|
|
15
|
+
export interface ToolResult {
|
|
16
|
+
readonly content: readonly ToolContent[];
|
|
17
|
+
readonly isError?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ToolCallContext {
|
|
20
|
+
readonly signal: AbortSignal;
|
|
21
|
+
readonly conversationId?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ToolDefinition {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly description: string;
|
|
26
|
+
readonly inputSchema: Readonly<Record<string, unknown>>;
|
|
27
|
+
readonly call: (args: Readonly<Record<string, unknown>>, context: ToolCallContext) => Promise<ToolResult | string | unknown> | ToolResult | string | unknown;
|
|
28
|
+
}
|
|
3
29
|
export type BackendRouteHandler = (request: Request) => Promise<Response | undefined>;
|
|
4
30
|
export interface ExtensionServerApi {
|
|
5
31
|
readonly apiVersion: string;
|
|
@@ -9,6 +35,9 @@ export interface ExtensionServerApi {
|
|
|
9
35
|
readonly routes: {
|
|
10
36
|
mount(handler: BackendRouteHandler): void;
|
|
11
37
|
};
|
|
38
|
+
readonly tools: {
|
|
39
|
+
serve(tools: (card: ToolCard | undefined) => readonly ToolDefinition[] | Promise<readonly ToolDefinition[]>): void;
|
|
40
|
+
};
|
|
12
41
|
readonly daemon: {
|
|
13
42
|
readonly rpc: ContractRouterClient<typeof sandboxContract>;
|
|
14
43
|
request(path: string, init?: RequestInit): Promise<Response>;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const extensionApiVersion = "2.
|
|
1
|
+
export declare const extensionApiVersion = "2.20.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA4HA,eAAO,MAAM,mBAAmB,WAAW,CAAC"}
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const extensionApiVersion = "2.
|
|
1
|
+
export const extensionApiVersion = "2.20.0";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA4HA,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/extension-api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.313.0",
|
|
4
4
|
"description": "The versioned public API intentic extensions compile against, manifest schema, detection facts and the host API",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@intentic/sandbox-contract": "1.
|
|
45
|
+
"@intentic/sandbox-contract": "1.313.0",
|
|
46
46
|
"@orpc/contract": "1.15.4",
|
|
47
47
|
"tslib": "2.8.1"
|
|
48
48
|
},
|
package/src/api.ts
CHANGED
|
@@ -154,6 +154,12 @@ export interface ProcessStatus {
|
|
|
154
154
|
export interface IntenticApi {
|
|
155
155
|
// The host's @intentic/extension-api version, checked against `engines.intentic`.
|
|
156
156
|
readonly apiVersion: string;
|
|
157
|
+
// This extension's own backend (`server`), by a path relative to its namespace: the host adds the routing prefix,
|
|
158
|
+
// which is the extension's install id and not always `publisher.name`, so no extension spells `/x/<id>` itself.
|
|
159
|
+
readonly backend: {
|
|
160
|
+
request(path: string, init?: RequestInit): Promise<Response>;
|
|
161
|
+
json<T>(path: string, init?: RequestInit): Promise<T>;
|
|
162
|
+
};
|
|
157
163
|
readonly views: {
|
|
158
164
|
register(view: ViewRegistration): Disposable;
|
|
159
165
|
};
|
package/src/background.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
at,
|
|
3
|
-
carryUnknown,
|
|
4
3
|
type Conversion,
|
|
5
|
-
convertDocument,
|
|
6
4
|
drop,
|
|
7
5
|
dropAll,
|
|
8
6
|
fold,
|
|
@@ -10,6 +8,7 @@ import {
|
|
|
10
8
|
mapValue,
|
|
11
9
|
nested,
|
|
12
10
|
pinDefault,
|
|
11
|
+
readDocument,
|
|
13
12
|
rename,
|
|
14
13
|
retireEntries,
|
|
15
14
|
retype,
|
|
@@ -204,7 +203,7 @@ export const sandboxLedger = (host: () => IntenticApi, path: string): SandboxLed
|
|
|
204
203
|
try {
|
|
205
204
|
return marksOf(JSON.parse(answer.content));
|
|
206
205
|
} catch {
|
|
207
|
-
// silent-catch: an unparseable ledger holds nothing acknowledged, the contract `read` states.
|
|
206
|
+
// allow(silent-catch): an unparseable ledger holds nothing acknowledged, the contract `read` states.
|
|
208
207
|
return {};
|
|
209
208
|
}
|
|
210
209
|
};
|
|
@@ -260,36 +259,35 @@ export interface SandboxDocumentOptions<T> {
|
|
|
260
259
|
readonly granularity?: Granularity;
|
|
261
260
|
}
|
|
262
261
|
|
|
262
|
+
// Every handle on one path queues behind the others, not just behind itself: two handles opened on the same file (two
|
|
263
|
+
// panels, a panel and a command) would otherwise each read, change and write, and the second write would drop the first.
|
|
264
|
+
const queues = new Map<string, Promise<unknown>>();
|
|
265
|
+
|
|
263
266
|
export const sandboxDocument = <T>(host: () => IntenticApi, path: string, options: SandboxDocumentOptions<T>): SandboxDocument<T> => {
|
|
264
|
-
const
|
|
265
|
-
//
|
|
266
|
-
|
|
267
|
+
const shape = { history: options.history ?? [], granularity: options.granularity ?? `object` } as const;
|
|
268
|
+
// The one reading every store shares (@intentic/sandbox-contract/documents): undefined when absent; a value, or
|
|
269
|
+
// `value: undefined` with why, when present.
|
|
270
|
+
const readAs = async () => {
|
|
267
271
|
// Through the contract's own read, which throws for a refused or unreachable read where `readJson` answers absent.
|
|
268
272
|
const answer = await host().sandbox.rpc.workspace.file({ path });
|
|
269
|
-
|
|
270
|
-
return undefined;
|
|
271
|
-
}
|
|
272
|
-
return convert(JSON.parse(answer.content));
|
|
273
|
+
return answer.present ? readDocument<T>(answer.content, shape, { kind: `whole`, parse: (raw) => options.parse(raw) }) : undefined;
|
|
273
274
|
};
|
|
274
275
|
const read = async (): Promise<T> => {
|
|
275
276
|
try {
|
|
276
|
-
|
|
277
|
-
return (raw === undefined ? undefined : options.parse(raw)) ?? options.fallback();
|
|
277
|
+
return (await readAs())?.value ?? options.fallback();
|
|
278
278
|
} catch {
|
|
279
|
-
// silent-catch: a file this version cannot
|
|
279
|
+
// allow(silent-catch): a file this version cannot reach reads as the fallback, the contract `read` states.
|
|
280
280
|
return options.fallback();
|
|
281
281
|
}
|
|
282
282
|
};
|
|
283
|
-
let queue: Promise<unknown> = Promise.resolve();
|
|
284
283
|
const update = (change: (current: T) => T): Promise<boolean> => {
|
|
285
284
|
const run = async (): Promise<boolean> => {
|
|
286
285
|
const current = sandboxScopeGuard();
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
throw new Error(`${path} holds what this version of the extension cannot read; it is left as it is`);
|
|
286
|
+
const stored = await readAs();
|
|
287
|
+
if (stored !== undefined && stored.value === undefined) {
|
|
288
|
+
throw new Error(`${path} holds what this version of the extension cannot read; it is left as it is`, { cause: stored.problems[0] });
|
|
291
289
|
}
|
|
292
|
-
const before =
|
|
290
|
+
const before = stored?.value ?? options.fallback();
|
|
293
291
|
const after = change(before);
|
|
294
292
|
if (after === before) {
|
|
295
293
|
return true;
|
|
@@ -297,13 +295,13 @@ export const sandboxDocument = <T>(host: () => IntenticApi, path: string, option
|
|
|
297
295
|
if (!current()) {
|
|
298
296
|
return false;
|
|
299
297
|
}
|
|
300
|
-
const written =
|
|
298
|
+
const written = stored === undefined ? after : stored.carry(after);
|
|
301
299
|
await host().workspace.write(path, `${JSON.stringify(written, undefined, 2)}\n`);
|
|
302
300
|
return true;
|
|
303
301
|
};
|
|
304
|
-
const next =
|
|
305
|
-
// silent-catch: the queue only orders the next update behind this one; this one's caller still gets its rejection
|
|
306
|
-
|
|
302
|
+
const next = (queues.get(path) ?? Promise.resolve()).then(run, run);
|
|
303
|
+
// allow(silent-catch): the queue only orders the next update behind this one; this one's caller still gets its rejection
|
|
304
|
+
queues.set(path, next.catch(() => undefined));
|
|
307
305
|
return next;
|
|
308
306
|
};
|
|
309
307
|
return { read, update };
|
package/src/server.ts
CHANGED
|
@@ -5,6 +5,43 @@ import type { ContractRouterClient } from "@orpc/contract";
|
|
|
5
5
|
// shared by every enabled extension, separate from the daemon. Mediates only the extension's route namespace (mount)
|
|
6
6
|
// and its reach into daemon routes (`daemon.*`, gated by `permissions.daemon`).
|
|
7
7
|
|
|
8
|
+
// The card a tool server was mounted for (`contributes.tools.perCard`): its id, which names the server the agent sees,
|
|
9
|
+
// and its settings as the daemon holds them now, secrets included, every value a string. Handed with every call, so a
|
|
10
|
+
// switch flipped on the card applies to the next call without anything to invalidate.
|
|
11
|
+
export interface ToolCard {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly config: Readonly<Record<string, string>>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// One piece of what a tool answers, as MCP carries it.
|
|
17
|
+
export type ToolContent =
|
|
18
|
+
| { readonly type: "text"; readonly text: string }
|
|
19
|
+
| { readonly type: "image"; readonly data: string; readonly mimeType: string };
|
|
20
|
+
|
|
21
|
+
// A tool's whole answer. `isError` marks a refusal or a failure the model should read rather than a transport error.
|
|
22
|
+
export interface ToolResult {
|
|
23
|
+
readonly content: readonly ToolContent[];
|
|
24
|
+
readonly isError?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// What one call is handed beside its arguments.
|
|
28
|
+
export interface ToolCallContext {
|
|
29
|
+
// Aborted when the agent's client gives up on the call, or the host's deadline for it passes.
|
|
30
|
+
readonly signal: AbortSignal;
|
|
31
|
+
// The conversation the calling turn belongs to, when it has one.
|
|
32
|
+
readonly conversationId?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface ToolDefinition {
|
|
36
|
+
// The name the model calls it by, under the server's own `mcp__<server>__` prefix.
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly description: string;
|
|
39
|
+
// A JSON Schema object for the arguments (`z.toJSONSchema(schema)` produces one).
|
|
40
|
+
readonly inputSchema: Readonly<Record<string, unknown>>;
|
|
41
|
+
// A string answers as text, a ToolResult as itself, anything else as its JSON; a throw answers as a tool error.
|
|
42
|
+
readonly call: (args: Readonly<Record<string, unknown>>, context: ToolCallContext) => Promise<ToolResult | string | unknown> | ToolResult | string | unknown;
|
|
43
|
+
}
|
|
44
|
+
|
|
8
45
|
// One request into this extension's `/x/<id>` namespace, prefix already stripped. Return `undefined` for "not mine":
|
|
9
46
|
// the host answers 404.
|
|
10
47
|
export type BackendRouteHandler = (request: Request) => Promise<Response | undefined>;
|
|
@@ -23,6 +60,13 @@ export interface ExtensionServerApi {
|
|
|
23
60
|
// second mount replaces the first.
|
|
24
61
|
mount(handler: BackendRouteHandler): void;
|
|
25
62
|
};
|
|
63
|
+
// The agent's tools (`contributes.tools`). The host owns the MCP transport, its deadlines and the card lookup: it
|
|
64
|
+
// answers the handshake, lists what `tools` returns for the card a server was mounted for (undefined for an
|
|
65
|
+
// extension-level server), and runs a call with its arguments. `tools` runs per request, so what it returns may
|
|
66
|
+
// follow the card's switches. A second serve replaces the first.
|
|
67
|
+
readonly tools: {
|
|
68
|
+
serve(tools: (card: ToolCard | undefined) => readonly ToolDefinition[] | Promise<readonly ToolDefinition[]>): void;
|
|
69
|
+
};
|
|
26
70
|
// Authenticated transport to the daemon's own routes; every call is checked against the manifest's
|
|
27
71
|
// `permissions.daemon` allowlist.
|
|
28
72
|
readonly daemon: {
|
package/src/surface.json
CHANGED
|
@@ -1721,5 +1721,129 @@
|
|
|
1721
1721
|
"request",
|
|
1722
1722
|
"rpc"
|
|
1723
1723
|
]
|
|
1724
|
+
},
|
|
1725
|
+
"2.20.0": {
|
|
1726
|
+
"manifest": [
|
|
1727
|
+
"$schema",
|
|
1728
|
+
"art",
|
|
1729
|
+
"category",
|
|
1730
|
+
"contributes",
|
|
1731
|
+
"engines",
|
|
1732
|
+
"entry",
|
|
1733
|
+
"icon",
|
|
1734
|
+
"logo",
|
|
1735
|
+
"name",
|
|
1736
|
+
"permissions",
|
|
1737
|
+
"publisher",
|
|
1738
|
+
"server",
|
|
1739
|
+
"version"
|
|
1740
|
+
],
|
|
1741
|
+
"contributes": [
|
|
1742
|
+
"agent",
|
|
1743
|
+
"automationTemplates",
|
|
1744
|
+
"bin",
|
|
1745
|
+
"capabilities",
|
|
1746
|
+
"commands",
|
|
1747
|
+
"documents",
|
|
1748
|
+
"environment",
|
|
1749
|
+
"files",
|
|
1750
|
+
"listener",
|
|
1751
|
+
"processes",
|
|
1752
|
+
"settings",
|
|
1753
|
+
"tools",
|
|
1754
|
+
"viewers",
|
|
1755
|
+
"views"
|
|
1756
|
+
],
|
|
1757
|
+
"api": [
|
|
1758
|
+
"apiVersion",
|
|
1759
|
+
"audience",
|
|
1760
|
+
"backend",
|
|
1761
|
+
"chat",
|
|
1762
|
+
"commands",
|
|
1763
|
+
"documents",
|
|
1764
|
+
"href",
|
|
1765
|
+
"models",
|
|
1766
|
+
"navigate",
|
|
1767
|
+
"processes",
|
|
1768
|
+
"route",
|
|
1769
|
+
"sandbox",
|
|
1770
|
+
"settings",
|
|
1771
|
+
"terminal",
|
|
1772
|
+
"theme",
|
|
1773
|
+
"viewers",
|
|
1774
|
+
"views",
|
|
1775
|
+
"workspace"
|
|
1776
|
+
],
|
|
1777
|
+
"listener": [
|
|
1778
|
+
"automation",
|
|
1779
|
+
"events",
|
|
1780
|
+
"provider"
|
|
1781
|
+
],
|
|
1782
|
+
"sandboxApi": [
|
|
1783
|
+
"fetch",
|
|
1784
|
+
"json",
|
|
1785
|
+
"key",
|
|
1786
|
+
"origin",
|
|
1787
|
+
"previewAddress",
|
|
1788
|
+
"reachable",
|
|
1789
|
+
"request",
|
|
1790
|
+
"role",
|
|
1791
|
+
"rpc"
|
|
1792
|
+
],
|
|
1793
|
+
"moduleExports": [
|
|
1794
|
+
"conversions",
|
|
1795
|
+
"extensionApiVersion",
|
|
1796
|
+
"flattenQuery",
|
|
1797
|
+
"hostSlot",
|
|
1798
|
+
"mergeQuery",
|
|
1799
|
+
"readDaemonStream",
|
|
1800
|
+
"resetSandboxScope",
|
|
1801
|
+
"sandboxDocument",
|
|
1802
|
+
"sandboxLedger",
|
|
1803
|
+
"sandboxPoll",
|
|
1804
|
+
"sandboxRef",
|
|
1805
|
+
"sandboxScopeGuard",
|
|
1806
|
+
"sandboxShallowRef",
|
|
1807
|
+
"sandboxValue",
|
|
1808
|
+
"satisfiesEngines"
|
|
1809
|
+
],
|
|
1810
|
+
"workspaceApi": [
|
|
1811
|
+
"capabilities",
|
|
1812
|
+
"file",
|
|
1813
|
+
"fillDiff",
|
|
1814
|
+
"inProject",
|
|
1815
|
+
"onDidChange",
|
|
1816
|
+
"onDidChangeFiles",
|
|
1817
|
+
"onDidChangeProject",
|
|
1818
|
+
"onDidChangeRefs",
|
|
1819
|
+
"onDidChangeRepos",
|
|
1820
|
+
"openDiff",
|
|
1821
|
+
"project",
|
|
1822
|
+
"readJson",
|
|
1823
|
+
"repos",
|
|
1824
|
+
"setProject",
|
|
1825
|
+
"write"
|
|
1826
|
+
],
|
|
1827
|
+
"chatApi": [
|
|
1828
|
+
"composeLoop",
|
|
1829
|
+
"composeWorkflow",
|
|
1830
|
+
"openAgent",
|
|
1831
|
+
"openSession"
|
|
1832
|
+
],
|
|
1833
|
+
"daemonApi": [
|
|
1834
|
+
"json",
|
|
1835
|
+
"request",
|
|
1836
|
+
"rpc"
|
|
1837
|
+
],
|
|
1838
|
+
"serverApi": [
|
|
1839
|
+
"apiVersion",
|
|
1840
|
+
"daemon",
|
|
1841
|
+
"extensionDir",
|
|
1842
|
+
"log",
|
|
1843
|
+
"routes",
|
|
1844
|
+
"tools",
|
|
1845
|
+
"workspaceRoot"
|
|
1846
|
+
],
|
|
1847
|
+
"manifestSchema": "dac4d58e713132c347e6535f980d72d636af6608bb0e55a1b4718ef14c87c311"
|
|
1724
1848
|
}
|
|
1725
1849
|
}
|
package/src/version.ts
CHANGED
|
@@ -113,4 +113,13 @@
|
|
|
113
113
|
// conversions its shape has had and written with what a newer version of the extension put in it kept in place, the
|
|
114
114
|
// evolution the daemon's own stores got (the daemon's store/evolution/conversions.ts). Until now an extension that changed the
|
|
115
115
|
// shape of its own file had two choices, a hand-written tolerant reader or a reset for everyone who updated. Additive.
|
|
116
|
-
|
|
116
|
+
// 2.20.0 gives an extension one way to hand the agent tools: `contributes.tools`, served by the backend's new
|
|
117
|
+
// `api.tools.serve((card) => [...])` with the host owning the MCP transport, its deadlines and the card lookup, or by a
|
|
118
|
+
// declared process's port. The daemon mounts it into every turn at its one MCP door, so every runtime gets it, where a
|
|
119
|
+
// plugin's `.mcp.json` reached Claude Code alone. The UI half gains `api.backend`, its own backend by a namespace-relative
|
|
120
|
+
// path, since the routing id is the install id and not always `publisher.name`. A cli card's `mcp` stays one release as
|
|
121
|
+
// an alias. The recorded surface grows two grains here: the backend api's own members (`serverApi`), where `tools`
|
|
122
|
+
// arrived unseen by any grain, and a digest of the whole generated manifest schema (`manifestSchema`), so a field added
|
|
123
|
+
// anywhere in the manifest, not only at the top level, needs a new version: an older host's parse drops what it does not
|
|
124
|
+
// know without a word.
|
|
125
|
+
export const extensionApiVersion = "2.20.0";
|