instar 1.3.574 → 1.3.576
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/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +48 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/core/ws2SendWiring.d.ts +0 -6
- package/dist/core/ws2SendWiring.d.ts.map +1 -1
- package/dist/core/ws2SendWiring.js +2 -8
- package/dist/core/ws2SendWiring.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/1.3.575.md +44 -0
- package/upgrades/1.3.576.md +52 -0
- package/upgrades/side-effects/ws2-send-2b-topicoperator.md +45 -0
- package/upgrades/side-effects/ws2-send-2b-userregistry.md +48 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkCH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAkH7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAsBtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAg4CD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CA8eN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkCH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAkH7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAsBtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAg4CD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CA8eN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAswctE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
|
package/dist/commands/server.js
CHANGED
|
@@ -3546,6 +3546,32 @@ export async function startServer(options) {
|
|
|
3546
3546
|
log: (event, detail) => console.log(pc.dim(` [ws2-send] ${event} ${JSON.stringify(detail)}`)),
|
|
3547
3547
|
});
|
|
3548
3548
|
}
|
|
3549
|
+
// WS2.6 SEND-SIDE: userRegistry (a PII kind). Unlike the seamed memory stores,
|
|
3550
|
+
// there is NO single canonical UserManager — telegram (send-only + normal mode)
|
|
3551
|
+
// and slack each construct their OWN long-lived instance against the same
|
|
3552
|
+
// users.json. This shared attacher wires the journal-backed emitter to each so a
|
|
3553
|
+
// user written on ANY in-process path replicates (upsertUser→persistUsers fires
|
|
3554
|
+
// emitPut for every survivor; removeUser fires the channel-keyed emitDelete
|
|
3555
|
+
// tombstone). Channel-keyed identity — the local userId NEVER crosses the wire.
|
|
3556
|
+
// Dark by default ⇒ no-op. SECONDARY paths NOT covered by this in-process emitter
|
|
3557
|
+
// (documented in the side-effects review): the Slack org-permission admin route
|
|
3558
|
+
// (per-request UserManager in routes.ts, would need RouteContext plumbing) and
|
|
3559
|
+
// the `instar user add` CLI (a separate process — the snapshot reads the journal,
|
|
3560
|
+
// not users.json). REQ-M14: a replicated user record is NEVER authoritative for
|
|
3561
|
+
// inbound-principal resolution — the local channel index always wins.
|
|
3562
|
+
const _userReplStores = replicatedRecordEmitter
|
|
3563
|
+
? await import('../core/UserRegistryReplicatedStore.js')
|
|
3564
|
+
: null;
|
|
3565
|
+
const attachUserReplication = (um) => {
|
|
3566
|
+
if (!replicatedRecordEmitter || !_userReplStores)
|
|
3567
|
+
return;
|
|
3568
|
+
const emitter = replicatedRecordEmitter;
|
|
3569
|
+
const { USER_STORE_KEY, deriveUserRecordKey, buildUserRecordData, buildUserTombstoneData } = _userReplStores;
|
|
3570
|
+
um.setUserReplicationEmitter({
|
|
3571
|
+
emitPut: (rec) => emitter.emit(USER_STORE_KEY, deriveUserRecordKey(rec.channels), (hlc, origin, observed) => buildUserRecordData({ record: rec, hlc, origin, observed })),
|
|
3572
|
+
emitDelete: (channels, deletedAt) => emitter.emit(USER_STORE_KEY, deriveUserRecordKey(channels), (hlc, origin, observed) => buildUserTombstoneData({ channels, hlc, origin, deletedAt, observed })),
|
|
3573
|
+
});
|
|
3574
|
+
};
|
|
3549
3575
|
const selfStateSyncReceive = () => {
|
|
3550
3576
|
const out = {};
|
|
3551
3577
|
const stores = _stateSyncStoresResolved;
|
|
@@ -4940,6 +4966,7 @@ export async function startServer(options) {
|
|
|
4940
4966
|
// "--no-telegram (registry-only) injection" branch and slash-commands
|
|
4941
4967
|
// reached the AI session as plain chat text.
|
|
4942
4968
|
const userManagerSendOnly = new UserManager(config.stateDir, config.users);
|
|
4969
|
+
attachUserReplication(userManagerSendOnly); // WS2.6 send-side (dark by default)
|
|
4943
4970
|
_fixDeps = { state, liveConfig, sessionManager, telegram, config };
|
|
4944
4971
|
wireTelegramRouting(telegram, sessionManager, quotaTracker, topicMemory, userManagerSendOnly, (topicId, text) => handleFixCommand(topicId, text, _fixDeps), () => (collaborationSurfacer && conversationStore && telegram) ? { collaborationSurfacer, conversationStore, commitmentTracker, telegram, brief: briefDeps } : null, () => _agentServerRef?.getTopicOperatorStore() ?? null, () => state.get('agent-attention-topic'));
|
|
4945
4972
|
wireTelegramCallbacks(telegram, sessionManager, state, quotaTracker, undefined, config.sessions.claudePath, topicMemory);
|
|
@@ -5057,6 +5084,7 @@ export async function startServer(options) {
|
|
|
5057
5084
|
// "Account switcher + quota collector pipeline" section above.
|
|
5058
5085
|
// Initialize persistent UserManager for user identity resolution (Gap 8)
|
|
5059
5086
|
const userManager = new UserManager(config.stateDir, config.users);
|
|
5087
|
+
attachUserReplication(userManager); // WS2.6 send-side (dark by default)
|
|
5060
5088
|
// Fix command dependencies — populated later when subsystems initialize.
|
|
5061
5089
|
// Uses a mutable ref so wireTelegramRouting can capture it in a closure now.
|
|
5062
5090
|
_fixDeps = {
|
|
@@ -5479,6 +5507,7 @@ export async function startServer(options) {
|
|
|
5479
5507
|
// Own UserManager instance for verified-principal resolution (the
|
|
5480
5508
|
// Telegram-block userManager is out of scope here). Reads users.json.
|
|
5481
5509
|
const slackUserManager = new UserManager(config.stateDir, config.users);
|
|
5510
|
+
attachUserReplication(slackUserManager); // WS2.6 send-side (dark by default)
|
|
5482
5511
|
// ── Floor-action grants are read from the SIGNED Coordination Mandate ──
|
|
5483
5512
|
// A MandateStore reader over the SAME file + SAME HMAC sign/verify deps as
|
|
5484
5513
|
// the coordination engine in AgentServer (which is constructed later, so we
|
|
@@ -15912,6 +15941,25 @@ export async function startServer(options) {
|
|
|
15912
15941
|
// wired before the server existed; from here on inbound binds use the
|
|
15913
15942
|
// server's own store instance.
|
|
15914
15943
|
_agentServerRef = server;
|
|
15944
|
+
// ── WS2.6 SEND-SIDE: topicOperator (the THIRD PII kind) ──────────────
|
|
15945
|
+
// The AUTHORITATIVE topic-operator writer is the AgentServer's OWN
|
|
15946
|
+
// TopicOperatorStore (it constructs `this.topicOperatorStore` internally and
|
|
15947
|
+
// binds it from the authenticated sender via setOperator). server.ts has no
|
|
15948
|
+
// canonical instance of its own, so we attach the journal-backed emitter to the
|
|
15949
|
+
// server's store here, right after the AgentServer exists. setOperator already
|
|
15950
|
+
// fires emitPut on every real bind/rebind. PUT-ONLY BY CONSTRUCTION — a topic
|
|
15951
|
+
// rebinds, never unbinds, so there is NO emitDelete path (the receive side
|
|
15952
|
+
// resolves the latest binding by HLC). Dark by default
|
|
15953
|
+
// (multiMachine.stateSync.topicOperator); off ⇒ no-op. A content name can never
|
|
15954
|
+
// become an operator — only the platform-verified uid is emitted (Know Your
|
|
15955
|
+
// Principal); a replicated record is NEVER authoritative for inbound resolution.
|
|
15956
|
+
if (replicatedRecordEmitter) {
|
|
15957
|
+
const _topicOpEmitter = replicatedRecordEmitter;
|
|
15958
|
+
const { TOPIC_OPERATOR_STORE_KEY, deriveTopicOperatorRecordKey, buildTopicOperatorRecordData } = await import('../core/TopicOperatorReplicatedStore.js');
|
|
15959
|
+
server.getTopicOperatorStore()?.setOperatorReplicationEmitter({
|
|
15960
|
+
emitPut: (topicId, record) => _topicOpEmitter.emit(TOPIC_OPERATOR_STORE_KEY, deriveTopicOperatorRecordKey(topicId, record.uid), (hlc, origin, observed) => buildTopicOperatorRecordData({ topicId, record, hlc, origin, observed })),
|
|
15961
|
+
});
|
|
15962
|
+
}
|
|
15915
15963
|
// ── WS5.3 (escalation-rides-topic) destination re-admit driver ──
|
|
15916
15964
|
// Bound here (after the AgentServer exists) so it can reach the SAME
|
|
15917
15965
|
// ModelSwapService the /sessions/:name/model-swap route uses. Re-admission
|