@krischoichoi/channel-control 0.6.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 +67 -0
- package/lib/access/conversation-directory-store.d.ts +73 -0
- package/lib/access/conversation-directory-store.d.ts.map +1 -0
- package/lib/access/conversation-directory-store.js +66 -0
- package/lib/access/conversation-directory-store.js.map +1 -0
- package/lib/access/conversation-directory.d.ts +51 -0
- package/lib/access/conversation-directory.d.ts.map +1 -0
- package/lib/access/conversation-directory.js +118 -0
- package/lib/access/conversation-directory.js.map +1 -0
- package/lib/access/manager.d.ts +47 -0
- package/lib/access/manager.d.ts.map +1 -0
- package/lib/access/manager.js +124 -0
- package/lib/access/manager.js.map +1 -0
- package/lib/access/materialize.d.ts +33 -0
- package/lib/access/materialize.d.ts.map +1 -0
- package/lib/access/materialize.js +67 -0
- package/lib/access/materialize.js.map +1 -0
- package/lib/access/owner-claim.d.ts +91 -0
- package/lib/access/owner-claim.d.ts.map +1 -0
- package/lib/access/owner-claim.js +200 -0
- package/lib/access/owner-claim.js.map +1 -0
- package/lib/access/policy-store.d.ts +55 -0
- package/lib/access/policy-store.d.ts.map +1 -0
- package/lib/access/policy-store.js +88 -0
- package/lib/access/policy-store.js.map +1 -0
- package/lib/access/validation.d.ts +29 -0
- package/lib/access/validation.d.ts.map +1 -0
- package/lib/access/validation.js +89 -0
- package/lib/access/validation.js.map +1 -0
- package/lib/auth/sanitizer.d.ts +35 -0
- package/lib/auth/sanitizer.d.ts.map +1 -0
- package/lib/auth/sanitizer.js +52 -0
- package/lib/auth/sanitizer.js.map +1 -0
- package/lib/auth/session-manager.d.ts +38 -0
- package/lib/auth/session-manager.d.ts.map +1 -0
- package/lib/auth/session-manager.js +219 -0
- package/lib/auth/session-manager.js.map +1 -0
- package/lib/config.d.ts +20 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +15 -0
- package/lib/config.js.map +1 -0
- package/lib/credentials/manager.d.ts +44 -0
- package/lib/credentials/manager.d.ts.map +1 -0
- package/lib/credentials/manager.js +24 -0
- package/lib/credentials/manager.js.map +1 -0
- package/lib/definitions/registry.d.ts +24 -0
- package/lib/definitions/registry.d.ts.map +1 -0
- package/lib/definitions/registry.js +59 -0
- package/lib/definitions/registry.js.map +1 -0
- package/lib/errors.d.ts +20 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +45 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +31 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +31 -0
- package/lib/index.js.map +1 -0
- package/lib/plugin.d.ts +20 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +81 -0
- package/lib/plugin.js.map +1 -0
- package/lib/runtime/manager.d.ts +73 -0
- package/lib/runtime/manager.d.ts.map +1 -0
- package/lib/runtime/manager.js +277 -0
- package/lib/runtime/manager.js.map +1 -0
- package/lib/runtime/mount-handle.d.ts +11 -0
- package/lib/runtime/mount-handle.d.ts.map +1 -0
- package/lib/runtime/mount-handle.js +2 -0
- package/lib/runtime/mount-handle.js.map +1 -0
- package/lib/service.d.ts +180 -0
- package/lib/service.d.ts.map +1 -0
- package/lib/service.js +432 -0
- package/lib/service.js.map +1 -0
- package/lib/types.d.ts +370 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/update-check.d.ts +128 -0
- package/lib/update-check.d.ts.map +1 -0
- package/lib/update-check.js +380 -0
- package/lib/update-check.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle update check — prompt-only npm dist-tag check for
|
|
3
|
+
* `@krischoichoi/dsh-channels` (the bundle users install).
|
|
4
|
+
*
|
|
5
|
+
* The official Harness has no plugin update mechanism (`dsh plugin` is a pnpm
|
|
6
|
+
* passthrough; `dsh-host-plugin-inventory` is a read-only loader projection),
|
|
7
|
+
* so this control-plane module adds a lightweight runtime hint:
|
|
8
|
+
*
|
|
9
|
+
* - Checks `https://registry.npmjs.org/@krischoichoi/dsh-channels/{latest,next}`
|
|
10
|
+
* (single-tag manifests, far lighter than a full packument), 15s timeout,
|
|
11
|
+
* offline/timeout/validation failures are swallowed into a debug log — a
|
|
12
|
+
* check failure must NEVER produce a user-facing error.
|
|
13
|
+
* - Registry responses are EXTERNAL input and validated with zod `safeParse`
|
|
14
|
+
* (a `version` that is not a legal semver string is treated as offline).
|
|
15
|
+
* - The result is cached in the shared ChannelStorage under a versioned key
|
|
16
|
+
* with a configurable TTL (default 24h); an in-memory copy avoids repeated
|
|
17
|
+
* disk reads within the same process. A cache written for a different
|
|
18
|
+
* installed version is discarded, so the first run after an upgrade
|
|
19
|
+
* re-checks immediately.
|
|
20
|
+
* - Comparison rules (prerelease-aware, hand-written — no semver dependency):
|
|
21
|
+
* * stable install → compared against the `latest` tag only;
|
|
22
|
+
* * prerelease install → compared against max(latest, next);
|
|
23
|
+
* * strictly greater than the installed version prompts.
|
|
24
|
+
* - Version-line rule: when the target's major.minor differs from the
|
|
25
|
+
* installed version the hint must carry the TWO-STEP upgrade commands
|
|
26
|
+
* (Harness CLI first, then re-add the bundle); same line → single
|
|
27
|
+
* `plugin update` command.
|
|
28
|
+
*
|
|
29
|
+
* This feature only ever PROMPTS. It never installs, upgrades or mutates
|
|
30
|
+
* anything outside its own cache key.
|
|
31
|
+
*/
|
|
32
|
+
import pkg from '../package.json' with { type: 'json' };
|
|
33
|
+
import { z } from 'zod';
|
|
34
|
+
/** The bundle package users install (checked on the npm registry). */
|
|
35
|
+
export const BUNDLE_PACKAGE = '@krischoichoi/dsh-channels';
|
|
36
|
+
/** npm registry base. External endpoint; responses are untrusted input. */
|
|
37
|
+
const REGISTRY_BASE = 'https://registry.npmjs.org';
|
|
38
|
+
/** Registry fetch timeout (mirrors scripts/check-upstream.mjs). */
|
|
39
|
+
export const FETCH_TIMEOUT_MS = 15000;
|
|
40
|
+
/** Durable cache key (versioned so future format changes invalidate old rows). */
|
|
41
|
+
export const UPDATE_CHECK_STORAGE_KEY = 'update-check:v1';
|
|
42
|
+
/** Cache schema version marker persisted alongside the snapshot. */
|
|
43
|
+
const CACHE_FORMAT = 1;
|
|
44
|
+
/**
|
|
45
|
+
* The installed bundle version. By release convention every runtime-family
|
|
46
|
+
* package (the bundle + its ten dependencies, see docs/release.md) moves in
|
|
47
|
+
* lockstep — each changeset lists the whole family and every package.json
|
|
48
|
+
* carries the same version — so this package's own version IS the installed
|
|
49
|
+
* `@krischoichoi/dsh-channels` version. Keep the family lockstep when bumping;
|
|
50
|
+
* `test/update-check.test.ts` asserts this package's version equals the
|
|
51
|
+
* bundle's.
|
|
52
|
+
*/
|
|
53
|
+
export const BUNDLE_VERSION = pkg.version;
|
|
54
|
+
const silentLogger = { debug() { }, info() { } };
|
|
55
|
+
/* ------------------------------------------------------------------ */
|
|
56
|
+
/* semver (hand-written, prerelease-aware — no new dependency) */
|
|
57
|
+
/* ------------------------------------------------------------------ */
|
|
58
|
+
/** Official semver regex (no leading v/=; build metadata tolerated). */
|
|
59
|
+
const SEMVER_RE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/;
|
|
60
|
+
/** Parse a strict semver string, or undefined when malformed. */
|
|
61
|
+
export function parseSemver(version) {
|
|
62
|
+
const match = SEMVER_RE.exec(version.trim());
|
|
63
|
+
if (!match)
|
|
64
|
+
return undefined;
|
|
65
|
+
return {
|
|
66
|
+
major: Number(match[1]),
|
|
67
|
+
minor: Number(match[2]),
|
|
68
|
+
patch: Number(match[3]),
|
|
69
|
+
pre: match[4] !== undefined ? match[4].split('.') : null,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** Whether a version string is a legal strict semver (with/without suffixes). */
|
|
73
|
+
export function isSemverString(version) {
|
|
74
|
+
return SEMVER_RE.test(version.trim());
|
|
75
|
+
}
|
|
76
|
+
function isNumericIdentifier(identifier) {
|
|
77
|
+
return /^[0-9]+$/.test(identifier);
|
|
78
|
+
}
|
|
79
|
+
/** Semver §11 prerelease precedence: numeric < alphanumeric, longer wins ties. */
|
|
80
|
+
function comparePrereleaseIdentifiers(a, b) {
|
|
81
|
+
const shared = Math.min(a.length, b.length);
|
|
82
|
+
for (let i = 0; i < shared; i++) {
|
|
83
|
+
const x = a[i];
|
|
84
|
+
const y = b[i];
|
|
85
|
+
const xNum = isNumericIdentifier(x);
|
|
86
|
+
const yNum = isNumericIdentifier(y);
|
|
87
|
+
if (xNum && yNum) {
|
|
88
|
+
const diff = Number(x) - Number(y);
|
|
89
|
+
if (diff !== 0)
|
|
90
|
+
return diff < 0 ? -1 : 1;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (xNum)
|
|
94
|
+
return -1; // numeric identifiers always have lower precedence
|
|
95
|
+
if (yNum)
|
|
96
|
+
return 1;
|
|
97
|
+
if (x !== y)
|
|
98
|
+
return x < y ? -1 : 1;
|
|
99
|
+
}
|
|
100
|
+
if (a.length === b.length)
|
|
101
|
+
return 0;
|
|
102
|
+
return a.length < b.length ? -1 : 1; // larger identifier set wins
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Full semver precedence compare. Build metadata is ignored. Callers must
|
|
106
|
+
* pre-validate inputs with parseSemver; an unparseable side compares equal
|
|
107
|
+
* (never greater), so a malformed value can never fabricate an update hint.
|
|
108
|
+
*/
|
|
109
|
+
export function compareSemver(a, b) {
|
|
110
|
+
const pa = parseSemver(a);
|
|
111
|
+
const pb = parseSemver(b);
|
|
112
|
+
if (!pa || !pb)
|
|
113
|
+
return 0;
|
|
114
|
+
if (pa.major !== pb.major)
|
|
115
|
+
return pa.major < pb.major ? -1 : 1;
|
|
116
|
+
if (pa.minor !== pb.minor)
|
|
117
|
+
return pa.minor < pb.minor ? -1 : 1;
|
|
118
|
+
if (pa.patch !== pb.patch)
|
|
119
|
+
return pa.patch < pb.patch ? -1 : 1;
|
|
120
|
+
if (pa.pre === null && pb.pre === null)
|
|
121
|
+
return 0;
|
|
122
|
+
if (pa.pre === null)
|
|
123
|
+
return 1; // release > prerelease
|
|
124
|
+
if (pb.pre === null)
|
|
125
|
+
return -1;
|
|
126
|
+
return comparePrereleaseIdentifiers(pa.pre, pb.pre);
|
|
127
|
+
}
|
|
128
|
+
/* ------------------------------------------------------------------ */
|
|
129
|
+
/* Trust boundary: zod schemas for external input */
|
|
130
|
+
/* ------------------------------------------------------------------ */
|
|
131
|
+
/** A registry manifest only needs a legal semver `version` field. */
|
|
132
|
+
const registryManifestSchema = z
|
|
133
|
+
.object({ version: z.string().refine(isSemverString, 'version must be a strict semver string') })
|
|
134
|
+
.loose();
|
|
135
|
+
/** Durable cache body (own storage is re-validated on load: storage can corrupt). */
|
|
136
|
+
const storedSnapshotSchema = z
|
|
137
|
+
.object({
|
|
138
|
+
v: z.literal(CACHE_FORMAT),
|
|
139
|
+
checkedAt: z.number(),
|
|
140
|
+
currentVersion: z.string().refine(isSemverString),
|
|
141
|
+
latest: z.string().refine(isSemverString),
|
|
142
|
+
next: z.string().refine(isSemverString).optional(),
|
|
143
|
+
})
|
|
144
|
+
.loose();
|
|
145
|
+
/* ------------------------------------------------------------------ */
|
|
146
|
+
/* Update evaluation (pure; unit-testable without I/O) */
|
|
147
|
+
/* ------------------------------------------------------------------ */
|
|
148
|
+
/** Same-line upgrade: `plugin update` already refreshes within the range. */
|
|
149
|
+
const SAME_LINE_COMMANDS = [
|
|
150
|
+
'npx @deepseek-ai/dsh plugin --profile web update -w @krischoichoi/dsh-channels',
|
|
151
|
+
];
|
|
152
|
+
/** Cross-line upgrade: Harness CLI FIRST, then re-add the bundle (order matters). */
|
|
153
|
+
const CROSS_LINE_COMMANDS = [
|
|
154
|
+
'npm i -g @deepseek-ai/dsh@latest',
|
|
155
|
+
'npx @deepseek-ai/dsh plugin --profile web add -w @krischoichoi/dsh-channels@latest',
|
|
156
|
+
];
|
|
157
|
+
/**
|
|
158
|
+
* Evaluate the prompt from dist-tag versions against the installed version.
|
|
159
|
+
* Pure function; malformed versions are ignored (they can never prompt).
|
|
160
|
+
*/
|
|
161
|
+
export function evaluateBundleUpdate(currentVersion, tags) {
|
|
162
|
+
const current = parseSemver(currentVersion);
|
|
163
|
+
if (!current)
|
|
164
|
+
return undefined;
|
|
165
|
+
const candidates = [];
|
|
166
|
+
if (tags.latest !== undefined && isSemverString(tags.latest)) {
|
|
167
|
+
candidates.push({ tag: 'latest', version: tags.latest, parsed: parseSemver(tags.latest) });
|
|
168
|
+
}
|
|
169
|
+
// Prerelease installs also consider the `next` dist-tag; stable installs
|
|
170
|
+
// never get prompted onto a prerelease.
|
|
171
|
+
if (current.pre !== null && tags.next !== undefined && isSemverString(tags.next)) {
|
|
172
|
+
candidates.push({ tag: 'next', version: tags.next, parsed: parseSemver(tags.next) });
|
|
173
|
+
}
|
|
174
|
+
if (candidates.length === 0)
|
|
175
|
+
return undefined;
|
|
176
|
+
let target = candidates[0];
|
|
177
|
+
for (const candidate of candidates) {
|
|
178
|
+
if (compareSemver(candidate.version, target.version) > 0)
|
|
179
|
+
target = candidate;
|
|
180
|
+
}
|
|
181
|
+
if (compareSemver(target.version, currentVersion) <= 0)
|
|
182
|
+
return undefined;
|
|
183
|
+
const crossLine = target.parsed.major !== current.major || target.parsed.minor !== current.minor;
|
|
184
|
+
return {
|
|
185
|
+
version: target.version,
|
|
186
|
+
tag: target.tag,
|
|
187
|
+
crossLine,
|
|
188
|
+
commands: crossLine ? [...CROSS_LINE_COMMANDS] : [...SAME_LINE_COMMANDS],
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/* ------------------------------------------------------------------ */
|
|
192
|
+
/* Checker */
|
|
193
|
+
/* ------------------------------------------------------------------ */
|
|
194
|
+
/**
|
|
195
|
+
* [BundleUpdateChecker] — TTL-cached, offline-tolerant npm dist-tag check.
|
|
196
|
+
* Never throws: every failure path (disabled, offline, timeout, schema
|
|
197
|
+
* rejection, storage error) degrades to "no update known".
|
|
198
|
+
*/
|
|
199
|
+
export class BundleUpdateChecker {
|
|
200
|
+
currentVersion;
|
|
201
|
+
enabled;
|
|
202
|
+
intervalMs;
|
|
203
|
+
getStorage;
|
|
204
|
+
logger;
|
|
205
|
+
now;
|
|
206
|
+
/** In-memory snapshot so a process reads storage at most once per cache. */
|
|
207
|
+
memory;
|
|
208
|
+
inflight;
|
|
209
|
+
constructor(options) {
|
|
210
|
+
this.currentVersion = options.currentVersion ?? BUNDLE_VERSION;
|
|
211
|
+
this.enabled = options.enabled;
|
|
212
|
+
this.intervalMs = Math.max(0, options.intervalHours) * 3_600_000;
|
|
213
|
+
this.getStorage = options.getStorage ?? (() => undefined);
|
|
214
|
+
this.logger = options.logger ?? silentLogger;
|
|
215
|
+
this.now = options.now ?? (() => Date.now());
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Fire-and-forget check (startup hook). Re-entrant: concurrent callers share
|
|
219
|
+
* one in-flight promise; a fresh cache short-circuits without fetching.
|
|
220
|
+
* Never rejects — callers may `void` it safely.
|
|
221
|
+
*/
|
|
222
|
+
trigger() {
|
|
223
|
+
if (this.inflight)
|
|
224
|
+
return this.inflight;
|
|
225
|
+
if (!this.enabled) {
|
|
226
|
+
this.logger.debug('[channel-control] update check disabled (updateCheck.enabled=false)');
|
|
227
|
+
return Promise.resolve();
|
|
228
|
+
}
|
|
229
|
+
this.inflight = this.runCheck().finally(() => {
|
|
230
|
+
this.inflight = undefined;
|
|
231
|
+
});
|
|
232
|
+
return this.inflight;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Read-only status for the web control plane / /version command. Returns
|
|
236
|
+
* immediately with the cached snapshot (storage-backed when the process has
|
|
237
|
+
* not checked yet) and kicks a background refresh when the cache is stale
|
|
238
|
+
* or absent — a first request never blocks on the registry.
|
|
239
|
+
*/
|
|
240
|
+
async getStatus() {
|
|
241
|
+
// Disabled means fully off: no hints either — even a fresh snapshot left
|
|
242
|
+
// in storage by a previous (enabled) run must not surface.
|
|
243
|
+
if (!this.enabled)
|
|
244
|
+
return { currentVersion: this.currentVersion };
|
|
245
|
+
if (!this.memory) {
|
|
246
|
+
const stored = await this.loadStored();
|
|
247
|
+
if (stored)
|
|
248
|
+
this.memory = stored;
|
|
249
|
+
}
|
|
250
|
+
if (!this.isFresh(this.memory))
|
|
251
|
+
void this.trigger().catch(() => { });
|
|
252
|
+
return this.toStatus(this.memory);
|
|
253
|
+
}
|
|
254
|
+
async runCheck() {
|
|
255
|
+
try {
|
|
256
|
+
if (this.isFresh(this.memory))
|
|
257
|
+
return;
|
|
258
|
+
if (!this.memory) {
|
|
259
|
+
const stored = await this.loadStored();
|
|
260
|
+
if (stored) {
|
|
261
|
+
this.memory = stored;
|
|
262
|
+
if (this.isFresh(this.memory))
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const { latest, next } = await this.fetchDistTags();
|
|
267
|
+
const snapshot = {
|
|
268
|
+
checkedAt: this.now(),
|
|
269
|
+
currentVersion: this.currentVersion,
|
|
270
|
+
latest,
|
|
271
|
+
...(next !== undefined ? { next } : {}),
|
|
272
|
+
};
|
|
273
|
+
this.memory = snapshot;
|
|
274
|
+
await this.persist(snapshot);
|
|
275
|
+
const { update } = this.toStatus(snapshot);
|
|
276
|
+
if (update) {
|
|
277
|
+
// The ONE startup info line (AGENTS.md §5.2.1 spirit: no registry raw
|
|
278
|
+
// payload, no noise when there is nothing to say).
|
|
279
|
+
this.logger.info(`[channel-control] ${BUNDLE_PACKAGE} ${this.currentVersion} -> ${update.version} available ` +
|
|
280
|
+
`(dist-tag: ${update.tag}, npm latest: ${latest}); upgrade is manual — see /version or the web Channels settings`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
// Offline / timeout / schema rejection: silent for the user, debug only.
|
|
285
|
+
this.logger.debug('[channel-control] bundle update check skipped (offline or invalid response)', error);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
isFresh(snapshot) {
|
|
289
|
+
if (!snapshot)
|
|
290
|
+
return false;
|
|
291
|
+
return this.now() - snapshot.checkedAt < this.intervalMs;
|
|
292
|
+
}
|
|
293
|
+
toStatus(snapshot) {
|
|
294
|
+
if (!snapshot)
|
|
295
|
+
return { currentVersion: this.currentVersion };
|
|
296
|
+
return {
|
|
297
|
+
currentVersion: this.currentVersion,
|
|
298
|
+
update: evaluateBundleUpdate(this.currentVersion, snapshot),
|
|
299
|
+
checkedAt: snapshot.checkedAt,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Fetch the `latest` and `next` single-tag manifests in parallel. The next
|
|
304
|
+
* tag is optional (404 → absent); latest is required for a successful
|
|
305
|
+
* check. Any non-404 failure, and any zod rejection, throws so the whole
|
|
306
|
+
* check is treated as offline (no partially-trusted snapshot is kept).
|
|
307
|
+
*/
|
|
308
|
+
async fetchDistTags() {
|
|
309
|
+
const [latestResult, nextResult] = await Promise.allSettled([
|
|
310
|
+
this.fetchManifestVersion('latest'),
|
|
311
|
+
this.fetchManifestVersion('next'),
|
|
312
|
+
]);
|
|
313
|
+
if (latestResult.status === 'rejected')
|
|
314
|
+
throw latestResult.reason;
|
|
315
|
+
const latest = latestResult.value;
|
|
316
|
+
if (latest === undefined)
|
|
317
|
+
throw new Error('npm latest dist-tag manifest unavailable');
|
|
318
|
+
let next;
|
|
319
|
+
if (nextResult.status === 'fulfilled')
|
|
320
|
+
next = nextResult.value;
|
|
321
|
+
return { latest, ...(next !== undefined ? { next } : {}) };
|
|
322
|
+
}
|
|
323
|
+
/** One tag manifest → its version. 404 → undefined (tag not published). */
|
|
324
|
+
async fetchManifestVersion(tag) {
|
|
325
|
+
const response = await fetch(`${REGISTRY_BASE}/${BUNDLE_PACKAGE}/${tag}`, {
|
|
326
|
+
headers: { accept: 'application/json' },
|
|
327
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
328
|
+
});
|
|
329
|
+
if (response.status === 404)
|
|
330
|
+
return undefined;
|
|
331
|
+
if (!response.ok)
|
|
332
|
+
throw new Error(`${BUNDLE_PACKAGE}/${tag}: HTTP ${response.status}`);
|
|
333
|
+
const body = await response.json();
|
|
334
|
+
const parsed = registryManifestSchema.safeParse(body);
|
|
335
|
+
if (!parsed.success) {
|
|
336
|
+
throw new Error(`${BUNDLE_PACKAGE}/${tag}: registry manifest failed schema validation`);
|
|
337
|
+
}
|
|
338
|
+
return parsed.data.version;
|
|
339
|
+
}
|
|
340
|
+
async loadStored() {
|
|
341
|
+
const storage = this.getStorage();
|
|
342
|
+
if (!storage)
|
|
343
|
+
return undefined;
|
|
344
|
+
try {
|
|
345
|
+
const raw = await storage.get(UPDATE_CHECK_STORAGE_KEY);
|
|
346
|
+
if (raw === undefined)
|
|
347
|
+
return undefined;
|
|
348
|
+
const parsed = storedSnapshotSchema.safeParse(JSON.parse(raw));
|
|
349
|
+
if (!parsed.success)
|
|
350
|
+
return undefined;
|
|
351
|
+
// A cache recorded for a different installed version (e.g. written
|
|
352
|
+
// before this process upgraded) is discarded so the next check re-runs.
|
|
353
|
+
if (parsed.data.currentVersion !== this.currentVersion)
|
|
354
|
+
return undefined;
|
|
355
|
+
const data = parsed.data;
|
|
356
|
+
return {
|
|
357
|
+
checkedAt: data.checkedAt,
|
|
358
|
+
currentVersion: data.currentVersion,
|
|
359
|
+
latest: data.latest,
|
|
360
|
+
...(data.next !== undefined ? { next: data.next } : {}),
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
return undefined; // missing/corrupt cache row → simply re-check
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
async persist(snapshot) {
|
|
368
|
+
const storage = this.getStorage();
|
|
369
|
+
if (!storage)
|
|
370
|
+
return;
|
|
371
|
+
try {
|
|
372
|
+
const body = { v: CACHE_FORMAT, ...snapshot };
|
|
373
|
+
await storage.set(UPDATE_CHECK_STORAGE_KEY, JSON.stringify(body));
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
this.logger.debug('[channel-control] failed to persist update-check cache', error);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@krischoichoi/channel-control",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/krischoichoi/dsh-channels.git"
|
|
7
|
+
},
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"description": "Universal Channel Control Plane for DeepSeek Harness Channels (configuration, credentials, auth sessions, runtime lifecycle)",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "./lib/index.js",
|
|
14
|
+
"types": "./lib/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./lib/index.d.ts",
|
|
18
|
+
"default": "./lib/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./plugin": {
|
|
21
|
+
"types": "./lib/plugin.d.ts",
|
|
22
|
+
"default": "./lib/plugin.js"
|
|
23
|
+
},
|
|
24
|
+
"./package.json": "./package.json"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"lib"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc -p tsconfig.json",
|
|
31
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
32
|
+
"test": "vitest run",
|
|
33
|
+
"clean": "rimraf lib"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@deepseek-ai/cordis": "^4.0.4",
|
|
37
|
+
"@deepseek-ai/schemastery": "~3.18.4",
|
|
38
|
+
"@krischoichoi/channel-core": "workspace:*",
|
|
39
|
+
"zod": "^4.4.3"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"rimraf": "^6.0.0",
|
|
43
|
+
"typescript": "^5.9.0",
|
|
44
|
+
"vitest": "^3.2.0"
|
|
45
|
+
},
|
|
46
|
+
"license": "MIT"
|
|
47
|
+
}
|