pi-harness-runtime 1.1.430 โ 1.1.432
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/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/package.json +1 -1
- 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/package.json +1 -1
- 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/package.json +1 -1
- 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/logging/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/package.json +1 -1
- 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/package.json +1 -1
- 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/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/tooling-preference/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/two-phase-review/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/voice-api/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
- package/packages/notification/adapters/email-adapter.ts +0 -126
- package/packages/notification/adapters/ntfy-adapter.ts +0 -100
- package/packages/notification/adapters/telegram-adapter.ts +0 -107
- package/packages/notification/adapters/webhook-adapter.ts +0 -75
- package/packages/notification/base-adapter.ts +0 -75
- package/packages/notification/index.ts +0 -51
- package/packages/notification/notification-center.ts +0 -286
- package/packages/notification/types.ts +0 -89
- package/packages/quota-manager/index.ts +0 -28
- package/packages/quota-manager/quota-manager.ts +0 -339
- package/packages/quota-manager/tui-usage-monitor.ts +0 -355
- package/packages/types/src/ai-providers.d.ts +0 -36
- package/packages/types/src/runtime-types.d.ts +0 -418
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/provider-router",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.432",
|
|
4
4
|
"description": "Enhanced Provider Router for pi-harness-runtime โ intelligent routing with capabilities, costs, and quotas",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/provider-router.js",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/two-phase-review",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.432",
|
|
4
4
|
"description": "pi-harness-runtime โ two-phase implementation and review workflow (queue review signals, gate the phase, scope the diff)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Email Adapter โ RFC-0022
|
|
3
|
-
*
|
|
4
|
-
* Sends notifications via SMTP.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type {
|
|
8
|
-
NotificationPayload,
|
|
9
|
-
NotificationResult,
|
|
10
|
-
EmailConfig,
|
|
11
|
-
} from "../types.js";
|
|
12
|
-
import { BaseChannelAdapter } from "../base-adapter.js";
|
|
13
|
-
|
|
14
|
-
// Simple SMTP client using built-in net module
|
|
15
|
-
async function sendSmtpEmail(
|
|
16
|
-
host: string,
|
|
17
|
-
port: number,
|
|
18
|
-
user: string,
|
|
19
|
-
password: string,
|
|
20
|
-
from: string,
|
|
21
|
-
to: string[],
|
|
22
|
-
subject: string,
|
|
23
|
-
body: string,
|
|
24
|
-
tls: boolean = false,
|
|
25
|
-
): Promise<void> {
|
|
26
|
-
// For a production implementation, you'd use a proper SMTP library
|
|
27
|
-
// This is a placeholder that logs the email
|
|
28
|
-
console.log(`[Email] Would send to ${to.join(", ")}`);
|
|
29
|
-
console.log(`[Email] Subject: ${subject}`);
|
|
30
|
-
console.log(`[Email] Body: ${body}`);
|
|
31
|
-
|
|
32
|
-
// In practice, you'd use something like:
|
|
33
|
-
// import { createClient } from "nodemailer";
|
|
34
|
-
// const transporter = nodemailer.createTransport({ ... });
|
|
35
|
-
// await transporter.sendMail({ ... });
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export class EmailAdapter extends BaseChannelAdapter {
|
|
39
|
-
readonly id = "email";
|
|
40
|
-
readonly type = "email";
|
|
41
|
-
|
|
42
|
-
constructor(config: EmailConfig) {
|
|
43
|
-
super({ id: "email", type: "email", enabled: true, config });
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async initialize(): Promise<boolean> {
|
|
47
|
-
// Verify SMTP connection
|
|
48
|
-
try {
|
|
49
|
-
const cfg = this.config.config as EmailConfig;
|
|
50
|
-
// In production, verify SMTP credentials
|
|
51
|
-
return Boolean(
|
|
52
|
-
cfg.smtpHost && cfg.smtpUser && cfg.from && cfg.to.length > 0,
|
|
53
|
-
);
|
|
54
|
-
} catch {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async send(payload: NotificationPayload): Promise<NotificationResult> {
|
|
60
|
-
try {
|
|
61
|
-
const cfg = this.config.config as EmailConfig;
|
|
62
|
-
const subject = `${this.getEmoji(payload.event)} ${payload.title}`;
|
|
63
|
-
const body = this.formatBody(payload);
|
|
64
|
-
|
|
65
|
-
await sendSmtpEmail(
|
|
66
|
-
cfg.smtpHost,
|
|
67
|
-
cfg.smtpPort,
|
|
68
|
-
cfg.smtpUser,
|
|
69
|
-
cfg.smtpPassword,
|
|
70
|
-
cfg.from,
|
|
71
|
-
cfg.to,
|
|
72
|
-
subject,
|
|
73
|
-
body,
|
|
74
|
-
cfg.tls,
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
return { success: true, channel: this.id };
|
|
78
|
-
} catch (error) {
|
|
79
|
-
return {
|
|
80
|
-
success: false,
|
|
81
|
-
channel: this.id,
|
|
82
|
-
error: String(error),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
private formatBody(payload: NotificationPayload): string {
|
|
88
|
-
const lines = [
|
|
89
|
-
payload.message,
|
|
90
|
-
"",
|
|
91
|
-
"---",
|
|
92
|
-
`Event: ${payload.event}`,
|
|
93
|
-
`Time: ${payload.timestamp}`,
|
|
94
|
-
];
|
|
95
|
-
|
|
96
|
-
if (payload.details?.taskTitle) {
|
|
97
|
-
lines.push(`Task: ${payload.details.taskTitle}`);
|
|
98
|
-
}
|
|
99
|
-
if (payload.details?.jobId) {
|
|
100
|
-
lines.push(`Job ID: ${payload.details.jobId}`);
|
|
101
|
-
}
|
|
102
|
-
if (payload.details?.error) {
|
|
103
|
-
lines.push("", `Error: ${payload.details.error}`);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return lines.join("\n");
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
private getEmoji(event: NotificationPayload["event"]): string {
|
|
110
|
-
const map: Record<string, string> = {
|
|
111
|
-
JobStarted: "[๐]",
|
|
112
|
-
TaskCompleted: "[โ
]",
|
|
113
|
-
TaskFailed: "[โ]",
|
|
114
|
-
QuotaPaused: "[โธ]",
|
|
115
|
-
ResumeScheduled: "[โถ]",
|
|
116
|
-
ContextCompacted: "[๐ฆ]",
|
|
117
|
-
OutputLimitContinued: "[๐]",
|
|
118
|
-
E2EFailed: "[๐งช]",
|
|
119
|
-
HumanReviewNeeded: "[๐ค]",
|
|
120
|
-
ReadyForClient: "[๐]",
|
|
121
|
-
JobCancelled: "[๐ซ]",
|
|
122
|
-
Error: "[โ ]",
|
|
123
|
-
};
|
|
124
|
-
return map[event] ?? "[๐ข]";
|
|
125
|
-
}
|
|
126
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ntfy Adapter โ RFC-0022
|
|
3
|
-
*
|
|
4
|
-
* Sends notifications via ntfy.sh (or self-hosted ntfy server).
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type {
|
|
8
|
-
NotificationPayload,
|
|
9
|
-
NotificationResult,
|
|
10
|
-
NtfyConfig,
|
|
11
|
-
} from "../types.js";
|
|
12
|
-
import { BaseChannelAdapter } from "../base-adapter.js";
|
|
13
|
-
|
|
14
|
-
export class NtfyAdapter extends BaseChannelAdapter {
|
|
15
|
-
readonly id = "ntfy";
|
|
16
|
-
readonly type = "ntfy";
|
|
17
|
-
|
|
18
|
-
constructor(config: NtfyConfig) {
|
|
19
|
-
super({ id: "ntfy", type: "ntfy", enabled: true, config });
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async initialize(): Promise<boolean> {
|
|
23
|
-
// Ntfy doesn't require initialization; it's fire-and-forget
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async send(payload: NotificationPayload): Promise<NotificationResult> {
|
|
28
|
-
try {
|
|
29
|
-
const cfg = this.config.config as NtfyConfig;
|
|
30
|
-
const message = this.formatMessage(payload);
|
|
31
|
-
const headers: Record<string, string> = {
|
|
32
|
-
"Content-Type": "text/plain",
|
|
33
|
-
Title: payload.title,
|
|
34
|
-
Tags: this.getTags(payload.event),
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
// Add auth if configured
|
|
38
|
-
if (cfg.authToken) {
|
|
39
|
-
headers["Authorization"] = `Bearer ${cfg.authToken}`;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const response = await fetch(`${cfg.server}/${cfg.topic}`, {
|
|
43
|
-
method: "POST",
|
|
44
|
-
headers,
|
|
45
|
-
body: message,
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
if (!response.ok) {
|
|
49
|
-
const error = await response.text();
|
|
50
|
-
return {
|
|
51
|
-
success: false,
|
|
52
|
-
channel: this.id,
|
|
53
|
-
error: `Ntfy error: ${error}`,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return { success: true, channel: this.id };
|
|
58
|
-
} catch (error) {
|
|
59
|
-
return {
|
|
60
|
-
success: false,
|
|
61
|
-
channel: this.id,
|
|
62
|
-
error: String(error),
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
private formatMessage(payload: NotificationPayload): string {
|
|
68
|
-
const lines = [payload.message];
|
|
69
|
-
|
|
70
|
-
if (payload.details?.taskTitle) {
|
|
71
|
-
lines.push(`\nTask: ${payload.details.taskTitle}`);
|
|
72
|
-
}
|
|
73
|
-
if (payload.details?.jobId) {
|
|
74
|
-
lines.push(`Job: ${payload.details.jobId}`);
|
|
75
|
-
}
|
|
76
|
-
if (payload.details?.error) {
|
|
77
|
-
lines.push(`\nError: ${payload.details.error}`);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return lines.join("");
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
private getTags(event: NotificationPayload["event"]): string {
|
|
84
|
-
const map: Record<string, string> = {
|
|
85
|
-
JobStarted: "rocket",
|
|
86
|
-
TaskCompleted: "white_check_mark",
|
|
87
|
-
TaskFailed: "x",
|
|
88
|
-
QuotaPaused: "pause_button",
|
|
89
|
-
ResumeScheduled: "play_button",
|
|
90
|
-
ContextCompacted: "package",
|
|
91
|
-
OutputLimitContinued: "repeat",
|
|
92
|
-
E2EFailed: "test_tube",
|
|
93
|
-
HumanReviewNeeded: "bust_in_silhouette",
|
|
94
|
-
ReadyForClient: "tada",
|
|
95
|
-
JobCancelled: "no_entry",
|
|
96
|
-
Error: "warning",
|
|
97
|
-
};
|
|
98
|
-
return map[event] ?? "bell";
|
|
99
|
-
}
|
|
100
|
-
}
|