pi-harness-runtime 1.1.341 → 1.1.343

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.
Files changed (129) hide show
  1. package/README.md +127 -0
  2. package/harness/notification-center.ts +363 -0
  3. package/index.ts +111 -15
  4. package/package.json +1 -1
  5. package/packages/a2a-adapter/package.json +1 -1
  6. package/packages/agent-policy/package.json +1 -1
  7. package/packages/architecture-generator/package.json +1 -1
  8. package/packages/auth/package.json +1 -1
  9. package/packages/autonomous-refactor/package.json +1 -1
  10. package/packages/autonomous-runtime/package.json +1 -1
  11. package/packages/cache-strategy/package.json +1 -1
  12. package/packages/capability-registry/package.json +1 -1
  13. package/packages/checkpoint/package.json +1 -1
  14. package/packages/cli-plugin-sdk/package.json +1 -1
  15. package/packages/clipboard/package.json +1 -1
  16. package/packages/clipboard-plugin/package.json +1 -1
  17. package/packages/code-generation/package.json +1 -1
  18. package/packages/code-review/package.json +1 -1
  19. package/packages/codex-adapter/package.json +1 -1
  20. package/packages/codex-watcher/package.json +1 -1
  21. package/packages/config-capture/package.json +1 -1
  22. package/packages/connection-runtime/package.json +1 -1
  23. package/packages/context-compiler/package.json +1 -1
  24. package/packages/context-discovery/package.json +1 -1
  25. package/packages/context-manager/package.json +1 -1
  26. package/packages/contracts/package.json +1 -1
  27. package/packages/cookie-sanitizer/package.json +1 -1
  28. package/packages/cost-optimizer/package.json +1 -1
  29. package/packages/dependency-analyzer/package.json +1 -1
  30. package/packages/django-plugin/package.json +1 -1
  31. package/packages/doc-generator/package.json +1 -1
  32. package/packages/durable-review/package.json +1 -1
  33. package/packages/e2e-tester/package.json +1 -1
  34. package/packages/evaluation-engine/package.json +1 -1
  35. package/packages/evaluation-runner/package.json +1 -1
  36. package/packages/event-bus/package.json +1 -1
  37. package/packages/event-sink/package.json +1 -1
  38. package/packages/event-store/package.json +1 -1
  39. package/packages/experience-replay/package.json +1 -1
  40. package/packages/feedback-collector/package.json +1 -1
  41. package/packages/file-copy-helper/package.json +1 -1
  42. package/packages/framework-detector/package.json +1 -1
  43. package/packages/framework-plugin-sdk/package.json +1 -1
  44. package/packages/frappe-plugin/package.json +1 -1
  45. package/packages/generic-web-plugin/package.json +1 -1
  46. package/packages/health-monitor/package.json +1 -1
  47. package/packages/intent-analyzer/package.json +1 -1
  48. package/packages/jev-judge/package.json +1 -1
  49. package/packages/knowledge-graph/package.json +1 -1
  50. package/packages/knowledge-retrieval/package.json +1 -1
  51. package/packages/laravel-plugin/package.json +1 -1
  52. package/packages/learning-engine/package.json +1 -1
  53. package/packages/mcp-adapter/package.json +1 -1
  54. package/packages/memory-engine/package.json +1 -1
  55. package/packages/milestone-manager/package.json +1 -1
  56. package/packages/model-registry/package.json +1 -1
  57. package/packages/nextjs-plugin/package.json +1 -1
  58. package/packages/notification/dist/notification-center.d.ts +13 -0
  59. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  60. package/packages/notification/dist/notification-center.js +24 -0
  61. package/packages/notification/dist/notification-center.js.map +1 -1
  62. package/packages/notification/dist/telegram-webhook-handler.d.ts +4 -0
  63. package/packages/notification/dist/telegram-webhook-handler.d.ts.map +1 -1
  64. package/packages/notification/dist/telegram-webhook-handler.js +4 -0
  65. package/packages/notification/dist/telegram-webhook-handler.js.map +1 -1
  66. package/packages/notification/package.json +1 -1
  67. package/packages/notification/src/notification-center.ts +40 -13
  68. package/packages/notification/src/telegram-webhook-handler.ts +4 -0
  69. package/packages/observability/package.json +1 -1
  70. package/packages/okf-indexer/package.json +1 -1
  71. package/packages/paperclip-integration/package.json +1 -1
  72. package/packages/performance-optimizer/package.json +1 -1
  73. package/packages/permission-mode/package.json +1 -1
  74. package/packages/privilege-broker/package.json +1 -1
  75. package/packages/project-analyzer/package.json +1 -1
  76. package/packages/project-bootstrap/package.json +1 -1
  77. package/packages/projection-engine/package.json +1 -1
  78. package/packages/prompt-compiler/package.json +1 -1
  79. package/packages/prompt-versioning/package.json +1 -1
  80. package/packages/provider-adapter-sdk/package.json +1 -1
  81. package/packages/provider-router/package.json +1 -1
  82. package/packages/provider-selector/package.json +1 -1
  83. package/packages/providers/package.json +1 -1
  84. package/packages/qdrant-skills/package.json +1 -1
  85. package/packages/quota-manager/package.json +1 -1
  86. package/packages/rate-limiter/package.json +1 -1
  87. package/packages/react-vite-plugin/package.json +1 -1
  88. package/packages/relay/package.json +1 -1
  89. package/packages/release-manager/package.json +1 -1
  90. package/packages/requirement-compiler/package.json +1 -1
  91. package/packages/runtime/package.json +1 -1
  92. package/packages/scheduler/package.json +1 -1
  93. package/packages/scheduler-adapter/package.json +1 -1
  94. package/packages/session/package.json +1 -1
  95. package/packages/session-api/package.json +1 -1
  96. package/packages/session-export/package.json +1 -1
  97. package/packages/shared-context/package.json +1 -1
  98. package/packages/skill-mcp-client/package.json +1 -1
  99. package/packages/skill-registry/package.json +1 -1
  100. package/packages/skills/package.json +1 -1
  101. package/packages/sprint-planner/package.json +1 -1
  102. package/packages/subscription-engine/package.json +1 -1
  103. package/packages/task-compiler/package.json +1 -1
  104. package/packages/telegram/package.json +1 -1
  105. package/packages/tencentdb-memory/package.json +1 -1
  106. package/packages/tencentdb-sync/package.json +1 -1
  107. package/packages/test-data-generator/package.json +1 -1
  108. package/packages/test-generator/package.json +1 -1
  109. package/packages/todo-bd-sync/package.json +1 -1
  110. package/packages/token-estimation/package.json +1 -1
  111. package/packages/token-optimizer/package.json +1 -1
  112. package/packages/trajectory/package.json +1 -1
  113. package/packages/tui/package.json +1 -1
  114. package/packages/types/package.json +1 -1
  115. package/packages/voice-api/dist/line.d.ts +2 -1
  116. package/packages/voice-api/dist/line.js +9 -6
  117. package/packages/voice-api/dist/telegram.js +8 -1
  118. package/packages/voice-api/dist/transcriber.d.ts +12 -41
  119. package/packages/voice-api/dist/transcriber.js +88 -108
  120. package/packages/voice-api/package.json +1 -1
  121. package/packages/voice-api/src/line.ts +11 -8
  122. package/packages/voice-api/src/telegram.ts +9 -1
  123. package/packages/voice-api/src/transcriber.ts +98 -122
  124. package/packages/webmcp-tester/package.json +1 -1
  125. package/packages/wiki/package.json +1 -1
  126. package/packages/workflow-events/package.json +1 -1
  127. package/packages/workspace-scanner/package.json +1 -1
  128. package/packages/worktree/package.json +1 -1
  129. package/packages/write-review/package.json +1 -1
