@silicaclaw/cli 2026.3.20-18 → 2026.3.20-19

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/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## v1.0 beta - 2026-03-20
4
4
 
5
+ ### 2026.3.20-19
6
+
7
+ - release build:
8
+ - prepared another fresh latest-channel package build without publishing
9
+ - regenerated the npm tarball through the verified release packing workflow
10
+
5
11
  ### 2026.3.20-18
6
12
 
7
13
  - release build:
package/VERSION CHANGED
@@ -1 +1 @@
1
- v2026.3.20-18
1
+ v2026.3.20-19
@@ -1,5 +1,5 @@
1
1
  import { AgentIdentity, DirectoryState, ProfileInput, PublicProfile, PublicProfileSummary, SocialConfig, SocialMessageRecord, SocialRuntimeConfig } from "@silicaclaw/core";
2
- import { SocialMessageGovernanceConfig } from "@silicaclaw/storage";
2
+ import { PrivateMessagingRuntimeState, SocialMessageGovernanceConfig } from "@silicaclaw/storage";
3
3
  type InitState = {
4
4
  identity_auto_created: boolean;
5
5
  profile_auto_created: boolean;
@@ -170,6 +170,7 @@ export declare class LocalNodeService {
170
170
  private privateMessageRepo;
171
171
  private privateMessageReceiptRepo;
172
172
  private privateEncryptionKeyRepo;
173
+ private privateMessagingRuntimeRepo;
173
174
  private socialRuntimeRepo;
174
175
  private identity;
175
176
  private profile;
@@ -179,6 +180,7 @@ export declare class LocalNodeService {
179
180
  private privateMessages;
180
181
  private privateMessageReceipts;
181
182
  private privateEncryptionKeyPair;
183
+ private privateMessagingRuntime;
182
184
  private privatePeerRoutes;
183
185
  private privatePeerEncryptionKeys;
184
186
  private privateMessageBodyCache;
@@ -647,6 +649,7 @@ export declare class LocalNodeService {
647
649
  encryption_public_key: string;
648
650
  conversation_count: number;
649
651
  message_count: number;
652
+ runtime: PrivateMessagingRuntimeState | null;
650
653
  };
651
654
  getPrivateConversations(): Array<{
652
655
  conversation_id: string;
@@ -860,6 +863,8 @@ export declare class LocalNodeService {
860
863
  private toPublicProfileSummary;
861
864
  private mergeMessageOnlyAgentSummaries;
862
865
  private fingerprintPublicKey;
866
+ private buildPrivateMessagingRuntimeState;
867
+ private refreshPrivateMessagingRuntime;
863
868
  private getOnboardingSummary;
864
869
  private getDefaultDisplayName;
865
870
  private getModeExplainer;
@@ -776,6 +776,7 @@ class LocalNodeService {
776
776
  privateMessageRepo;
777
777
  privateMessageReceiptRepo;
778
778
  privateEncryptionKeyRepo;
779
+ privateMessagingRuntimeRepo;
779
780
  socialRuntimeRepo;
780
781
  identity = null;
781
782
  profile = null;
@@ -785,6 +786,7 @@ class LocalNodeService {
785
786
  privateMessages = [];
786
787
  privateMessageReceipts = [];
787
788
  privateEncryptionKeyPair = null;
789
+ privateMessagingRuntime = null;
788
790
  privatePeerRoutes = {};
789
791
  privatePeerEncryptionKeys = {};
790
792
  privateMessageBodyCache = new Map();
@@ -863,6 +865,7 @@ class LocalNodeService {
863
865
  this.privateMessageRepo = new storage_1.PrivateMessageRepo(this.storageRoot);
864
866
  this.privateMessageReceiptRepo = new storage_1.PrivateMessageReceiptRepo(this.storageRoot);
865
867
  this.privateEncryptionKeyRepo = new storage_1.PrivateEncryptionKeyRepo(this.storageRoot);
868
+ this.privateMessagingRuntimeRepo = new storage_1.PrivateMessagingRuntimeRepo(this.storageRoot);
866
869
  this.socialRuntimeRepo = new storage_1.SocialRuntimeRepo(this.storageRoot);
867
870
  this.messageGovernance = this.defaultMessageGovernance();
868
871
  let loadedSocial = (0, core_1.loadSocialConfig)(this.projectRoot);
@@ -1624,6 +1627,7 @@ class LocalNodeService {
1624
1627
  encryption_public_key: this.privateEncryptionKeyPair?.public_key || "",
1625
1628
  conversation_count: this.getPrivateConversations().length,
1626
1629
  message_count: this.privateMessages.length,
1630
+ runtime: this.privateMessagingRuntime,
1627
1631
  };
1628
1632
  }
1629
1633
  getPrivateConversations() {
@@ -1721,6 +1725,7 @@ class LocalNodeService {
1721
1725
  if (toPeerId && typeof this.network.sendDirect === "function") {
1722
1726
  try {
1723
1727
  await this.network.sendDirect(toPeerId, PRIVATE_MESSAGE_TOPIC, message);
1728
+ await this.publish(PRIVATE_MESSAGE_TOPIC, message);
1724
1729
  reason = "direct-sent";
1725
1730
  }
1726
1731
  catch {
@@ -2353,6 +2358,7 @@ class LocalNodeService {
2353
2358
  this.hydratePrivateMessageBodyCache(storedPrivateMessages);
2354
2359
  this.privateMessages = this.normalizePrivateMessages(storedPrivateMessages);
2355
2360
  this.privateMessageReceipts = this.normalizePrivateMessageReceipts(await this.privateMessageReceiptRepo.get());
2361
+ await this.refreshPrivateMessagingRuntime();
2356
2362
  this.directory = (0, core_1.ingestProfileRecord)(this.directory, { type: "profile", profile: this.profile });
2357
2363
  this.compactCacheInMemory();
2358
2364
  await this.persistCache();
@@ -3020,6 +3026,45 @@ class LocalNodeService {
3020
3026
  const digest = (0, crypto_1.createHash)("sha256").update(publicKey, "utf8").digest("hex");
3021
3027
  return `${digest.slice(0, 12)}:${digest.slice(-8)}`;
3022
3028
  }
3029
+ buildPrivateMessagingRuntimeState() {
3030
+ const warnings = [];
3031
+ const keypair = this.privateEncryptionKeyPair;
3032
+ const selfSentMessages = this.privateMessages.filter((message) => message.from_agent_id === this.identity?.agent_id);
3033
+ let cachedPlaintextCount = 0;
3034
+ for (const message of selfSentMessages) {
3035
+ if (this.privateMessageBodyCache.get(message.message_id)) {
3036
+ cachedPlaintextCount += 1;
3037
+ }
3038
+ }
3039
+ if (!keypair?.public_key || !keypair?.private_key) {
3040
+ warnings.push("missing_private_encryption_keypair");
3041
+ }
3042
+ if (selfSentMessages.length > 0 && cachedPlaintextCount === 0) {
3043
+ warnings.push("missing_local_plaintext_cache_for_self_messages");
3044
+ }
3045
+ if (selfSentMessages.length > 0 && cachedPlaintextCount < selfSentMessages.length) {
3046
+ warnings.push("partial_local_plaintext_cache_for_self_messages");
3047
+ }
3048
+ return {
3049
+ schema_version: 1,
3050
+ app_version: this.appVersion,
3051
+ last_started_at: Date.now(),
3052
+ encryption_public_key: keypair?.public_key || "",
3053
+ encryption_public_key_fingerprint: keypair?.public_key ? this.fingerprintPublicKey(keypair.public_key) : "",
3054
+ message_count: this.privateMessages.length,
3055
+ self_sent_count: selfSentMessages.length,
3056
+ cached_plaintext_count: cachedPlaintextCount,
3057
+ warnings,
3058
+ };
3059
+ }
3060
+ async refreshPrivateMessagingRuntime() {
3061
+ const runtime = this.buildPrivateMessagingRuntimeState();
3062
+ this.privateMessagingRuntime = runtime;
3063
+ await this.privateMessagingRuntimeRepo.set(runtime);
3064
+ for (const warning of runtime.warnings) {
3065
+ await this.log("warn", `Private messaging startup check: ${warning}`);
3066
+ }
3067
+ }
3023
3068
  getOnboardingSummary() {
3024
3069
  const summary = this.getIntegrationSummary();
3025
3070
  const publicEnabled = Boolean(this.profile?.public_enabled);
@@ -3327,6 +3372,7 @@ class LocalNodeService {
3327
3372
  this.ingestPrivateMessageReceipt(receipt);
3328
3373
  try {
3329
3374
  await this.network.sendDirect(replyPeerId, PRIVATE_MESSAGE_RECEIPT_TOPIC, receipt);
3375
+ await this.publish(PRIVATE_MESSAGE_RECEIPT_TOPIC, receipt);
3330
3376
  }
3331
3377
  catch {
3332
3378
  await this.publish(PRIVATE_MESSAGE_RECEIPT_TOPIC, receipt);
@@ -40,6 +40,17 @@ export type SocialMessageGovernanceConfig = {
40
40
  export type PrivateMessageDecryptedContent = {
41
41
  body: string;
42
42
  };
43
+ export type PrivateMessagingRuntimeState = {
44
+ schema_version: number;
45
+ app_version: string;
46
+ last_started_at: number;
47
+ encryption_public_key: string;
48
+ encryption_public_key_fingerprint: string;
49
+ message_count: number;
50
+ self_sent_count: number;
51
+ cached_plaintext_count: number;
52
+ warnings: string[];
53
+ };
43
54
  export declare class IdentityRepo extends JsonFileRepo<AgentIdentity | null> {
44
55
  constructor(rootDir?: string);
45
56
  }
@@ -71,3 +82,6 @@ export declare class PrivateMessageReceiptRepo extends JsonFileRepo<PrivateMessa
71
82
  export declare class PrivateEncryptionKeyRepo extends JsonFileRepo<PrivateEncryptionKeyPair | null> {
72
83
  constructor(rootDir?: string);
73
84
  }
85
+ export declare class PrivateMessagingRuntimeRepo extends JsonFileRepo<PrivateMessagingRuntimeState> {
86
+ constructor(rootDir?: string);
87
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PrivateEncryptionKeyRepo = exports.PrivateMessageReceiptRepo = exports.PrivateMessageRepo = exports.SocialMessageGovernanceRepo = exports.SocialMessageObservationRepo = exports.SocialMessageRepo = exports.LogRepo = exports.CacheRepo = exports.ProfileRepo = exports.IdentityRepo = void 0;
3
+ exports.PrivateMessagingRuntimeRepo = exports.PrivateEncryptionKeyRepo = exports.PrivateMessageReceiptRepo = exports.PrivateMessageRepo = exports.SocialMessageGovernanceRepo = exports.SocialMessageObservationRepo = exports.SocialMessageRepo = exports.LogRepo = exports.CacheRepo = exports.ProfileRepo = exports.IdentityRepo = void 0;
4
4
  const path_1 = require("path");
5
5
  const core_1 = require("@silicaclaw/core");
6
6
  const jsonRepo_1 = require("./jsonRepo");
@@ -83,3 +83,19 @@ class PrivateEncryptionKeyRepo extends jsonRepo_1.JsonFileRepo {
83
83
  }
84
84
  }
85
85
  exports.PrivateEncryptionKeyRepo = PrivateEncryptionKeyRepo;
86
+ class PrivateMessagingRuntimeRepo extends jsonRepo_1.JsonFileRepo {
87
+ constructor(rootDir = process.cwd()) {
88
+ super((0, path_1.resolve)(rootDir, ".silicaclaw", "private-messaging.runtime.json"), () => ({
89
+ schema_version: 1,
90
+ app_version: "",
91
+ last_started_at: 0,
92
+ encryption_public_key: "",
93
+ encryption_public_key_fingerprint: "",
94
+ message_count: 0,
95
+ self_sent_count: 0,
96
+ cached_plaintext_count: 0,
97
+ warnings: [],
98
+ }));
99
+ }
100
+ }
101
+ exports.PrivateMessagingRuntimeRepo = PrivateMessagingRuntimeRepo;
@@ -72,6 +72,8 @@ import {
72
72
  IdentityRepo,
73
73
  LogRepo,
74
74
  PrivateEncryptionKeyRepo,
75
+ PrivateMessagingRuntimeRepo,
76
+ PrivateMessagingRuntimeState,
75
77
  PrivateMessageReceiptRepo,
76
78
  PrivateMessageRepo,
77
79
  ProfileRepo,
@@ -1039,6 +1041,7 @@ export class LocalNodeService {
1039
1041
  private privateMessageRepo: PrivateMessageRepo;
1040
1042
  private privateMessageReceiptRepo: PrivateMessageReceiptRepo;
1041
1043
  private privateEncryptionKeyRepo: PrivateEncryptionKeyRepo;
1044
+ private privateMessagingRuntimeRepo: PrivateMessagingRuntimeRepo;
1042
1045
  private socialRuntimeRepo: SocialRuntimeRepo;
1043
1046
 
1044
1047
  private identity: AgentIdentity | null = null;
@@ -1049,6 +1052,7 @@ export class LocalNodeService {
1049
1052
  private privateMessages: PrivateMessageRecord[] = [];
1050
1053
  private privateMessageReceipts: PrivateMessageReceiptRecord[] = [];
1051
1054
  private privateEncryptionKeyPair: PrivateEncryptionKeyPair | null = null;
1055
+ private privateMessagingRuntime: PrivateMessagingRuntimeState | null = null;
1052
1056
  private privatePeerRoutes: Record<string, string> = {};
1053
1057
  private privatePeerEncryptionKeys: Record<string, string> = {};
1054
1058
  private privateMessageBodyCache = new Map<string, string>();
@@ -1134,6 +1138,7 @@ export class LocalNodeService {
1134
1138
  this.privateMessageRepo = new PrivateMessageRepo(this.storageRoot);
1135
1139
  this.privateMessageReceiptRepo = new PrivateMessageReceiptRepo(this.storageRoot);
1136
1140
  this.privateEncryptionKeyRepo = new PrivateEncryptionKeyRepo(this.storageRoot);
1141
+ this.privateMessagingRuntimeRepo = new PrivateMessagingRuntimeRepo(this.storageRoot);
1137
1142
  this.socialRuntimeRepo = new SocialRuntimeRepo(this.storageRoot);
1138
1143
  this.messageGovernance = this.defaultMessageGovernance();
1139
1144
 
@@ -1960,6 +1965,7 @@ export class LocalNodeService {
1960
1965
  encryption_public_key: this.privateEncryptionKeyPair?.public_key || "",
1961
1966
  conversation_count: this.getPrivateConversations().length,
1962
1967
  message_count: this.privateMessages.length,
1968
+ runtime: this.privateMessagingRuntime,
1963
1969
  };
1964
1970
  }
1965
1971
 
@@ -2083,6 +2089,7 @@ export class LocalNodeService {
2083
2089
  if (toPeerId && typeof this.network.sendDirect === "function") {
2084
2090
  try {
2085
2091
  await this.network.sendDirect(toPeerId, PRIVATE_MESSAGE_TOPIC, message);
2092
+ await this.publish(PRIVATE_MESSAGE_TOPIC, message);
2086
2093
  reason = "direct-sent";
2087
2094
  } catch {
2088
2095
  await this.publish(PRIVATE_MESSAGE_TOPIC, message);
@@ -2775,6 +2782,7 @@ export class LocalNodeService {
2775
2782
  this.hydratePrivateMessageBodyCache(storedPrivateMessages);
2776
2783
  this.privateMessages = this.normalizePrivateMessages(storedPrivateMessages);
2777
2784
  this.privateMessageReceipts = this.normalizePrivateMessageReceipts(await this.privateMessageReceiptRepo.get());
2785
+ await this.refreshPrivateMessagingRuntime();
2778
2786
  this.directory = ingestProfileRecord(this.directory, { type: "profile", profile: this.profile });
2779
2787
  this.compactCacheInMemory();
2780
2788
  await this.persistCache();
@@ -3534,6 +3542,47 @@ export class LocalNodeService {
3534
3542
  return `${digest.slice(0, 12)}:${digest.slice(-8)}`;
3535
3543
  }
3536
3544
 
3545
+ private buildPrivateMessagingRuntimeState(): PrivateMessagingRuntimeState {
3546
+ const warnings: string[] = [];
3547
+ const keypair = this.privateEncryptionKeyPair;
3548
+ const selfSentMessages = this.privateMessages.filter((message) => message.from_agent_id === this.identity?.agent_id);
3549
+ let cachedPlaintextCount = 0;
3550
+ for (const message of selfSentMessages) {
3551
+ if (this.privateMessageBodyCache.get(message.message_id)) {
3552
+ cachedPlaintextCount += 1;
3553
+ }
3554
+ }
3555
+ if (!keypair?.public_key || !keypair?.private_key) {
3556
+ warnings.push("missing_private_encryption_keypair");
3557
+ }
3558
+ if (selfSentMessages.length > 0 && cachedPlaintextCount === 0) {
3559
+ warnings.push("missing_local_plaintext_cache_for_self_messages");
3560
+ }
3561
+ if (selfSentMessages.length > 0 && cachedPlaintextCount < selfSentMessages.length) {
3562
+ warnings.push("partial_local_plaintext_cache_for_self_messages");
3563
+ }
3564
+ return {
3565
+ schema_version: 1,
3566
+ app_version: this.appVersion,
3567
+ last_started_at: Date.now(),
3568
+ encryption_public_key: keypair?.public_key || "",
3569
+ encryption_public_key_fingerprint: keypair?.public_key ? this.fingerprintPublicKey(keypair.public_key) : "",
3570
+ message_count: this.privateMessages.length,
3571
+ self_sent_count: selfSentMessages.length,
3572
+ cached_plaintext_count: cachedPlaintextCount,
3573
+ warnings,
3574
+ };
3575
+ }
3576
+
3577
+ private async refreshPrivateMessagingRuntime(): Promise<void> {
3578
+ const runtime = this.buildPrivateMessagingRuntimeState();
3579
+ this.privateMessagingRuntime = runtime;
3580
+ await this.privateMessagingRuntimeRepo.set(runtime);
3581
+ for (const warning of runtime.warnings) {
3582
+ await this.log("warn", `Private messaging startup check: ${warning}`);
3583
+ }
3584
+ }
3585
+
3537
3586
  private getOnboardingSummary() {
3538
3587
  const summary = this.getIntegrationSummary();
3539
3588
  const publicEnabled = Boolean(this.profile?.public_enabled);
@@ -3875,6 +3924,7 @@ export class LocalNodeService {
3875
3924
  this.ingestPrivateMessageReceipt(receipt);
3876
3925
  try {
3877
3926
  await this.network.sendDirect(replyPeerId, PRIVATE_MESSAGE_RECEIPT_TOPIC, receipt);
3927
+ await this.publish(PRIVATE_MESSAGE_RECEIPT_TOPIC, receipt);
3878
3928
  } catch {
3879
3929
  await this.publish(PRIVATE_MESSAGE_RECEIPT_TOPIC, receipt);
3880
3930
  }
@@ -40,6 +40,17 @@ export type SocialMessageGovernanceConfig = {
40
40
  export type PrivateMessageDecryptedContent = {
41
41
  body: string;
42
42
  };
43
+ export type PrivateMessagingRuntimeState = {
44
+ schema_version: number;
45
+ app_version: string;
46
+ last_started_at: number;
47
+ encryption_public_key: string;
48
+ encryption_public_key_fingerprint: string;
49
+ message_count: number;
50
+ self_sent_count: number;
51
+ cached_plaintext_count: number;
52
+ warnings: string[];
53
+ };
43
54
  export declare class IdentityRepo extends JsonFileRepo<AgentIdentity | null> {
44
55
  constructor(rootDir?: string);
45
56
  }
@@ -71,3 +82,6 @@ export declare class PrivateMessageReceiptRepo extends JsonFileRepo<PrivateMessa
71
82
  export declare class PrivateEncryptionKeyRepo extends JsonFileRepo<PrivateEncryptionKeyPair | null> {
72
83
  constructor(rootDir?: string);
73
84
  }
85
+ export declare class PrivateMessagingRuntimeRepo extends JsonFileRepo<PrivateMessagingRuntimeState> {
86
+ constructor(rootDir?: string);
87
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PrivateEncryptionKeyRepo = exports.PrivateMessageReceiptRepo = exports.PrivateMessageRepo = exports.SocialMessageGovernanceRepo = exports.SocialMessageObservationRepo = exports.SocialMessageRepo = exports.LogRepo = exports.CacheRepo = exports.ProfileRepo = exports.IdentityRepo = void 0;
3
+ exports.PrivateMessagingRuntimeRepo = exports.PrivateEncryptionKeyRepo = exports.PrivateMessageReceiptRepo = exports.PrivateMessageRepo = exports.SocialMessageGovernanceRepo = exports.SocialMessageObservationRepo = exports.SocialMessageRepo = exports.LogRepo = exports.CacheRepo = exports.ProfileRepo = exports.IdentityRepo = void 0;
4
4
  const path_1 = require("path");
5
5
  const core_1 = require("@silicaclaw/core");
6
6
  const jsonRepo_1 = require("./jsonRepo");
@@ -83,3 +83,19 @@ class PrivateEncryptionKeyRepo extends jsonRepo_1.JsonFileRepo {
83
83
  }
84
84
  }
85
85
  exports.PrivateEncryptionKeyRepo = PrivateEncryptionKeyRepo;
86
+ class PrivateMessagingRuntimeRepo extends jsonRepo_1.JsonFileRepo {
87
+ constructor(rootDir = process.cwd()) {
88
+ super((0, path_1.resolve)(rootDir, ".silicaclaw", "private-messaging.runtime.json"), () => ({
89
+ schema_version: 1,
90
+ app_version: "",
91
+ last_started_at: 0,
92
+ encryption_public_key: "",
93
+ encryption_public_key_fingerprint: "",
94
+ message_count: 0,
95
+ self_sent_count: 0,
96
+ cached_plaintext_count: 0,
97
+ warnings: [],
98
+ }));
99
+ }
100
+ }
101
+ exports.PrivateMessagingRuntimeRepo = PrivateMessagingRuntimeRepo;
@@ -55,6 +55,18 @@ export type PrivateMessageDecryptedContent = {
55
55
  body: string;
56
56
  };
57
57
 
58
+ export type PrivateMessagingRuntimeState = {
59
+ schema_version: number;
60
+ app_version: string;
61
+ last_started_at: number;
62
+ encryption_public_key: string;
63
+ encryption_public_key_fingerprint: string;
64
+ message_count: number;
65
+ self_sent_count: number;
66
+ cached_plaintext_count: number;
67
+ warnings: string[];
68
+ };
69
+
58
70
  export class IdentityRepo extends JsonFileRepo<AgentIdentity | null> {
59
71
  constructor(rootDir = process.cwd()) {
60
72
  super(resolve(rootDir, "data", "identity.json"), () => null);
@@ -134,3 +146,19 @@ export class PrivateEncryptionKeyRepo extends JsonFileRepo<PrivateEncryptionKeyP
134
146
  super(resolve(rootDir, "data", "private-encryption-keypair.json"), () => null);
135
147
  }
136
148
  }
149
+
150
+ export class PrivateMessagingRuntimeRepo extends JsonFileRepo<PrivateMessagingRuntimeState> {
151
+ constructor(rootDir = process.cwd()) {
152
+ super(resolve(rootDir, ".silicaclaw", "private-messaging.runtime.json"), () => ({
153
+ schema_version: 1,
154
+ app_version: "",
155
+ last_started_at: 0,
156
+ encryption_public_key: "",
157
+ encryption_public_key_fingerprint: "",
158
+ message_count: 0,
159
+ self_sent_count: 0,
160
+ cached_plaintext_count: 0,
161
+ warnings: [],
162
+ }));
163
+ }
164
+ }
@@ -1 +1 @@
1
- 2026.3.20-beta.18
1
+ 2026.3.20-beta.19
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silicaclaw-broadcast",
3
- "version": "2026.3.20-beta.18",
3
+ "version": "2026.3.20-beta.19",
4
4
  "display_name": "SilicaClaw Broadcast",
5
5
  "description": "Official OpenClaw skill for a bounded local SilicaClaw broadcast workflow: read public broadcasts, publish public broadcasts, and optionally forward owner-relevant summaries through OpenClaw's native channel.",
6
6
  "entrypoints": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silicaclaw/cli",
3
- "version": "2026.3.20-18",
3
+ "version": "2026.3.20-19",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -40,6 +40,17 @@ export type SocialMessageGovernanceConfig = {
40
40
  export type PrivateMessageDecryptedContent = {
41
41
  body: string;
42
42
  };
43
+ export type PrivateMessagingRuntimeState = {
44
+ schema_version: number;
45
+ app_version: string;
46
+ last_started_at: number;
47
+ encryption_public_key: string;
48
+ encryption_public_key_fingerprint: string;
49
+ message_count: number;
50
+ self_sent_count: number;
51
+ cached_plaintext_count: number;
52
+ warnings: string[];
53
+ };
43
54
  export declare class IdentityRepo extends JsonFileRepo<AgentIdentity | null> {
44
55
  constructor(rootDir?: string);
45
56
  }
@@ -71,3 +82,6 @@ export declare class PrivateMessageReceiptRepo extends JsonFileRepo<PrivateMessa
71
82
  export declare class PrivateEncryptionKeyRepo extends JsonFileRepo<PrivateEncryptionKeyPair | null> {
72
83
  constructor(rootDir?: string);
73
84
  }
85
+ export declare class PrivateMessagingRuntimeRepo extends JsonFileRepo<PrivateMessagingRuntimeState> {
86
+ constructor(rootDir?: string);
87
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PrivateEncryptionKeyRepo = exports.PrivateMessageReceiptRepo = exports.PrivateMessageRepo = exports.SocialMessageGovernanceRepo = exports.SocialMessageObservationRepo = exports.SocialMessageRepo = exports.LogRepo = exports.CacheRepo = exports.ProfileRepo = exports.IdentityRepo = void 0;
3
+ exports.PrivateMessagingRuntimeRepo = exports.PrivateEncryptionKeyRepo = exports.PrivateMessageReceiptRepo = exports.PrivateMessageRepo = exports.SocialMessageGovernanceRepo = exports.SocialMessageObservationRepo = exports.SocialMessageRepo = exports.LogRepo = exports.CacheRepo = exports.ProfileRepo = exports.IdentityRepo = void 0;
4
4
  const path_1 = require("path");
5
5
  const core_1 = require("@silicaclaw/core");
6
6
  const jsonRepo_1 = require("./jsonRepo");
@@ -83,3 +83,19 @@ class PrivateEncryptionKeyRepo extends jsonRepo_1.JsonFileRepo {
83
83
  }
84
84
  }
85
85
  exports.PrivateEncryptionKeyRepo = PrivateEncryptionKeyRepo;
86
+ class PrivateMessagingRuntimeRepo extends jsonRepo_1.JsonFileRepo {
87
+ constructor(rootDir = process.cwd()) {
88
+ super((0, path_1.resolve)(rootDir, ".silicaclaw", "private-messaging.runtime.json"), () => ({
89
+ schema_version: 1,
90
+ app_version: "",
91
+ last_started_at: 0,
92
+ encryption_public_key: "",
93
+ encryption_public_key_fingerprint: "",
94
+ message_count: 0,
95
+ self_sent_count: 0,
96
+ cached_plaintext_count: 0,
97
+ warnings: [],
98
+ }));
99
+ }
100
+ }
101
+ exports.PrivateMessagingRuntimeRepo = PrivateMessagingRuntimeRepo;
@@ -55,6 +55,18 @@ export type PrivateMessageDecryptedContent = {
55
55
  body: string;
56
56
  };
57
57
 
58
+ export type PrivateMessagingRuntimeState = {
59
+ schema_version: number;
60
+ app_version: string;
61
+ last_started_at: number;
62
+ encryption_public_key: string;
63
+ encryption_public_key_fingerprint: string;
64
+ message_count: number;
65
+ self_sent_count: number;
66
+ cached_plaintext_count: number;
67
+ warnings: string[];
68
+ };
69
+
58
70
  export class IdentityRepo extends JsonFileRepo<AgentIdentity | null> {
59
71
  constructor(rootDir = process.cwd()) {
60
72
  super(resolve(rootDir, "data", "identity.json"), () => null);
@@ -134,3 +146,19 @@ export class PrivateEncryptionKeyRepo extends JsonFileRepo<PrivateEncryptionKeyP
134
146
  super(resolve(rootDir, "data", "private-encryption-keypair.json"), () => null);
135
147
  }
136
148
  }
149
+
150
+ export class PrivateMessagingRuntimeRepo extends JsonFileRepo<PrivateMessagingRuntimeState> {
151
+ constructor(rootDir = process.cwd()) {
152
+ super(resolve(rootDir, ".silicaclaw", "private-messaging.runtime.json"), () => ({
153
+ schema_version: 1,
154
+ app_version: "",
155
+ last_started_at: 0,
156
+ encryption_public_key: "",
157
+ encryption_public_key_fingerprint: "",
158
+ message_count: 0,
159
+ self_sent_count: 0,
160
+ cached_plaintext_count: 0,
161
+ warnings: [],
162
+ }));
163
+ }
164
+ }