@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.
Files changed (82) hide show
  1. package/README.md +67 -0
  2. package/lib/access/conversation-directory-store.d.ts +73 -0
  3. package/lib/access/conversation-directory-store.d.ts.map +1 -0
  4. package/lib/access/conversation-directory-store.js +66 -0
  5. package/lib/access/conversation-directory-store.js.map +1 -0
  6. package/lib/access/conversation-directory.d.ts +51 -0
  7. package/lib/access/conversation-directory.d.ts.map +1 -0
  8. package/lib/access/conversation-directory.js +118 -0
  9. package/lib/access/conversation-directory.js.map +1 -0
  10. package/lib/access/manager.d.ts +47 -0
  11. package/lib/access/manager.d.ts.map +1 -0
  12. package/lib/access/manager.js +124 -0
  13. package/lib/access/manager.js.map +1 -0
  14. package/lib/access/materialize.d.ts +33 -0
  15. package/lib/access/materialize.d.ts.map +1 -0
  16. package/lib/access/materialize.js +67 -0
  17. package/lib/access/materialize.js.map +1 -0
  18. package/lib/access/owner-claim.d.ts +91 -0
  19. package/lib/access/owner-claim.d.ts.map +1 -0
  20. package/lib/access/owner-claim.js +200 -0
  21. package/lib/access/owner-claim.js.map +1 -0
  22. package/lib/access/policy-store.d.ts +55 -0
  23. package/lib/access/policy-store.d.ts.map +1 -0
  24. package/lib/access/policy-store.js +88 -0
  25. package/lib/access/policy-store.js.map +1 -0
  26. package/lib/access/validation.d.ts +29 -0
  27. package/lib/access/validation.d.ts.map +1 -0
  28. package/lib/access/validation.js +89 -0
  29. package/lib/access/validation.js.map +1 -0
  30. package/lib/auth/sanitizer.d.ts +35 -0
  31. package/lib/auth/sanitizer.d.ts.map +1 -0
  32. package/lib/auth/sanitizer.js +52 -0
  33. package/lib/auth/sanitizer.js.map +1 -0
  34. package/lib/auth/session-manager.d.ts +38 -0
  35. package/lib/auth/session-manager.d.ts.map +1 -0
  36. package/lib/auth/session-manager.js +219 -0
  37. package/lib/auth/session-manager.js.map +1 -0
  38. package/lib/config.d.ts +20 -0
  39. package/lib/config.d.ts.map +1 -0
  40. package/lib/config.js +15 -0
  41. package/lib/config.js.map +1 -0
  42. package/lib/credentials/manager.d.ts +44 -0
  43. package/lib/credentials/manager.d.ts.map +1 -0
  44. package/lib/credentials/manager.js +24 -0
  45. package/lib/credentials/manager.js.map +1 -0
  46. package/lib/definitions/registry.d.ts +24 -0
  47. package/lib/definitions/registry.d.ts.map +1 -0
  48. package/lib/definitions/registry.js +59 -0
  49. package/lib/definitions/registry.js.map +1 -0
  50. package/lib/errors.d.ts +20 -0
  51. package/lib/errors.d.ts.map +1 -0
  52. package/lib/errors.js +45 -0
  53. package/lib/errors.js.map +1 -0
  54. package/lib/index.d.ts +31 -0
  55. package/lib/index.d.ts.map +1 -0
  56. package/lib/index.js +31 -0
  57. package/lib/index.js.map +1 -0
  58. package/lib/plugin.d.ts +20 -0
  59. package/lib/plugin.d.ts.map +1 -0
  60. package/lib/plugin.js +81 -0
  61. package/lib/plugin.js.map +1 -0
  62. package/lib/runtime/manager.d.ts +73 -0
  63. package/lib/runtime/manager.d.ts.map +1 -0
  64. package/lib/runtime/manager.js +277 -0
  65. package/lib/runtime/manager.js.map +1 -0
  66. package/lib/runtime/mount-handle.d.ts +11 -0
  67. package/lib/runtime/mount-handle.d.ts.map +1 -0
  68. package/lib/runtime/mount-handle.js +2 -0
  69. package/lib/runtime/mount-handle.js.map +1 -0
  70. package/lib/service.d.ts +180 -0
  71. package/lib/service.d.ts.map +1 -0
  72. package/lib/service.js +432 -0
  73. package/lib/service.js.map +1 -0
  74. package/lib/types.d.ts +370 -0
  75. package/lib/types.d.ts.map +1 -0
  76. package/lib/types.js +2 -0
  77. package/lib/types.js.map +1 -0
  78. package/lib/update-check.d.ts +128 -0
  79. package/lib/update-check.d.ts.map +1 -0
  80. package/lib/update-check.js +380 -0
  81. package/lib/update-check.js.map +1 -0
  82. 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
+ }