@aiassesstech/sam 0.1.1 → 0.2.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/agent/AGENTS.md +228 -0
- package/agent/BKUP/AGENTS.md.bkup +223 -0
- package/agent/BKUP/IDENTITY.md.bkup +13 -0
- package/agent/BKUP/SOUL.md.bkup +132 -0
- package/agent/IDENTITY.md +13 -0
- package/agent/SOUL.md +132 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +12 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/runner.d.ts +10 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +67 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/setup.d.ts +28 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +291 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/pipeline-manager.d.ts +34 -0
- package/dist/pipeline/pipeline-manager.d.ts.map +1 -0
- package/dist/pipeline/pipeline-manager.js +186 -0
- package/dist/pipeline/pipeline-manager.js.map +1 -0
- package/dist/pipeline/pipeline-store.d.ts +18 -0
- package/dist/pipeline/pipeline-store.d.ts.map +1 -0
- package/dist/pipeline/pipeline-store.js +70 -0
- package/dist/pipeline/pipeline-store.js.map +1 -0
- package/dist/pipeline/types.d.ts +73 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +30 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/plugin.d.ts +19 -10
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +153 -13
- package/dist/plugin.js.map +1 -1
- package/dist/tools/sam-pipeline.d.ts +35 -0
- package/dist/tools/sam-pipeline.d.ts.map +1 -0
- package/dist/tools/sam-pipeline.js +72 -0
- package/dist/tools/sam-pipeline.js.map +1 -0
- package/dist/tools/sam-report.d.ts +36 -0
- package/dist/tools/sam-report.d.ts.map +1 -0
- package/dist/tools/sam-report.js +174 -0
- package/dist/tools/sam-report.js.map +1 -0
- package/dist/tools/sam-request.d.ts +55 -0
- package/dist/tools/sam-request.d.ts.map +1 -0
- package/dist/tools/sam-request.js +91 -0
- package/dist/tools/sam-request.js.map +1 -0
- package/dist/tools/sam-status.d.ts +29 -0
- package/dist/tools/sam-status.d.ts.map +1 -0
- package/dist/tools/sam-status.js +42 -0
- package/dist/tools/sam-status.js.map +1 -0
- package/openclaw.plugin.json +39 -3
- package/package.json +20 -7
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAM2 Pipeline Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages Engineering Request lifecycle: create, update stage, close.
|
|
5
|
+
* Persists pipeline state to JSON in the configured data directory.
|
|
6
|
+
*/
|
|
7
|
+
import type { EngineeringRequest, RequestAction, SamPluginConfig } from './types.js';
|
|
8
|
+
export declare class PipelineManager {
|
|
9
|
+
private store;
|
|
10
|
+
constructor(config: SamPluginConfig);
|
|
11
|
+
initialize(): Promise<void>;
|
|
12
|
+
handleRequest(action: RequestAction): Promise<{
|
|
13
|
+
success: boolean;
|
|
14
|
+
message: string;
|
|
15
|
+
er?: EngineeringRequest;
|
|
16
|
+
}>;
|
|
17
|
+
private createER;
|
|
18
|
+
private updateER;
|
|
19
|
+
private closeER;
|
|
20
|
+
private validateStageTransition;
|
|
21
|
+
findER(id: string): EngineeringRequest | undefined;
|
|
22
|
+
getAll(): EngineeringRequest[];
|
|
23
|
+
getActive(): EngineeringRequest[];
|
|
24
|
+
getBlocked(): EngineeringRequest[];
|
|
25
|
+
getComplete(): EngineeringRequest[];
|
|
26
|
+
getLastActivity(): string | null;
|
|
27
|
+
getSummary(): {
|
|
28
|
+
total: number;
|
|
29
|
+
active: number;
|
|
30
|
+
blocked: number;
|
|
31
|
+
delivered: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=pipeline-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-manager.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipeline-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAGlB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAgB;gBAEjB,MAAM,EAAE,eAAe;IAI7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC;YAarG,QAAQ;YAoCR,QAAQ;YA4DR,OAAO;IA6BrB,OAAO,CAAC,uBAAuB;IAkC/B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIlD,MAAM,IAAI,kBAAkB,EAAE;IAI9B,SAAS,IAAI,kBAAkB,EAAE;IAMjC,UAAU,IAAI,kBAAkB,EAAE;IAIlC,WAAW,IAAI,kBAAkB,EAAE;IAInC,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,UAAU,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CASpF"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAM2 Pipeline Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages Engineering Request lifecycle: create, update stage, close.
|
|
5
|
+
* Persists pipeline state to JSON in the configured data directory.
|
|
6
|
+
*/
|
|
7
|
+
import { STAGE_ORDER } from './types.js';
|
|
8
|
+
import { PipelineStore } from './pipeline-store.js';
|
|
9
|
+
export class PipelineManager {
|
|
10
|
+
store;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.store = new PipelineStore(config.dataDir);
|
|
13
|
+
}
|
|
14
|
+
async initialize() {
|
|
15
|
+
await this.store.load();
|
|
16
|
+
}
|
|
17
|
+
async handleRequest(action) {
|
|
18
|
+
switch (action.action) {
|
|
19
|
+
case 'create':
|
|
20
|
+
return this.createER(action);
|
|
21
|
+
case 'update':
|
|
22
|
+
return this.updateER(action);
|
|
23
|
+
case 'close':
|
|
24
|
+
return this.closeER(action);
|
|
25
|
+
default:
|
|
26
|
+
return { success: false, message: `Unknown action: ${action.action}` };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async createER(action) {
|
|
30
|
+
if (!action.description) {
|
|
31
|
+
return { success: false, message: 'Missing required field: description' };
|
|
32
|
+
}
|
|
33
|
+
if (!action.requester) {
|
|
34
|
+
return { success: false, message: 'Missing required field: requester' };
|
|
35
|
+
}
|
|
36
|
+
const data = this.store.getData();
|
|
37
|
+
const now = new Date().toISOString();
|
|
38
|
+
const id = `ER-${new Date().getFullYear()}-${String(data.nextId).padStart(3, '0')}`;
|
|
39
|
+
const er = {
|
|
40
|
+
id,
|
|
41
|
+
description: action.description,
|
|
42
|
+
requester: action.requester,
|
|
43
|
+
stage: 'INTAKE',
|
|
44
|
+
blocked: false,
|
|
45
|
+
createdAt: now,
|
|
46
|
+
updatedAt: now,
|
|
47
|
+
buildAttempts: 0,
|
|
48
|
+
notes: [],
|
|
49
|
+
};
|
|
50
|
+
if (action.notes) {
|
|
51
|
+
er.notes.push(`[${now}] ${action.notes}`);
|
|
52
|
+
}
|
|
53
|
+
data.requests.push(er);
|
|
54
|
+
data.nextId++;
|
|
55
|
+
data.lastUpdated = now;
|
|
56
|
+
await this.store.save();
|
|
57
|
+
return { success: true, message: `Created ${id}: ${action.description}`, er };
|
|
58
|
+
}
|
|
59
|
+
async updateER(action) {
|
|
60
|
+
if (!action.er_id) {
|
|
61
|
+
return { success: false, message: 'Missing required field: er_id' };
|
|
62
|
+
}
|
|
63
|
+
const er = this.findER(action.er_id);
|
|
64
|
+
if (!er) {
|
|
65
|
+
return { success: false, message: `Engineering request not found: ${action.er_id}` };
|
|
66
|
+
}
|
|
67
|
+
if (er.stage === 'DELIVERED') {
|
|
68
|
+
return { success: false, message: `${action.er_id} is already DELIVERED — use close to finalize` };
|
|
69
|
+
}
|
|
70
|
+
const now = new Date().toISOString();
|
|
71
|
+
const changes = [];
|
|
72
|
+
if (action.stage) {
|
|
73
|
+
const validation = this.validateStageTransition(er.stage, action.stage);
|
|
74
|
+
if (!validation.valid) {
|
|
75
|
+
return { success: false, message: validation.reason };
|
|
76
|
+
}
|
|
77
|
+
const oldStage = er.stage;
|
|
78
|
+
er.stage = action.stage;
|
|
79
|
+
changes.push(`stage: ${oldStage} → ${action.stage}`);
|
|
80
|
+
if (action.stage === 'BUILD') {
|
|
81
|
+
er.buildAttempts++;
|
|
82
|
+
changes.push(`build attempt: ${er.buildAttempts}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (action.blocker !== undefined) {
|
|
86
|
+
if (action.blocker) {
|
|
87
|
+
er.blocked = true;
|
|
88
|
+
er.blocker = action.blocker;
|
|
89
|
+
changes.push(`BLOCKED: ${action.blocker}`);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
er.blocked = false;
|
|
93
|
+
er.blocker = undefined;
|
|
94
|
+
changes.push('UNBLOCKED');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (action.notes) {
|
|
98
|
+
er.notes.push(`[${now}] ${action.notes}`);
|
|
99
|
+
changes.push('note added');
|
|
100
|
+
}
|
|
101
|
+
er.updatedAt = now;
|
|
102
|
+
this.store.getData().lastUpdated = now;
|
|
103
|
+
await this.store.save();
|
|
104
|
+
return {
|
|
105
|
+
success: true,
|
|
106
|
+
message: `Updated ${action.er_id}: ${changes.join(', ')}`,
|
|
107
|
+
er,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
async closeER(action) {
|
|
111
|
+
if (!action.er_id) {
|
|
112
|
+
return { success: false, message: 'Missing required field: er_id' };
|
|
113
|
+
}
|
|
114
|
+
const er = this.findER(action.er_id);
|
|
115
|
+
if (!er) {
|
|
116
|
+
return { success: false, message: `Engineering request not found: ${action.er_id}` };
|
|
117
|
+
}
|
|
118
|
+
const now = new Date().toISOString();
|
|
119
|
+
er.stage = 'DELIVERED';
|
|
120
|
+
er.deliveredAt = now;
|
|
121
|
+
er.blocked = false;
|
|
122
|
+
er.blocker = undefined;
|
|
123
|
+
er.updatedAt = now;
|
|
124
|
+
if (action.notes) {
|
|
125
|
+
er.notes.push(`[${now}] DELIVERED: ${action.notes}`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
er.notes.push(`[${now}] DELIVERED`);
|
|
129
|
+
}
|
|
130
|
+
this.store.getData().lastUpdated = now;
|
|
131
|
+
await this.store.save();
|
|
132
|
+
return { success: true, message: `${action.er_id} DELIVERED`, er };
|
|
133
|
+
}
|
|
134
|
+
validateStageTransition(current, next) {
|
|
135
|
+
const currentOrder = STAGE_ORDER[current];
|
|
136
|
+
const nextOrder = STAGE_ORDER[next];
|
|
137
|
+
if (next === 'BUILD' && current === 'BUILD') {
|
|
138
|
+
return { valid: true };
|
|
139
|
+
}
|
|
140
|
+
if (next === 'BUILD' && current === 'SELF-REVIEW') {
|
|
141
|
+
return { valid: true };
|
|
142
|
+
}
|
|
143
|
+
if (nextOrder <= currentOrder) {
|
|
144
|
+
return {
|
|
145
|
+
valid: false,
|
|
146
|
+
reason: `Invalid stage transition: ${current} → ${next}. Pipeline moves forward (except BUILD ↔ SELF-REVIEW retries).`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (nextOrder > currentOrder + 1 && next !== 'DELIVERED') {
|
|
150
|
+
return {
|
|
151
|
+
valid: false,
|
|
152
|
+
reason: `Cannot skip stages: ${current} → ${next}. Move through each stage sequentially.`,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
return { valid: true };
|
|
156
|
+
}
|
|
157
|
+
// ── Query Methods ────────────────────────────────────────────
|
|
158
|
+
findER(id) {
|
|
159
|
+
return this.store.getData().requests.find((r) => r.id === id);
|
|
160
|
+
}
|
|
161
|
+
getAll() {
|
|
162
|
+
return [...this.store.getData().requests];
|
|
163
|
+
}
|
|
164
|
+
getActive() {
|
|
165
|
+
return this.store.getData().requests.filter((r) => r.stage !== 'DELIVERED' && !r.blocked);
|
|
166
|
+
}
|
|
167
|
+
getBlocked() {
|
|
168
|
+
return this.store.getData().requests.filter((r) => r.blocked);
|
|
169
|
+
}
|
|
170
|
+
getComplete() {
|
|
171
|
+
return this.store.getData().requests.filter((r) => r.stage === 'DELIVERED');
|
|
172
|
+
}
|
|
173
|
+
getLastActivity() {
|
|
174
|
+
return this.store.getData().lastUpdated || null;
|
|
175
|
+
}
|
|
176
|
+
getSummary() {
|
|
177
|
+
const requests = this.store.getData().requests;
|
|
178
|
+
return {
|
|
179
|
+
total: requests.length,
|
|
180
|
+
active: requests.filter((r) => r.stage !== 'DELIVERED' && !r.blocked).length,
|
|
181
|
+
blocked: requests.filter((r) => r.blocked).length,
|
|
182
|
+
delivered: requests.filter((r) => r.stage === 'DELIVERED').length,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=pipeline-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-manager.js","sourceRoot":"","sources":["../../src/pipeline/pipeline-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAM2 Pipeline Store
|
|
3
|
+
*
|
|
4
|
+
* JSON-file persistence for the engineering pipeline.
|
|
5
|
+
* Stores data in {dataDir}/pipeline/pipeline.json with atomic writes.
|
|
6
|
+
*/
|
|
7
|
+
import type { PipelineData } from './types.js';
|
|
8
|
+
export declare class PipelineStore {
|
|
9
|
+
private dataDir;
|
|
10
|
+
private filePath;
|
|
11
|
+
private data;
|
|
12
|
+
constructor(dataDir: string);
|
|
13
|
+
load(): Promise<void>;
|
|
14
|
+
save(): Promise<void>;
|
|
15
|
+
getData(): PipelineData;
|
|
16
|
+
getDataDir(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=pipeline-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-store.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipeline-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAe;gBAEf,OAAO,EAAE,MAAM;IAMrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,OAAO,IAAI,YAAY;IAIvB,UAAU,IAAI,MAAM;CAGrB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAM2 Pipeline Store
|
|
3
|
+
*
|
|
4
|
+
* JSON-file persistence for the engineering pipeline.
|
|
5
|
+
* Stores data in {dataDir}/pipeline/pipeline.json with atomic writes.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
const PIPELINE_VERSION = 1;
|
|
10
|
+
function emptyPipeline() {
|
|
11
|
+
return {
|
|
12
|
+
version: PIPELINE_VERSION,
|
|
13
|
+
requests: [],
|
|
14
|
+
lastUpdated: new Date().toISOString(),
|
|
15
|
+
nextId: 1,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export class PipelineStore {
|
|
19
|
+
dataDir;
|
|
20
|
+
filePath;
|
|
21
|
+
data;
|
|
22
|
+
constructor(dataDir) {
|
|
23
|
+
this.dataDir = dataDir;
|
|
24
|
+
this.filePath = path.join(dataDir, 'pipeline', 'pipeline.json');
|
|
25
|
+
this.data = emptyPipeline();
|
|
26
|
+
}
|
|
27
|
+
async load() {
|
|
28
|
+
const dir = path.dirname(this.filePath);
|
|
29
|
+
if (!fs.existsSync(dir)) {
|
|
30
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
if (!fs.existsSync(this.filePath)) {
|
|
33
|
+
this.data = emptyPipeline();
|
|
34
|
+
await this.save();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const raw = fs.readFileSync(this.filePath, 'utf-8');
|
|
39
|
+
const parsed = JSON.parse(raw);
|
|
40
|
+
if (!parsed.version || !Array.isArray(parsed.requests)) {
|
|
41
|
+
console.warn('[sam] Pipeline file corrupt — reinitializing');
|
|
42
|
+
this.data = emptyPipeline();
|
|
43
|
+
await this.save();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.data = parsed;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.warn('[sam] Failed to load pipeline data — reinitializing:', err);
|
|
50
|
+
this.data = emptyPipeline();
|
|
51
|
+
await this.save();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async save() {
|
|
55
|
+
const dir = path.dirname(this.filePath);
|
|
56
|
+
if (!fs.existsSync(dir)) {
|
|
57
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
58
|
+
}
|
|
59
|
+
const tmpPath = this.filePath + '.tmp';
|
|
60
|
+
fs.writeFileSync(tmpPath, JSON.stringify(this.data, null, 2), 'utf-8');
|
|
61
|
+
fs.renameSync(tmpPath, this.filePath);
|
|
62
|
+
}
|
|
63
|
+
getData() {
|
|
64
|
+
return this.data;
|
|
65
|
+
}
|
|
66
|
+
getDataDir() {
|
|
67
|
+
return this.dataDir;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=pipeline-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-store.js","sourceRoot":"","sources":["../../src/pipeline/pipeline-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAM2 Engineering Pipeline — Types & Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Defines the Engineering Request lifecycle, pipeline stages,
|
|
5
|
+
* and all structured data shapes used across the plugin.
|
|
6
|
+
*/
|
|
7
|
+
export type PipelineStage = 'INTAKE' | 'ANALYSIS' | 'BUILD' | 'SELF-REVIEW' | 'ARCHIE-REVIEW' | 'DELIVERED';
|
|
8
|
+
export declare const PIPELINE_STAGES: readonly PipelineStage[];
|
|
9
|
+
export declare const STAGE_ORDER: Record<PipelineStage, number>;
|
|
10
|
+
export interface EngineeringRequest {
|
|
11
|
+
id: string;
|
|
12
|
+
description: string;
|
|
13
|
+
requester: string;
|
|
14
|
+
stage: PipelineStage;
|
|
15
|
+
blocked: boolean;
|
|
16
|
+
blocker?: string;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
updatedAt: string;
|
|
19
|
+
deliveredAt?: string;
|
|
20
|
+
buildAttempts: number;
|
|
21
|
+
notes: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface PipelineData {
|
|
24
|
+
version: number;
|
|
25
|
+
requests: EngineeringRequest[];
|
|
26
|
+
lastUpdated: string;
|
|
27
|
+
nextId: number;
|
|
28
|
+
}
|
|
29
|
+
export interface SamStatusResult {
|
|
30
|
+
agent: {
|
|
31
|
+
name: string;
|
|
32
|
+
role: string;
|
|
33
|
+
version: string;
|
|
34
|
+
internalName: string;
|
|
35
|
+
};
|
|
36
|
+
pipeline: {
|
|
37
|
+
total: number;
|
|
38
|
+
active: number;
|
|
39
|
+
blocked: number;
|
|
40
|
+
delivered: number;
|
|
41
|
+
};
|
|
42
|
+
lastActivity: string | null;
|
|
43
|
+
sandbox: {
|
|
44
|
+
status: 'unavailable' | 'available' | 'busy';
|
|
45
|
+
};
|
|
46
|
+
fleetBus: 'connected' | 'observer' | 'standalone';
|
|
47
|
+
}
|
|
48
|
+
export interface PipelineFilter {
|
|
49
|
+
filter?: 'all' | 'active' | 'blocked' | 'complete';
|
|
50
|
+
}
|
|
51
|
+
export interface RequestAction {
|
|
52
|
+
action: 'create' | 'update' | 'close';
|
|
53
|
+
er_id?: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
requester?: string;
|
|
56
|
+
stage?: PipelineStage;
|
|
57
|
+
blocker?: string;
|
|
58
|
+
notes?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface ReportType {
|
|
61
|
+
type?: 'summary' | 'detailed' | 'debt';
|
|
62
|
+
}
|
|
63
|
+
export interface SamPluginConfig {
|
|
64
|
+
dataDir: string;
|
|
65
|
+
sandboxEnabled: boolean;
|
|
66
|
+
sandboxImage: string;
|
|
67
|
+
artifactDir: string;
|
|
68
|
+
artifactRetentionDays: number;
|
|
69
|
+
telegramToken?: string;
|
|
70
|
+
telegramChatId?: string;
|
|
71
|
+
}
|
|
72
|
+
export declare const DEFAULT_CONFIG: SamPluginConfig;
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,UAAU,GACV,OAAO,GACP,aAAa,GACb,eAAe,GACf,WAAW,CAAC;AAEhB,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAO1C,CAAC;AAEX,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAOrD,CAAC;AAIF,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE;QACP,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC;KAC9C,CAAC;IACF,QAAQ,EAAE,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CACpD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;CACxC;AAID,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,cAAc,EAAE,eAM5B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAM2 Engineering Pipeline — Types & Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Defines the Engineering Request lifecycle, pipeline stages,
|
|
5
|
+
* and all structured data shapes used across the plugin.
|
|
6
|
+
*/
|
|
7
|
+
export const PIPELINE_STAGES = [
|
|
8
|
+
'INTAKE',
|
|
9
|
+
'ANALYSIS',
|
|
10
|
+
'BUILD',
|
|
11
|
+
'SELF-REVIEW',
|
|
12
|
+
'ARCHIE-REVIEW',
|
|
13
|
+
'DELIVERED',
|
|
14
|
+
];
|
|
15
|
+
export const STAGE_ORDER = {
|
|
16
|
+
'INTAKE': 0,
|
|
17
|
+
'ANALYSIS': 1,
|
|
18
|
+
'BUILD': 2,
|
|
19
|
+
'SELF-REVIEW': 3,
|
|
20
|
+
'ARCHIE-REVIEW': 4,
|
|
21
|
+
'DELIVERED': 5,
|
|
22
|
+
};
|
|
23
|
+
export const DEFAULT_CONFIG = {
|
|
24
|
+
dataDir: '.sam-data',
|
|
25
|
+
sandboxEnabled: false,
|
|
26
|
+
sandboxImage: 'sam-sandbox:latest',
|
|
27
|
+
artifactDir: '.sam-artifacts',
|
|
28
|
+
artifactRetentionDays: 7,
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,QAAQ;IACR,UAAU;IACV,OAAO;IACP,aAAa;IACb,eAAe;IACf,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAkC;IACxD,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,CAAC;IAChB,eAAe,EAAE,CAAC;IAClB,WAAW,EAAE,CAAC;CACf,CAAC;AA+EF,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,OAAO,EAAE,WAAW;IACpB,cAAc,EAAE,KAAK;IACrB,YAAY,EAAE,oBAAoB;IAClC,WAAW,EAAE,gBAAgB;IAC7B,qBAAqB,EAAE,CAAC;CACzB,CAAC"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Sam (SAM2) — OpenClaw Plugin Entry Point
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Commander but does NOT initiate outbound fleet communication.
|
|
4
|
+
* This is the ONLY export OpenClaw cares about for plugin loading.
|
|
5
|
+
* The library exports live in index.ts.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* This adapter:
|
|
8
|
+
* 1. Reads plugin config from api.config (+ openclaw.json fallback)
|
|
9
|
+
* 2. Creates PipelineManager eagerly (not lazy)
|
|
10
|
+
* 3. Registers 4 Phase 1 tools, 1 command
|
|
11
|
+
* 4. Conditionally registers Phase 2 sandbox tools (when sandboxEnabled)
|
|
12
|
+
* 5. Wires fleet-bus integration (optional peer dep)
|
|
11
13
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
14
|
+
* CRITICAL: Every registration follows the EXACT shapes from
|
|
15
|
+
* GUIDE-OPENCLAW-PLUGIN-DEVELOPMENT.md to avoid the 7 registration traps.
|
|
16
|
+
*
|
|
17
|
+
* Registration rules (rule 150-openclaw-plugin-standards):
|
|
18
|
+
* - execute uses method syntax, NOT arrow function
|
|
19
|
+
* - parameters has type: "object" even when empty
|
|
20
|
+
* - First param to execute is always _toolCallId: string
|
|
21
|
+
* - Command name has NO leading slash
|
|
22
|
+
* - Command has acceptsArgs: true
|
|
23
|
+
* - Service uses id, NOT name
|
|
15
24
|
*/
|
|
16
25
|
export default function register(api: any): void;
|
|
17
26
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAiEH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,QAgJxC"}
|