@intentic/extension-api 1.223.0 → 1.225.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 +35 -35
- package/dist/api.d.ts +1 -0
- package/dist/api.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 +3 -3
- package/src/api.ts +91 -81
- package/src/background.ts +13 -13
- package/src/diff.ts +11 -11
- package/src/engines.ts +1 -1
- package/src/facts.ts +7 -7
- package/src/host.ts +1 -1
- package/src/protocol.ts +4 -4
- package/src/route.ts +3 -3
- package/src/scope.ts +12 -12
- package/src/server.ts +15 -15
- package/src/stream.ts +4 -4
- package/src/surface.json +66 -0
- package/src/version.ts +19 -13
package/src/version.ts
CHANGED
|
@@ -1,56 +1,62 @@
|
|
|
1
|
-
// The extension API's protocol version
|
|
1
|
+
// The extension API's protocol version, the value `engines.intentic` ranges are matched against at load, and
|
|
2
2
|
// the value the host reports as IntenticApi.apiVersion. Bumped ONLY with the published package: additive
|
|
3
3
|
// surface = minor, breaking = major. This package is the one deliberate exception to the repo's no-legacy rule.
|
|
4
4
|
//
|
|
5
5
|
// 1.0.0 rather than 0.5.0, and the reason is the drift that forced that bump. While the major was 0 the caret
|
|
6
|
-
// matcher treats the MINOR as breaking (engines.ts), so every addition invalidated every declared range
|
|
6
|
+
// matcher treats the MINOR as breaking (engines.ts), so every addition invalidated every declared range, which
|
|
7
7
|
// made bumping expensive enough that two surface changes (connectors → capabilities, api.documents.open) shipped
|
|
8
8
|
// without one, and the number stopped being true. At 1.x an addition is 1.1.0 and costs authors nothing, so the
|
|
9
9
|
// bump that keeps this honest is the cheap one. surface-guard.test.ts is what makes it non-optional.
|
|
10
10
|
// 2.0.0 makes listener contributions self-describing: the former `eventTypes` array became labelled `events`
|
|
11
|
-
// plus the automation-editor vocabulary the provider owns. That is intentionally breaking
|
|
11
|
+
// plus the automation-editor vocabulary the provider owns. That is intentionally breaking, a 1.x listener
|
|
12
12
|
// manifest cannot honestly promise that a generic host can configure it.
|
|
13
13
|
// 2.1.0 adds the backend half: a manifest `server` bundle (activateServer, run by the daemon's backend host
|
|
14
|
-
// under /x/<id>/…) and `permissions.daemon` beside `permissions.sandbox`. Additive
|
|
14
|
+
// under /x/<id>/…) and `permissions.daemon` beside `permissions.sandbox`. Additive, a 2.0 manifest is a 2.1
|
|
15
15
|
// manifest that ships no backend.
|
|
16
16
|
// 2.2.0 opens the automation composer: `contributes.automationTemplates` lets a pack ship the starting points
|
|
17
17
|
// for its own service, and a `listener` may declare a second narrowing field (`automation.branchField`) for a
|
|
18
18
|
// source whose events carry one. Both fold into the daemon's trigger catalogue, so a pack that knows something
|
|
19
19
|
// worth waking on says so itself instead of being written into the automations surface. Additive.
|
|
20
|
-
// 2.3.0 adds `api.sandbox.role()
|
|
20
|
+
// 2.3.0 adds `api.sandbox.role()`, the signed-in user's trust tier, for affordance gating (the daemon floors
|
|
21
21
|
// every route regardless). Surfaced when the drafts queue moved out of the app: approve/reject are
|
|
22
22
|
// maintainer-and-up, and no extension could say so. Additive. The surface guard grew a `sandboxApi` member
|
|
23
23
|
// list with this release, so additions below the top-level grain are recorded from here on.
|
|
24
24
|
// 2.4.0 gives the manifest an authoring schema: `$schema` is a declared field, and every contribution point now
|
|
25
25
|
// carries the sentence that explains it, generated out to intentic-extension.schema.json. An editor pointed at
|
|
26
|
-
// that URL completes the fields, shows what each one does, and marks a key nothing declares
|
|
26
|
+
// that URL completes the fields, shows what each one does, and marks a key nothing declares, which used to be
|
|
27
27
|
// the one class of mistake nothing caught, because zod strips what it does not know rather than refusing it.
|
|
28
28
|
// Additive: a manifest that names no schema is unchanged.
|
|
29
29
|
// 2.5.0 lets an extension bring its own picture: `art` carries a complete SVG document inline, above the
|
|
30
30
|
// simple-icons `logo` and the host's `icon` in the same ladder. The two tiers before it could say "this is
|
|
31
|
-
// Slack" or "this is a server", and nothing could say "this is mine"
|
|
31
|
+
// Slack" or "this is a server", and nothing could say "this is mine", so a page listing seven unfamiliar
|
|
32
32
|
// extensions drew seven near-identical glyphs, which is the shape of a directory rather than of a shelf. Inline
|
|
33
33
|
// rather than a URL because the row is drawn before any code is cloned: a link would put a stranger's server in
|
|
34
|
-
// the render path, track who is browsing, and rot after approval. Additive
|
|
34
|
+
// the render path, track who is browsing, and rot after approval. Additive, a manifest that ships no drawing
|
|
35
35
|
// falls to exactly the mark it had before.
|
|
36
36
|
// 2.6.0 gives module state an owner across a sandbox switch: `sandboxRef` declares state that belongs to ONE
|
|
37
37
|
// sandbox and `sandboxScopeGuard` protects the write of a read that was already in flight when the switch
|
|
38
|
-
// happened (scope.ts). The tier existed and nothing cleared it
|
|
38
|
+
// happened (scope.ts). The tier existed and nothing cleared it, every extension that badges a rail tile from a
|
|
39
39
|
// timer kept the previous sandbox's count under the new sandbox's name, which is the one thing a badge must
|
|
40
40
|
// never do. Additive: an extension that keeps no module state is unchanged, and the host resets the scope
|
|
41
41
|
// whether or not anything registered.
|
|
42
42
|
// 2.7.0 adds the two halves of work an extension does while none of it is on screen (background.ts):
|
|
43
43
|
// `sandboxPoll`, the timer behind a rail badge, and `sandboxLedger`, the file recording what the owner has
|
|
44
|
-
// already seen. Seven modules across six extensions had hand-written the same poller
|
|
45
|
-
// each, and six of the seven had the sandbox-switch one wrong
|
|
44
|
+
// already seen. Seven modules across six extensions had hand-written the same poller, five invisible rules
|
|
45
|
+
// each, and six of the seven had the sandbox-switch one wrong, and three had hand-written the same tolerant
|
|
46
46
|
// reader and careful write over the same shape of file. Additive: nothing is removed, and an extension that
|
|
47
47
|
// keeps polling by hand still runs.
|
|
48
48
|
// 2.8.0 splits sandbox-scoped module state by AUDIENCE: `sandboxValue` is `sandboxRef`'s lifetime without its
|
|
49
49
|
// reactivity, for what a background poll remembers for itself (which connections to ask about next round, the
|
|
50
50
|
// cursor a fetch resumes from) rather than what a tile shows. `detect()` and `badge()` both run inside the
|
|
51
|
-
// host's render computed, so a `Ref` written from either is a computed mutating its own dependency
|
|
51
|
+
// host's render computed, so a `Ref` written from either is a computed mutating its own dependency. Vue
|
|
52
52
|
// re-runs it, it writes again, and the rail recurses until the flush is abandoned mid-frame, dropping every
|
|
53
53
|
// unrelated update queued behind it. The symptom is a window that stops answering, blamed on whichever
|
|
54
54
|
// component the loop was noticed in, so the fix has to be a box nothing observes rather than a rule to
|
|
55
55
|
// remember. Additive: `sandboxRef` is unchanged, and both are emptied on a switch by the same door.
|
|
56
|
-
|
|
56
|
+
// 2.9.0 adds `api.href`: the same app path the host would navigate to, as a browser address. A view that can
|
|
57
|
+
// only call `navigate` has to draw every destination it offers as a <button>, and a button is not a link: no
|
|
58
|
+
// address under the pointer, nothing in the browser's own right-click menu, nothing to copy, and Ctrl/⌘-click
|
|
59
|
+
// moving the tab the reader is in instead of opening a second one. Six views across three packs had each drawn
|
|
60
|
+
// a place that way, so the fix has to be reachable from the API rather than repeated per pack. Additive:
|
|
61
|
+
// `navigate` is unchanged, and it is still what a plain click calls.
|
|
62
|
+
export const extensionApiVersion = "2.9.0";
|