@@ -1,136 +1,112 @@
1
1
  /**
2
- * Voice Transcriber - Main interface for speech-to-text
3
- */
4
-
5
- import type { TranscriptionResult, TranscribeOptions, VoiceApiConfig } from './types.js';
6
- import { WhisperProvider, createOpenAIProvider, createReplicateProvider } from './provider.js';
7
-
8
- /**
9
- * Voice Transcriber
2
+ * OpenAI Whisper API Transcription
10
3
  *
11
- * Main interface for transcribing voice messages to text.
12
- * Supports multiple providers (OpenAI, Replicate).
4
+ * Transcribes audio using OpenAI's Whisper API.
13
5
  */
14
- export class VoiceTranscriber {
15
- private providers: Map<string, WhisperProvider> = new Map();
16
- private defaultProvider: string = '';
17
6
 
18
- constructor(config: VoiceApiConfig = {}) {
19
- // Initialize OpenAI provider
20
- if (config.openaiApiKey) {
21
- const provider = createOpenAIProvider(config.openaiApiKey);
22
- this.providers.set('openai', provider);
23
- this.defaultProvider = 'openai';
24
- }
7
+ import type { TranscriptionResult } from './types.js';
8
+ import * as https from "https";
25
9
 
26
- // Initialize Replicate provider
27
- if (config.replicateApiToken) {
28
- const provider = createReplicateProvider(config.replicateApiToken);
29
- this.providers.set('replicate', provider);
30
- if (!this.defaultProvider) {
31
- this.defaultProvider = 'replicate';
32
- }
33
- }
34
-
35
- // Set default provider from config
36
- if (config.provider && this.providers.has(config.provider)) {
37
- this.defaultProvider = config.provider;
38
- }
39
- }
40
-
41
- /**
42
- * Check if transcriber is configured
43
- */
44
- isConfigured(): boolean {
45
- return this.providers.size > 0;
46
- }
10
+ export interface TranscriberOptions {
11
+ openaiApiKey: string;
12
+ model?: string;
13
+ }
47
14
 
48
- /**
49
- * Get configured providers
50
- */
51
- getProviders(): string[] {
52
- return Array.from(this.providers.keys());
53
- }
15
+ export class VoiceTranscriber {
16
+ private apiKey: string;
17
+ private model: string;
54
18
 
55
- /**
56
- * Get default provider
57
- */
58
- getDefaultProvider(): string | null {
59
- return this.defaultProvider || null;
19
+ constructor(options: TranscriberOptions) {
20
+ this.apiKey = options.openaiApiKey;
21
+ this.model = options.model || "whisper-1";
60
22
  }
61
23
 
62
24
  /**
63
- * Transcribe audio to text
25
+ * Transcribe audio buffer using Whisper API
64
26
  */
65
- async transcribe(options: TranscribeOptions): Promise<TranscriptionResult> {
66
- const providerName = options.provider || this.defaultProvider;
67
-
68
- if (!providerName) {
69
- return {
70
- text: '',
71
- timestamp: new Date().toISOString(),
72
- provider: 'openai',
73
- error: 'No provider configured',
27
+ async transcribe(audioBuffer: Uint8Array): Promise<TranscriptionResult> {
28
+ return new Promise((resolve) => {
29
+ const boundary = "----FormBoundary" + Math.random().toString(36).substring(2);
30
+
31
+ // Build multipart form data
32
+ const body = Buffer.concat([
33
+ Buffer.from(`--${boundary}\r\n`),
34
+ Buffer.from(`Content-Disposition: form-data; name="file"; filename="audio.m4a"\r\n`),
35
+ Buffer.from(`Content-Type: audio/x-m4a\r\n\r\n`),
36
+ Buffer.from(audioBuffer),
37
+ Buffer.from(`\r\n--${boundary}\r\n`),
38
+ Buffer.from(`Content-Disposition: form-data; name="model"\r\n\r\n`),
39
+ Buffer.from(`${this.model}\r\n`),
40
+ Buffer.from(`--${boundary}--\r\n`),
41
+ ]);
42
+
43
+ const options = {
44
+ hostname: "api.openai.com",
45
+ path: "/v1/audio/transcriptions",
46
+ method: "POST",
47
+ headers: {
48
+ "Authorization": `Bearer ${this.apiKey}`,
49
+ "Content-Type": `multipart/form-data; boundary=${boundary}`,
50
+ "Content-Length": body.length.toString(),
51
+ }
74
52
  };
75
- }
76
-
77
- const provider = this.providers.get(providerName);
78
- if (!provider) {
79
- return {
80
- text: '',
81
- timestamp: new Date().toISOString(),
82
- provider: providerName as 'openai' | 'replicate',
83
- error: `Provider ${providerName} not configured`,
84
- };
85
- }
86
-
87
- return provider.transcribe(options);
88
- }
89
-
90
- /**
91
- * Add a provider
92
- */
93
- addProvider(name: string, provider: WhisperProvider): void {
94
- this.providers.set(name, provider);
95
- if (!this.defaultProvider) {
96
- this.defaultProvider = name;
97
- }
98
- }
99
-
100
- /**
101
- * Remove a provider
102
- */
103
- removeProvider(name: string): boolean {
104
- const deleted = this.providers.delete(name);
105
- if (this.defaultProvider === name) {
106
- this.defaultProvider = this.providers.keys().next().value || '';
107
- }
108
- return deleted;
109
- }
110
-
111
- /**
112
- * Set default provider
113
- */
114
- setDefaultProvider(name: string): boolean {
115
- if (this.providers.has(name)) {
116
- this.defaultProvider = name;
117
- return true;
118
- }
119
- return false;
53
+
54
+ const req = https.request(options, (res) => {
55
+ let data = "";
56
+ res.on("data", (chunk) => data += chunk);
57
+ res.on("end", () => {
58
+ if (res.statusCode !== 200) {
59
+ try {
60
+ const error = JSON.parse(data);
61
+ resolve({
62
+ text: "",
63
+ timestamp: new Date().toISOString(),
64
+ provider: 'openai' as const,
65
+ error: error.error?.message || data
66
+ });
67
+ } catch {
68
+ resolve({
69
+ text: "",
70
+ timestamp: new Date().toISOString(),
71
+ provider: 'openai' as const,
72
+ error: data
73
+ });
74
+ }
75
+ return;
76
+ }
77
+
78
+ try {
79
+ const result = JSON.parse(data);
80
+ resolve({
81
+ text: result.text || "",
82
+ language: result.language,
83
+ duration: result.duration,
84
+ confidence: result.confidence,
85
+ timestamp: new Date().toISOString(),
86
+ provider: 'openai' as const,
87
+ });
88
+ } catch (e) {
89
+ resolve({
90
+ text: "",
91
+ timestamp: new Date().toISOString(),
92
+ provider: 'openai' as const,
93
+ error: String(e)
94
+ });
95
+ }
96
+ });
97
+ });
98
+
99
+ req.on("error", (err) => {
100
+ resolve({
101
+ text: "",
102
+ timestamp: new Date().toISOString(),
103
+ provider: 'openai' as const,
104
+ error: String(err)
105
+ });
106
+ });
107
+
108
+ req.write(body);
109
+ req.end();
110
+ });
120
111
  }
121
112
  }
122
-
123
- /**
124
- * Create a VoiceTranscriber from environment variables
125
- */
126
- export function createFromEnv(): VoiceTranscriber {
127
- // SAFETY: globalThis.process is always available in Node.js
128
- const env = (globalThis as unknown as { process: { env: Record<string, string> } }).process;
129
- const envVars = env?.env ?? {};
130
-
131
- return new VoiceTranscriber({
132
- openaiApiKey: envVars.OPENAI_API_KEY,
133
- replicateApiToken: envVars.REPLICATE_API_TOKEN,
134
- provider: (envVars.VOICE_PROVIDER as 'openai' | 'replicate') || 'openai',
135
- });
136
- }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/webmcp-tester",
3
- "version": "1.1.341",
3
+ "version": "1.1.343",
4
4
  "description": "WebMCP-powered E2E testing for pi-harness - natural language test scenarios",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/wiki",
3
- "version": "1.1.341",
3
+ "version": "1.1.343",
4
4
  "description": "LLM Wiki integration for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/workflow-events",
3
- "version": "1.1.341",
3
+ "version": "1.1.343",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/workspace-scanner",
3
- "version": "1.1.341",
3
+ "version": "1.1.343",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/worktree",
3
- "version": "1.1.341",
3
+ "version": "1.1.343",
4
4
  "description": "pi-harness-runtime — worktree",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/write-review",
3
- "version": "1.1.341",
3
+ "version": "1.1.343",
4
4
  "description": "Two-agent write-review loop with blackboard coordination",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",