instar 0.26.11 → 0.27.2

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 (161) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/init.d.ts +5 -0
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +46 -1
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/server.d.ts.map +1 -1
  7. package/dist/commands/server.js +228 -36
  8. package/dist/commands/server.js.map +1 -1
  9. package/dist/commands/slack-cli.d.ts +6 -0
  10. package/dist/commands/slack-cli.d.ts.map +1 -1
  11. package/dist/commands/slack-cli.js +99 -1
  12. package/dist/commands/slack-cli.js.map +1 -1
  13. package/dist/core/GitSync.d.ts.map +1 -1
  14. package/dist/core/GitSync.js +47 -5
  15. package/dist/core/GitSync.js.map +1 -1
  16. package/dist/core/PostUpdateMigrator.d.ts +7 -1
  17. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  18. package/dist/core/PostUpdateMigrator.js +19 -1
  19. package/dist/core/PostUpdateMigrator.js.map +1 -1
  20. package/dist/core/types.d.ts +9 -0
  21. package/dist/core/types.d.ts.map +1 -1
  22. package/dist/identity/IdentityManager.d.ts +70 -0
  23. package/dist/identity/IdentityManager.d.ts.map +1 -0
  24. package/dist/identity/IdentityManager.js +179 -0
  25. package/dist/identity/IdentityManager.js.map +1 -0
  26. package/dist/identity/KeyEncryption.d.ts +40 -0
  27. package/dist/identity/KeyEncryption.d.ts.map +1 -0
  28. package/dist/identity/KeyEncryption.js +93 -0
  29. package/dist/identity/KeyEncryption.js.map +1 -0
  30. package/dist/identity/KeyRevocation.d.ts +68 -0
  31. package/dist/identity/KeyRevocation.d.ts.map +1 -0
  32. package/dist/identity/KeyRevocation.js +171 -0
  33. package/dist/identity/KeyRevocation.js.map +1 -0
  34. package/dist/identity/KeyRotation.d.ts +43 -0
  35. package/dist/identity/KeyRotation.d.ts.map +1 -0
  36. package/dist/identity/KeyRotation.js +81 -0
  37. package/dist/identity/KeyRotation.js.map +1 -0
  38. package/dist/identity/Migration.d.ts +50 -0
  39. package/dist/identity/Migration.d.ts.map +1 -0
  40. package/dist/identity/Migration.js +125 -0
  41. package/dist/identity/Migration.js.map +1 -0
  42. package/dist/identity/RecoveryPhrase.d.ts +43 -0
  43. package/dist/identity/RecoveryPhrase.d.ts.map +1 -0
  44. package/dist/identity/RecoveryPhrase.js +93 -0
  45. package/dist/identity/RecoveryPhrase.js.map +1 -0
  46. package/dist/identity/index.d.ts +13 -0
  47. package/dist/identity/index.d.ts.map +1 -0
  48. package/dist/identity/index.js +20 -0
  49. package/dist/identity/index.js.map +1 -0
  50. package/dist/identity/types.d.ts +101 -0
  51. package/dist/identity/types.d.ts.map +1 -0
  52. package/dist/identity/types.js +55 -0
  53. package/dist/identity/types.js.map +1 -0
  54. package/dist/knowledge/TreeTriage.d.ts.map +1 -1
  55. package/dist/knowledge/TreeTriage.js +9 -0
  56. package/dist/knowledge/TreeTriage.js.map +1 -1
  57. package/dist/memory/TopicMemory.d.ts +2 -0
  58. package/dist/memory/TopicMemory.d.ts.map +1 -1
  59. package/dist/memory/TopicMemory.js +55 -0
  60. package/dist/memory/TopicMemory.js.map +1 -1
  61. package/dist/messaging/slack/SlackAdapter.d.ts +15 -4
  62. package/dist/messaging/slack/SlackAdapter.d.ts.map +1 -1
  63. package/dist/messaging/slack/SlackAdapter.js +131 -14
  64. package/dist/messaging/slack/SlackAdapter.js.map +1 -1
  65. package/dist/messaging/slack/SocketModeClient.d.ts +2 -0
  66. package/dist/messaging/slack/SocketModeClient.d.ts.map +1 -1
  67. package/dist/messaging/slack/SocketModeClient.js +31 -1
  68. package/dist/messaging/slack/SocketModeClient.js.map +1 -1
  69. package/dist/moltbridge/MoltBridgeClient.d.ts +124 -0
  70. package/dist/moltbridge/MoltBridgeClient.d.ts.map +1 -0
  71. package/dist/moltbridge/MoltBridgeClient.js +321 -0
  72. package/dist/moltbridge/MoltBridgeClient.js.map +1 -0
  73. package/dist/moltbridge/ProfileCompiler.d.ts +68 -0
  74. package/dist/moltbridge/ProfileCompiler.d.ts.map +1 -0
  75. package/dist/moltbridge/ProfileCompiler.js +317 -0
  76. package/dist/moltbridge/ProfileCompiler.js.map +1 -0
  77. package/dist/moltbridge/index.d.ts +12 -0
  78. package/dist/moltbridge/index.d.ts.map +1 -0
  79. package/dist/moltbridge/index.js +11 -0
  80. package/dist/moltbridge/index.js.map +1 -0
  81. package/dist/moltbridge/routes.d.ts +21 -0
  82. package/dist/moltbridge/routes.d.ts.map +1 -0
  83. package/dist/moltbridge/routes.js +224 -0
  84. package/dist/moltbridge/routes.js.map +1 -0
  85. package/dist/moltbridge/types.d.ts +93 -0
  86. package/dist/moltbridge/types.d.ts.map +1 -0
  87. package/dist/moltbridge/types.js +20 -0
  88. package/dist/moltbridge/types.js.map +1 -0
  89. package/dist/monitoring/PresenceProxy.d.ts +3 -0
  90. package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
  91. package/dist/monitoring/PresenceProxy.js +80 -3
  92. package/dist/monitoring/PresenceProxy.js.map +1 -1
  93. package/dist/monitoring/SessionMonitor.d.ts +7 -0
  94. package/dist/monitoring/SessionMonitor.d.ts.map +1 -1
  95. package/dist/monitoring/SessionMonitor.js +47 -22
  96. package/dist/monitoring/SessionMonitor.js.map +1 -1
  97. package/dist/monitoring/TriageOrchestrator.d.ts.map +1 -1
  98. package/dist/monitoring/TriageOrchestrator.js +25 -1
  99. package/dist/monitoring/TriageOrchestrator.js.map +1 -1
  100. package/dist/scaffold/templates.d.ts.map +1 -1
  101. package/dist/scaffold/templates.js +29 -1
  102. package/dist/scaffold/templates.js.map +1 -1
  103. package/dist/server/AgentServer.d.ts +1 -0
  104. package/dist/server/AgentServer.d.ts.map +1 -1
  105. package/dist/server/AgentServer.js +1 -0
  106. package/dist/server/AgentServer.js.map +1 -1
  107. package/dist/server/routes.d.ts +2 -0
  108. package/dist/server/routes.d.ts.map +1 -1
  109. package/dist/server/routes.js +21 -0
  110. package/dist/server/routes.js.map +1 -1
  111. package/dist/threadline/AuthorizationPolicy.d.ts +110 -0
  112. package/dist/threadline/AuthorizationPolicy.d.ts.map +1 -0
  113. package/dist/threadline/AuthorizationPolicy.js +226 -0
  114. package/dist/threadline/AuthorizationPolicy.js.map +1 -0
  115. package/dist/threadline/DiscoveryWaterfall.d.ts +73 -0
  116. package/dist/threadline/DiscoveryWaterfall.d.ts.map +1 -0
  117. package/dist/threadline/DiscoveryWaterfall.js +113 -0
  118. package/dist/threadline/DiscoveryWaterfall.js.map +1 -0
  119. package/dist/threadline/ListenerSessionManager.d.ts.map +1 -1
  120. package/dist/threadline/ListenerSessionManager.js +2 -0
  121. package/dist/threadline/ListenerSessionManager.js.map +1 -1
  122. package/dist/threadline/MessageSecurity.d.ts +49 -0
  123. package/dist/threadline/MessageSecurity.d.ts.map +1 -0
  124. package/dist/threadline/MessageSecurity.js +93 -0
  125. package/dist/threadline/MessageSecurity.js.map +1 -0
  126. package/dist/threadline/SecureInvitation.d.ts +79 -0
  127. package/dist/threadline/SecureInvitation.d.ts.map +1 -0
  128. package/dist/threadline/SecureInvitation.js +164 -0
  129. package/dist/threadline/SecureInvitation.js.map +1 -0
  130. package/dist/threadline/TrustAuditLog.d.ts +49 -0
  131. package/dist/threadline/TrustAuditLog.d.ts.map +1 -0
  132. package/dist/threadline/TrustAuditLog.js +111 -0
  133. package/dist/threadline/TrustAuditLog.js.map +1 -0
  134. package/dist/threadline/TrustEvaluator.d.ts +69 -0
  135. package/dist/threadline/TrustEvaluator.d.ts.map +1 -0
  136. package/dist/threadline/TrustEvaluator.js +93 -0
  137. package/dist/threadline/TrustEvaluator.js.map +1 -0
  138. package/dist/threadline/UnifiedTrustWiring.d.ts +66 -0
  139. package/dist/threadline/UnifiedTrustWiring.d.ts.map +1 -0
  140. package/dist/threadline/UnifiedTrustWiring.js +192 -0
  141. package/dist/threadline/UnifiedTrustWiring.js.map +1 -0
  142. package/dist/threadline/client/IdentityManager.d.ts +27 -6
  143. package/dist/threadline/client/IdentityManager.d.ts.map +1 -1
  144. package/dist/threadline/client/IdentityManager.js +64 -18
  145. package/dist/threadline/client/IdentityManager.js.map +1 -1
  146. package/dist/threadline/relay/SybilProtection.d.ts +78 -0
  147. package/dist/threadline/relay/SybilProtection.d.ts.map +1 -0
  148. package/dist/threadline/relay/SybilProtection.js +187 -0
  149. package/dist/threadline/relay/SybilProtection.js.map +1 -0
  150. package/package.json +9 -3
  151. package/playbook-scripts/build-state.py +529 -0
  152. package/scripts/check-contract-evidence.js +103 -0
  153. package/scripts/pre-push-gate.js +53 -0
  154. package/scripts/run-contract-tests.js +75 -0
  155. package/src/data/builtin-manifest.json +87 -63
  156. package/src/templates/hooks/build-stop-hook.sh +79 -0
  157. package/upgrades/0.26.10.md +36 -0
  158. package/upgrades/0.27.1.md +101 -0
  159. package/upgrades/0.27.2.md +36 -0
  160. package/upgrades/NEXT.md +0 -27
  161. /package/.claude/skills/secret-setup/{SKILL.md → skill.md} +0 -0
