pi-harness-runtime 1.1.410 → 1.1.411
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/autonomous-runtime/test/types.test.ts +59 -32
- 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/cookie-sanitizer/test/sync.test.ts +7 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/dist/src/imports.js +3 -3
- package/packages/dependency-analyzer/dist/src/imports.js.map +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/dependency-analyzer/src/imports.ts +3 -3
- package/packages/dependency-analyzer/test/analyzer.test.ts +1 -0
- 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/durable-review/test/acceptance.test.ts +24 -2
- package/packages/durable-review/test/smoke.test.ts +85 -47
- 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-bus/test/bus.test.ts +16 -4
- 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/dist/embedder.d.ts +27 -0
- package/packages/qdrant-skills/dist/embedder.d.ts.map +1 -1
- package/packages/qdrant-skills/dist/embedder.js +54 -0
- package/packages/qdrant-skills/dist/embedder.js.map +1 -1
- package/packages/qdrant-skills/dist/index.d.ts +1 -1
- package/packages/qdrant-skills/dist/index.d.ts.map +1 -1
- package/packages/qdrant-skills/dist/index.js +1 -1
- package/packages/qdrant-skills/dist/index.js.map +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/qdrant-skills/src/embedder.ts +90 -0
- package/packages/qdrant-skills/src/index.ts +3 -0
- package/packages/qdrant-skills/test/embedder-batch.test.ts +184 -0
- 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/dist/index.d.ts +5 -0
- package/packages/skills/dist/index.d.ts.map +1 -1
- package/packages/skills/dist/index.js +4 -1
- package/packages/skills/dist/index.js.map +1 -1
- package/packages/skills/dist/loader.d.ts +94 -3
- package/packages/skills/dist/loader.d.ts.map +1 -1
- package/packages/skills/dist/loader.js +192 -25
- package/packages/skills/dist/loader.js.map +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/skills/src/index.ts +12 -3
- package/packages/skills/src/loader.ts +243 -27
- package/packages/skills/test/init-skills.test.ts +107 -111
- package/packages/skills/test/vector-indexing.test.ts +205 -0
- 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/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/workspace-scanner/test/scanner.test.ts +4 -3
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
- package/packages/autonomous-runtime/test/autonomous-runtime.test.ts +0 -194
- package/packages/autonomous-runtime/test/inbox.test.ts +0 -80
|
@@ -1,69 +1,107 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
/**
|
|
2
3
|
* SQLite Smoke Test
|
|
3
4
|
*
|
|
4
5
|
* Verifies SQLite storage works correctly with Node's built-in sqlite.
|
|
6
|
+
*
|
|
7
|
+
* The storage needs `node:sqlite`. Node has that module, Bun does not, so
|
|
8
|
+
* the tests are skipped with a reason where the module is missing.
|
|
5
9
|
*/
|
|
6
10
|
|
|
7
11
|
import { describe, it, before, after } from "node:test";
|
|
8
12
|
import assert from "node:assert";
|
|
9
|
-
import { openNodeSqliteStorage } from "@earendil-works/pi-durable/storage/sqlite/node";
|
|
10
13
|
import { BACKGROUND_CONTEXT } from "@earendil-works/chord/context";
|
|
11
14
|
import { join } from "node:path";
|
|
12
15
|
import { mkdirSync, unlinkSync, existsSync } from "node:fs";
|
|
13
16
|
|
|
14
17
|
const TEST_DB_PATH = join(process.env.HOME || "/tmp", ".pi-harness-runtime", "test", "smoke.sqlite");
|
|
15
18
|
|
|
19
|
+
/** Whether this runtime has the SQLite module of Node. */
|
|
20
|
+
const sqliteAvailable = await (async () => {
|
|
21
|
+
try {
|
|
22
|
+
await import("node:sqlite");
|
|
23
|
+
return true;
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
})();
|
|
28
|
+
|
|
29
|
+
const SKIP_WITHOUT_SQLITE = sqliteAvailable
|
|
30
|
+
? false
|
|
31
|
+
: "node:sqlite is not available in this runtime";
|
|
32
|
+
const itSqlite = sqliteAvailable ? it : it.skip;
|
|
33
|
+
|
|
34
|
+
/** Open the storage of the test database. */
|
|
35
|
+
async function openStorage(): Promise<{
|
|
36
|
+
close: (ctx: unknown) => Promise<void>;
|
|
37
|
+
}> {
|
|
38
|
+
const { openNodeSqliteStorage } = await import(
|
|
39
|
+
"@earendil-works/pi-durable/storage/sqlite/node"
|
|
40
|
+
);
|
|
41
|
+
return (await openNodeSqliteStorage(TEST_DB_PATH)) as {
|
|
42
|
+
close: (ctx: unknown) => Promise<void>;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
16
46
|
describe("SQLite Smoke Test", () => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
47
|
+
before(() => {
|
|
48
|
+
// Ensure directory exists
|
|
49
|
+
const dir = TEST_DB_PATH.replace(/\/[^/]+$/, "");
|
|
50
|
+
mkdirSync(dir, { recursive: true });
|
|
51
|
+
// Clean up any existing test db
|
|
52
|
+
if (existsSync(TEST_DB_PATH)) {
|
|
53
|
+
try {
|
|
54
|
+
unlinkSync(TEST_DB_PATH);
|
|
55
|
+
} catch {
|
|
56
|
+
// ignore
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
30
60
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
61
|
+
after(() => {
|
|
62
|
+
// Cleanup
|
|
63
|
+
if (existsSync(TEST_DB_PATH)) {
|
|
64
|
+
try {
|
|
65
|
+
unlinkSync(TEST_DB_PATH);
|
|
66
|
+
} catch {
|
|
67
|
+
// ignore
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
41
71
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
72
|
+
itSqlite("opens SQLite storage", { skip: SKIP_WITHOUT_SQLITE }, async () => {
|
|
73
|
+
const storage = await openStorage();
|
|
74
|
+
assert.ok(storage, "Storage should be defined");
|
|
75
|
+
await storage.close(BACKGROUND_CONTEXT);
|
|
76
|
+
});
|
|
47
77
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
78
|
+
itSqlite(
|
|
79
|
+
"creates and reopens database",
|
|
80
|
+
{ skip: SKIP_WITHOUT_SQLITE },
|
|
81
|
+
async () => {
|
|
82
|
+
// First open
|
|
83
|
+
const storage1 = await openStorage();
|
|
84
|
+
await storage1.close(BACKGROUND_CONTEXT);
|
|
52
85
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
86
|
+
// Second open - should work
|
|
87
|
+
const storage2 = await openStorage();
|
|
88
|
+
assert.ok(storage2, "Storage should be reopened");
|
|
89
|
+
await storage2.close(BACKGROUND_CONTEXT);
|
|
90
|
+
},
|
|
91
|
+
);
|
|
58
92
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
93
|
+
itSqlite(
|
|
94
|
+
"persists data across reopen",
|
|
95
|
+
{ skip: SKIP_WITHOUT_SQLITE },
|
|
96
|
+
async () => {
|
|
97
|
+
// Open and write
|
|
98
|
+
const storage1 = await openStorage();
|
|
99
|
+
await storage1.close(BACKGROUND_CONTEXT);
|
|
63
100
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
101
|
+
// Reopen and verify
|
|
102
|
+
const storage2 = await openStorage();
|
|
103
|
+
assert.ok(storage2, "Storage should be reopened with data");
|
|
104
|
+
await storage2.close(BACKGROUND_CONTEXT);
|
|
105
|
+
},
|
|
106
|
+
);
|
|
69
107
|
});
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { describe, it } from "node:test";
|
|
2
3
|
import { equal, deepEqual } from "node:assert";
|
|
3
4
|
import { EventBus } from "../src/bus.js";
|
|
5
|
+
import type { EventPayload } from "../src/types.js";
|
|
4
6
|
|
|
5
7
|
describe("EventBus", () => {
|
|
6
8
|
const bus = new EventBus();
|
|
@@ -12,12 +14,22 @@ describe("EventBus", () => {
|
|
|
12
14
|
});
|
|
13
15
|
|
|
14
16
|
it("subscriber receives event", () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
// The value is held in a box: a variable that is only assigned in a
|
|
18
|
+
// callback would be narrowed to null by the type checker.
|
|
19
|
+
const received: { value: EventPayload<{ data: string }> | null } = {
|
|
20
|
+
value: null,
|
|
21
|
+
};
|
|
22
|
+
bus.subscribe<{ data: string }>("test.1", (p) => {
|
|
23
|
+
received.value = p;
|
|
18
24
|
});
|
|
19
25
|
bus.publish("test.1", { data: "hello" });
|
|
20
|
-
|
|
26
|
+
// The subscriber receives the envelope of the event, not the raw data.
|
|
27
|
+
equal(received.value?.topic, "test.1");
|
|
28
|
+
equal(received.value?.data.data, "hello");
|
|
29
|
+
equal(typeof received.value?.eventId, "string");
|
|
30
|
+
equal(typeof received.value?.timestamp, "string");
|
|
31
|
+
// A published event comes from the system unless a source is given.
|
|
32
|
+
equal(received.value?.source, "system");
|
|
21
33
|
});
|
|
22
34
|
|
|
23
35
|
it("multiple subscribers all called", () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/provider-router",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.411",
|
|
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",
|
|
@@ -12,6 +12,14 @@ export interface EmbeddingResult {
|
|
|
12
12
|
embedding: number[];
|
|
13
13
|
tokens: number;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* The result of a batch embedding: one vector per input text, in the order
|
|
17
|
+
* of the input.
|
|
18
|
+
*/
|
|
19
|
+
export interface BatchEmbeddingResult {
|
|
20
|
+
embeddings: number[][];
|
|
21
|
+
tokens: number;
|
|
22
|
+
}
|
|
15
23
|
/**
|
|
16
24
|
* Get the OpenAI API key for embeddings.
|
|
17
25
|
*
|
|
@@ -24,6 +32,25 @@ export declare function getOpenAIApiKey(): string | null;
|
|
|
24
32
|
* Create embedding for text using OpenAI
|
|
25
33
|
*/
|
|
26
34
|
export declare function createEmbedding(text: string, apiKey?: string): Promise<EmbeddingResult>;
|
|
35
|
+
/**
|
|
36
|
+
* The options of an embeddings request.
|
|
37
|
+
*/
|
|
38
|
+
export interface EmbeddingRequestOptions {
|
|
39
|
+
/**
|
|
40
|
+
* The HTTP client of the request. The default is the global `fetch`; a
|
|
41
|
+
* caller (a test) can pass its own, so no global has to be replaced.
|
|
42
|
+
*/
|
|
43
|
+
fetchImpl?: typeof fetch;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create embeddings for many texts with as few requests as possible.
|
|
47
|
+
*
|
|
48
|
+
* One request per text exhausts the sockets of the process when a registry
|
|
49
|
+
* holds hundreds of skills: every request opens its own connection and the
|
|
50
|
+
* process then cannot talk to anything else. The endpoint of OpenAI accepts
|
|
51
|
+
* an array of inputs, so a batch stays one request per chunk.
|
|
52
|
+
*/
|
|
53
|
+
export declare function createEmbeddingsBatch(texts: string[], apiKey?: string, options?: EmbeddingRequestOptions): Promise<BatchEmbeddingResult>;
|
|
27
54
|
/**
|
|
28
55
|
* Create embedding for a skill document
|
|
29
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AA4CD;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAa/C;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC,CAWnE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAAE,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAClD,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC,CAuB1E"}
|
|
1
|
+
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AA4CD;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAa/C;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CAgC1B;AASD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,oBAAoB,CAAC,CAiD/B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC,CAWnE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAAE,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAClD,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC,CAuB1E"}
|