@aiassesstech/sam 0.3.16 → 0.5.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/compilation/wiki-compiler.d.ts +50 -0
- package/dist/compilation/wiki-compiler.d.ts.map +1 -0
- package/dist/compilation/wiki-compiler.js +158 -0
- package/dist/compilation/wiki-compiler.js.map +1 -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/memory/direct-writer.d.ts.map +1 -1
- package/dist/memory/direct-writer.js +1 -0
- package/dist/memory/direct-writer.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 +68 -3
- package/package.json +5 -4
|
@@ -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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "sam",
|
|
3
|
-
"name": "Sam
|
|
4
|
-
"description": "Chief Engineer plugin
|
|
5
|
-
"version": "0.
|
|
3
|
+
"name": "Sam \u2014 Chief Engineer",
|
|
4
|
+
"description": "Chief Engineer plugin \u2014 engineering pipeline management, Docker sandbox execution, autonomous build/test/deliver lifecycle, fleet-bus communications, and searchable engineering memory.",
|
|
5
|
+
"version": "0.5.0",
|
|
6
6
|
"entry": "dist/plugin.js",
|
|
7
7
|
"configSchema": {
|
|
8
8
|
"type": "object",
|
|
@@ -40,6 +40,71 @@
|
|
|
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": [
|
|
86
|
+
"fail_closed",
|
|
87
|
+
"fail_open"
|
|
88
|
+
],
|
|
89
|
+
"description": "Grillo governance fail mode. MUST be fail_closed in production (BB-A5)",
|
|
90
|
+
"default": "fail_closed"
|
|
91
|
+
},
|
|
92
|
+
"jessieResponseTimeoutMs": {
|
|
93
|
+
"type": "number",
|
|
94
|
+
"description": "How long to wait for Jessie escalation response before hard termination (BB-A6)",
|
|
95
|
+
"default": 1800000
|
|
96
|
+
},
|
|
97
|
+
"grilloEndpoint": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"description": "Grillo HTTP endpoint for pre-execution ethical assessment"
|
|
100
|
+
},
|
|
101
|
+
"noahEndpoint": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"description": "Noah HTTP endpoint for temporal signatures"
|
|
104
|
+
},
|
|
105
|
+
"jessieEndpoint": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"description": "Jessie HTTP endpoint for escalation handling"
|
|
43
108
|
}
|
|
44
109
|
},
|
|
45
110
|
"required": []
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiassesstech/sam",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Sam
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Sam \u2014 Chief Engineer plugin for OpenClaw. Engineering pipeline, Docker sandbox, autonomous execution, fleet-bus communications.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -53,8 +53,9 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@aiassesstech/fleet-alerting": "^0.1.2",
|
|
56
|
-
"@aiassesstech/fleet-bus": "^0.
|
|
57
|
-
"@aiassesstech/prompt-shield": "^0.1.0"
|
|
56
|
+
"@aiassesstech/fleet-bus": "^0.5.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"
|