@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.
Files changed (56) hide show
  1. package/README.md +41 -0
  2. package/dist/compilation/wiki-compiler.d.ts +50 -0
  3. package/dist/compilation/wiki-compiler.d.ts.map +1 -0
  4. package/dist/compilation/wiki-compiler.js +158 -0
  5. package/dist/compilation/wiki-compiler.js.map +1 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/memory/direct-writer.d.ts.map +1 -1
  11. package/dist/memory/direct-writer.js +1 -0
  12. package/dist/memory/direct-writer.js.map +1 -1
  13. package/dist/pipeline/types.d.ts +26 -0
  14. package/dist/pipeline/types.d.ts.map +1 -1
  15. package/dist/pipeline/types.js +9 -0
  16. package/dist/pipeline/types.js.map +1 -1
  17. package/dist/plugin.d.ts.map +1 -1
  18. package/dist/plugin.js +240 -11
  19. package/dist/plugin.js.map +1 -1
  20. package/dist/tools/engine-session-manager.d.ts +18 -0
  21. package/dist/tools/engine-session-manager.d.ts.map +1 -0
  22. package/dist/tools/engine-session-manager.js +29 -0
  23. package/dist/tools/engine-session-manager.js.map +1 -0
  24. package/dist/tools/sam-artifact.d.ts +2 -1
  25. package/dist/tools/sam-artifact.d.ts.map +1 -1
  26. package/dist/tools/sam-artifact.js +15 -2
  27. package/dist/tools/sam-artifact.js.map +1 -1
  28. package/dist/tools/sam-engineer-diff.d.ts +39 -0
  29. package/dist/tools/sam-engineer-diff.d.ts.map +1 -0
  30. package/dist/tools/sam-engineer-diff.js +61 -0
  31. package/dist/tools/sam-engineer-diff.js.map +1 -0
  32. package/dist/tools/sam-engineer-resume.d.ts +34 -0
  33. package/dist/tools/sam-engineer-resume.d.ts.map +1 -0
  34. package/dist/tools/sam-engineer-resume.js +91 -0
  35. package/dist/tools/sam-engineer-resume.js.map +1 -0
  36. package/dist/tools/sam-engineer-status.d.ts +34 -0
  37. package/dist/tools/sam-engineer-status.d.ts.map +1 -0
  38. package/dist/tools/sam-engineer-status.js +66 -0
  39. package/dist/tools/sam-engineer-status.js.map +1 -0
  40. package/dist/tools/sam-engineer-terminate.d.ts +41 -0
  41. package/dist/tools/sam-engineer-terminate.d.ts.map +1 -0
  42. package/dist/tools/sam-engineer-terminate.js +88 -0
  43. package/dist/tools/sam-engineer-terminate.js.map +1 -0
  44. package/dist/tools/sam-engineer.d.ts +60 -0
  45. package/dist/tools/sam-engineer.d.ts.map +1 -0
  46. package/dist/tools/sam-engineer.js +195 -0
  47. package/dist/tools/sam-engineer.js.map +1 -0
  48. package/dist/tools/sam-pipeline.d.ts.map +1 -1
  49. package/dist/tools/sam-pipeline.js +10 -0
  50. package/dist/tools/sam-pipeline.js.map +1 -1
  51. package/dist/tools/sam-status.d.ts +2 -1
  52. package/dist/tools/sam-status.d.ts.map +1 -1
  53. package/dist/tools/sam-status.js +11 -3
  54. package/dist/tools/sam-status.js.map +1 -1
  55. package/openclaw.plugin.json +68 -3
  56. package/package.json +5 -4