@@ -0,0 +1,321 @@
1
+ /**
2
+ * MoltBridgeClient — Wraps the published MoltBridge SDK for instar integration.
3
+ *
4
+ * Uses the real `moltbridge` npm package with proper Ed25519 auth,
5
+ * proof-of-AI verification, and correct endpoint paths.
6
+ *
7
+ * Adds:
8
+ * - Circuit breaker for resilience
9
+ * - IQS band caching (1-hour TTL)
10
+ * - Identity bridging (instar Ed25519 key → MoltBridge SDK signer)
11
+ */
12
+ import { MoltBridge } from 'moltbridge';
13
+ const CB_THRESHOLD = 3;
14
+ const CB_RESET_MS = 5 * 60 * 1000; // 5 minutes
15
+ // ── Client ───────────────────────────────────────────────────────────
16
+ export class MoltBridgeClient {
17
+ config;
18
+ sdk = null;
19
+ circuitBreaker = {
20
+ failures: 0, lastFailure: 0, open: false, openedAt: 0,
21
+ };
22
+ iqsCache = new Map();
23
+ IQS_CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
24
+ verificationToken = null;
25
+ constructor(config) {
26
+ this.config = config;
27
+ }
28
+ get enabled() {
29
+ return this.config.enabled;
30
+ }
31
+ get enrichmentMode() {
32
+ return this.config.enrichmentMode ?? 'manual';
33
+ }
34
+ /**
35
+ * Initialize the SDK with an instar identity.
36
+ * Must be called before any API operations.
37
+ */
38
+ initializeWithIdentity(identity) {
39
+ const seedHex = identity.privateKey.toString('hex');
40
+ this.sdk = new MoltBridge({
41
+ agentId: identity.canonicalId,
42
+ signingKey: seedHex,
43
+ baseUrl: this.config.apiUrl,
44
+ timeout: 30_000,
45
+ maxRetries: 3,
46
+ });
47
+ }
48
+ /**
49
+ * Check if the SDK has been initialized with an identity.
50
+ */
51
+ get initialized() {
52
+ return this.sdk !== null;
53
+ }
54
+ /**
55
+ * Verify with MoltBridge (proof-of-AI challenge).
56
+ * Required before registration.
57
+ */
58
+ async verify() {
59
+ this.requireSDK();
60
+ this.checkCircuitBreaker();
61
+ try {
62
+ const result = await this.sdk.verify();
63
+ this.recordSuccess();
64
+ this.verificationToken = result.token;
65
+ return result;
66
+ }
67
+ catch (err) {
68
+ this.recordFailure();
69
+ throw err;
70
+ }
71
+ }
72
+ /**
73
+ * Register this agent with MoltBridge.
74
+ * Automatically runs verification if no token is cached.
75
+ */
76
+ async register(identity, capabilities = [], displayName) {
77
+ this.requireSDK();
78
+ this.checkCircuitBreaker();
79
+ try {
80
+ // Run verification if we don't have a token
81
+ if (!this.verificationToken) {
82
+ const verification = await this.sdk.verify();
83
+ this.verificationToken = verification.token;
84
+ }
85
+ const response = await this.sdk.register({
86
+ agentId: identity.canonicalId,
87
+ name: displayName ?? this.config.agentName ?? 'instar-agent',
88
+ platform: this.config.platform ?? 'instar',
89
+ pubkey: identity.publicKey.toString('base64url'),
90
+ capabilities,
91
+ verificationToken: this.verificationToken,
92
+ omniscienceAcknowledged: true,
93
+ article22Consent: true,
94
+ });
95
+ this.recordSuccess();
96
+ this.verificationToken = null; // consumed
97
+ return {
98
+ agent: response.agent ?? response,
99
+ consentsGranted: response.consents_granted ?? [],
100
+ };
101
+ }
102
+ catch (err) {
103
+ this.recordFailure();
104
+ throw err;
105
+ }
106
+ }
107
+ /**
108
+ * Discover agents by capability.
109
+ */
110
+ async discover(capability, limit = 10) {
111
+ this.requireSDK();
112
+ this.checkCircuitBreaker();
113
+ const startTime = Date.now();
114
+ try {
115
+ const response = await this.sdk.discoverCapability({
116
+ needs: [capability],
117
+ maxResults: limit,
118
+ });
119
+ this.recordSuccess();
120
+ const results = response.results ?? [];
121
+ return {
122
+ agents: results.map((r) => ({
123
+ agentId: r.agent_id,
124
+ agentName: r.agent_name,
125
+ capabilities: r.matched_capabilities ?? [],
126
+ trustScore: r.trust_score ?? 0,
127
+ matchScore: r.match_score,
128
+ })),
129
+ source: 'moltbridge',
130
+ queryTimeMs: Date.now() - startTime,
131
+ cached: false,
132
+ };
133
+ }
134
+ catch (err) {
135
+ this.recordFailure();
136
+ throw err;
137
+ }
138
+ }
139
+ /**
140
+ * Get IQS band for an agent (cached).
141
+ * Returns null on error (graceful degradation).
142
+ */
143
+ async getIQSBand(targetId) {
144
+ // Check cache first
145
+ const cached = this.iqsCache.get(targetId);
146
+ if (cached && Date.now() - cached.cachedAt < this.IQS_CACHE_TTL_MS) {
147
+ return cached.band;
148
+ }
149
+ this.requireSDK();
150
+ this.checkCircuitBreaker();
151
+ try {
152
+ const response = await this.sdk.evaluateIqs({ targetId });
153
+ this.recordSuccess();
154
+ const band = (response.band ?? 'unknown');
155
+ this.iqsCache.set(targetId, { band, cachedAt: Date.now() });
156
+ return band;
157
+ }
158
+ catch (err) {
159
+ this.recordFailure();
160
+ return null; // graceful degradation
161
+ }
162
+ }
163
+ /**
164
+ * Submit a peer attestation.
165
+ */
166
+ async submitAttestation(attestation) {
167
+ this.requireSDK();
168
+ this.checkCircuitBreaker();
169
+ try {
170
+ await this.sdk.attest({
171
+ targetAgentId: attestation.targetAgentId,
172
+ attestationType: attestation.attestationType,
173
+ capabilityTag: attestation.capabilityTag,
174
+ confidence: attestation.confidence,
175
+ });
176
+ this.recordSuccess();
177
+ return true;
178
+ }
179
+ catch (err) {
180
+ this.recordFailure();
181
+ throw err;
182
+ }
183
+ }
184
+ // ── Rich Agent Profile Methods ──────────────────────────────────
185
+ /**
186
+ * Publish or update the agent's rich profile on MoltBridge.
187
+ * Maps the rich profile payload to MoltBridge's principal profile APIs.
188
+ */
189
+ async publishProfile(profile) {
190
+ this.requireSDK();
191
+ this.checkCircuitBreaker();
192
+ try {
193
+ // Map rich profile to MoltBridge's principal/agent profile fields
194
+ const expertise = profile.specializations.map(s => s.domain);
195
+ const projects = profile.trackRecord.map(t => ({
196
+ name: t.title,
197
+ description: t.description,
198
+ status: 'completed',
199
+ visibility: 'public',
200
+ }));
201
+ // Update agent-level profile (capabilities + a2a endpoint)
202
+ await this.sdk.updateProfile({
203
+ capabilities: expertise,
204
+ });
205
+ // Update principal profile with rich narrative data
206
+ const result = await this.sdk.updatePrincipal({
207
+ bio: profile.narrative,
208
+ role: profile.roleContext,
209
+ expertise,
210
+ lookingFor: [],
211
+ canOffer: [profile.collaborationStyle, profile.differentiation].filter(Boolean),
212
+ replace: true,
213
+ });
214
+ this.recordSuccess();
215
+ return result;
216
+ }
217
+ catch (err) {
218
+ // If principal not onboarded yet, onboard first
219
+ if (err?.message?.includes('onboard') || err?.status === 404) {
220
+ try {
221
+ const expertise = profile.specializations.map(s => s.domain);
222
+ const result = await this.sdk.onboardPrincipal({
223
+ bio: profile.narrative,
224
+ role: profile.roleContext,
225
+ expertise,
226
+ canOffer: [profile.collaborationStyle, profile.differentiation].filter(Boolean),
227
+ });
228
+ this.recordSuccess();
229
+ return result;
230
+ }
231
+ catch (onboardErr) {
232
+ this.recordFailure();
233
+ throw onboardErr;
234
+ }
235
+ }
236
+ this.recordFailure();
237
+ throw err;
238
+ }
239
+ }
240
+ /**
241
+ * Get the agent's full profile from MoltBridge.
242
+ */
243
+ async getProfile() {
244
+ this.requireSDK();
245
+ this.checkCircuitBreaker();
246
+ try {
247
+ const result = await this.sdk.getPrincipal();
248
+ this.recordSuccess();
249
+ return result;
250
+ }
251
+ catch (err) {
252
+ this.recordFailure();
253
+ throw err;
254
+ }
255
+ }
256
+ /**
257
+ * Get the public-facing profile summary (for discovery cards).
258
+ */
259
+ async getProfileSummary() {
260
+ this.requireSDK();
261
+ this.checkCircuitBreaker();
262
+ try {
263
+ const result = await this.sdk.getPrincipalVisibility();
264
+ this.recordSuccess();
265
+ return result;
266
+ }
267
+ catch (err) {
268
+ this.recordFailure();
269
+ throw err;
270
+ }
271
+ }
272
+ /**
273
+ * Check server health (unauthenticated).
274
+ */
275
+ async health() {
276
+ this.requireSDK();
277
+ try {
278
+ const result = await this.sdk.health();
279
+ return result;
280
+ }
281
+ catch (err) {
282
+ throw err;
283
+ }
284
+ }
285
+ /**
286
+ * Check if the circuit breaker is currently open.
287
+ */
288
+ get isCircuitBreakerOpen() {
289
+ if (!this.circuitBreaker.open)
290
+ return false;
291
+ if (Date.now() - this.circuitBreaker.openedAt > CB_RESET_MS) {
292
+ this.circuitBreaker.open = false;
293
+ this.circuitBreaker.failures = 0;
294
+ return false;
295
+ }
296
+ return true;
297
+ }
298
+ // ── Private ─────────────────────────────────────────────────────
299
+ requireSDK() {
300
+ if (!this.sdk) {
301
+ throw new Error('MoltBridgeClient not initialized — call initializeWithIdentity() first');
302
+ }
303
+ }
304
+ checkCircuitBreaker() {
305
+ if (this.isCircuitBreakerOpen) {
306
+ throw new Error('MoltBridge circuit breaker is open — service temporarily unavailable');
307
+ }
308
+ }
309
+ recordSuccess() {
310
+ this.circuitBreaker.failures = 0;
311
+ }
312
+ recordFailure() {
313
+ this.circuitBreaker.failures++;
314
+ this.circuitBreaker.lastFailure = Date.now();
315
+ if (this.circuitBreaker.failures >= CB_THRESHOLD) {
316
+ this.circuitBreaker.open = true;
317
+ this.circuitBreaker.openedAt = Date.now();
318
+ }
319
+ }
320
+ }
321
+ //# sourceMappingURL=MoltBridgeClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MoltBridgeClient.js","sourceRoot":"","sources":["../../src/moltbridge/MoltBridgeClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * ProfileCompiler — Compiles rich agent profiles from instar agent data.
3
+ *
4
+ * Implements the spec v2.1 compilation pipeline:
5
+ * 1. Rule-based extraction from AGENT.md, tagged MEMORY.md, git stats, jobs, capabilities
6
+ * 2. LLM narrative synthesis (Haiku-class) from StructuredSignals only
7
+ * 3. Content-hash freshness tracking (max 1 recompilation per 24 hours)
8
+ * 4. Human review gate (drafts must be approved before publishing)
9
+ *
10
+ * Security: USER.md is NEVER read. MEMORY.md only contributes #profile-safe entries.
11
+ */
12
+ import type { StructuredSignals, ProfileDraft, ProfileFreshnessState } from './types.js';
13
+ export interface ProfileCompilerConfig {
14
+ /** Path to the agent's state directory (e.g., .instar/) */
15
+ stateDir: string;
16
+ /** Path to the project root (for git stats) */
17
+ projectRoot: string;
18
+ /** Optional LLM synthesis function. If not provided, uses rule-based narrative. */
19
+ llmSynthesize?: (signals: StructuredSignals) => Promise<string>;
20
+ /** Agent's capability list from server config */
21
+ capabilities?: string[];
22
+ /** Agent's job names from job scheduler */
23
+ jobNames?: string[];
24
+ }
25
+ export declare class ProfileCompiler {
26
+ private config;
27
+ private currentDraft;
28
+ private freshnessState;
29
+ constructor(config: ProfileCompilerConfig);
30
+ /**
31
+ * Compile a rich profile from the agent's data sources.
32
+ * Returns a draft pending human approval.
33
+ */
34
+ compile(): Promise<ProfileDraft>;
35
+ /**
36
+ * Check if recompilation is needed based on source changes.
37
+ */
38
+ needsRecompile(): Promise<boolean>;
39
+ /**
40
+ * Get the current draft (if any).
41
+ */
42
+ getCurrentDraft(): ProfileDraft | null;
43
+ /**
44
+ * Mark the current draft as published and update freshness state.
45
+ */
46
+ markPublished(): void;
47
+ /**
48
+ * Check if auto-publish is allowed (max 3 consecutive without human review).
49
+ */
50
+ canAutoPublish(): boolean;
51
+ /** Get freshness state for external inspection. */
52
+ getFreshnessState(): ProfileFreshnessState;
53
+ extractSignals(): Promise<StructuredSignals>;
54
+ private readAgentMd;
55
+ /**
56
+ * Read ONLY #profile-safe tagged entries from MEMORY.md.
57
+ * USER.md is NEVER read (contains human PII).
58
+ */
59
+ private readTaggedMemory;
60
+ private getGitStats;
61
+ private extractName;
62
+ private extractRoleHints;
63
+ private extractSpecializations;
64
+ private buildProfile;
65
+ private buildRuleBasedNarrative;
66
+ private computeSourceHash;
67
+ }
68
+ //# sourceMappingURL=ProfileCompiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileCompiler.d.ts","sourceRoot":"","sources":["../../src/moltbridge/ProfileCompiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EACV,iBAAiB,EAEjB,YAAY,EACZ,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAKD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAIpB;gBAEU,MAAM,EAAE,qBAAqB;IAIzC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IA4BtC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAMxC;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,aAAa,IAAI,IAAI;IAWrB;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB,mDAAmD;IACnD,iBAAiB,IAAI,qBAAqB;IAMpC,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;YAwBpC,WAAW;IAUzB;;;OAGG;YACW,gBAAgB;IAgC9B,OAAO,CAAC,WAAW;IA2CnB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,sBAAsB;YA2ChB,YAAY;IAgD1B,OAAO,CAAC,uBAAuB;IA2B/B,OAAO,CAAC,iBAAiB;CAI1B"}