@hongmaple0820/scale-engine 0.19.0 → 0.20.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.en.md +17 -3
- package/README.md +107 -9
- package/dist/api/cli.js +988 -11
- package/dist/api/cli.js.map +1 -1
- package/dist/codegraph/CodeIntelligence.d.ts +135 -0
- package/dist/codegraph/CodeIntelligence.js +460 -0
- package/dist/codegraph/CodeIntelligence.js.map +1 -0
- package/dist/context/ContextBudget.d.ts +90 -0
- package/dist/context/ContextBudget.js +322 -0
- package/dist/context/ContextBudget.js.map +1 -0
- package/dist/eval/WorkflowEval.d.ts +161 -0
- package/dist/eval/WorkflowEval.js +379 -0
- package/dist/eval/WorkflowEval.js.map +1 -0
- package/dist/governance/GovernanceRoi.d.ts +25 -0
- package/dist/governance/GovernanceRoi.js +70 -0
- package/dist/governance/GovernanceRoi.js.map +1 -0
- package/dist/governance/ProgressiveGovernance.d.ts +22 -0
- package/dist/governance/ProgressiveGovernance.js +159 -0
- package/dist/governance/ProgressiveGovernance.js.map +1 -0
- package/dist/memory/MemoryBrain.d.ts +135 -0
- package/dist/memory/MemoryBrain.js +635 -0
- package/dist/memory/MemoryBrain.js.map +1 -0
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.js +1 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/output/GovernanceDashboard.d.ts +57 -0
- package/dist/output/GovernanceDashboard.js +250 -0
- package/dist/output/GovernanceDashboard.js.map +1 -0
- package/dist/output/index.d.ts +2 -0
- package/dist/output/index.js +1 -0
- package/dist/output/index.js.map +1 -1
- package/dist/skills/SkillRadar.d.ts +83 -0
- package/dist/skills/SkillRadar.js +384 -0
- package/dist/skills/SkillRadar.js.map +1 -0
- package/dist/workflow/GovernanceTemplates.js +194 -194
- package/docs/CODE_INTELLIGENCE.md +138 -0
- package/docs/CONTEXT_BUDGET.md +87 -0
- package/docs/GOVERNANCE_DASHBOARD.md +69 -0
- package/docs/MEMORY_BRAIN.md +104 -0
- package/docs/README.md +16 -8
- package/docs/SKILL_RADAR.md +115 -0
- package/docs/WORKFLOW_EVAL.md +151 -0
- package/package.json +7 -1
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
const MODE_ORDER = ['minimal', 'standard', 'expanded', 'critical'];
|
|
2
|
+
export function normalizeGovernanceMode(value) {
|
|
3
|
+
if (value === undefined || value === null || value === '')
|
|
4
|
+
return undefined;
|
|
5
|
+
const normalized = String(value).trim().toLowerCase();
|
|
6
|
+
if (normalized === 'minimal' || normalized === 'standard' || normalized === 'expanded' || normalized === 'critical')
|
|
7
|
+
return normalized;
|
|
8
|
+
throw new Error(`Invalid governance mode "${String(value)}"; expected minimal, standard, expanded, or critical.`);
|
|
9
|
+
}
|
|
10
|
+
export function evaluateProgressiveGovernance(input = {}) {
|
|
11
|
+
const task = input.task ?? '';
|
|
12
|
+
const changedFiles = (input.changedFiles ?? []).map(normalizePath).filter(Boolean);
|
|
13
|
+
const signals = detectSignals(task, changedFiles);
|
|
14
|
+
const recommendedMode = highestMode(signals.map(signal => signal.mode), changedFiles.length > 0 || task ? 'standard' : 'minimal');
|
|
15
|
+
const requestedMode = input.requestedMode;
|
|
16
|
+
const effectiveMode = highestMode([recommendedMode, requestedMode].filter(Boolean), recommendedMode);
|
|
17
|
+
return {
|
|
18
|
+
requestedMode,
|
|
19
|
+
recommendedMode,
|
|
20
|
+
effectiveMode,
|
|
21
|
+
escalated: Boolean(requestedMode && modeRank(recommendedMode) > modeRank(requestedMode)),
|
|
22
|
+
signals,
|
|
23
|
+
requiredBehaviors: requiredBehaviors(effectiveMode, signals),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function detectSignals(task, changedFiles) {
|
|
27
|
+
const haystack = `${task} ${changedFiles.join(' ')}`.toLowerCase();
|
|
28
|
+
const signals = [];
|
|
29
|
+
if (changedFiles.length === 0 && !task.trim()) {
|
|
30
|
+
signals.push({
|
|
31
|
+
id: 'no-task-context',
|
|
32
|
+
mode: 'minimal',
|
|
33
|
+
reason: 'No task text or changed files were provided.',
|
|
34
|
+
evidence: [],
|
|
35
|
+
});
|
|
36
|
+
return signals;
|
|
37
|
+
}
|
|
38
|
+
const lowRiskDocsOnly = isDocsOnly(changedFiles) && !/api|auth|security|release|deploy|database|migration|permission/.test(haystack);
|
|
39
|
+
if (lowRiskDocsOnly) {
|
|
40
|
+
signals.push({
|
|
41
|
+
id: 'docs-only-low-risk',
|
|
42
|
+
mode: 'minimal',
|
|
43
|
+
reason: 'Only low-risk documentation files were provided.',
|
|
44
|
+
evidence: changedFiles,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (!lowRiskDocsOnly && (changedFiles.length > 0 || task.trim())) {
|
|
48
|
+
signals.push({
|
|
49
|
+
id: 'normal-engineering-work',
|
|
50
|
+
mode: 'standard',
|
|
51
|
+
reason: 'Task has implementation or verification context.',
|
|
52
|
+
evidence: changedFiles.slice(0, 8),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (changedFiles.length >= 6 || topLevelCount(changedFiles) >= 3) {
|
|
56
|
+
signals.push({
|
|
57
|
+
id: 'cross-module-scope',
|
|
58
|
+
mode: 'expanded',
|
|
59
|
+
reason: 'Changed files span enough paths to require broader impact analysis.',
|
|
60
|
+
evidence: changedFiles.slice(0, 12),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (/ui|ux|frontend|browser|e2e|playwright|desktop|cua|screenshot|visual/.test(haystack)) {
|
|
64
|
+
signals.push({
|
|
65
|
+
id: 'interactive-or-visual-flow',
|
|
66
|
+
mode: 'expanded',
|
|
67
|
+
reason: 'Task touches UI, browser, E2E, desktop, or visual verification.',
|
|
68
|
+
evidence: matchingEvidence(changedFiles, /ui|frontend|browser|e2e|playwright|desktop|visual/i),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (/public api|new api|contract|schema|sdk|breaking/.test(haystack)) {
|
|
72
|
+
signals.push({
|
|
73
|
+
id: 'public-interface-change',
|
|
74
|
+
mode: 'expanded',
|
|
75
|
+
reason: 'Task mentions public API, contract, schema, SDK, or breaking behavior.',
|
|
76
|
+
evidence: matchingEvidence(changedFiles, /api|contract|schema|sdk/i),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (/auth|permission|secret|token|password|private key|database|migration|production|deploy|release|destructive|delete|drop table|truncate/.test(haystack)) {
|
|
80
|
+
signals.push({
|
|
81
|
+
id: 'critical-risk-domain',
|
|
82
|
+
mode: 'critical',
|
|
83
|
+
reason: 'Task touches auth, permissions, secrets, database, production, release, or destructive operations.',
|
|
84
|
+
evidence: matchingEvidence(changedFiles, /auth|permission|secret|token|database|migration|config|deploy|release|delete/i),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
if (changedFiles.some(file => /\.(env|pem|key|crt)$/i.test(file) || /(^|\/)(migration|migrations|schema|auth|permission|config|deploy|release)(\/|\.|-|_)/i.test(file))) {
|
|
88
|
+
signals.push({
|
|
89
|
+
id: 'critical-file-path',
|
|
90
|
+
mode: 'critical',
|
|
91
|
+
reason: 'Changed file paths include critical config, auth, schema, migration, or secret-like files.',
|
|
92
|
+
evidence: matchingEvidence(changedFiles, /\.(env|pem|key|crt)$/i),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (changedFiles.some(file => /\.(html|png|jpg|jpeg|gif|mp4|mov|zip|tar|gz)$/i.test(file) || /docs\/worklog|tmp|report|screenshot|artifact/i.test(file))) {
|
|
96
|
+
signals.push({
|
|
97
|
+
id: 'resource-lifecycle',
|
|
98
|
+
mode: 'standard',
|
|
99
|
+
reason: 'Generated reports, media, temporary files, or task artifacts require resource governance.',
|
|
100
|
+
evidence: matchingEvidence(changedFiles, /\.(html|png|jpg|jpeg|gif|mp4|mov|zip|tar|gz)$/i),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return dedupeSignals(signals);
|
|
104
|
+
}
|
|
105
|
+
function requiredBehaviors(mode, signals) {
|
|
106
|
+
const behaviors = new Set();
|
|
107
|
+
if (mode === 'minimal') {
|
|
108
|
+
behaviors.add('run relevant validation only');
|
|
109
|
+
return Array.from(behaviors);
|
|
110
|
+
}
|
|
111
|
+
behaviors.add('record verification evidence');
|
|
112
|
+
behaviors.add('summarize context budget');
|
|
113
|
+
if (mode === 'expanded' || mode === 'critical') {
|
|
114
|
+
behaviors.add('attempt code intelligence or explain fallback');
|
|
115
|
+
behaviors.add('run skill radar when tool, browser, UI, or external CLI signals apply');
|
|
116
|
+
}
|
|
117
|
+
if (mode === 'critical') {
|
|
118
|
+
behaviors.add('run security review');
|
|
119
|
+
behaviors.add('record rollback or disable strategy');
|
|
120
|
+
behaviors.add('require human review for destructive, data, auth, or production changes');
|
|
121
|
+
}
|
|
122
|
+
if (signals.some(signal => signal.id === 'resource-lifecycle')) {
|
|
123
|
+
behaviors.add('settle resource lifecycle');
|
|
124
|
+
}
|
|
125
|
+
if (signals.some(signal => signal.id === 'interactive-or-visual-flow')) {
|
|
126
|
+
behaviors.add('collect browser, screenshot, or visual evidence');
|
|
127
|
+
}
|
|
128
|
+
return Array.from(behaviors);
|
|
129
|
+
}
|
|
130
|
+
function highestMode(modes, fallback) {
|
|
131
|
+
if (modes.length === 0)
|
|
132
|
+
return fallback;
|
|
133
|
+
return modes.reduce((current, next) => modeRank(next) > modeRank(current) ? next : current, modes[0]);
|
|
134
|
+
}
|
|
135
|
+
function modeRank(mode) {
|
|
136
|
+
return mode ? MODE_ORDER.indexOf(mode) : -1;
|
|
137
|
+
}
|
|
138
|
+
function isDocsOnly(files) {
|
|
139
|
+
return files.length > 0 && files.every(file => /\.(md|mdx|txt)$/i.test(file) && /^(readme|docs\/|changelog|license)/i.test(file));
|
|
140
|
+
}
|
|
141
|
+
function topLevelCount(files) {
|
|
142
|
+
return new Set(files.map(file => file.split('/')[0]).filter(Boolean)).size;
|
|
143
|
+
}
|
|
144
|
+
function matchingEvidence(files, pattern) {
|
|
145
|
+
return files.filter(file => pattern.test(file)).slice(0, 12);
|
|
146
|
+
}
|
|
147
|
+
function dedupeSignals(signals) {
|
|
148
|
+
const seen = new Set();
|
|
149
|
+
return signals.filter(signal => {
|
|
150
|
+
if (seen.has(signal.id))
|
|
151
|
+
return false;
|
|
152
|
+
seen.add(signal.id);
|
|
153
|
+
return true;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function normalizePath(path) {
|
|
157
|
+
return path.replace(/\\/g, '/').trim();
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=ProgressiveGovernance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressiveGovernance.js","sourceRoot":"","sources":["../../src/governance/ProgressiveGovernance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export type MemoryNodeType = 'fact' | 'decision' | 'incident' | 'relation' | 'contradiction';
|
|
2
|
+
export type MemoryNodeSource = 'runtime-evidence' | 'task-artifact' | 'docs' | 'git' | 'manual';
|
|
3
|
+
export type MemoryNodeScope = 'project' | 'workspace' | 'global-candidate';
|
|
4
|
+
export type MemoryNodeStatus = 'candidate' | 'active' | 'stale' | 'rejected';
|
|
5
|
+
export interface MemoryNode {
|
|
6
|
+
id: string;
|
|
7
|
+
type: MemoryNodeType;
|
|
8
|
+
title: string;
|
|
9
|
+
summary: string;
|
|
10
|
+
entities: string[];
|
|
11
|
+
source: MemoryNodeSource;
|
|
12
|
+
evidencePaths: string[];
|
|
13
|
+
confidence: number;
|
|
14
|
+
scope: MemoryNodeScope;
|
|
15
|
+
status: MemoryNodeStatus;
|
|
16
|
+
createdAt: string;
|
|
17
|
+
updatedAt: string;
|
|
18
|
+
lastVerifiedAt?: string;
|
|
19
|
+
metadata?: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export interface MemoryBrainOptions {
|
|
22
|
+
projectDir?: string;
|
|
23
|
+
scaleDir?: string;
|
|
24
|
+
dbPath?: string;
|
|
25
|
+
now?: () => Date;
|
|
26
|
+
}
|
|
27
|
+
export interface MemoryIngestOptions {
|
|
28
|
+
from: 'evidence' | 'candidate' | 'failure';
|
|
29
|
+
taskId?: string;
|
|
30
|
+
sessionId?: string;
|
|
31
|
+
candidateId?: string;
|
|
32
|
+
failureId?: string;
|
|
33
|
+
type?: MemoryNodeType;
|
|
34
|
+
scope?: MemoryNodeScope;
|
|
35
|
+
}
|
|
36
|
+
export interface MemoryIngestReport {
|
|
37
|
+
ok: boolean;
|
|
38
|
+
source: MemoryIngestOptions['from'];
|
|
39
|
+
created: number;
|
|
40
|
+
skipped: number;
|
|
41
|
+
nodes: MemoryNode[];
|
|
42
|
+
warnings: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface MemoryQueryReport {
|
|
45
|
+
query: string;
|
|
46
|
+
count: number;
|
|
47
|
+
nodes: MemoryNode[];
|
|
48
|
+
}
|
|
49
|
+
export interface MemoryContradiction {
|
|
50
|
+
id: string;
|
|
51
|
+
title: string;
|
|
52
|
+
summary: string;
|
|
53
|
+
nodeIds: string[];
|
|
54
|
+
entities: string[];
|
|
55
|
+
evidencePaths: string[];
|
|
56
|
+
confidence: number;
|
|
57
|
+
}
|
|
58
|
+
export interface MemoryContradictionReport {
|
|
59
|
+
ok: boolean;
|
|
60
|
+
count: number;
|
|
61
|
+
contradictions: MemoryContradiction[];
|
|
62
|
+
}
|
|
63
|
+
export interface MemoryDreamReport {
|
|
64
|
+
ok: boolean;
|
|
65
|
+
generatedAt: string;
|
|
66
|
+
summary: {
|
|
67
|
+
total: number;
|
|
68
|
+
active: number;
|
|
69
|
+
candidate: number;
|
|
70
|
+
stale: number;
|
|
71
|
+
missingEvidence: number;
|
|
72
|
+
duplicateGroups: number;
|
|
73
|
+
contradictions: number;
|
|
74
|
+
};
|
|
75
|
+
promotionCandidates: Array<{
|
|
76
|
+
id: string;
|
|
77
|
+
title: string;
|
|
78
|
+
confidence: number;
|
|
79
|
+
evidencePaths: string[];
|
|
80
|
+
}>;
|
|
81
|
+
staleCandidates: Array<{
|
|
82
|
+
id: string;
|
|
83
|
+
title: string;
|
|
84
|
+
reason: string;
|
|
85
|
+
}>;
|
|
86
|
+
duplicateGroups: Array<{
|
|
87
|
+
fingerprint: string;
|
|
88
|
+
nodeIds: string[];
|
|
89
|
+
title: string;
|
|
90
|
+
}>;
|
|
91
|
+
contradictions: MemoryContradiction[];
|
|
92
|
+
suggestedDocs: string[];
|
|
93
|
+
}
|
|
94
|
+
export interface MemoryPromoteReport {
|
|
95
|
+
ok: boolean;
|
|
96
|
+
node?: MemoryNode;
|
|
97
|
+
warnings: string[];
|
|
98
|
+
}
|
|
99
|
+
export declare class MemoryBrain {
|
|
100
|
+
private projectDir;
|
|
101
|
+
private scaleRoot;
|
|
102
|
+
private dbPath;
|
|
103
|
+
private db;
|
|
104
|
+
private now;
|
|
105
|
+
constructor(options?: MemoryBrainOptions);
|
|
106
|
+
addNode(input: Partial<MemoryNode> & Pick<MemoryNode, 'type' | 'title' | 'summary' | 'source'>): MemoryNode;
|
|
107
|
+
ingest(options: MemoryIngestOptions): MemoryIngestReport;
|
|
108
|
+
query(query: string, options?: {
|
|
109
|
+
limit?: number;
|
|
110
|
+
status?: MemoryNodeStatus;
|
|
111
|
+
}): MemoryQueryReport;
|
|
112
|
+
contradictions(): MemoryContradictionReport;
|
|
113
|
+
dream(): MemoryDreamReport;
|
|
114
|
+
promote(id: string, options?: {
|
|
115
|
+
scope?: MemoryNodeScope;
|
|
116
|
+
}): MemoryPromoteReport;
|
|
117
|
+
exportJsonl(): string;
|
|
118
|
+
importJsonl(filePath: string): {
|
|
119
|
+
ok: boolean;
|
|
120
|
+
imported: number;
|
|
121
|
+
skipped: number;
|
|
122
|
+
warnings: string[];
|
|
123
|
+
};
|
|
124
|
+
list(filter?: {
|
|
125
|
+
status?: MemoryNodeStatus;
|
|
126
|
+
scope?: MemoryNodeScope;
|
|
127
|
+
}): MemoryNode[];
|
|
128
|
+
get(id: string): MemoryNode | null;
|
|
129
|
+
private ingestEvidence;
|
|
130
|
+
private ingestCandidate;
|
|
131
|
+
private ingestFailureReplay;
|
|
132
|
+
private readLearningCandidate;
|
|
133
|
+
private upsert;
|
|
134
|
+
private writeManifest;
|
|
135
|
+
}
|