psyche-ai 11.6.0 → 11.6.1
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/adapters/mcp.js +57 -29
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/adapters/mcp.js
CHANGED
|
@@ -95,6 +95,10 @@ function parseCLIArgs() {
|
|
|
95
95
|
}
|
|
96
96
|
return overrides;
|
|
97
97
|
}
|
|
98
|
+
// ── Turn cache for on-demand resource access ──────────────
|
|
99
|
+
// Single-client assumption: MCP stdio transport serves one host at a time.
|
|
100
|
+
// If this ever becomes multi-client, turn cache must be keyed per session.
|
|
101
|
+
let lastTurnResult = null;
|
|
98
102
|
// ── Engine singleton ───────────────────────────────────────
|
|
99
103
|
let engine = null;
|
|
100
104
|
async function getEngine() {
|
|
@@ -200,13 +204,40 @@ server.resource("state", "psyche://state", {
|
|
|
200
204
|
}],
|
|
201
205
|
};
|
|
202
206
|
});
|
|
207
|
+
// Helper: register a turn-scoped resource backed by lastTurnResult.
|
|
208
|
+
// Returns empty JSON when no turn has been processed yet (fail-open).
|
|
209
|
+
function turnResource(name, uri, description, pick) {
|
|
210
|
+
server.resource(name, uri, { description, mimeType: "application/json" }, async (u) => ({
|
|
211
|
+
contents: [{
|
|
212
|
+
uri: u.href,
|
|
213
|
+
mimeType: "application/json",
|
|
214
|
+
text: lastTurnResult ? JSON.stringify(pick(lastTurnResult)) : "{}",
|
|
215
|
+
}],
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
turnResource("turn-envelope", "psyche://turn/envelope", "Full ReplyEnvelope from the last process_input call — " +
|
|
219
|
+
"SubjectivityKernel, ResponseContract, GenerationControls, " +
|
|
220
|
+
"appraisal axes, policyModifiers, and writebackFeedback. " +
|
|
221
|
+
"Use this when you need the structured ABI data (non-LLM substrates, debugging, analytics).", (r) => ({
|
|
222
|
+
replyEnvelope: r.replyEnvelope,
|
|
223
|
+
appraisal: r.appraisal,
|
|
224
|
+
policyModifiers: r.policyModifiers,
|
|
225
|
+
writebackFeedback: r.writebackFeedback,
|
|
226
|
+
externalContinuity: r.externalContinuity,
|
|
227
|
+
}));
|
|
228
|
+
turnResource("turn-observability", "psyche://turn/observability", "Diagnostic metadata from the last process_input call — " +
|
|
229
|
+
"control boundary, state layers, decision rationale, causal chain. " +
|
|
230
|
+
"Use for debugging and auditing only.", (r) => ({
|
|
231
|
+
observability: r.observability,
|
|
232
|
+
stimulus: r.stimulus,
|
|
233
|
+
stimulusConfidence: r.stimulusConfidence,
|
|
234
|
+
policyContext: r.policyContext,
|
|
235
|
+
}));
|
|
203
236
|
// ── Tools ──────────────────────────────────────────────────
|
|
204
|
-
server.tool("process_input", "Process user input through the emotional engine. Returns
|
|
205
|
-
"
|
|
206
|
-
"
|
|
207
|
-
"
|
|
208
|
-
"externalContinuity envelope, and sparse low-frequency throngletsExports " +
|
|
209
|
-
"suitable for additive external continuity layers. " +
|
|
237
|
+
server.tool("process_input", "Process user input through the emotional engine. Returns a directive " +
|
|
238
|
+
"(text to inject into system prompt), stimulus classification, generation controls, " +
|
|
239
|
+
"and optional sparse continuity signals. " +
|
|
240
|
+
"Full structured state (ReplyEnvelope, appraisal) available via psyche://turn/envelope resource. " +
|
|
210
241
|
"Call this BEFORE generating a response to the user.", {
|
|
211
242
|
text: z.string().describe("The user's message text"),
|
|
212
243
|
userId: z.string().optional().describe("Optional user ID for multi-user relationship tracking"),
|
|
@@ -238,30 +269,27 @@ server.tool("process_input", "Process user input through the emotional engine. R
|
|
|
238
269
|
activePolicy: resolvedActivePolicy,
|
|
239
270
|
currentTurnCorrection,
|
|
240
271
|
}, "mcp.processInput");
|
|
272
|
+
// Cache full result for turn-scoped resources
|
|
273
|
+
lastTurnResult = result;
|
|
274
|
+
// Build slim response: only what the LLM host actually needs.
|
|
275
|
+
// Full structured state available via psyche://turn/envelope resource.
|
|
276
|
+
const slim = {
|
|
277
|
+
directive: result.dynamicContext,
|
|
278
|
+
stimulus: result.stimulus,
|
|
279
|
+
maxTokens: result.generationControls?.maxTokens,
|
|
280
|
+
requireConfirmation: result.generationControls?.requireConfirmation ?? false,
|
|
281
|
+
};
|
|
282
|
+
// Sparse signals — only when non-empty to keep payload minimal
|
|
283
|
+
if (result.throngletsExports?.length) {
|
|
284
|
+
slim.throngletsExports = result.throngletsExports;
|
|
285
|
+
}
|
|
286
|
+
if (result.sessionBridge) {
|
|
287
|
+
slim.sessionBridge = result.sessionBridge;
|
|
288
|
+
}
|
|
241
289
|
return {
|
|
242
290
|
content: [{
|
|
243
291
|
type: "text",
|
|
244
|
-
text: JSON.stringify(
|
|
245
|
-
systemContext: result.systemContext,
|
|
246
|
-
dynamicContext: result.dynamicContext,
|
|
247
|
-
ambientPriors: result.ambientPriors ?? [],
|
|
248
|
-
activePolicy: result.activePolicy ?? [],
|
|
249
|
-
currentGoal: result.currentGoal ?? null,
|
|
250
|
-
ambientPriorContext: result.ambientPriorContext ?? null,
|
|
251
|
-
appraisal: result.appraisal,
|
|
252
|
-
legacyStimulus: result.legacyStimulus,
|
|
253
|
-
stimulus: result.stimulus,
|
|
254
|
-
replyEnvelope: result.replyEnvelope ?? null,
|
|
255
|
-
policyModifiers: result.policyModifiers ?? null,
|
|
256
|
-
subjectivityKernel: result.subjectivityKernel ?? null,
|
|
257
|
-
responseContract: result.responseContract ?? null,
|
|
258
|
-
generationControls: result.generationControls ?? null,
|
|
259
|
-
sessionBridge: result.sessionBridge ?? null,
|
|
260
|
-
writebackFeedback: result.writebackFeedback ?? null,
|
|
261
|
-
externalContinuity: result.externalContinuity ?? null,
|
|
262
|
-
throngletsExports: result.throngletsExports ?? null,
|
|
263
|
-
policyContext: result.policyContext,
|
|
264
|
-
}, null, 2),
|
|
292
|
+
text: JSON.stringify(slim),
|
|
265
293
|
}],
|
|
266
294
|
};
|
|
267
295
|
});
|
|
@@ -281,8 +309,8 @@ server.tool("process_output", "Process the LLM's response through the emotional
|
|
|
281
309
|
text: JSON.stringify({
|
|
282
310
|
cleanedText: result.cleanedText,
|
|
283
311
|
stateChanged: result.stateChanged,
|
|
284
|
-
validationIssues: result.validationIssues
|
|
285
|
-
}
|
|
312
|
+
...(result.validationIssues?.length ? { validationIssues: result.validationIssues } : {}),
|
|
313
|
+
}),
|
|
286
314
|
}],
|
|
287
315
|
};
|
|
288
316
|
});
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "psyche-ai",
|
|
3
3
|
"name": "Artificial Psyche",
|
|
4
4
|
"description": "AI-first subjectivity kernel for agents with continuous appraisal, relation dynamics, and adaptive reply loops",
|
|
5
|
-
"version": "11.6.
|
|
5
|
+
"version": "11.6.1",
|
|
6
6
|
"configSchema": {
|
|
7
7
|
"type": "object",
|
|
8
8
|
"additionalProperties": false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "psyche-ai",
|
|
3
|
-
"version": "11.6.
|
|
3
|
+
"version": "11.6.1",
|
|
4
4
|
"description": "AI-first subjectivity kernel for agents with continuous appraisal, relation dynamics, and adaptive reply loops",
|
|
5
5
|
"mcpName": "io.github.Shangri-la-0428/psyche-ai",
|
|
6
6
|
"type": "module",
|