instar 1.3.955 → 1.3.956

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.
@@ -0,0 +1,66 @@
1
+ export declare const CAPABILITY_REGISTRY_SCHEMA_VERSION = 1;
2
+ export declare const MAX_ENTRIES_PER_MACHINE = 200;
3
+ export declare const MAX_STRING_LENGTH = 256;
4
+ export declare const MAX_SCHEMA_VERSION = 999;
5
+ export declare const MAX_MACHINE_EPOCH = 9999999999;
6
+ export declare const MAX_PROJECTION_SEQ = 9999999999;
7
+ export declare const MAX_SCAN_STAMP_SECS = 9999999999;
8
+ export declare const CAPABILITY_KINDS: readonly ["model"];
9
+ export declare const PROBE_OUTCOMES: readonly ["positive", "negative", "unknown"];
10
+ export declare const SCAN_STATES: readonly ["observed", "never-observed", "source-unavailable"];
11
+ export declare const SOURCES: readonly ["local-doorways"];
12
+ export declare const SOURCE_DETAILS: readonly ["doorway-scan", "doorway-manifest", "pool-observation"];
13
+ export declare const EVIDENCE_CLASSES: readonly ["cli-present", "probe-answered", "manifest-only"];
14
+ export type ProbeOutcome = (typeof PROBE_OUTCOMES)[number];
15
+ export type ScanState = (typeof SCAN_STATES)[number];
16
+ export type SourceDetail = (typeof SOURCE_DETAILS)[number];
17
+ export type CapabilityStatus = 'available' | 'unavailable' | 'unknown' | 'stale' | 'conflict';
18
+ export interface CapabilityEvidence {
19
+ doorwayScanAt?: string;
20
+ manifestVerifiedAt?: string;
21
+ }
22
+ export interface CapabilityEntry {
23
+ capabilityId: string;
24
+ capabilityKind: 'model';
25
+ doorwayId: string;
26
+ machineId: string;
27
+ probeOutcome: ProbeOutcome;
28
+ endpointRef: string;
29
+ observedAt: string;
30
+ receivedAt: string;
31
+ source: 'local-doorways';
32
+ sourceDetail: SourceDetail;
33
+ evidenceClass: (typeof EVIDENCE_CLASSES)[number];
34
+ evidence: CapabilityEvidence;
35
+ }
36
+ export interface CapabilityProjection {
37
+ schemaVersion: number;
38
+ machineId: string;
39
+ machineEpoch: number;
40
+ projectionSeq: number;
41
+ scanStampSecs: number;
42
+ scanState: ScanState;
43
+ truncated: boolean;
44
+ entries: CapabilityEntry[];
45
+ }
46
+ export declare function canonicalCapabilityId(doorwayId: unknown, modelId: unknown): string;
47
+ export declare function validateProjection(raw: unknown): CapabilityProjection;
48
+ export declare function canonicalDigest(projection: CapabilityProjection): string;
49
+ export declare function deriveStatus(entries: CapabilityEntry[], now?: number, opts?: {
50
+ localStaleAfterMs?: number;
51
+ remoteTtlCeilingMs?: number;
52
+ lastConfirmedAt?: number;
53
+ }): CapabilityStatus;
54
+ export declare function readDoorwaySources(projectDir: string, stateDir: string, now?: string, machineId?: string): {
55
+ entries: CapabilityEntry[];
56
+ scanState: ScanState;
57
+ scanStampSecs: number;
58
+ };
59
+ export declare class CapabilityRegistryWriter {
60
+ private readonly filePath;
61
+ private readonly machineId;
62
+ constructor(filePath: string, machineId: string);
63
+ write(input: Omit<CapabilityProjection, 'machineId'>): CapabilityProjection;
64
+ read(): CapabilityProjection | null;
65
+ }
66
+ //# sourceMappingURL=CapabilityRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapabilityRegistry.d.ts","sourceRoot":"","sources":["../../src/core/CapabilityRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,214 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import crypto from 'node:crypto';
4
+ import { readDoorwayRegistry, scanStatePath } from './DoorwayRegistryReader.js';
5
+ import { DegradationReporter } from '../monitoring/DegradationReporter.js';
6
+ export const CAPABILITY_REGISTRY_SCHEMA_VERSION = 1;
7
+ export const MAX_ENTRIES_PER_MACHINE = 200;
8
+ export const MAX_STRING_LENGTH = 256;
9
+ export const MAX_SCHEMA_VERSION = 999;
10
+ export const MAX_MACHINE_EPOCH = 9_999_999_999;
11
+ export const MAX_PROJECTION_SEQ = 9_999_999_999;
12
+ export const MAX_SCAN_STAMP_SECS = 9_999_999_999;
13
+ export const CAPABILITY_KINDS = ['model'];
14
+ export const PROBE_OUTCOMES = ['positive', 'negative', 'unknown'];
15
+ export const SCAN_STATES = ['observed', 'never-observed', 'source-unavailable'];
16
+ export const SOURCES = ['local-doorways'];
17
+ export const SOURCE_DETAILS = ['doorway-scan', 'doorway-manifest', 'pool-observation'];
18
+ export const EVIDENCE_CLASSES = ['cli-present', 'probe-answered', 'manifest-only'];
19
+ const int = (v, max, name) => {
20
+ if (!Number.isSafeInteger(v) || v < 0 || v > max)
21
+ throw new Error(`${name}-width`);
22
+ return v;
23
+ };
24
+ const str = (v, name) => {
25
+ if (typeof v !== 'string' || v.length === 0 || v.length > MAX_STRING_LENGTH)
26
+ throw new Error(`${name}-invalid`);
27
+ return v;
28
+ };
29
+ const iso = (v, name) => {
30
+ const s = str(v, name);
31
+ if (Number.isNaN(Date.parse(s)))
32
+ throw new Error(`${name}-timestamp`);
33
+ return s;
34
+ };
35
+ const oneOf = (v, values, name) => {
36
+ if (!values.includes(v))
37
+ throw new Error(`${name}-enum`);
38
+ return v;
39
+ };
40
+ export function canonicalCapabilityId(doorwayId, modelId) {
41
+ const d = str(doorwayId, 'doorwayId').toLowerCase();
42
+ const m = str(modelId, 'modelId').toLowerCase();
43
+ if (!/^[a-z0-9._-]+$/.test(d) || !/^[a-z0-9._-]+$/.test(m))
44
+ throw new Error('capability-id-invalid');
45
+ return `models:${d}/${m}`;
46
+ }
47
+ function validateEntry(raw, machineId) {
48
+ if (!raw || typeof raw !== 'object')
49
+ throw new Error('entry-invalid');
50
+ const r = raw;
51
+ if (r.machineId !== machineId)
52
+ throw new Error('origin-mismatch');
53
+ const capabilityId = str(r.capabilityId, 'capabilityId');
54
+ if (!/^models:[a-z0-9._-]+\/[a-z0-9._-]+$/.test(capabilityId))
55
+ throw new Error('capability-id-invalid');
56
+ const doorwayId = str(r.doorwayId, 'doorwayId').toLowerCase();
57
+ const endpointRef = str(r.endpointRef, 'endpointRef');
58
+ if (!new RegExp(`^mesh://${escapeRegExp(machineId)}/doorways$`).test(endpointRef))
59
+ throw new Error('endpoint-ref-invalid');
60
+ const evidence = r.evidence && typeof r.evidence === 'object' ? r.evidence : {};
61
+ if (Object.keys(evidence).some(k => !['doorwayScanAt', 'manifestVerifiedAt'].includes(k)))
62
+ throw new Error('evidence-keys');
63
+ return {
64
+ capabilityId, capabilityKind: oneOf(r.capabilityKind, CAPABILITY_KINDS, 'capabilityKind'), doorwayId,
65
+ machineId, probeOutcome: oneOf(r.probeOutcome, PROBE_OUTCOMES, 'probeOutcome'), endpointRef,
66
+ observedAt: iso(r.observedAt, 'observedAt'), receivedAt: iso(r.receivedAt, 'receivedAt'),
67
+ source: oneOf(r.source, SOURCES, 'source'), sourceDetail: oneOf(r.sourceDetail, SOURCE_DETAILS, 'sourceDetail'),
68
+ evidenceClass: oneOf(r.evidenceClass, EVIDENCE_CLASSES, 'evidenceClass'),
69
+ evidence: { ...(evidence.doorwayScanAt ? { doorwayScanAt: iso(evidence.doorwayScanAt, 'doorwayScanAt') } : {}), ...(evidence.manifestVerifiedAt ? { manifestVerifiedAt: iso(evidence.manifestVerifiedAt, 'manifestVerifiedAt') } : {}) },
70
+ };
71
+ }
72
+ export function validateProjection(raw) {
73
+ if (!raw || typeof raw !== 'object')
74
+ throw new Error('malformed');
75
+ const r = raw;
76
+ const machineId = str(r.machineId, 'machineId');
77
+ const schemaVersion = int(r.schemaVersion, MAX_SCHEMA_VERSION, 'schemaVersion');
78
+ if (schemaVersion > CAPABILITY_REGISTRY_SCHEMA_VERSION)
79
+ throw new Error('version-unsupported');
80
+ if (!Array.isArray(r.entries) || r.entries.length > MAX_ENTRIES_PER_MACHINE)
81
+ throw new Error('over-limit');
82
+ const p = {
83
+ schemaVersion, machineId, machineEpoch: int(r.machineEpoch, MAX_MACHINE_EPOCH, 'machineEpoch'),
84
+ projectionSeq: int(r.projectionSeq, MAX_PROJECTION_SEQ, 'projectionSeq'),
85
+ scanStampSecs: int(r.scanStampSecs, MAX_SCAN_STAMP_SECS, 'scanStampSecs'),
86
+ scanState: oneOf(r.scanState, SCAN_STATES, 'scanState'),
87
+ truncated: typeof r.truncated === 'boolean' ? r.truncated : (() => { throw new Error('truncated-invalid'); })(),
88
+ entries: r.entries.map(e => validateEntry(e, machineId)),
89
+ };
90
+ return p;
91
+ }
92
+ function escapeRegExp(s) { return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); }
93
+ function fact(e) { return { capabilityId: e.capabilityId, capabilityKind: e.capabilityKind, doorwayId: e.doorwayId, machineId: e.machineId, probeOutcome: e.probeOutcome, endpointRef: e.endpointRef, source: e.source, sourceDetail: e.sourceDetail, evidenceClass: e.evidenceClass }; }
94
+ export function canonicalDigest(projection) {
95
+ const entries = [...projection.entries].sort((a, b) => `${a.doorwayId}\0${a.capabilityId}\0${a.sourceDetail}`.localeCompare(`${b.doorwayId}\0${b.capabilityId}\0${b.sourceDetail}`));
96
+ const serialized = JSON.stringify(entries.map(fact));
97
+ const hash = crypto.createHash('sha256').update(serialized).digest('hex').slice(0, 16);
98
+ const state = SCAN_STATES.indexOf(projection.scanState);
99
+ const digest = `cap1:${projection.schemaVersion}:${projection.machineEpoch}:${projection.projectionSeq}:${projection.truncated ? 1 : 0}:${state}:${projection.scanStampSecs}:${hash}`;
100
+ if (Buffer.byteLength(digest) > 64)
101
+ throw new Error('digest-width');
102
+ return digest;
103
+ }
104
+ export function deriveStatus(entries, now = Date.now(), opts = {}) {
105
+ if (!entries.length)
106
+ return 'unknown';
107
+ const byOutcome = new Set(entries.map(e => e.probeOutcome));
108
+ if (byOutcome.size > 1)
109
+ return 'conflict';
110
+ if (entries.every(e => e.evidenceClass === 'manifest-only'))
111
+ return 'unknown';
112
+ if (entries.some(e => e.probeOutcome === 'unknown'))
113
+ return 'unknown';
114
+ const observedStale = entries.some(e => now - Date.parse(e.observedAt) > (opts.localStaleAfterMs ?? 86_400_000));
115
+ const transportStale = opts.lastConfirmedAt !== undefined && now - opts.lastConfirmedAt > (opts.remoteTtlCeilingMs ?? 600_000);
116
+ if (transportStale || observedStale)
117
+ return 'stale';
118
+ return entries[0].probeOutcome === 'positive' ? 'available' : 'unavailable';
119
+ }
120
+ export function readDoorwaySources(projectDir, stateDir, now = new Date().toISOString(), machineId = 'local') {
121
+ const scanPath = scanStatePath(stateDir);
122
+ const scanExists = fs.existsSync(scanPath);
123
+ let scanReadable = false;
124
+ if (scanExists) {
125
+ try {
126
+ JSON.parse(fs.readFileSync(scanPath, 'utf8'));
127
+ scanReadable = true;
128
+ }
129
+ catch (error) {
130
+ DegradationReporter.getInstance().report({ feature: 'CapabilityRegistry.scanState', primary: 'Readable doorway scan-state', fallback: 'Source-unavailable projection state', reason: `scan-state parse failed: ${error instanceof Error ? error.message : String(error)}`, impact: 'Local doorway freshness is unavailable until the next successful scan.' });
131
+ }
132
+ }
133
+ const result = readDoorwayRegistry({ projectDir, stateDir });
134
+ if (result.status !== 'ok')
135
+ throw new Error(`doorway-registry-${result.status}`);
136
+ const { body } = result;
137
+ const scanState = !scanReadable && scanExists ? 'source-unavailable' : body.scanState === 'scanned' ? 'observed' : 'never-observed';
138
+ const scanStampSecs = body.lastScanAt ? Math.floor(Date.parse(body.lastScanAt) / 1000) : 0;
139
+ const entries = [];
140
+ for (const door of body.doorways) {
141
+ const d = door.probeStatus === 'never-scanned' ? null : door;
142
+ for (const model of door.topModels) {
143
+ if (!model.id)
144
+ continue;
145
+ const doorwayId = door.doorId;
146
+ const scannedAt = d?.lastScannedAt ?? now;
147
+ const capabilityId = canonicalCapabilityId(doorwayId, model.id);
148
+ const common = { capabilityId, capabilityKind: 'model', doorwayId, machineId, endpointRef: `mesh://${machineId}/doorways`, receivedAt: now, source: 'local-doorways', evidence: { ...(d?.lastScannedAt ? { doorwayScanAt: d.lastScannedAt } : {}) } };
149
+ entries.push({ ...common, probeOutcome: 'positive', observedAt: model.verifiedAt ?? now, sourceDetail: 'doorway-manifest', evidenceClass: 'manifest-only' });
150
+ if (d)
151
+ entries.push({ ...common, probeOutcome: d.probeStatus === 'ok' ? 'positive' : ['not-installed', 'http-4xx'].includes(d.probeStatus) ? 'negative' : 'unknown', observedAt: scannedAt, sourceDetail: 'doorway-scan', evidenceClass: d.probeStatus === 'ok' ? 'probe-answered' : 'cli-present' });
152
+ }
153
+ }
154
+ return { entries, scanState, scanStampSecs };
155
+ }
156
+ export class CapabilityRegistryWriter {
157
+ filePath;
158
+ machineId;
159
+ constructor(filePath, machineId) {
160
+ this.filePath = filePath;
161
+ this.machineId = machineId;
162
+ }
163
+ write(input) {
164
+ const previous = this.read();
165
+ let epoch = input.machineEpoch;
166
+ let seq = input.projectionSeq;
167
+ if (previous) {
168
+ epoch = Math.max(epoch, previous.machineEpoch);
169
+ seq = previous.machineEpoch === epoch ? previous.projectionSeq + 1 : seq;
170
+ }
171
+ const scanStampSecs = input.scanStampSecs;
172
+ if (seq >= MAX_PROJECTION_SEQ) {
173
+ epoch = Math.max(Math.floor(Date.now() / 1000), epoch + 1);
174
+ seq = 0;
175
+ }
176
+ const sorted = [...input.entries].sort((a, b) => `${a.doorwayId}\0${a.capabilityId}\0${a.sourceDetail}`.localeCompare(`${b.doorwayId}\0${b.capabilityId}\0${b.sourceDetail}`));
177
+ let truncated = input.truncated;
178
+ if (sorted.length > MAX_ENTRIES_PER_MACHINE) {
179
+ const kept = [];
180
+ let i = 0;
181
+ while (i < sorted.length && kept.length < MAX_ENTRIES_PER_MACHINE) {
182
+ const id = sorted[i].capabilityId;
183
+ const group = sorted.filter(e => e.capabilityId === id);
184
+ if (kept.length + group.length > MAX_ENTRIES_PER_MACHINE)
185
+ break;
186
+ kept.push(...group);
187
+ i += group.length;
188
+ }
189
+ sorted.splice(0, sorted.length, ...kept);
190
+ truncated = true;
191
+ }
192
+ if (!previous)
193
+ epoch = Math.max(Math.floor(Date.now() / 1000), epoch);
194
+ const projection = validateProjection({ ...input, machineId: this.machineId, machineEpoch: epoch, projectionSeq: seq, scanStampSecs, truncated, entries: sorted });
195
+ const dir = path.dirname(this.filePath);
196
+ fs.mkdirSync(dir, { recursive: true });
197
+ const tmp = `${this.filePath}.tmp-${process.pid}`;
198
+ fs.writeFileSync(tmp, JSON.stringify(projection, null, 2));
199
+ fs.renameSync(tmp, this.filePath);
200
+ return projection;
201
+ }
202
+ read() {
203
+ if (!fs.existsSync(this.filePath))
204
+ return null;
205
+ try {
206
+ return validateProjection(JSON.parse(fs.readFileSync(this.filePath, 'utf8')));
207
+ }
208
+ catch (error) {
209
+ DegradationReporter.getInstance().report({ feature: 'CapabilityRegistry.projection', primary: 'Valid local capability projection', fallback: 'Fresh projection rebuild', reason: `projection read failed: ${error instanceof Error ? error.message : String(error)}`, impact: 'The registry will rebuild from current local doorway sources.' });
210
+ return null;
211
+ }
212
+ }
213
+ }
214
+ //# sourceMappingURL=CapabilityRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapabilityRegistry.js","sourceRoot":"","sources":["../../src/core/CapabilityRegistry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.955",
3
+ "version": "1.3.956",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-07-25T08:30:40.747Z",
5
- "instarVersion": "1.3.955",
4
+ "generatedAt": "2026-07-25T08:37:37.023Z",
5
+ "instarVersion": "1.3.956",
6
6
  "entryCount": 202,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -5,6 +5,10 @@
