@intentic/extension-api 1.234.0 → 1.236.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 +3 -0
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +49 -4
- package/dist/background.js.map +1 -1
- package/package.json +2 -2
- package/src/background.ts +68 -4
package/README.md
CHANGED
|
@@ -131,6 +131,9 @@ and the poll is the timer it always was. Bursts coalesce, so a run writing a fil
|
|
|
131
131
|
reconnect wakes it too, because a frame pushed while the stream was down is a frame nobody resends. Pick
|
|
132
132
|
`everyMs` accordingly: minutes for a file-backed badge (it is covering a dropped event, not carrying the news),
|
|
133
133
|
and the honest cadence of the source for anything behind somebody else's API, where nothing can push at all.
|
|
134
|
+
All polls in a window share one background-read lane, so aligned extension clocks and reconnect wakes cannot
|
|
135
|
+
turn into parallel request bursts. Repeated triggers coalesce while waiting; one that lands during the read gets
|
|
136
|
+
one trailing pass, so serialization does not trade load for a missed update.
|
|
134
137
|
|
|
135
138
|
What the tile SAYS stays yours: `badge()` is the judgement each surface exists to make, and no two of them
|
|
136
139
|
agree about tone or wording.
|
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,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAsCxD,MAAM,WAAW,WAAW,CAAC,CAAC;IAI1B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAQvB,KAAK,IAAI,UAAU,CAAC;IAGpB,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IAGjC,QAAQ,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC;IAQjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAK1B,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAI7D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;CAC5C;
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAsCxD,MAAM,WAAW,WAAW,CAAC,CAAC;IAI1B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAQvB,KAAK,IAAI,UAAU,CAAC;IAGpB,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IAGjC,QAAQ,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC;IAQjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAK1B,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAI7D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;CAC5C;AAwGD,eAAO,MAAM,WAAW,GAAI,CAAC,WAAW,kBAAkB,CAAC,CAAC,CAAC,KAAG,WAAW,CAAC,CAAC,CAuC5E,CAAC;AA0BF,MAAM,WAAW,aAAa;IAE1B,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAIlD,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAKlE,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,aAgCrE,CAAC"}
|
package/dist/background.js
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
import { sandboxRef, sandboxScopeGuard } from "./scope.js";
|
|
2
2
|
const WAKE_MS = 400;
|
|
3
|
+
const scheduledReads = [];
|
|
4
|
+
let drainingReads = false;
|
|
5
|
+
const drainScheduledReads = async () => {
|
|
6
|
+
if (drainingReads) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
drainingReads = true;
|
|
10
|
+
try {
|
|
11
|
+
for (;;) {
|
|
12
|
+
const scheduled = scheduledReads.shift();
|
|
13
|
+
if (scheduled === undefined) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
scheduled.queued = false;
|
|
17
|
+
scheduled.running = true;
|
|
18
|
+
try {
|
|
19
|
+
await scheduled.read();
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
scheduled.running = false;
|
|
23
|
+
}
|
|
24
|
+
if (scheduled.trailing) {
|
|
25
|
+
scheduled.trailing = false;
|
|
26
|
+
scheduled.queued = true;
|
|
27
|
+
scheduledReads.push(scheduled);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
drainingReads = false;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const scheduleRead = (scheduled) => {
|
|
36
|
+
if (scheduled.running) {
|
|
37
|
+
scheduled.trailing = true;
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (scheduled.queued) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
scheduled.queued = true;
|
|
44
|
+
scheduledReads.push(scheduled);
|
|
45
|
+
void drainScheduledReads();
|
|
46
|
+
};
|
|
3
47
|
const wakeOnFiles = (host, read) => {
|
|
4
48
|
let pending;
|
|
5
49
|
let subscription;
|
|
@@ -42,15 +86,16 @@ export const sandboxPoll = (options) => {
|
|
|
42
86
|
catch {
|
|
43
87
|
}
|
|
44
88
|
};
|
|
89
|
+
const scheduled = { queued: false, running: false, trailing: false, read: once };
|
|
45
90
|
return {
|
|
46
91
|
state,
|
|
47
|
-
refresh: () =>
|
|
92
|
+
refresh: () => scheduleRead(scheduled),
|
|
48
93
|
start: () => {
|
|
49
94
|
if (options.immediate !== false) {
|
|
50
|
-
|
|
95
|
+
scheduleRead(scheduled);
|
|
51
96
|
}
|
|
52
|
-
const timer = setInterval(() =>
|
|
53
|
-
const wake = wakeOnFiles(options.host, () =>
|
|
97
|
+
const timer = setInterval(() => scheduleRead(scheduled), options.everyMs);
|
|
98
|
+
const wake = wakeOnFiles(options.host, () => scheduleRead(scheduled));
|
|
54
99
|
return {
|
|
55
100
|
dispose: () => {
|
|
56
101
|
clearInterval(timer);
|
package/dist/background.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAyF3D,MAAM,OAAO,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/extension-api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.236.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.236.0",
|
|
46
46
|
"@orpc/contract": "1.14.13",
|
|
47
47
|
"tslib": "2.8.1"
|
|
48
48
|
},
|
package/src/background.ts
CHANGED
|
@@ -91,6 +91,69 @@ export interface SandboxPollOptions<T> {
|
|
|
91
91
|
* is the entire point of not waiting for the interval. */
|
|
92
92
|
const WAKE_MS = 400;
|
|
93
93
|
|
|
94
|
+
/* ONE LANE FOR EVERY BACKGROUND READ IN THIS WINDOW.
|
|
95
|
+
*
|
|
96
|
+
* Extensions activate together, so their minute clocks also fire together. Letting each timer issue its own
|
|
97
|
+
* request turned one harmless cadence into a burst across the daemon: the widest poll could still be walking
|
|
98
|
+
* the workspace while CI, deployments and chores all started beside it. A reconnect was worse, because every
|
|
99
|
+
* file-backed poll was woken in the same frame.
|
|
100
|
+
*
|
|
101
|
+
* Per-poll coalescing matters as much as the global lane. A wake that lands while its read is QUEUED adds no
|
|
102
|
+
* information; a wake that lands while it is RUNNING may describe a change the in-flight read missed, so it
|
|
103
|
+
* earns exactly one trailing pass. Re-queueing that pass at the back keeps one noisy poll from starving the
|
|
104
|
+
* others. */
|
|
105
|
+
interface ScheduledRead {
|
|
106
|
+
queued: boolean;
|
|
107
|
+
running: boolean;
|
|
108
|
+
trailing: boolean;
|
|
109
|
+
readonly read: () => Promise<void>;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const scheduledReads: ScheduledRead[] = [];
|
|
113
|
+
let drainingReads = false;
|
|
114
|
+
|
|
115
|
+
const drainScheduledReads = async (): Promise<void> => {
|
|
116
|
+
if (drainingReads) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
drainingReads = true;
|
|
120
|
+
try {
|
|
121
|
+
for (;;) {
|
|
122
|
+
const scheduled = scheduledReads.shift();
|
|
123
|
+
if (scheduled === undefined) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
scheduled.queued = false;
|
|
127
|
+
scheduled.running = true;
|
|
128
|
+
try {
|
|
129
|
+
await scheduled.read();
|
|
130
|
+
} finally {
|
|
131
|
+
scheduled.running = false;
|
|
132
|
+
}
|
|
133
|
+
if (scheduled.trailing) {
|
|
134
|
+
scheduled.trailing = false;
|
|
135
|
+
scheduled.queued = true;
|
|
136
|
+
scheduledReads.push(scheduled);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
} finally {
|
|
140
|
+
drainingReads = false;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const scheduleRead = (scheduled: ScheduledRead): void => {
|
|
145
|
+
if (scheduled.running) {
|
|
146
|
+
scheduled.trailing = true;
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (scheduled.queued) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
scheduled.queued = true;
|
|
153
|
+
scheduledReads.push(scheduled);
|
|
154
|
+
void drainScheduledReads();
|
|
155
|
+
};
|
|
156
|
+
|
|
94
157
|
/* Re-read when the extension's own declared files are written.
|
|
95
158
|
*
|
|
96
159
|
* Contained in a try/catch because BOTH of its failure modes are ordinary rather than exceptional: `host()`
|
|
@@ -141,16 +204,17 @@ export const sandboxPoll = <T>(options: SandboxPollOptions<T>): SandboxPoll<T> =
|
|
|
141
204
|
// same: leave the last value standing. "We could not ask" is not "there is nothing there".
|
|
142
205
|
}
|
|
143
206
|
};
|
|
207
|
+
const scheduled: ScheduledRead = { queued: false, running: false, trailing: false, read: once };
|
|
144
208
|
|
|
145
209
|
return {
|
|
146
210
|
state,
|
|
147
|
-
refresh: () =>
|
|
211
|
+
refresh: () => scheduleRead(scheduled),
|
|
148
212
|
start: () => {
|
|
149
213
|
if (options.immediate !== false) {
|
|
150
|
-
|
|
214
|
+
scheduleRead(scheduled);
|
|
151
215
|
}
|
|
152
|
-
const timer = setInterval(() =>
|
|
153
|
-
const wake = wakeOnFiles(options.host, () =>
|
|
216
|
+
const timer = setInterval(() => scheduleRead(scheduled), options.everyMs);
|
|
217
|
+
const wake = wakeOnFiles(options.host, () => scheduleRead(scheduled));
|
|
154
218
|
return {
|
|
155
219
|
dispose: () => {
|
|
156
220
|
clearInterval(timer);
|