@@ -0,0 +1,39 @@
1
+ /**
2
+ * sam_engineer_diff — Return the git diff from an engine session's worktree.
3
+ *
4
+ * Three output formats: summary (files only), stat (insertions/deletions), full (patch).
5
+ */
6
+ import type { EngineSessionManager } from './engine-session-manager.js';
7
+ export declare function createEngineerDiffTool(sessionManager: EngineSessionManager): {
8
+ name: string;
9
+ description: string;
10
+ parameters: {
11
+ type: "object";
12
+ properties: {
13
+ er_id: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ format: {
18
+ type: string;
19
+ enum: string[];
20
+ description: string;
21
+ };
22
+ };
23
+ required: string[];
24
+ };
25
+ execute(_toolCallId: string, params: Record<string, unknown>): Promise<{
26
+ content: {
27
+ type: string;
28
+ text: string;
29
+ }[];
30
+ isError: boolean;
31
+ } | {
32
+ content: {
33
+ type: string;
34
+ text: string;
35
+ }[];
36
+ isError?: undefined;
37
+ }>;
38
+ };
39
+ //# sourceMappingURL=sam-engineer-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sam-engineer-diff.d.ts","sourceRoot":"","sources":["../../src/tools/sam-engineer-diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,oBAAoB;;;;;;;;;;;;;;;;kBAmB9C,MAAM,EAAE;;yBAEN,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;EAqCrE"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * sam_engineer_diff — Return the git diff from an engine session's worktree.
3
+ *
4
+ * Three output formats: summary (files only), stat (insertions/deletions), full (patch).
5
+ */
6
+ export function createEngineerDiffTool(sessionManager) {
7
+ return {
8
+ name: 'sam_engineer_diff',
9
+ description: 'Get the git diff from an engine session\'s worktree. ' +
10
+ 'Formats: "summary" (files only), "stat" (insertions/deletions), "full" (patch).',
11
+ parameters: {
12
+ type: 'object',
13
+ properties: {
14
+ er_id: {
15
+ type: 'string',
16
+ description: 'Engineering Request ID',
17
+ },
18
+ format: {
19
+ type: 'string',
20
+ enum: ['summary', 'stat', 'full'],
21
+ description: 'Diff output format (default: "stat")',
22
+ },
23
+ },
24
+ required: ['er_id'],
25
+ },
26
+ async execute(_toolCallId, params) {
27
+ const erId = params.er_id;
28
+ const format = params.format ?? 'stat';
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 diff = await session.getGitDiff(format);
38
+ const truncated = diff.length > 50_000;
39
+ const output = truncated ? diff.slice(0, 50_000) : diff;
40
+ return {
41
+ content: [{
42
+ type: 'text',
43
+ text: JSON.stringify({
44
+ er_id: erId,
45
+ format,
46
+ diff: output,
47
+ ...(truncated ? { truncated: true, totalLength: diff.length } : {}),
48
+ }, null, 2),
49
+ }],
50
+ };
51
+ }
52
+ catch (err) {
53
+ return {
54
+ content: [{ type: 'text', text: `sam_engineer_diff error: ${err instanceof Error ? err.message : String(err)}` }],
55
+ isError: true,
56
+ };
57
+ }
58
+ },
59
+ };
60
+ }
61
+ //# sourceMappingURL=sam-engineer-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sam-engineer-diff.js","sourceRoot":"","sources":["../../src/tools/sam-engineer-diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,UAAU,sBAAsB,CAAC,cAAoC;IACzE,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,uDAAuD;YACvD,iFAAiF;QACnF,UAAU,EAAE;YACV,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wBAAwB;iBACtC;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;oBACjC,WAAW,EAAE,sCAAsC;iBACpD;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAa;SAChC;QACD,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAA+B;YAChE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAe,CAAC;YACpC,MAAM,MAAM,GAAI,MAAM,CAAC,MAAsC,IAAI,MAAM,CAAC;YACxE,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,IAAI,GAAG,EAAE,CAAC;oBAC1E,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAExD,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,IAAI;gCACX,MAAM;gCACN,IAAI,EAAE,MAAM;gCACZ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BACpE,EAAE,IAAI,EAAE,CAAC,CAAC;yBACZ,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACjH,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * sam_engineer_resume — Resume a paused engine session with optional new guidance.
3
+ *
4
+ * Used after Jessie escalation resolves, or when an operator wants to redirect
5
+ * a paused session with updated instructions.
6
+ */
7
+ import type { PipelineManager } from '../pipeline/pipeline-manager.js';
8
+ import type { EngineSessionManager } from './engine-session-manager.js';
9
+ export declare function createEngineerResumeTool(pipeline: PipelineManager, sessionManager: EngineSessionManager): {
10
+ name: string;
11
+ description: string;
12
+ parameters: {
13
+ type: "object";
14
+ properties: {
15
+ er_id: {
16
+ type: string;
17
+ description: string;
18
+ };
19
+ new_guidance: {
20
+ type: string;
21
+ description: string;
22
+ };
23
+ };
24
+ required: string[];
25
+ };
26
+ execute(_toolCallId: string, params: Record<string, unknown>): Promise<{
27
+ isError?: boolean | undefined;
28
+ content: {
29
+ type: string;
30
+ text: string;
31
+ }[];
32
+ }>;
33
+ };
34
+ //# sourceMappingURL=sam-engineer-resume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sam-engineer-resume.d.ts","sourceRoot":"","sources":["../../src/tools/sam-engineer-resume.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,oBAAoB;;;;;;;;;;;;;;;kBAmBT,MAAM,EAAE;;yBAEN,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;EAsErE"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * sam_engineer_resume — Resume a paused engine session with optional new guidance.
3
+ *
4
+ * Used after Jessie escalation resolves, or when an operator wants to redirect
5
+ * a paused session with updated instructions.
6
+ */
7
+ export function createEngineerResumeTool(pipeline, sessionManager) {
8
+ return {
9
+ name: 'sam_engineer_resume',
10
+ description: 'Resume a paused engine session with optional new guidance. ' +
11
+ 'Used after escalation resolution or to redirect an in-progress session.',
12
+ parameters: {
13
+ type: 'object',
14
+ properties: {
15
+ er_id: {
16
+ type: 'string',
17
+ description: 'Engineering Request ID to resume',
18
+ },
19
+ new_guidance: {
20
+ type: 'string',
21
+ description: 'Optional updated instructions to send as the next turn prompt',
22
+ },
23
+ },
24
+ required: ['er_id'],
25
+ },
26
+ async execute(_toolCallId, params) {
27
+ const erId = params.er_id;
28
+ const guidance = params.new_guidance;
29
+ const session = sessionManager.get(erId);
30
+ if (!session) {
31
+ return {
32
+ content: [{ type: 'text', text: `No engine session found for ${erId}. Cannot resume.` }],
33
+ isError: true,
34
+ };
35
+ }
36
+ try {
37
+ const statusBefore = await session.getStatus();
38
+ if (statusBefore.state !== 'paused' && statusBefore.state !== 'blocked') {
39
+ return {
40
+ content: [{
41
+ type: 'text',
42
+ text: `Session for ${erId} is in state "${statusBefore.state}" — only paused or blocked sessions can be resumed.`,
43
+ }],
44
+ isError: true,
45
+ };
46
+ }
47
+ const prompt = guidance ?? 'Continue where you left off. The escalation has been resolved — proceed with the original task.';
48
+ const result = await session.sendTurn(prompt);
49
+ const status = await session.getStatus();
50
+ const usage = await session.getUsage();
51
+ await pipeline.handleRequest({
52
+ action: 'update',
53
+ er_id: erId,
54
+ notes: `[engine-resumed] turns=${status.turnCount}, cost=$${(usage.totalCostUsdCents / 100).toFixed(4)}`,
55
+ }).catch(() => { });
56
+ if (result.success) {
57
+ await pipeline.handleRequest({
58
+ action: 'update',
59
+ er_id: erId,
60
+ stage: 'SELF-REVIEW',
61
+ notes: `Engine resumed and completed: ${result.iterations} iterations`,
62
+ }).catch(() => { });
63
+ }
64
+ return {
65
+ content: [{
66
+ type: 'text',
67
+ text: JSON.stringify({
68
+ er_id: erId,
69
+ resumed: true,
70
+ success: result.success,
71
+ iterations: result.iterations,
72
+ toolCallCount: result.toolCalls.length,
73
+ usage: result.usage,
74
+ auditHead: result.auditHead,
75
+ blockedBy: result.blockedBy,
76
+ blockReason: result.blockReason,
77
+ }, null, 2),
78
+ }],
79
+ ...(result.blockedBy ? { isError: true } : {}),
80
+ };
81
+ }
82
+ catch (err) {
83
+ return {
84
+ content: [{ type: 'text', text: `sam_engineer_resume error: ${err instanceof Error ? err.message : String(err)}` }],
85
+ isError: true,
86
+ };
87
+ }
88
+ },
89
+ };
90
+ }
91
+ //# sourceMappingURL=sam-engineer-resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sam-engineer-resume.js","sourceRoot":"","sources":["../../src/tools/sam-engineer-resume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * sam_engineer_status — Return the current state of an engine session.
3
+ *
4
+ * Reports: session state, turn count, cost, files changed, last Grillo verdict.
5
+ */
6
+ import type { EngineSessionManager } from './engine-session-manager.js';
7
+ export declare function createEngineerStatusTool(sessionManager: EngineSessionManager): {
8
+ name: string;
9
+ description: string;
10
+ parameters: {
11
+ type: "object";
12
+ properties: {
13
+ er_id: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ };
18
+ required: string[];
19
+ };
20
+ execute(_toolCallId: string, params: Record<string, unknown>): Promise<{
21
+ content: {
22
+ type: string;
23
+ text: string;
24
+ }[];
25
+ isError: boolean;
26
+ } | {
27
+ content: {
28
+ type: string;
29
+ text: string;
30
+ }[];
31
+ isError?: undefined;
32
+ }>;
33
+ };
34
+ //# sourceMappingURL=sam-engineer-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sam-engineer-status.d.ts","sourceRoot":"","sources":["../../src/tools/sam-engineer-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,oBAAoB;;;;;;;;;;;kBAchD,MAAM,EAAE;;yBAEN,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;EA8CrE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * sam_engineer_status — Return the current state of an engine session.
3
+ *
4
+ * Reports: session state, turn count, cost, files changed, last Grillo verdict.
5
+ */
6
+ export function createEngineerStatusTool(sessionManager) {
7
+ return {
8
+ name: 'sam_engineer_status',
9
+ description: 'Get the current state of an engine session for an ER — turn count, cost, ' +
10
+ 'files changed, last Grillo verdict, audit chain head.',
11
+ parameters: {
12
+ type: 'object',
13
+ properties: {
14
+ er_id: {
15
+ type: 'string',
16
+ description: 'Engineering Request ID to check',
17
+ },
18
+ },
19
+ required: ['er_id'],
20
+ },
21
+ async execute(_toolCallId, params) {
22
+ const erId = params.er_id;
23
+ const session = sessionManager.get(erId);
24
+ if (!session) {
25
+ return {
26
+ content: [{ type: 'text', text: `No active engine session for ${erId}.` }],
27
+ isError: true,
28
+ };
29
+ }
30
+ try {
31
+ const status = await session.getStatus();
32
+ const usage = await session.getUsage();
33
+ return {
34
+ content: [{
35
+ type: 'text',
36
+ text: JSON.stringify({
37
+ er_id: erId,
38
+ state: status.state,
39
+ turnCount: status.turnCount,
40
+ iterationCount: status.iterationCount,
41
+ filesChanged: status.filesChanged,
42
+ lastToolCall: status.lastToolCall,
43
+ lastGrilloVerdict: status.lastGrilloVerdict,
44
+ auditHead: status.auditHead,
45
+ usage: {
46
+ totalInputTokens: usage.totalInputTokens,
47
+ totalOutputTokens: usage.totalOutputTokens,
48
+ totalCostUsd: usage.totalCostUsdCents / 100,
49
+ turns: usage.turnCount,
50
+ },
51
+ startedAt: status.startedAt,
52
+ updatedAt: status.updatedAt,
53
+ }, null, 2),
54
+ }],
55
+ };
56
+ }
57
+ catch (err) {
58
+ return {
59
+ content: [{ type: 'text', text: `sam_engineer_status error: ${err instanceof Error ? err.message : String(err)}` }],
60
+ isError: true,
61
+ };
62
+ }
63
+ },
64
+ };
65
+ }
66
+ //# sourceMappingURL=sam-engineer-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sam-engineer-status.js","sourceRoot":"","sources":["../../src/tools/sam-engineer-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,UAAU,wBAAwB,CAAC,cAAoC;IAC3E,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,2EAA2E;YAC3E,uDAAuD;QACzD,UAAU,EAAE;YACV,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iCAAiC;iBAC/C;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAa;SAChC;QACD,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAA+B;YAChE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAe,CAAC;YACpC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,IAAI,GAAG,EAAE,CAAC;oBAC1E,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAEvC,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,IAAI;gCACX,KAAK,EAAE,MAAM,CAAC,KAAK;gCACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gCAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;gCACrC,YAAY,EAAE,MAAM,CAAC,YAAY;gCACjC,YAAY,EAAE,MAAM,CAAC,YAAY;gCACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gCAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;gCAC3B,KAAK,EAAE;oCACL,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;oCACxC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;oCAC1C,YAAY,EAAE,KAAK,CAAC,iBAAiB,GAAG,GAAG;oCAC3C,KAAK,EAAE,KAAK,CAAC,SAAS;iCACvB;gCACD,SAAS,EAAE,MAAM,CAAC,SAAS;gCAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;6BAC5B,EAAE,IAAI,EAAE,CAAC,CAAC;yBACZ,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACnH,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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"}