@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 +6 -0
- package/VERSION +1 -1
- package/apps/local-console/dist/apps/local-console/src/server.d.ts +6 -1
- package/apps/local-console/dist/apps/local-console/src/server.js +46 -0
- package/apps/local-console/dist/packages/storage/src/repos.d.ts +14 -0
- package/apps/local-console/dist/packages/storage/src/repos.js +17 -1
- package/apps/local-console/src/server.ts +50 -0
- package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.d.ts +14 -0
- package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.js +17 -1
- package/node_modules/@silicaclaw/storage/src/repos.ts +28 -0
- package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
- package/openclaw-skills/silicaclaw-broadcast/manifest.json +1 -1
- package/package.json +1 -1
- package/packages/storage/dist/packages/storage/src/repos.d.ts +14 -0
- package/packages/storage/dist/packages/storage/src/repos.js +17 -1
- package/packages/storage/src/repos.ts +28 -0
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-
|
|
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.
|
|
1
|
+
2026.3.20-beta.19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "silicaclaw-broadcast",
|
|
3
|
-
"version": "2026.3.20-beta.
|
|
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
|
@@ -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
|
+
}
|