@aiassesstech/sam 0.3.16 → 0.4.0
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/README.md +41 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/types.d.ts +26 -0
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/pipeline/types.js +9 -0
- package/dist/pipeline/types.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +240 -11
- package/dist/plugin.js.map +1 -1
- package/dist/tools/engine-session-manager.d.ts +18 -0
- package/dist/tools/engine-session-manager.d.ts.map +1 -0
- package/dist/tools/engine-session-manager.js +29 -0
- package/dist/tools/engine-session-manager.js.map +1 -0
- package/dist/tools/sam-artifact.d.ts +2 -1
- package/dist/tools/sam-artifact.d.ts.map +1 -1
- package/dist/tools/sam-artifact.js +15 -2
- package/dist/tools/sam-artifact.js.map +1 -1
- package/dist/tools/sam-engineer-diff.d.ts +39 -0
- package/dist/tools/sam-engineer-diff.d.ts.map +1 -0
- package/dist/tools/sam-engineer-diff.js +61 -0
- package/dist/tools/sam-engineer-diff.js.map +1 -0
- package/dist/tools/sam-engineer-resume.d.ts +34 -0
- package/dist/tools/sam-engineer-resume.d.ts.map +1 -0
- package/dist/tools/sam-engineer-resume.js +91 -0
- package/dist/tools/sam-engineer-resume.js.map +1 -0
- package/dist/tools/sam-engineer-status.d.ts +34 -0
- package/dist/tools/sam-engineer-status.d.ts.map +1 -0
- package/dist/tools/sam-engineer-status.js +66 -0
- package/dist/tools/sam-engineer-status.js.map +1 -0
- package/dist/tools/sam-engineer-terminate.d.ts +41 -0
- package/dist/tools/sam-engineer-terminate.d.ts.map +1 -0
- package/dist/tools/sam-engineer-terminate.js +88 -0
- package/dist/tools/sam-engineer-terminate.js.map +1 -0
- package/dist/tools/sam-engineer.d.ts +60 -0
- package/dist/tools/sam-engineer.d.ts.map +1 -0
- package/dist/tools/sam-engineer.js +195 -0
- package/dist/tools/sam-engineer.js.map +1 -0
- package/dist/tools/sam-pipeline.d.ts.map +1 -1
- package/dist/tools/sam-pipeline.js +10 -0
- package/dist/tools/sam-pipeline.js.map +1 -1
- package/dist/tools/sam-status.d.ts +2 -1
- package/dist/tools/sam-status.d.ts.map +1 -1
- package/dist/tools/sam-status.js +11 -3
- package/dist/tools/sam-status.js.map +1 -1
- package/openclaw.plugin.json +62 -0
- package/package.json +3 -2
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sam_engineer_terminate — Hard stop an engine session.
|
|
3
|
+
*
|
|
4
|
+
* Commits in-flight work to a sam/ER-XXX-terminated branch,
|
|
5
|
+
* removes the session from the active registry, and updates the ER.
|
|
6
|
+
*/
|
|
7
|
+
import type { PipelineManager } from '../pipeline/pipeline-manager.js';
|
|
8
|
+
import type { SamMemory } from '../memory/sam-memory.js';
|
|
9
|
+
import type { EngineSessionManager } from './engine-session-manager.js';
|
|
10
|
+
export declare function createEngineerTerminateTool(pipeline: PipelineManager, sessionManager: EngineSessionManager, getMemory: () => SamMemory | null): {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
parameters: {
|
|
14
|
+
type: "object";
|
|
15
|
+
properties: {
|
|
16
|
+
er_id: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
20
|
+
reason: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
required: string[];
|
|
26
|
+
};
|
|
27
|
+
execute(_toolCallId: string, params: Record<string, unknown>): Promise<{
|
|
28
|
+
content: {
|
|
29
|
+
type: string;
|
|
30
|
+
text: string;
|
|
31
|
+
}[];
|
|
32
|
+
isError: boolean;
|
|
33
|
+
} | {
|
|
34
|
+
content: {
|
|
35
|
+
type: string;
|
|
36
|
+
text: string;
|
|
37
|
+
}[];
|
|
38
|
+
isError?: undefined;
|
|
39
|
+
}>;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=sam-engineer-terminate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sam-engineer-terminate.d.ts","sourceRoot":"","sources":["../../src/tools/sam-engineer-terminate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,oBAAoB,EACpC,SAAS,EAAE,MAAM,SAAS,GAAG,IAAI;;;;;;;;;;;;;;;kBAmBN,MAAM,EAAE;;yBAEN,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;EAmErE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sam_engineer_terminate — Hard stop an engine session.
|
|
3
|
+
*
|
|
4
|
+
* Commits in-flight work to a sam/ER-XXX-terminated branch,
|
|
5
|
+
* removes the session from the active registry, and updates the ER.
|
|
6
|
+
*/
|
|
7
|
+
export function createEngineerTerminateTool(pipeline, sessionManager, getMemory) {
|
|
8
|
+
return {
|
|
9
|
+
name: 'sam_engineer_terminate',
|
|
10
|
+
description: 'Hard stop an engine session. Commits in-flight work to a terminated branch ' +
|
|
11
|
+
'and removes the session. Irreversible.',
|
|
12
|
+
parameters: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
er_id: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'Engineering Request ID to terminate',
|
|
18
|
+
},
|
|
19
|
+
reason: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'Reason for termination (recorded in audit chain and ER notes)',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
required: ['er_id'],
|
|
25
|
+
},
|
|
26
|
+
async execute(_toolCallId, params) {
|
|
27
|
+
const erId = params.er_id;
|
|
28
|
+
const reason = params.reason ?? 'Manual termination';
|
|
29
|
+
const session = sessionManager.get(erId);
|
|
30
|
+
if (!session) {
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: 'text', text: `No active engine session for ${erId}.` }],
|
|
33
|
+
isError: true,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const statusBefore = await session.getStatus();
|
|
38
|
+
const usageBefore = await session.getUsage();
|
|
39
|
+
await session.terminate();
|
|
40
|
+
sessionManager.delete(erId);
|
|
41
|
+
await pipeline.handleRequest({
|
|
42
|
+
action: 'update',
|
|
43
|
+
er_id: erId,
|
|
44
|
+
blocker: `ENGINE TERMINATED: ${reason}`,
|
|
45
|
+
notes: `Engine session terminated — turns=${statusBefore.turnCount}, cost=$${(usageBefore.totalCostUsdCents / 100).toFixed(4)}, reason: ${reason}`,
|
|
46
|
+
}).catch(() => { });
|
|
47
|
+
const memory = getMemory();
|
|
48
|
+
if (memory) {
|
|
49
|
+
memory.writer?.write?.({
|
|
50
|
+
agent: 'sam',
|
|
51
|
+
type: 'engine-terminated',
|
|
52
|
+
tags: ['engineering', 'engine', 'terminated', erId],
|
|
53
|
+
title: `Engine Terminated: ${erId}`,
|
|
54
|
+
body: `## Engine Session Terminated\n\n` +
|
|
55
|
+
`**ER**: ${erId}\n` +
|
|
56
|
+
`**Reason**: ${reason}\n` +
|
|
57
|
+
`**Turns**: ${statusBefore.turnCount}\n` +
|
|
58
|
+
`**Cost**: $${(usageBefore.totalCostUsdCents / 100).toFixed(4)}\n` +
|
|
59
|
+
`**Audit Head**: ${statusBefore.auditHead}\n`,
|
|
60
|
+
metadata: { er_id: erId, reason, turns: statusBefore.turnCount },
|
|
61
|
+
}).catch(() => { });
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
content: [{
|
|
65
|
+
type: 'text',
|
|
66
|
+
text: JSON.stringify({
|
|
67
|
+
er_id: erId,
|
|
68
|
+
terminated: true,
|
|
69
|
+
reason,
|
|
70
|
+
finalState: statusBefore.state,
|
|
71
|
+
turnCount: statusBefore.turnCount,
|
|
72
|
+
costUsd: usageBefore.totalCostUsdCents / 100,
|
|
73
|
+
auditHead: statusBefore.auditHead,
|
|
74
|
+
}, null, 2),
|
|
75
|
+
}],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
sessionManager.delete(erId);
|
|
80
|
+
return {
|
|
81
|
+
content: [{ type: 'text', text: `sam_engineer_terminate error: ${err instanceof Error ? err.message : String(err)}` }],
|
|
82
|
+
isError: true,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=sam-engineer-terminate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sam-engineer-terminate.js","sourceRoot":"","sources":["../../src/tools/sam-engineer-terminate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sam_engineer — Primary entry point for Sam's autonomous engineering loop.
|
|
3
|
+
*
|
|
4
|
+
* Creates an engine session, runs the NativeLoopEngine, returns the TurnResult.
|
|
5
|
+
* Transitions the ER to BUILD on first invocation, SELF-REVIEW on completion.
|
|
6
|
+
* Updates ER metadata with session state after each turn.
|
|
7
|
+
*
|
|
8
|
+
* Called by: Jessie (via task/assign → pipeline → sam_engineer),
|
|
9
|
+
* or directly by an LLM agent.
|
|
10
|
+
*/
|
|
11
|
+
import type { PipelineManager } from '../pipeline/pipeline-manager.js';
|
|
12
|
+
import type { SamPluginConfig } from '../pipeline/types.js';
|
|
13
|
+
import type { SamMemory } from '../memory/sam-memory.js';
|
|
14
|
+
import type { EngineSessionManager } from './engine-session-manager.js';
|
|
15
|
+
export declare function createEngineerTool(pipeline: PipelineManager, config: SamPluginConfig, sessionManager: EngineSessionManager, getMemory: () => SamMemory | null, createSessionFn: (() => Promise<typeof import('@aiassesstech/sam-engine-bridge')>) | null): {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
parameters: {
|
|
19
|
+
type: "object";
|
|
20
|
+
properties: {
|
|
21
|
+
er_id: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
prompt: {
|
|
26
|
+
type: string;
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
repo: {
|
|
30
|
+
type: string;
|
|
31
|
+
description: string;
|
|
32
|
+
};
|
|
33
|
+
branch: {
|
|
34
|
+
type: string;
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
resume: {
|
|
38
|
+
type: string;
|
|
39
|
+
description: string;
|
|
40
|
+
};
|
|
41
|
+
budget_tokens_override: {
|
|
42
|
+
type: string;
|
|
43
|
+
description: string;
|
|
44
|
+
};
|
|
45
|
+
budget_usd_override: {
|
|
46
|
+
type: string;
|
|
47
|
+
description: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
required: string[];
|
|
51
|
+
};
|
|
52
|
+
execute(_toolCallId: string, params: Record<string, unknown>): Promise<{
|
|
53
|
+
isError?: boolean | undefined;
|
|
54
|
+
content: {
|
|
55
|
+
type: string;
|
|
56
|
+
text: string;
|
|
57
|
+
}[];
|
|
58
|
+
}>;
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=sam-engineer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sam-engineer.d.ts","sourceRoot":"","sources":["../../src/tools/sam-engineer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,eAAe,EACvB,cAAc,EAAE,oBAAoB,EACpC,SAAS,EAAE,MAAM,SAAS,GAAG,IAAI,EACjC,eAAe,EAAE,CAAC,MAAM,OAAO,CAAC,cAAc,iCAAiC,CAAC,CAAC,CAAC,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyCpD,MAAM,EAAE;;yBAEhB,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;EAwHrE"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sam_engineer — Primary entry point for Sam's autonomous engineering loop.
|
|
3
|
+
*
|
|
4
|
+
* Creates an engine session, runs the NativeLoopEngine, returns the TurnResult.
|
|
5
|
+
* Transitions the ER to BUILD on first invocation, SELF-REVIEW on completion.
|
|
6
|
+
* Updates ER metadata with session state after each turn.
|
|
7
|
+
*
|
|
8
|
+
* Called by: Jessie (via task/assign → pipeline → sam_engineer),
|
|
9
|
+
* or directly by an LLM agent.
|
|
10
|
+
*/
|
|
11
|
+
export function createEngineerTool(pipeline, config, sessionManager, getMemory, createSessionFn) {
|
|
12
|
+
return {
|
|
13
|
+
name: 'sam_engineer',
|
|
14
|
+
description: 'Start or continue an autonomous engineering session for an ER. ' +
|
|
15
|
+
'Creates a git worktree, spins up the NativeLoopEngine, and runs a multi-iteration ' +
|
|
16
|
+
'tool-use loop with constitutional governance (Grillo ethics, Noah timestamps, Jessie escalation). ' +
|
|
17
|
+
'Returns the turn result including files changed, cost, and audit chain head.',
|
|
18
|
+
parameters: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {
|
|
21
|
+
er_id: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'Engineering Request ID (e.g. "ER-042")',
|
|
24
|
+
},
|
|
25
|
+
prompt: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
description: 'The engineering task description / instructions for this turn',
|
|
28
|
+
},
|
|
29
|
+
repo: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
description: 'Git repository path (defaults to workspace root)',
|
|
32
|
+
},
|
|
33
|
+
branch: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'Base branch to create worktree from (default: current HEAD)',
|
|
36
|
+
},
|
|
37
|
+
resume: {
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
description: 'If true, resume an existing paused session instead of creating a new one',
|
|
40
|
+
},
|
|
41
|
+
budget_tokens_override: {
|
|
42
|
+
type: 'number',
|
|
43
|
+
description: 'Override the default token budget for this session',
|
|
44
|
+
},
|
|
45
|
+
budget_usd_override: {
|
|
46
|
+
type: 'number',
|
|
47
|
+
description: 'Override the default USD budget for this session',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
required: ['er_id', 'prompt'],
|
|
51
|
+
},
|
|
52
|
+
async execute(_toolCallId, params) {
|
|
53
|
+
if (!config.engineEnabled) {
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: 'text', text: 'Engine not enabled. Set engineEnabled: true and provide anthropicApiKey in Sam\'s plugin config.' }],
|
|
56
|
+
isError: true,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (!config.anthropicApiKey) {
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: 'text', text: 'Missing anthropicApiKey in Sam\'s plugin config. Cannot start engine session.' }],
|
|
62
|
+
isError: true,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (!createSessionFn) {
|
|
66
|
+
return {
|
|
67
|
+
content: [{ type: 'text', text: 'sam-engine-bridge module not loaded. Check that @aiassesstech/sam-engine-bridge is installed.' }],
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const erId = params.er_id;
|
|
72
|
+
const prompt = params.prompt;
|
|
73
|
+
const shouldResume = params.resume === true;
|
|
74
|
+
const budgetTokens = params.budget_tokens_override;
|
|
75
|
+
const budgetUsd = params.budget_usd_override;
|
|
76
|
+
try {
|
|
77
|
+
const bridge = await createSessionFn();
|
|
78
|
+
let session = sessionManager.get(erId);
|
|
79
|
+
if (shouldResume && session) {
|
|
80
|
+
const result = await session.sendTurn(prompt);
|
|
81
|
+
await syncErMetadata(erId, session, pipeline);
|
|
82
|
+
return {
|
|
83
|
+
content: [{ type: 'text', text: JSON.stringify(formatTurnResult(erId, result), null, 2) }],
|
|
84
|
+
...(result.blockedBy ? { isError: true } : {}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (session) {
|
|
88
|
+
return {
|
|
89
|
+
content: [{ type: 'text', text: `Session already active for ${erId}. Use resume: true to continue, or sam_engineer_terminate to stop it first.` }],
|
|
90
|
+
isError: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const workdir = `${config.worktreeBasePath ?? '/root/sam/worktrees'}/${erId}`;
|
|
94
|
+
session = await bridge.createSession({
|
|
95
|
+
erId,
|
|
96
|
+
workdir,
|
|
97
|
+
model: config.engineModel,
|
|
98
|
+
maxIterations: config.maxIterations,
|
|
99
|
+
budgetTokens: budgetTokens ?? config.maxBudgetTokens,
|
|
100
|
+
budgetUsdCents: budgetUsd ? budgetUsd * 100 : (config.maxBudgetUsd ?? 10) * 100,
|
|
101
|
+
timeoutMs: config.sessionTimeoutMs,
|
|
102
|
+
apiKey: config.anthropicApiKey,
|
|
103
|
+
grilloEndpoint: config.grilloEndpoint,
|
|
104
|
+
noahEndpoint: config.noahEndpoint,
|
|
105
|
+
jessieEndpoint: config.jessieEndpoint,
|
|
106
|
+
permissionPolicy: bridge.createDefaultPolicy(workdir),
|
|
107
|
+
});
|
|
108
|
+
sessionManager.set(erId, session);
|
|
109
|
+
// Transition ER to BUILD
|
|
110
|
+
await pipeline.handleRequest({
|
|
111
|
+
action: 'update',
|
|
112
|
+
er_id: erId,
|
|
113
|
+
stage: 'BUILD',
|
|
114
|
+
notes: `Engine session started — model: ${config.engineModel}, budget: ${budgetTokens ?? config.maxBudgetTokens} tokens / $${budgetUsd ?? config.maxBudgetUsd}`,
|
|
115
|
+
}).catch(() => { });
|
|
116
|
+
const result = await session.sendTurn(prompt);
|
|
117
|
+
await syncErMetadata(erId, session, pipeline);
|
|
118
|
+
if (result.success) {
|
|
119
|
+
await pipeline.handleRequest({
|
|
120
|
+
action: 'update',
|
|
121
|
+
er_id: erId,
|
|
122
|
+
stage: 'SELF-REVIEW',
|
|
123
|
+
notes: `Engine completed: ${result.iterations} iterations, ${result.toolCalls.length} tool calls, $${(result.usage.costUsdCents / 100).toFixed(4)}`,
|
|
124
|
+
}).catch(() => { });
|
|
125
|
+
}
|
|
126
|
+
const memory = getMemory();
|
|
127
|
+
if (memory) {
|
|
128
|
+
memory.writer?.write?.({
|
|
129
|
+
agent: 'sam',
|
|
130
|
+
type: 'engine-session',
|
|
131
|
+
tags: ['engineering', 'engine', erId],
|
|
132
|
+
title: `Engine Session: ${erId}`,
|
|
133
|
+
body: `## Engine Session\n\n` +
|
|
134
|
+
`**ER**: ${erId}\n` +
|
|
135
|
+
`**Success**: ${result.success}\n` +
|
|
136
|
+
`**Iterations**: ${result.iterations}\n` +
|
|
137
|
+
`**Tool Calls**: ${result.toolCalls.length}\n` +
|
|
138
|
+
`**Cost**: $${(result.usage.costUsdCents / 100).toFixed(4)}\n` +
|
|
139
|
+
`**Audit Head**: ${result.auditHead}\n`,
|
|
140
|
+
metadata: { er_id: erId, success: result.success, iterations: result.iterations },
|
|
141
|
+
}).catch(() => { });
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
content: [{ type: 'text', text: JSON.stringify(formatTurnResult(erId, result), null, 2) }],
|
|
145
|
+
...(result.blockedBy ? { isError: true } : {}),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
return {
|
|
150
|
+
content: [{ type: 'text', text: `sam_engineer error: ${err instanceof Error ? err.message : String(err)}` }],
|
|
151
|
+
isError: true,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function formatTurnResult(erId, result) {
|
|
158
|
+
return {
|
|
159
|
+
er_id: erId,
|
|
160
|
+
success: result.success,
|
|
161
|
+
iterations: result.iterations,
|
|
162
|
+
toolCallCount: result.toolCalls.length,
|
|
163
|
+
finalText: result.finalText?.slice(0, 2_000),
|
|
164
|
+
finalTextTruncated: (result.finalText?.length ?? 0) > 2_000,
|
|
165
|
+
usage: result.usage,
|
|
166
|
+
auditHead: result.auditHead,
|
|
167
|
+
blockedBy: result.blockedBy,
|
|
168
|
+
blockReason: result.blockReason,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
async function syncErMetadata(erId, session, pipeline) {
|
|
172
|
+
try {
|
|
173
|
+
const status = await session.getStatus();
|
|
174
|
+
const usage = await session.getUsage();
|
|
175
|
+
await pipeline.handleRequest({
|
|
176
|
+
action: 'update',
|
|
177
|
+
er_id: erId,
|
|
178
|
+
notes: `[engine-sync] turns=${status.turnCount}, cost=$${(usage.totalCostUsdCents / 100).toFixed(4)}, audit=${status.auditHead.slice(0, 8)}`,
|
|
179
|
+
});
|
|
180
|
+
const ers = pipeline.store?.data?.requests;
|
|
181
|
+
if (Array.isArray(ers)) {
|
|
182
|
+
const er = ers.find((r) => r.id === erId);
|
|
183
|
+
if (er) {
|
|
184
|
+
er.engineSessionId = status.sessionId;
|
|
185
|
+
er.engineTurnCount = status.turnCount;
|
|
186
|
+
er.engineCostUsd = usage.totalCostUsdCents / 100;
|
|
187
|
+
er.engineAuditHead = status.auditHead;
|
|
188
|
+
er.engineWorktreePath = status.sessionId;
|
|
189
|
+
er.engineLastGrilloVerdict = status.lastGrilloVerdict;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch { /* non-fatal metadata sync */ }
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=sam-engineer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sam-engineer.js","sourceRoot":"","sources":["../../src/tools/sam-engineer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sam-pipeline.d.ts","sourceRoot":"","sources":["../../src/tools/sam-pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"sam-pipeline.d.ts","sourceRoot":"","sources":["../../src/tools/sam-pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AA6BvE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe;;;;;;;;;;;;kBActC,MAAM,EAAE;;yBAEC,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;EAsCrE"}
|
|
@@ -16,6 +16,16 @@ function formatER(er) {
|
|
|
16
16
|
updatedAt: er.updatedAt,
|
|
17
17
|
...(er.deliveredAt ? { deliveredAt: er.deliveredAt } : {}),
|
|
18
18
|
notesCount: er.notes.length,
|
|
19
|
+
...(er.engineSessionId ? {
|
|
20
|
+
engine: {
|
|
21
|
+
sessionId: er.engineSessionId,
|
|
22
|
+
turnCount: er.engineTurnCount,
|
|
23
|
+
costUsd: er.engineCostUsd,
|
|
24
|
+
auditHead: er.engineAuditHead,
|
|
25
|
+
worktreePath: er.engineWorktreePath,
|
|
26
|
+
lastGrilloVerdict: er.engineLastGrilloVerdict,
|
|
27
|
+
},
|
|
28
|
+
} : {}),
|
|
19
29
|
};
|
|
20
30
|
}
|
|
21
31
|
export function createPipelineTool(pipeline) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sam-pipeline.js","sourceRoot":"","sources":["../../src/tools/sam-pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,SAAS,QAAQ,CAAC,EAAsB;IACtC,OAAO;QACL,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"sam-pipeline.js","sourceRoot":"","sources":["../../src/tools/sam-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { PipelineManager } from '../pipeline/pipeline-manager.js';
|
|
7
7
|
import type { SamPluginConfig } from '../pipeline/types.js';
|
|
8
|
-
|
|
8
|
+
import type { EngineSessionManager } from './engine-session-manager.js';
|
|
9
|
+
export declare function createStatusTool(pipeline: PipelineManager, config: SamPluginConfig, fleetBusStatus: () => string, engineSessions?: EngineSessionManager): {
|
|
9
10
|
name: string;
|
|
10
11
|
description: string;
|
|
11
12
|
parameters: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sam-status.d.ts","sourceRoot":"","sources":["../../src/tools/sam-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"sam-status.d.ts","sourceRoot":"","sources":["../../src/tools/sam-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,eAAe,EACvB,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,CAAC,EAAE,oBAAoB;;;;;;;yBAOR,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;EAwCtE"}
|
package/dist/tools/sam-status.js
CHANGED
|
@@ -3,20 +3,21 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Called by: Jessie (morning briefing), Mighty Mark (health checks), Greg
|
|
5
5
|
*/
|
|
6
|
-
export function createStatusTool(pipeline, config, fleetBusStatus) {
|
|
6
|
+
export function createStatusTool(pipeline, config, fleetBusStatus, engineSessions) {
|
|
7
7
|
return {
|
|
8
8
|
name: 'sam_status',
|
|
9
|
-
description: 'Get Sam\'s current state — active ERs, blocked ERs, sandbox status, fleet-bus status. Use for morning briefings and health checks.',
|
|
9
|
+
description: 'Get Sam\'s current state — active ERs, blocked ERs, sandbox status, fleet-bus status, engine status. Use for morning briefings and health checks.',
|
|
10
10
|
parameters: { type: 'object', properties: {} },
|
|
11
11
|
async execute(_toolCallId, _params) {
|
|
12
12
|
try {
|
|
13
13
|
const summary = pipeline.getSummary();
|
|
14
14
|
const lastActivity = pipeline.getLastActivity();
|
|
15
|
+
const activeSessions = engineSessions?.activeCount() ?? 0;
|
|
15
16
|
const result = {
|
|
16
17
|
agent: {
|
|
17
18
|
name: 'Sam',
|
|
18
19
|
role: 'Chief Engineer',
|
|
19
|
-
version: '0.
|
|
20
|
+
version: '0.4.0',
|
|
20
21
|
internalName: 'SAM2',
|
|
21
22
|
},
|
|
22
23
|
pipeline: summary,
|
|
@@ -25,6 +26,13 @@ export function createStatusTool(pipeline, config, fleetBusStatus) {
|
|
|
25
26
|
status: config.sandboxEnabled ? 'available' : 'unavailable',
|
|
26
27
|
},
|
|
27
28
|
fleetBus: fleetBusStatus(),
|
|
29
|
+
engine: {
|
|
30
|
+
status: !config.engineEnabled ? 'disabled' : activeSessions > 0 ? 'active' : 'enabled',
|
|
31
|
+
activeSessions,
|
|
32
|
+
activeErIds: engineSessions?.activeErIds() ?? [],
|
|
33
|
+
model: config.engineModel ?? 'claude-sonnet-4-6',
|
|
34
|
+
grilloFailMode: config.grilloFailMode ?? 'fail_closed',
|
|
35
|
+
},
|
|
28
36
|
};
|
|
29
37
|
return {
|
|
30
38
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sam-status.js","sourceRoot":"","sources":["../../src/tools/sam-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"sam-status.js","sourceRoot":"","sources":["../../src/tools/sam-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,UAAU,gBAAgB,CAC9B,QAAyB,EACzB,MAAuB,EACvB,cAA4B,EAC5B,cAAqC;IAErC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,mJAAmJ;QACrJ,UAAU,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE,EAAE,EAAE;QACvD,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,OAAgC;YACjE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAEhD,MAAM,cAAc,GAAG,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBAE1D,MAAM,MAAM,GAAoB;oBAC9B,KAAK,EAAE;wBACL,IAAI,EAAE,KAAK;wBACX,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,OAAO;wBAChB,YAAY,EAAE,MAAM;qBACrB;oBACD,QAAQ,EAAE,OAAO;oBACjB,YAAY;oBACZ,OAAO,EAAE;wBACP,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;qBAC5D;oBACD,QAAQ,EAAE,cAAc,EAAiC;oBACzD,MAAM,EAAE;wBACN,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;wBACtF,cAAc;wBACd,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE;wBAChD,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,mBAAmB;wBAChD,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,aAAa;qBACvD;iBACF,CAAC;gBAEF,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBACnE,CAAC;YACJ,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBAC1G,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -40,6 +40,68 @@
|
|
|
40
40
|
"telegramChatId": {
|
|
41
41
|
"type": "string",
|
|
42
42
|
"description": "Telegram chat ID for engineering updates to Greg"
|
|
43
|
+
},
|
|
44
|
+
"engineEnabled": {
|
|
45
|
+
"type": "boolean",
|
|
46
|
+
"description": "Enable the NativeLoopEngine for autonomous engineering sessions",
|
|
47
|
+
"default": false
|
|
48
|
+
},
|
|
49
|
+
"anthropicApiKey": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "Sam's dedicated Anthropic API key for engine sessions"
|
|
52
|
+
},
|
|
53
|
+
"engineModel": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "Model for engine sessions",
|
|
56
|
+
"default": "claude-sonnet-4-6"
|
|
57
|
+
},
|
|
58
|
+
"worktreeBasePath": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"description": "Base directory for per-ER git worktrees",
|
|
61
|
+
"default": "/root/sam/worktrees"
|
|
62
|
+
},
|
|
63
|
+
"maxBudgetUsd": {
|
|
64
|
+
"type": "number",
|
|
65
|
+
"description": "Maximum USD budget per engine session",
|
|
66
|
+
"default": 10.0
|
|
67
|
+
},
|
|
68
|
+
"maxBudgetTokens": {
|
|
69
|
+
"type": "number",
|
|
70
|
+
"description": "Maximum token budget per engine session",
|
|
71
|
+
"default": 500000
|
|
72
|
+
},
|
|
73
|
+
"maxIterations": {
|
|
74
|
+
"type": "number",
|
|
75
|
+
"description": "Maximum tool-use iterations per engine turn",
|
|
76
|
+
"default": 50
|
|
77
|
+
},
|
|
78
|
+
"sessionTimeoutMs": {
|
|
79
|
+
"type": "number",
|
|
80
|
+
"description": "Session timeout in milliseconds",
|
|
81
|
+
"default": 1800000
|
|
82
|
+
},
|
|
83
|
+
"grilloFailMode": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"enum": ["fail_closed", "fail_open"],
|
|
86
|
+
"description": "Grillo governance fail mode. MUST be fail_closed in production (BB-A5)",
|
|
87
|
+
"default": "fail_closed"
|
|
88
|
+
},
|
|
89
|
+
"jessieResponseTimeoutMs": {
|
|
90
|
+
"type": "number",
|
|
91
|
+
"description": "How long to wait for Jessie escalation response before hard termination (BB-A6)",
|
|
92
|
+
"default": 1800000
|
|
93
|
+
},
|
|
94
|
+
"grilloEndpoint": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"description": "Grillo HTTP endpoint for pre-execution ethical assessment"
|
|
97
|
+
},
|
|
98
|
+
"noahEndpoint": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"description": "Noah HTTP endpoint for temporal signatures"
|
|
101
|
+
},
|
|
102
|
+
"jessieEndpoint": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"description": "Jessie HTTP endpoint for escalation handling"
|
|
43
105
|
}
|
|
44
106
|
},
|
|
45
107
|
"required": []
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiassesstech/sam",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Sam — Chief Engineer plugin for OpenClaw. Engineering pipeline, Docker sandbox, autonomous execution, fleet-bus communications.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -54,7 +54,8 @@
|
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@aiassesstech/fleet-alerting": "^0.1.2",
|
|
56
56
|
"@aiassesstech/fleet-bus": "^0.3.0",
|
|
57
|
-
"@aiassesstech/prompt-shield": "^0.1.0"
|
|
57
|
+
"@aiassesstech/prompt-shield": "^0.1.0",
|
|
58
|
+
"@aiassesstech/sam-engine-bridge": "file:../sam-engine-bridge"
|
|
58
59
|
},
|
|
59
60
|
"peerDependencies": {
|
|
60
61
|
"@aiassesstech/mighty-mark": ">=0.3.0"
|