pi-harness-runtime 1.1.335 → 1.1.337
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/index.ts +21 -12
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/connection-runtime/dist/index.d.ts +11 -0
- package/packages/connection-runtime/dist/index.js +11 -0
- package/packages/connection-runtime/dist/registry.d.ts +69 -0
- package/packages/connection-runtime/dist/registry.js +117 -0
- package/packages/connection-runtime/dist/supervisor.d.ts +89 -0
- package/packages/connection-runtime/dist/supervisor.js +169 -0
- package/packages/connection-runtime/dist/types.d.ts +70 -0
- package/packages/connection-runtime/dist/types.js +16 -0
- package/packages/connection-runtime/package.json +24 -0
- package/packages/connection-runtime/src/index.ts +12 -0
- package/packages/connection-runtime/src/registry.ts +142 -0
- package/packages/connection-runtime/src/supervisor.ts +224 -0
- package/packages/connection-runtime/src/types.ts +88 -0
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/contracts/dist/approvals.d.ts +273 -0
- package/packages/contracts/dist/approvals.js +93 -0
- package/packages/contracts/dist/base.d.ts +78 -0
- package/packages/contracts/dist/base.js +82 -0
- package/packages/contracts/dist/events.d.ts +99 -0
- package/packages/contracts/dist/events.js +65 -0
- package/packages/contracts/dist/index.d.ts +20 -0
- package/packages/contracts/dist/index.js +20 -0
- package/packages/contracts/dist/jobs.d.ts +234 -0
- package/packages/contracts/dist/jobs.js +79 -0
- package/packages/contracts/dist/notifications.d.ts +317 -0
- package/packages/contracts/dist/notifications.js +85 -0
- package/packages/contracts/dist/projects.d.ts +171 -0
- package/packages/contracts/dist/projects.js +62 -0
- package/packages/contracts/dist/sessions.d.ts +226 -0
- package/packages/contracts/dist/sessions.js +82 -0
- package/packages/contracts/package.json +24 -0
- package/packages/contracts/src/approvals.ts +115 -0
- package/packages/contracts/src/base.ts +126 -0
- package/packages/contracts/src/events.ts +78 -0
- package/packages/contracts/src/index.ts +21 -0
- package/packages/contracts/src/jobs.ts +101 -0
- package/packages/contracts/src/notifications.ts +104 -0
- package/packages/contracts/src/projects.ts +81 -0
- package/packages/contracts/src/sessions.ts +104 -0
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/durable-review/package.json +1 -1
- package/packages/e2e-tester/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-sink/dist/index.d.ts +12 -0
- package/packages/event-sink/dist/index.js +12 -0
- package/packages/event-sink/dist/outbox.d.ts +51 -0
- package/packages/event-sink/dist/outbox.js +88 -0
- package/packages/event-sink/dist/projection.d.ts +41 -0
- package/packages/event-sink/dist/projection.js +62 -0
- package/packages/event-sink/dist/sink.d.ts +81 -0
- package/packages/event-sink/dist/sink.js +106 -0
- package/packages/event-sink/package.json +28 -0
- package/packages/event-sink/src/index.ts +15 -0
- package/packages/event-sink/src/outbox.ts +119 -0
- package/packages/event-sink/src/projection.ts +84 -0
- package/packages/event-sink/src/sink.ts +167 -0
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/paperclip-integration/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/permission-mode/dist/checker.d.ts +66 -0
- package/packages/permission-mode/dist/checker.js +64 -0
- package/packages/permission-mode/dist/index.d.ts +12 -0
- package/packages/permission-mode/dist/index.js +11 -0
- package/packages/permission-mode/dist/manager.d.ts +65 -0
- package/packages/permission-mode/dist/manager.js +91 -0
- package/packages/permission-mode/dist/mode.d.ts +31 -0
- package/packages/permission-mode/dist/mode.js +47 -0
- package/packages/permission-mode/package.json +24 -0
- package/packages/permission-mode/src/checker.ts +103 -0
- package/packages/permission-mode/src/index.ts +13 -0
- package/packages/permission-mode/src/manager.ts +154 -0
- package/packages/permission-mode/src/mode.ts +73 -0
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/relay/dist/client.d.ts +53 -0
- package/packages/relay/dist/client.js +95 -0
- package/packages/relay/dist/index.d.ts +9 -0
- package/packages/relay/dist/index.js +8 -0
- package/packages/relay/dist/server.d.ts +58 -0
- package/packages/relay/dist/server.js +93 -0
- package/packages/relay/dist/types.d.ts +35 -0
- package/packages/relay/dist/types.js +4 -0
- package/packages/relay/package.json +24 -0
- package/packages/relay/src/client.ts +119 -0
- package/packages/relay/src/index.ts +10 -0
- package/packages/relay/src/server.ts +120 -0
- package/packages/relay/src/types.ts +38 -0
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/telegram/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/webmcp-tester/package.json +1 -1
- package/packages/wiki/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Checker
|
|
3
|
+
*
|
|
4
|
+
* Checks if an action requires approval based on current permission mode.
|
|
5
|
+
*/
|
|
6
|
+
import type { PermissionMode } from './mode.js';
|
|
7
|
+
/**
|
|
8
|
+
* Action that can be checked for permission
|
|
9
|
+
*/
|
|
10
|
+
export interface Action {
|
|
11
|
+
/** Tool or command name */
|
|
12
|
+
tool: string;
|
|
13
|
+
/** File path if applicable */
|
|
14
|
+
file?: string;
|
|
15
|
+
/** Command string if applicable */
|
|
16
|
+
command?: string;
|
|
17
|
+
/** Additional context */
|
|
18
|
+
context?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Permission check result
|
|
22
|
+
*/
|
|
23
|
+
export interface PermissionCheck {
|
|
24
|
+
/** Whether approval is required */
|
|
25
|
+
requiresApproval: boolean;
|
|
26
|
+
/** Reason for approval requirement */
|
|
27
|
+
reason?: string;
|
|
28
|
+
/** Tool that triggered the check */
|
|
29
|
+
tool: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Permission Checker
|
|
33
|
+
*/
|
|
34
|
+
export declare class PermissionChecker {
|
|
35
|
+
private mode;
|
|
36
|
+
private auditLog;
|
|
37
|
+
constructor(mode: PermissionMode);
|
|
38
|
+
/**
|
|
39
|
+
* Update the current permission mode
|
|
40
|
+
*/
|
|
41
|
+
setMode(mode: PermissionMode): void;
|
|
42
|
+
/**
|
|
43
|
+
* Get current permission mode
|
|
44
|
+
*/
|
|
45
|
+
getMode(): PermissionMode;
|
|
46
|
+
/**
|
|
47
|
+
* Check if an action requires approval
|
|
48
|
+
*/
|
|
49
|
+
check(action: Action): PermissionCheck;
|
|
50
|
+
/**
|
|
51
|
+
* Check multiple actions
|
|
52
|
+
*/
|
|
53
|
+
checkMany(actions: Action[]): PermissionCheck[];
|
|
54
|
+
/**
|
|
55
|
+
* Get audit log
|
|
56
|
+
*/
|
|
57
|
+
getAuditLog(): Array<{
|
|
58
|
+
action: Action;
|
|
59
|
+
result: PermissionCheck;
|
|
60
|
+
timestamp: string;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Clear audit log
|
|
64
|
+
*/
|
|
65
|
+
clearAuditLog(): void;
|
|
66
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Checker
|
|
3
|
+
*
|
|
4
|
+
* Checks if an action requires approval based on current permission mode.
|
|
5
|
+
*/
|
|
6
|
+
import { requiresApproval } from './mode.js';
|
|
7
|
+
/**
|
|
8
|
+
* Permission Checker
|
|
9
|
+
*/
|
|
10
|
+
export class PermissionChecker {
|
|
11
|
+
mode;
|
|
12
|
+
auditLog = [];
|
|
13
|
+
constructor(mode) {
|
|
14
|
+
this.mode = mode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Update the current permission mode
|
|
18
|
+
*/
|
|
19
|
+
setMode(mode) {
|
|
20
|
+
this.mode = mode;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get current permission mode
|
|
24
|
+
*/
|
|
25
|
+
getMode() {
|
|
26
|
+
return { ...this.mode };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if an action requires approval
|
|
30
|
+
*/
|
|
31
|
+
check(action) {
|
|
32
|
+
const needsApproval = requiresApproval(this.mode, action.tool);
|
|
33
|
+
const result = {
|
|
34
|
+
requiresApproval: needsApproval,
|
|
35
|
+
tool: action.tool,
|
|
36
|
+
reason: needsApproval ? `Tool "${action.tool}" requires approval in ${this.mode.type} mode` : undefined,
|
|
37
|
+
};
|
|
38
|
+
// Audit log
|
|
39
|
+
this.auditLog.push({
|
|
40
|
+
action,
|
|
41
|
+
result,
|
|
42
|
+
timestamp: new Date().toISOString(),
|
|
43
|
+
});
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check multiple actions
|
|
48
|
+
*/
|
|
49
|
+
checkMany(actions) {
|
|
50
|
+
return actions.map(action => this.check(action));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get audit log
|
|
54
|
+
*/
|
|
55
|
+
getAuditLog() {
|
|
56
|
+
return [...this.auditLog];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Clear audit log
|
|
60
|
+
*/
|
|
61
|
+
clearAuditLog() {
|
|
62
|
+
this.auditLog = [];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Mode - Runtime approval system
|
|
3
|
+
*
|
|
4
|
+
* Inspired by T3Code's permission modes:
|
|
5
|
+
* - Supervised: Requests approval for commands/edits
|
|
6
|
+
* - Auto-accept edits: Approves edits, questions still need approval
|
|
7
|
+
* - Auto: Uses automatic review for routine actions
|
|
8
|
+
* - Full access: No approval needed
|
|
9
|
+
*/
|
|
10
|
+
export { PermissionMode, type PermissionModeType } from './mode.js';
|
|
11
|
+
export { PermissionChecker } from './checker.js';
|
|
12
|
+
export { ApprovalManager } from './manager.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Mode - Runtime approval system
|
|
3
|
+
*
|
|
4
|
+
* Inspired by T3Code's permission modes:
|
|
5
|
+
* - Supervised: Requests approval for commands/edits
|
|
6
|
+
* - Auto-accept edits: Approves edits, questions still need approval
|
|
7
|
+
* - Auto: Uses automatic review for routine actions
|
|
8
|
+
* - Full access: No approval needed
|
|
9
|
+
*/
|
|
10
|
+
export { PermissionChecker } from './checker.js';
|
|
11
|
+
export { ApprovalManager } from './manager.js';
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the approval workflow for pending actions.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Approval request interface
|
|
8
|
+
*/
|
|
9
|
+
export interface ApprovalRequest {
|
|
10
|
+
type: string;
|
|
11
|
+
workspaceId: string;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
description: string;
|
|
14
|
+
tool?: string;
|
|
15
|
+
command?: string;
|
|
16
|
+
file?: string;
|
|
17
|
+
reason?: string;
|
|
18
|
+
expiresIn?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Approval response interface
|
|
22
|
+
*/
|
|
23
|
+
export interface ApprovalResponse {
|
|
24
|
+
id: string;
|
|
25
|
+
approved: boolean;
|
|
26
|
+
reason?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pending approval entry
|
|
30
|
+
*/
|
|
31
|
+
export interface PendingApproval {
|
|
32
|
+
id: string;
|
|
33
|
+
request: ApprovalRequest;
|
|
34
|
+
status: 'pending' | 'approved' | 'rejected' | 'expired';
|
|
35
|
+
createdAt: Date;
|
|
36
|
+
expiresAt?: Date;
|
|
37
|
+
respondedAt?: Date;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Approval manager options
|
|
41
|
+
*/
|
|
42
|
+
export interface ApprovalManagerOptions {
|
|
43
|
+
defaultTimeout?: number;
|
|
44
|
+
onApprovalRequest?: (approval: PendingApproval) => void;
|
|
45
|
+
onApprovalGranted?: (approval: PendingApproval) => void;
|
|
46
|
+
onApprovalRejected?: (approval: PendingApproval) => void;
|
|
47
|
+
onApprovalExpired?: (approval: PendingApproval) => void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Approval Manager
|
|
51
|
+
*/
|
|
52
|
+
export declare class ApprovalManager {
|
|
53
|
+
private pending;
|
|
54
|
+
private options;
|
|
55
|
+
constructor(options?: ApprovalManagerOptions);
|
|
56
|
+
requestApproval(request: ApprovalRequest): PendingApproval;
|
|
57
|
+
respond(response: ApprovalResponse): PendingApproval | null;
|
|
58
|
+
getPending(): PendingApproval[];
|
|
59
|
+
get(id: string): PendingApproval | undefined;
|
|
60
|
+
hasPending(): boolean;
|
|
61
|
+
countPending(): number;
|
|
62
|
+
cancel(id: string): boolean;
|
|
63
|
+
private checkExpiration;
|
|
64
|
+
private generateId;
|
|
65
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages the approval workflow for pending actions.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Approval Manager
|
|
8
|
+
*/
|
|
9
|
+
export class ApprovalManager {
|
|
10
|
+
pending = new Map();
|
|
11
|
+
options;
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
this.options = {
|
|
14
|
+
defaultTimeout: options.defaultTimeout ?? 300,
|
|
15
|
+
onApprovalRequest: options.onApprovalRequest ?? (() => { }),
|
|
16
|
+
onApprovalGranted: options.onApprovalGranted ?? (() => { }),
|
|
17
|
+
onApprovalRejected: options.onApprovalRejected ?? (() => { }),
|
|
18
|
+
onApprovalExpired: options.onApprovalExpired ?? (() => { }),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
requestApproval(request) {
|
|
22
|
+
const id = this.generateId();
|
|
23
|
+
const createdAt = new Date();
|
|
24
|
+
const timeoutSeconds = request.expiresIn ?? this.options.defaultTimeout;
|
|
25
|
+
const expiresAt = new Date(createdAt.getTime() + timeoutSeconds * 1000);
|
|
26
|
+
const approval = { id, request, status: 'pending', createdAt, expiresAt };
|
|
27
|
+
this.pending.set(id, approval);
|
|
28
|
+
this.options.onApprovalRequest(approval);
|
|
29
|
+
if (timeoutSeconds > 0) {
|
|
30
|
+
// SAFETY: globalThis always has setTimeout in JS runtimes (browsers, Node.js)
|
|
31
|
+
const global = globalThis;
|
|
32
|
+
global.setTimeout(() => this.checkExpiration(id), timeoutSeconds * 1000);
|
|
33
|
+
}
|
|
34
|
+
return approval;
|
|
35
|
+
}
|
|
36
|
+
respond(response) {
|
|
37
|
+
const approval = this.pending.get(response.id);
|
|
38
|
+
if (!approval)
|
|
39
|
+
return null;
|
|
40
|
+
approval.status = response.approved ? 'approved' : 'rejected';
|
|
41
|
+
approval.respondedAt = new Date();
|
|
42
|
+
if (response.approved) {
|
|
43
|
+
this.options.onApprovalGranted(approval);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.options.onApprovalRejected(approval);
|
|
47
|
+
}
|
|
48
|
+
// Remove from pending after a short delay
|
|
49
|
+
// SAFETY: globalThis always has setTimeout in JS runtimes
|
|
50
|
+
const global = globalThis;
|
|
51
|
+
global.setTimeout(() => this.pending.delete(response.id), 1000);
|
|
52
|
+
return approval;
|
|
53
|
+
}
|
|
54
|
+
getPending() {
|
|
55
|
+
return Array.from(this.pending.values()).filter(a => a.status === 'pending');
|
|
56
|
+
}
|
|
57
|
+
get(id) {
|
|
58
|
+
return this.pending.get(id);
|
|
59
|
+
}
|
|
60
|
+
hasPending() {
|
|
61
|
+
return this.getPending().length > 0;
|
|
62
|
+
}
|
|
63
|
+
countPending() {
|
|
64
|
+
return this.getPending().length;
|
|
65
|
+
}
|
|
66
|
+
cancel(id) {
|
|
67
|
+
const approval = this.pending.get(id);
|
|
68
|
+
if (approval && approval.status === 'pending') {
|
|
69
|
+
approval.status = 'rejected';
|
|
70
|
+
approval.respondedAt = new Date();
|
|
71
|
+
this.options.onApprovalRejected(approval);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
checkExpiration(id) {
|
|
77
|
+
const approval = this.pending.get(id);
|
|
78
|
+
if (approval && approval.status === 'pending') {
|
|
79
|
+
const now = new Date();
|
|
80
|
+
if (approval.expiresAt && now >= approval.expiresAt) {
|
|
81
|
+
approval.status = 'expired';
|
|
82
|
+
approval.respondedAt = now;
|
|
83
|
+
this.pending.delete(id);
|
|
84
|
+
this.options.onApprovalExpired(approval);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
generateId() {
|
|
89
|
+
return `approval-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Mode Types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Permission mode types - inspired by T3Code
|
|
6
|
+
*/
|
|
7
|
+
export type PermissionModeType = 'supervised' | 'auto-accept-edits' | 'auto' | 'full-access';
|
|
8
|
+
/**
|
|
9
|
+
* Permission mode configuration
|
|
10
|
+
*/
|
|
11
|
+
export interface PermissionMode {
|
|
12
|
+
type: PermissionModeType;
|
|
13
|
+
/** Project override for this mode */
|
|
14
|
+
projectOverride?: string;
|
|
15
|
+
/** Auto-accept certain tools without approval */
|
|
16
|
+
autoAcceptTools?: string[];
|
|
17
|
+
/** Block certain tools regardless of mode */
|
|
18
|
+
blockedTools?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Default permission modes
|
|
22
|
+
*/
|
|
23
|
+
export declare const DEFAULT_PERMISSION_MODES: Record<PermissionModeType, PermissionMode>;
|
|
24
|
+
/**
|
|
25
|
+
* Get default mode for new sessions
|
|
26
|
+
*/
|
|
27
|
+
export declare function getDefaultMode(): PermissionMode;
|
|
28
|
+
/**
|
|
29
|
+
* Check if mode requires approval for tool
|
|
30
|
+
*/
|
|
31
|
+
export declare function requiresApproval(mode: PermissionMode, tool: string): boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Mode Types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default permission modes
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_PERMISSION_MODES = {
|
|
8
|
+
supervised: {
|
|
9
|
+
type: 'supervised',
|
|
10
|
+
},
|
|
11
|
+
'auto-accept-edits': {
|
|
12
|
+
type: 'auto-accept-edits',
|
|
13
|
+
autoAcceptTools: ['write', 'edit', 'create'],
|
|
14
|
+
},
|
|
15
|
+
auto: {
|
|
16
|
+
type: 'auto',
|
|
17
|
+
autoAcceptTools: ['read', 'search', 'list'],
|
|
18
|
+
},
|
|
19
|
+
'full-access': {
|
|
20
|
+
type: 'full-access',
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Get default mode for new sessions
|
|
25
|
+
*/
|
|
26
|
+
export function getDefaultMode() {
|
|
27
|
+
return { ...DEFAULT_PERMISSION_MODES['full-access'] };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if mode requires approval for tool
|
|
31
|
+
*/
|
|
32
|
+
export function requiresApproval(mode, tool) {
|
|
33
|
+
if (mode.blockedTools?.includes(tool)) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
switch (mode.type) {
|
|
37
|
+
case 'full-access':
|
|
38
|
+
return false;
|
|
39
|
+
case 'auto-accept-edits':
|
|
40
|
+
return !mode.autoAcceptTools?.includes(tool);
|
|
41
|
+
case 'auto':
|
|
42
|
+
return !mode.autoAcceptTools?.includes(tool);
|
|
43
|
+
case 'supervised':
|
|
44
|
+
default:
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pi-harness/permission-mode",
|
|
3
|
+
"version": "1.1.337",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Runtime permission modes for pi-harness - Supervised/Auto/Full-access",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"test": "bun test"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@pi-harness/contracts": "workspace:*"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.7.2"
|
|
23
|
+
}
|
|
24
|
+
}
|