praisonai 1.2.2 → 1.2.3
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/dist/agent/simple.js +1 -1
- package/dist/cli/commands/auto.d.ts +12 -0
- package/dist/cli/commands/auto.js +109 -0
- package/dist/cli/commands/autonomy.d.ts +5 -0
- package/dist/cli/commands/autonomy.js +152 -0
- package/dist/cli/commands/cache.d.ts +9 -0
- package/dist/cli/commands/cache.js +143 -0
- package/dist/cli/commands/chat.d.ts +14 -0
- package/dist/cli/commands/chat.js +127 -0
- package/dist/cli/commands/checkpoints.d.ts +5 -0
- package/dist/cli/commands/checkpoints.js +236 -0
- package/dist/cli/commands/context.d.ts +11 -0
- package/dist/cli/commands/context.js +182 -0
- package/dist/cli/commands/cost.d.ts +5 -0
- package/dist/cli/commands/cost.js +146 -0
- package/dist/cli/commands/db.d.ts +9 -0
- package/dist/cli/commands/db.js +149 -0
- package/dist/cli/commands/eval.d.ts +17 -0
- package/dist/cli/commands/eval.js +247 -0
- package/dist/cli/commands/external-agents.d.ts +5 -0
- package/dist/cli/commands/external-agents.js +169 -0
- package/dist/cli/commands/fast-context.d.ts +5 -0
- package/dist/cli/commands/fast-context.js +126 -0
- package/dist/cli/commands/flow.d.ts +5 -0
- package/dist/cli/commands/flow.js +141 -0
- package/dist/cli/commands/git.d.ts +5 -0
- package/dist/cli/commands/git.js +178 -0
- package/dist/cli/commands/graph-rag.d.ts +9 -0
- package/dist/cli/commands/graph-rag.js +131 -0
- package/dist/cli/commands/guardrail.d.ts +11 -0
- package/dist/cli/commands/guardrail.js +156 -0
- package/dist/cli/commands/handoff.d.ts +9 -0
- package/dist/cli/commands/handoff.js +133 -0
- package/dist/cli/commands/help.d.ts +8 -0
- package/dist/cli/commands/help.js +167 -0
- package/dist/cli/commands/image.d.ts +13 -0
- package/dist/cli/commands/image.js +192 -0
- package/dist/cli/commands/interactive.d.ts +6 -0
- package/dist/cli/commands/interactive.js +79 -0
- package/dist/cli/commands/jobs.d.ts +5 -0
- package/dist/cli/commands/jobs.js +282 -0
- package/dist/cli/commands/knowledge.d.ts +9 -0
- package/dist/cli/commands/knowledge.js +226 -0
- package/dist/cli/commands/mcp.d.ts +9 -0
- package/dist/cli/commands/mcp.js +243 -0
- package/dist/cli/commands/memory.d.ts +10 -0
- package/dist/cli/commands/memory.js +198 -0
- package/dist/cli/commands/n8n.d.ts +5 -0
- package/dist/cli/commands/n8n.js +137 -0
- package/dist/cli/commands/observability.d.ts +9 -0
- package/dist/cli/commands/observability.js +145 -0
- package/dist/cli/commands/planning.d.ts +9 -0
- package/dist/cli/commands/planning.js +167 -0
- package/dist/cli/commands/prompt-expand.d.ts +11 -0
- package/dist/cli/commands/prompt-expand.js +100 -0
- package/dist/cli/commands/providers.d.ts +9 -0
- package/dist/cli/commands/providers.js +98 -0
- package/dist/cli/commands/query-rewrite.d.ts +12 -0
- package/dist/cli/commands/query-rewrite.js +102 -0
- package/dist/cli/commands/repo-map.d.ts +5 -0
- package/dist/cli/commands/repo-map.js +151 -0
- package/dist/cli/commands/reranker.d.ts +10 -0
- package/dist/cli/commands/reranker.js +144 -0
- package/dist/cli/commands/research.d.ts +12 -0
- package/dist/cli/commands/research.js +108 -0
- package/dist/cli/commands/router.d.ts +11 -0
- package/dist/cli/commands/router.js +142 -0
- package/dist/cli/commands/run.d.ts +14 -0
- package/dist/cli/commands/run.js +111 -0
- package/dist/cli/commands/sandbox.d.ts +5 -0
- package/dist/cli/commands/sandbox.js +135 -0
- package/dist/cli/commands/scheduler.d.ts +5 -0
- package/dist/cli/commands/scheduler.js +260 -0
- package/dist/cli/commands/session.d.ts +9 -0
- package/dist/cli/commands/session.js +238 -0
- package/dist/cli/commands/skills.d.ts +9 -0
- package/dist/cli/commands/skills.js +256 -0
- package/dist/cli/commands/telemetry.d.ts +9 -0
- package/dist/cli/commands/telemetry.js +146 -0
- package/dist/cli/commands/tools.d.ts +9 -0
- package/dist/cli/commands/tools.js +172 -0
- package/dist/cli/commands/vector.d.ts +10 -0
- package/dist/cli/commands/vector.js +171 -0
- package/dist/cli/commands/version.d.ts +8 -0
- package/dist/cli/commands/version.js +68 -0
- package/dist/cli/commands/voice.d.ts +10 -0
- package/dist/cli/commands/voice.js +162 -0
- package/dist/cli/commands/workflow.d.ts +13 -0
- package/dist/cli/commands/workflow.js +184 -0
- package/dist/cli/config/index.d.ts +6 -0
- package/dist/cli/config/index.js +22 -0
- package/dist/cli/config/load.d.ts +20 -0
- package/dist/cli/config/load.js +229 -0
- package/dist/cli/config/resolve.d.ts +28 -0
- package/dist/cli/config/resolve.js +70 -0
- package/dist/cli/config/schema.d.ts +15 -0
- package/dist/cli/config/schema.js +65 -0
- package/dist/cli/features/autonomy-mode.d.ts +98 -0
- package/dist/cli/features/autonomy-mode.js +266 -0
- package/dist/cli/features/background-jobs.d.ts +155 -0
- package/dist/cli/features/background-jobs.js +416 -0
- package/dist/cli/features/checkpoints.d.ts +126 -0
- package/dist/cli/features/checkpoints.js +288 -0
- package/dist/cli/features/cost-tracker.d.ts +101 -0
- package/dist/cli/features/cost-tracker.js +212 -0
- package/dist/cli/features/external-agents.d.ts +115 -0
- package/dist/cli/features/external-agents.js +294 -0
- package/dist/cli/features/fast-context.d.ts +126 -0
- package/dist/cli/features/fast-context.js +310 -0
- package/dist/cli/features/flow-display.d.ts +100 -0
- package/dist/cli/features/flow-display.js +254 -0
- package/dist/cli/features/git-integration.d.ts +138 -0
- package/dist/cli/features/git-integration.js +374 -0
- package/dist/cli/features/index.d.ts +17 -0
- package/dist/cli/features/index.js +102 -0
- package/dist/cli/features/interactive-tui.d.ts +114 -0
- package/dist/cli/features/interactive-tui.js +326 -0
- package/dist/cli/features/n8n-integration.d.ts +108 -0
- package/dist/cli/features/n8n-integration.js +296 -0
- package/dist/cli/features/repo-map.d.ts +101 -0
- package/dist/cli/features/repo-map.js +350 -0
- package/dist/cli/features/sandbox-executor.d.ts +89 -0
- package/dist/cli/features/sandbox-executor.js +314 -0
- package/dist/cli/features/scheduler.d.ts +111 -0
- package/dist/cli/features/scheduler.js +298 -0
- package/dist/cli/features/slash-commands.d.ts +77 -0
- package/dist/cli/features/slash-commands.js +316 -0
- package/dist/cli/index.d.ts +19 -15
- package/dist/cli/index.js +163 -123
- package/dist/cli/output/errors.d.ts +32 -0
- package/dist/cli/output/errors.js +72 -0
- package/dist/cli/output/index.d.ts +6 -0
- package/dist/cli/output/index.js +22 -0
- package/dist/cli/output/json.d.ts +17 -0
- package/dist/cli/output/json.js +54 -0
- package/dist/cli/output/pretty.d.ts +21 -0
- package/dist/cli/output/pretty.js +106 -0
- package/dist/cli/runtime/env.d.ts +12 -0
- package/dist/cli/runtime/env.js +49 -0
- package/dist/cli/runtime/exit.d.ts +11 -0
- package/dist/cli/runtime/exit.js +49 -0
- package/dist/cli/runtime/index.d.ts +6 -0
- package/dist/cli/runtime/index.js +22 -0
- package/dist/cli/runtime/lazy.d.ts +18 -0
- package/dist/cli/runtime/lazy.js +85 -0
- package/dist/cli/spec/cli-spec.d.ts +87 -0
- package/dist/cli/spec/cli-spec.js +478 -0
- package/dist/cli/spec/index.d.ts +4 -0
- package/dist/cli/spec/index.js +20 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +100 -7
- package/dist/memory/auto-memory.d.ts +136 -0
- package/dist/memory/auto-memory.js +301 -0
- package/dist/memory/file-memory.d.ts +88 -0
- package/dist/memory/file-memory.js +287 -0
- package/dist/memory/index.d.ts +2 -0
- package/dist/memory/index.js +11 -1
- package/dist/workflows/loop.d.ts +0 -0
- package/dist/workflows/loop.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autonomy Modes - Control automatic execution behavior
|
|
3
|
+
*/
|
|
4
|
+
export type AutonomyMode = 'suggest' | 'auto_edit' | 'full_auto';
|
|
5
|
+
export type ActionType = 'file_read' | 'file_write' | 'file_delete' | 'shell_command' | 'network_request' | 'git_operation' | 'install_package';
|
|
6
|
+
export interface ApprovalPolicy {
|
|
7
|
+
action: ActionType;
|
|
8
|
+
requiresApproval: boolean;
|
|
9
|
+
autoApprovePatterns?: string[];
|
|
10
|
+
autoDenyPatterns?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface AutonomyConfig {
|
|
13
|
+
mode: AutonomyMode;
|
|
14
|
+
policies?: ApprovalPolicy[];
|
|
15
|
+
rememberDecisions?: boolean;
|
|
16
|
+
maxAutoActions?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ActionRequest {
|
|
19
|
+
type: ActionType;
|
|
20
|
+
description: string;
|
|
21
|
+
target?: string;
|
|
22
|
+
details?: Record<string, any>;
|
|
23
|
+
}
|
|
24
|
+
export interface ActionDecision {
|
|
25
|
+
approved: boolean;
|
|
26
|
+
reason?: string;
|
|
27
|
+
remembered?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Default policies for each mode
|
|
31
|
+
*/
|
|
32
|
+
export declare const MODE_POLICIES: Record<AutonomyMode, ApprovalPolicy[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Autonomy Manager class
|
|
35
|
+
*/
|
|
36
|
+
export declare class AutonomyManager {
|
|
37
|
+
private config;
|
|
38
|
+
private rememberedDecisions;
|
|
39
|
+
private actionCount;
|
|
40
|
+
private promptCallback?;
|
|
41
|
+
constructor(config?: Partial<AutonomyConfig>);
|
|
42
|
+
/**
|
|
43
|
+
* Set the prompt callback for user approval
|
|
44
|
+
*/
|
|
45
|
+
setPromptCallback(callback: (request: ActionRequest) => Promise<boolean>): void;
|
|
46
|
+
/**
|
|
47
|
+
* Request approval for an action
|
|
48
|
+
*/
|
|
49
|
+
requestApproval(request: ActionRequest): Promise<ActionDecision>;
|
|
50
|
+
/**
|
|
51
|
+
* Get policy for an action type
|
|
52
|
+
*/
|
|
53
|
+
private getPolicy;
|
|
54
|
+
/**
|
|
55
|
+
* Generate decision key for remembering
|
|
56
|
+
*/
|
|
57
|
+
private getDecisionKey;
|
|
58
|
+
/**
|
|
59
|
+
* Match a target against a pattern
|
|
60
|
+
*/
|
|
61
|
+
private matchPattern;
|
|
62
|
+
/**
|
|
63
|
+
* Get current mode
|
|
64
|
+
*/
|
|
65
|
+
getMode(): AutonomyMode;
|
|
66
|
+
/**
|
|
67
|
+
* Set mode
|
|
68
|
+
*/
|
|
69
|
+
setMode(mode: AutonomyMode): void;
|
|
70
|
+
/**
|
|
71
|
+
* Add custom policy
|
|
72
|
+
*/
|
|
73
|
+
addPolicy(policy: ApprovalPolicy): void;
|
|
74
|
+
/**
|
|
75
|
+
* Clear remembered decisions
|
|
76
|
+
*/
|
|
77
|
+
clearRemembered(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Reset action count
|
|
80
|
+
*/
|
|
81
|
+
resetActionCount(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Get action count
|
|
84
|
+
*/
|
|
85
|
+
getActionCount(): number;
|
|
86
|
+
/**
|
|
87
|
+
* Get summary of current settings
|
|
88
|
+
*/
|
|
89
|
+
getSummary(): string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create an autonomy manager
|
|
93
|
+
*/
|
|
94
|
+
export declare function createAutonomyManager(config?: Partial<AutonomyConfig>): AutonomyManager;
|
|
95
|
+
/**
|
|
96
|
+
* Simple approval prompt for CLI
|
|
97
|
+
*/
|
|
98
|
+
export declare function cliApprovalPrompt(request: ActionRequest): Promise<boolean>;
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Autonomy Modes - Control automatic execution behavior
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.AutonomyManager = exports.MODE_POLICIES = void 0;
|
|
40
|
+
exports.createAutonomyManager = createAutonomyManager;
|
|
41
|
+
exports.cliApprovalPrompt = cliApprovalPrompt;
|
|
42
|
+
/**
|
|
43
|
+
* Default policies for each mode
|
|
44
|
+
*/
|
|
45
|
+
exports.MODE_POLICIES = {
|
|
46
|
+
suggest: [
|
|
47
|
+
{ action: 'file_read', requiresApproval: false },
|
|
48
|
+
{ action: 'file_write', requiresApproval: true },
|
|
49
|
+
{ action: 'file_delete', requiresApproval: true },
|
|
50
|
+
{ action: 'shell_command', requiresApproval: true },
|
|
51
|
+
{ action: 'network_request', requiresApproval: true },
|
|
52
|
+
{ action: 'git_operation', requiresApproval: true },
|
|
53
|
+
{ action: 'install_package', requiresApproval: true }
|
|
54
|
+
],
|
|
55
|
+
auto_edit: [
|
|
56
|
+
{ action: 'file_read', requiresApproval: false },
|
|
57
|
+
{ action: 'file_write', requiresApproval: false },
|
|
58
|
+
{ action: 'file_delete', requiresApproval: true },
|
|
59
|
+
{ action: 'shell_command', requiresApproval: true },
|
|
60
|
+
{ action: 'network_request', requiresApproval: false },
|
|
61
|
+
{ action: 'git_operation', requiresApproval: true },
|
|
62
|
+
{ action: 'install_package', requiresApproval: true }
|
|
63
|
+
],
|
|
64
|
+
full_auto: [
|
|
65
|
+
{ action: 'file_read', requiresApproval: false },
|
|
66
|
+
{ action: 'file_write', requiresApproval: false },
|
|
67
|
+
{ action: 'file_delete', requiresApproval: false },
|
|
68
|
+
{ action: 'shell_command', requiresApproval: false },
|
|
69
|
+
{ action: 'network_request', requiresApproval: false },
|
|
70
|
+
{ action: 'git_operation', requiresApproval: false },
|
|
71
|
+
{ action: 'install_package', requiresApproval: true }
|
|
72
|
+
]
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Autonomy Manager class
|
|
76
|
+
*/
|
|
77
|
+
class AutonomyManager {
|
|
78
|
+
constructor(config = {}) {
|
|
79
|
+
this.rememberedDecisions = new Map();
|
|
80
|
+
this.actionCount = 0;
|
|
81
|
+
this.config = {
|
|
82
|
+
mode: 'suggest',
|
|
83
|
+
rememberDecisions: true,
|
|
84
|
+
maxAutoActions: 100,
|
|
85
|
+
...config
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Set the prompt callback for user approval
|
|
90
|
+
*/
|
|
91
|
+
setPromptCallback(callback) {
|
|
92
|
+
this.promptCallback = callback;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Request approval for an action
|
|
96
|
+
*/
|
|
97
|
+
async requestApproval(request) {
|
|
98
|
+
// Check if we've exceeded max auto actions
|
|
99
|
+
if (this.config.maxAutoActions && this.actionCount >= this.config.maxAutoActions) {
|
|
100
|
+
return {
|
|
101
|
+
approved: false,
|
|
102
|
+
reason: 'Maximum auto actions exceeded'
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// Check remembered decisions
|
|
106
|
+
const decisionKey = this.getDecisionKey(request);
|
|
107
|
+
if (this.config.rememberDecisions && this.rememberedDecisions.has(decisionKey)) {
|
|
108
|
+
const remembered = this.rememberedDecisions.get(decisionKey);
|
|
109
|
+
if (remembered)
|
|
110
|
+
this.actionCount++;
|
|
111
|
+
return {
|
|
112
|
+
approved: remembered,
|
|
113
|
+
reason: 'Remembered decision',
|
|
114
|
+
remembered: true
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// Get policy for this action type
|
|
118
|
+
const policy = this.getPolicy(request.type);
|
|
119
|
+
// Check auto-approve patterns
|
|
120
|
+
if (policy.autoApprovePatterns && request.target) {
|
|
121
|
+
for (const pattern of policy.autoApprovePatterns) {
|
|
122
|
+
if (this.matchPattern(request.target, pattern)) {
|
|
123
|
+
this.actionCount++;
|
|
124
|
+
return { approved: true, reason: `Matched auto-approve pattern: ${pattern}` };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Check auto-deny patterns
|
|
129
|
+
if (policy.autoDenyPatterns && request.target) {
|
|
130
|
+
for (const pattern of policy.autoDenyPatterns) {
|
|
131
|
+
if (this.matchPattern(request.target, pattern)) {
|
|
132
|
+
return { approved: false, reason: `Matched auto-deny pattern: ${pattern}` };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// If no approval required, auto-approve
|
|
137
|
+
if (!policy.requiresApproval) {
|
|
138
|
+
this.actionCount++;
|
|
139
|
+
return { approved: true, reason: 'No approval required' };
|
|
140
|
+
}
|
|
141
|
+
// Prompt user for approval
|
|
142
|
+
if (this.promptCallback) {
|
|
143
|
+
const approved = await this.promptCallback(request);
|
|
144
|
+
// Remember decision if enabled
|
|
145
|
+
if (this.config.rememberDecisions) {
|
|
146
|
+
this.rememberedDecisions.set(decisionKey, approved);
|
|
147
|
+
}
|
|
148
|
+
if (approved)
|
|
149
|
+
this.actionCount++;
|
|
150
|
+
return { approved, reason: 'User decision' };
|
|
151
|
+
}
|
|
152
|
+
// No prompt callback, deny by default
|
|
153
|
+
return { approved: false, reason: 'No approval mechanism available' };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get policy for an action type
|
|
157
|
+
*/
|
|
158
|
+
getPolicy(actionType) {
|
|
159
|
+
// Check custom policies first
|
|
160
|
+
if (this.config.policies) {
|
|
161
|
+
const custom = this.config.policies.find(p => p.action === actionType);
|
|
162
|
+
if (custom)
|
|
163
|
+
return custom;
|
|
164
|
+
}
|
|
165
|
+
// Fall back to mode defaults
|
|
166
|
+
const modePolicy = exports.MODE_POLICIES[this.config.mode].find(p => p.action === actionType);
|
|
167
|
+
return modePolicy || { action: actionType, requiresApproval: true };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Generate decision key for remembering
|
|
171
|
+
*/
|
|
172
|
+
getDecisionKey(request) {
|
|
173
|
+
return `${request.type}:${request.target || 'default'}`;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Match a target against a pattern
|
|
177
|
+
*/
|
|
178
|
+
matchPattern(target, pattern) {
|
|
179
|
+
// Simple glob-like matching
|
|
180
|
+
const regex = new RegExp('^' + pattern.replace(/\*/g, '.*').replace(/\?/g, '.') + '$');
|
|
181
|
+
return regex.test(target);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get current mode
|
|
185
|
+
*/
|
|
186
|
+
getMode() {
|
|
187
|
+
return this.config.mode;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Set mode
|
|
191
|
+
*/
|
|
192
|
+
setMode(mode) {
|
|
193
|
+
this.config.mode = mode;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Add custom policy
|
|
197
|
+
*/
|
|
198
|
+
addPolicy(policy) {
|
|
199
|
+
if (!this.config.policies) {
|
|
200
|
+
this.config.policies = [];
|
|
201
|
+
}
|
|
202
|
+
// Remove existing policy for this action
|
|
203
|
+
this.config.policies = this.config.policies.filter(p => p.action !== policy.action);
|
|
204
|
+
this.config.policies.push(policy);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Clear remembered decisions
|
|
208
|
+
*/
|
|
209
|
+
clearRemembered() {
|
|
210
|
+
this.rememberedDecisions.clear();
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Reset action count
|
|
214
|
+
*/
|
|
215
|
+
resetActionCount() {
|
|
216
|
+
this.actionCount = 0;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get action count
|
|
220
|
+
*/
|
|
221
|
+
getActionCount() {
|
|
222
|
+
return this.actionCount;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get summary of current settings
|
|
226
|
+
*/
|
|
227
|
+
getSummary() {
|
|
228
|
+
const lines = [
|
|
229
|
+
`Autonomy Mode: ${this.config.mode}`,
|
|
230
|
+
`Actions taken: ${this.actionCount}/${this.config.maxAutoActions || 'unlimited'}`,
|
|
231
|
+
`Remembered decisions: ${this.rememberedDecisions.size}`,
|
|
232
|
+
'',
|
|
233
|
+
'Current policies:'
|
|
234
|
+
];
|
|
235
|
+
const policies = exports.MODE_POLICIES[this.config.mode];
|
|
236
|
+
for (const policy of policies) {
|
|
237
|
+
const status = policy.requiresApproval ? '⚠️ requires approval' : '✓ auto-approved';
|
|
238
|
+
lines.push(` ${policy.action}: ${status}`);
|
|
239
|
+
}
|
|
240
|
+
return lines.join('\n');
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
exports.AutonomyManager = AutonomyManager;
|
|
244
|
+
/**
|
|
245
|
+
* Create an autonomy manager
|
|
246
|
+
*/
|
|
247
|
+
function createAutonomyManager(config) {
|
|
248
|
+
return new AutonomyManager(config);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Simple approval prompt for CLI
|
|
252
|
+
*/
|
|
253
|
+
async function cliApprovalPrompt(request) {
|
|
254
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
255
|
+
const rl = readline.createInterface({
|
|
256
|
+
input: process.stdin,
|
|
257
|
+
output: process.stdout
|
|
258
|
+
});
|
|
259
|
+
return new Promise((resolve) => {
|
|
260
|
+
const message = `\n⚠️ Action requires approval:\n Type: ${request.type}\n ${request.description}\n Target: ${request.target || 'N/A'}\n\nApprove? (y/n): `;
|
|
261
|
+
rl.question(message, (answer) => {
|
|
262
|
+
rl.close();
|
|
263
|
+
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Jobs - Persisted job queue with adapter support
|
|
3
|
+
*/
|
|
4
|
+
export type JobStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
5
|
+
export type JobPriority = 'low' | 'normal' | 'high' | 'critical';
|
|
6
|
+
export interface Job<T = any> {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
data: T;
|
|
10
|
+
status: JobStatus;
|
|
11
|
+
priority: JobPriority;
|
|
12
|
+
attempts: number;
|
|
13
|
+
maxAttempts: number;
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
startedAt?: Date;
|
|
16
|
+
completedAt?: Date;
|
|
17
|
+
result?: any;
|
|
18
|
+
error?: string;
|
|
19
|
+
progress?: number;
|
|
20
|
+
metadata?: Record<string, any>;
|
|
21
|
+
}
|
|
22
|
+
export interface JobQueueConfig {
|
|
23
|
+
name?: string;
|
|
24
|
+
concurrency?: number;
|
|
25
|
+
maxAttempts?: number;
|
|
26
|
+
retryDelay?: number;
|
|
27
|
+
storage?: JobStorageAdapter;
|
|
28
|
+
}
|
|
29
|
+
export interface JobStorageAdapter {
|
|
30
|
+
save(job: Job): Promise<void>;
|
|
31
|
+
get(id: string): Promise<Job | null>;
|
|
32
|
+
getAll(): Promise<Job[]>;
|
|
33
|
+
getByStatus(status: JobStatus): Promise<Job[]>;
|
|
34
|
+
update(id: string, updates: Partial<Job>): Promise<void>;
|
|
35
|
+
delete(id: string): Promise<void>;
|
|
36
|
+
clear(): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export type JobHandler<T = any, R = any> = (job: Job<T>, context: JobContext) => Promise<R>;
|
|
39
|
+
export interface JobContext {
|
|
40
|
+
updateProgress: (progress: number) => Promise<void>;
|
|
41
|
+
log: (message: string) => void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* In-memory job storage adapter
|
|
45
|
+
*/
|
|
46
|
+
export declare class MemoryJobStorage implements JobStorageAdapter {
|
|
47
|
+
private jobs;
|
|
48
|
+
save(job: Job): Promise<void>;
|
|
49
|
+
get(id: string): Promise<Job | null>;
|
|
50
|
+
getAll(): Promise<Job[]>;
|
|
51
|
+
getByStatus(status: JobStatus): Promise<Job[]>;
|
|
52
|
+
update(id: string, updates: Partial<Job>): Promise<void>;
|
|
53
|
+
delete(id: string): Promise<void>;
|
|
54
|
+
clear(): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* File-based job storage adapter
|
|
58
|
+
*/
|
|
59
|
+
export declare class FileJobStorage implements JobStorageAdapter {
|
|
60
|
+
private filePath;
|
|
61
|
+
private jobs;
|
|
62
|
+
private initialized;
|
|
63
|
+
constructor(filePath: string);
|
|
64
|
+
private init;
|
|
65
|
+
private persist;
|
|
66
|
+
save(job: Job): Promise<void>;
|
|
67
|
+
get(id: string): Promise<Job | null>;
|
|
68
|
+
getAll(): Promise<Job[]>;
|
|
69
|
+
getByStatus(status: JobStatus): Promise<Job[]>;
|
|
70
|
+
update(id: string, updates: Partial<Job>): Promise<void>;
|
|
71
|
+
delete(id: string): Promise<void>;
|
|
72
|
+
clear(): Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Job Queue class
|
|
76
|
+
*/
|
|
77
|
+
export declare class JobQueue {
|
|
78
|
+
private config;
|
|
79
|
+
private storage;
|
|
80
|
+
private handlers;
|
|
81
|
+
private running;
|
|
82
|
+
private activeJobs;
|
|
83
|
+
private processInterval?;
|
|
84
|
+
constructor(config?: JobQueueConfig);
|
|
85
|
+
/**
|
|
86
|
+
* Register a job handler
|
|
87
|
+
*/
|
|
88
|
+
register<T = any, R = any>(name: string, handler: JobHandler<T, R>): void;
|
|
89
|
+
/**
|
|
90
|
+
* Add a job to the queue
|
|
91
|
+
*/
|
|
92
|
+
add<T = any>(name: string, data: T, options?: Partial<Job<T>>): Promise<Job<T>>;
|
|
93
|
+
/**
|
|
94
|
+
* Get a job by ID
|
|
95
|
+
*/
|
|
96
|
+
get(id: string): Promise<Job | null>;
|
|
97
|
+
/**
|
|
98
|
+
* Get all jobs
|
|
99
|
+
*/
|
|
100
|
+
getAll(): Promise<Job[]>;
|
|
101
|
+
/**
|
|
102
|
+
* Get jobs by status
|
|
103
|
+
*/
|
|
104
|
+
getByStatus(status: JobStatus): Promise<Job[]>;
|
|
105
|
+
/**
|
|
106
|
+
* Cancel a job
|
|
107
|
+
*/
|
|
108
|
+
cancel(id: string): Promise<boolean>;
|
|
109
|
+
/**
|
|
110
|
+
* Retry a failed job
|
|
111
|
+
*/
|
|
112
|
+
retry(id: string): Promise<boolean>;
|
|
113
|
+
/**
|
|
114
|
+
* Start processing jobs
|
|
115
|
+
*/
|
|
116
|
+
start(): void;
|
|
117
|
+
/**
|
|
118
|
+
* Stop processing jobs
|
|
119
|
+
*/
|
|
120
|
+
stop(): void;
|
|
121
|
+
/**
|
|
122
|
+
* Process pending jobs
|
|
123
|
+
*/
|
|
124
|
+
private process;
|
|
125
|
+
/**
|
|
126
|
+
* Run a single job
|
|
127
|
+
*/
|
|
128
|
+
private runJob;
|
|
129
|
+
/**
|
|
130
|
+
* Process a job immediately (bypass queue)
|
|
131
|
+
*/
|
|
132
|
+
processNow(id: string): Promise<any>;
|
|
133
|
+
/**
|
|
134
|
+
* Get queue stats
|
|
135
|
+
*/
|
|
136
|
+
getStats(): Promise<{
|
|
137
|
+
pending: number;
|
|
138
|
+
running: number;
|
|
139
|
+
completed: number;
|
|
140
|
+
failed: number;
|
|
141
|
+
cancelled: number;
|
|
142
|
+
}>;
|
|
143
|
+
/**
|
|
144
|
+
* Clear completed/failed jobs
|
|
145
|
+
*/
|
|
146
|
+
cleanup(olderThan?: Date): Promise<number>;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create a job queue
|
|
150
|
+
*/
|
|
151
|
+
export declare function createJobQueue(config?: JobQueueConfig): JobQueue;
|
|
152
|
+
/**
|
|
153
|
+
* Create a file-based job storage
|
|
154
|
+
*/
|
|
155
|
+
export declare function createFileJobStorage(filePath: string): FileJobStorage;
|