5
5
 
6
6
  ## What Changed
7
7
 
8
+ Added the dark, local-only capability-registry schema, validation funnel,
9
+ doorway/manifest and scan-state adapters, deterministic digest serializer,
10
+ status derivation, and atomic self-projection writer.
11
+
8
12
  The outbound tone gate's representation rules (B1–B14, B20–B21) now return an
9
13
  overridable **nudge** instead of a terminal block: the message comes back to the
10
14
  agent with the rule, a `decisionRef`, and both ways forward. The agent either
@@ -25,6 +29,9 @@ says so (`advisoryUnavailable`) rather than loosening for nothing.
25
29
 
26
30
  ## What to Tell Your User
27
31
 
32
+ This increment is intentionally unmounted: no route, peer traffic, mesh verb,
33
+ heartbeat emission, or routing consumer was added.
34
+
28
35
  ⚗️ **Experimental, and off unless you turn it on.** Most outbound checks become
29
36
  suggestions your agent can overrule — provided it writes down why, which is the
30
37
  whole point: those written reasons are what finally make it possible to measure
@@ -41,6 +48,10 @@ looser behaviour without the accountability that justifies it.
41
48
 
42
49
  ## Summary of New Capabilities
43
50
 
51
+ - Bounded v6 projection envelope with closed enums and width clamps.
52
+ - Real local doorway manifest and scan-state source adapters.
53
+ - Deterministic fact digest, conflict-aware status matrix, and atomic writer.
54
+
44
55
  - Representation rules resolve as overridable nudges carrying a `decisionRef`,
45
56
  with the override reason required and recorded.
46
57
  - Compliance is credited **server-side** when a revised message follows a nudge —
@@ -0,0 +1,7 @@
1
+ # Side-effects review: capability registry Increment 0
2
+
3
+ - Adds only a reusable core schema/reader/writer and unit fixtures.
4
+ - The durable file is unreferenced and local-only; no route or mesh surface is mounted.
5
+ - Remote ingest, heartbeat, freshness confirmation, and pool projection remain deferred.
6
+ - Review follow-up aligns scanStampSecs/scanState with the canonical doorway reader and keeps the writer local-only.
7
+ - Degradation reporting now makes corrupt local state explicit and recoverable.