pi-harness-runtime 1.1.408 → 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/harness/key-file-audit.ts +2 -2
- 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/dist/adapters.d.ts +1 -1
- package/packages/providers/dist/adapters.d.ts.map +1 -1
- package/packages/providers/dist/deepagents-adapter.d.ts +22 -1
- package/packages/providers/dist/deepagents-adapter.d.ts.map +1 -1
- package/packages/providers/dist/deepagents-adapter.js +3 -8
- package/packages/providers/dist/deepagents-adapter.js.map +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/providers/src/adapters.ts +1 -1
- package/packages/providers/src/deepagents-adapter.ts +28 -31
- package/packages/qdrant-skills/dist/embedder.d.ts +32 -1
- package/packages/qdrant-skills/dist/embedder.d.ts.map +1 -1
- package/packages/qdrant-skills/dist/embedder.js +106 -37
- 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 +145 -39
- package/packages/qdrant-skills/src/index.ts +3 -0
- package/packages/qdrant-skills/test/embedder-batch.test.ts +184 -0
- package/packages/qdrant-skills/test/embedder.test.ts +97 -0
- package/packages/quota-manager/dist/quota-manager.d.ts +1 -1
- package/packages/quota-manager/dist/quota-manager.d.ts.map +1 -1
- package/packages/quota-manager/dist/quota-manager.js +10 -8
- package/packages/quota-manager/dist/quota-manager.js.map +1 -1
- package/packages/quota-manager/dist/tui-usage-monitor.d.ts +5 -3
- package/packages/quota-manager/dist/tui-usage-monitor.d.ts.map +1 -1
- package/packages/quota-manager/dist/tui-usage-monitor.js +30 -10
- package/packages/quota-manager/dist/tui-usage-monitor.js.map +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/quota-manager/src/quota-manager.ts +10 -9
- package/packages/quota-manager/src/tui-usage-monitor.ts +40 -17
- 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 +201 -31
- 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 +255 -32
- 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/dist/worktree.d.ts +1 -1
- package/packages/worktree/dist/worktree.d.ts.map +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/worktree/src/worktree.ts +1 -1
- package/packages/write-review/package.json +1 -1
- package/scripts/typecheck-packages.mjs +3 -3
- package/packages/autonomous-runtime/test/autonomous-runtime.test.ts +0 -194
- package/packages/autonomous-runtime/test/inbox.test.ts +0 -80
- package/packages/providers/adapters.ts +0 -362
- package/packages/providers/deepagents-adapter.ts +0 -458
- package/packages/providers/glm-usage.ts +0 -248
- package/packages/providers/index.ts +0 -85
- package/packages/providers/openai-usage.ts +0 -263
- package/packages/trajectory/dist/test/store.test.d.ts +0 -2
- package/packages/trajectory/dist/test/store.test.d.ts.map +0 -1
- package/packages/trajectory/dist/test/store.test.js +0 -228
- package/packages/trajectory/dist/test/store.test.js.map +0 -1
- package/packages/types/src/agent-worker-types.d.ts +0 -206
- package/packages/types/src/agent-worker-types.js +0 -41
|
@@ -235,8 +235,8 @@ export const KEY_REQUIREMENTS: KeyRequirement[] = [
|
|
|
235
235
|
fixFile: "openai-api-key.txt",
|
|
236
236
|
placeholder: "<API_KEY>",
|
|
237
237
|
hint: "OpenAI key used to embed the skills",
|
|
238
|
-
// The
|
|
239
|
-
|
|
238
|
+
// The embeddings endpoint of OpenAI accepts only an OpenAI key: a
|
|
239
|
+
// TypeSafe or an OpenRouter key is a different credential.
|
|
240
240
|
minLength: 6,
|
|
241
241
|
},
|
|
242
242
|
{
|
package/package.json
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
1
2
|
/**
|
|
2
3
|
* Tests for autonomous-runtime types.
|
|
3
4
|
*/
|
|
4
5
|
|
|
5
6
|
import { describe, it, expect } from "bun:test";
|
|
6
7
|
import type {
|
|
7
|
-
TaskSpec,
|
|
8
8
|
TaskStatus,
|
|
9
9
|
TaskEvent,
|
|
10
10
|
TaskRecord,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
TaskLease,
|
|
12
|
+
WorkerHeartbeat,
|
|
13
13
|
} from "../src/types.js";
|
|
14
14
|
|
|
15
|
-
describe("TaskStatus
|
|
15
|
+
describe("TaskStatus", () => {
|
|
16
16
|
it("has all expected values", () => {
|
|
17
17
|
const values: TaskStatus[] = [
|
|
18
|
-
"
|
|
18
|
+
"queued",
|
|
19
19
|
"claimed",
|
|
20
20
|
"running",
|
|
21
|
+
"waiting_approval",
|
|
22
|
+
"waiting_quota",
|
|
23
|
+
"retrying",
|
|
21
24
|
"completed",
|
|
22
25
|
"failed",
|
|
23
|
-
"
|
|
26
|
+
"dead_letter",
|
|
24
27
|
];
|
|
25
28
|
for (const v of values) {
|
|
26
29
|
expect(typeof v).toBe("string");
|
|
@@ -28,41 +31,65 @@ describe("TaskStatus enum", () => {
|
|
|
28
31
|
});
|
|
29
32
|
});
|
|
30
33
|
|
|
31
|
-
describe("
|
|
32
|
-
it("
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
for (const v of values) {
|
|
40
|
-
expect(typeof v).toBe("string");
|
|
41
|
-
}
|
|
34
|
+
describe("TaskEvent", () => {
|
|
35
|
+
it("accepts a minimal valid event", () => {
|
|
36
|
+
const event: TaskEvent = {
|
|
37
|
+
ts: new Date().toISOString(),
|
|
38
|
+
kind: "started",
|
|
39
|
+
};
|
|
40
|
+
expect(event.kind).toBe("started");
|
|
41
|
+
expect(typeof event.ts).toBe("string");
|
|
42
42
|
});
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
describe("
|
|
46
|
-
it("accepts a minimal valid
|
|
47
|
-
const
|
|
45
|
+
describe("TaskRecord", () => {
|
|
46
|
+
it("accepts a minimal valid record", () => {
|
|
47
|
+
const now = new Date().toISOString();
|
|
48
|
+
const record: TaskRecord = {
|
|
48
49
|
id: "task-1",
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
objective: "Do the thing",
|
|
51
|
+
acceptanceCriteria: ["it is done"],
|
|
52
|
+
source: { kind: "manual", createdBy: "test" },
|
|
53
|
+
priority: 2,
|
|
54
|
+
capabilities: [],
|
|
55
|
+
approvalClass: "automatic_read_only",
|
|
56
|
+
status: "queued",
|
|
57
|
+
attempts: 0,
|
|
58
|
+
maxAttempts: 3,
|
|
59
|
+
createdAt: now,
|
|
60
|
+
updatedAt: now,
|
|
61
|
+
history: [],
|
|
62
|
+
};
|
|
63
|
+
expect(record.id).toBe("task-1");
|
|
64
|
+
expect(record.status).toBe("queued");
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe("TaskLease", () => {
|
|
69
|
+
it("accepts a valid lease", () => {
|
|
70
|
+
const now = new Date().toISOString();
|
|
71
|
+
const lease: TaskLease = {
|
|
72
|
+
taskId: "task-1",
|
|
73
|
+
workerId: "worker-1",
|
|
74
|
+
acquiredAt: now,
|
|
75
|
+
expiresAt: now,
|
|
76
|
+
heartbeatAt: now,
|
|
77
|
+
attempt: 1,
|
|
52
78
|
};
|
|
53
|
-
expect(
|
|
54
|
-
expect(spec.kind).toBe("once");
|
|
55
|
-
expect(spec.priority).toBe(5);
|
|
79
|
+
expect(lease.workerId).toBe("worker-1");
|
|
56
80
|
});
|
|
57
81
|
});
|
|
58
82
|
|
|
59
|
-
describe("
|
|
60
|
-
it("accepts a valid
|
|
61
|
-
const
|
|
83
|
+
describe("WorkerHeartbeat", () => {
|
|
84
|
+
it("accepts a valid heartbeat", () => {
|
|
85
|
+
const now = new Date().toISOString();
|
|
86
|
+
const heartbeat: WorkerHeartbeat = {
|
|
62
87
|
workerId: "worker-1",
|
|
63
|
-
|
|
64
|
-
|
|
88
|
+
startedAt: now,
|
|
89
|
+
lastBeatAt: now,
|
|
90
|
+
capacity: 2,
|
|
91
|
+
inflightTaskIds: [],
|
|
65
92
|
};
|
|
66
|
-
expect(
|
|
93
|
+
expect(heartbeat.workerId).toBe("worker-1");
|
|
67
94
|
});
|
|
68
95
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/capability-registry",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.411",
|
|
4
4
|
"description": "Capability Registry for pi-harness-runtime — tracks model capabilities and enables capability-based routing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
/// <reference types="bun-types" />
|
|
1
2
|
/**
|
|
2
3
|
* End-to-end sync tests.
|
|
3
4
|
*
|
|
4
5
|
* Build a synthetic drop folder in a tmp dir, call sync(), assert
|
|
5
6
|
* the canonical cache was written correctly. No real cookie values
|
|
6
7
|
* are used.
|
|
8
|
+
*
|
|
9
|
+
* A fixture that must survive the expiry filter uses an expiration in the
|
|
10
|
+
* future; a fixed date would make the test fail when it passes.
|
|
7
11
|
*/
|
|
8
12
|
|
|
9
13
|
import { describe, it, expect, beforeEach, afterEach } from "bun:test";
|
|
@@ -36,7 +40,9 @@ const NETSCAPE_FIXTURE = [
|
|
|
36
40
|
const JSON_FIXTURE = JSON.stringify([
|
|
37
41
|
{
|
|
38
42
|
domain: ".minimax.io",
|
|
39
|
-
|
|
43
|
+
// A cookie that is still valid: an expiration in the past would be
|
|
44
|
+
// filtered out and the test would count a different number.
|
|
45
|
+
expirationDate: Math.floor(Date.now() / 1000) + 3600,
|
|
40
46
|
name: "test_json",
|
|
41
47
|
value: "test-value-json",
|
|
42
48
|
httpOnly: false,
|
|
@@ -6,11 +6,11 @@ import { extname, resolve } from "node:path";
|
|
|
6
6
|
* Parse imports from file content. Supports TypeScript, JavaScript, CommonJS, Python.
|
|
7
7
|
*/
|
|
8
8
|
export function parseImports(content, filePath) {
|
|
9
|
-
|
|
9
|
+
// The extension without its dot: "file.ts" is the type "ts".
|
|
10
|
+
const ext = extname(filePath).toLowerCase().replace(/^\./, "");
|
|
10
11
|
const imports = [];
|
|
11
12
|
if (["ts", "tsx", "js", "jsx", "mjs", "cjs"].includes(ext)) {
|
|
12
13
|
imports.push(...parseTypeScriptImports(content));
|
|
13
|
-
imports.push(...parsePythonImports(content));
|
|
14
14
|
}
|
|
15
15
|
else if (ext === "py") {
|
|
16
16
|
imports.push(...parsePythonImports(content));
|
|
@@ -20,7 +20,7 @@ export function parseImports(content, filePath) {
|
|
|
20
20
|
function parseTypeScriptImports(content) {
|
|
21
21
|
const imports = [];
|
|
22
22
|
// ESM: import X from './y' or import X from 'package'
|
|
23
|
-
const esmDefault = /import\s+(?:(?:type\s+)?(?:\{[^}]*\}|[A-
|
|
23
|
+
const esmDefault = /import\s+(?:(?:type\s+)?(?:\{[^}]*\}|[A-Za-z_$][\w$]*)\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
24
24
|
for (const match of content.matchAll(esmDefault)) {
|
|
25
25
|
imports.push(match[1]);
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/imports.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAQ,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,QAAgB;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,12 +8,12 @@ import { extname, join, resolve } from "node:path";
|
|
|
8
8
|
* Parse imports from file content. Supports TypeScript, JavaScript, CommonJS, Python.
|
|
9
9
|
*/
|
|
10
10
|
export function parseImports(content: string, filePath: string): string[] {
|
|
11
|
-
|
|
11
|
+
// The extension without its dot: "file.ts" is the type "ts".
|
|
12
|
+
const ext = extname(filePath).toLowerCase().replace(/^\./, "");
|
|
12
13
|
const imports: string[] = [];
|
|
13
14
|
|
|
14
15
|
if (["ts", "tsx", "js", "jsx", "mjs", "cjs"].includes(ext)) {
|
|
15
16
|
imports.push(...parseTypeScriptImports(content));
|
|
16
|
-
imports.push(...parsePythonImports(content));
|
|
17
17
|
} else if (ext === "py") {
|
|
18
18
|
imports.push(...parsePythonImports(content));
|
|
19
19
|
}
|
|
@@ -26,7 +26,7 @@ function parseTypeScriptImports(content: string): string[] {
|
|
|
26
26
|
|
|
27
27
|
// ESM: import X from './y' or import X from 'package'
|
|
28
28
|
const esmDefault =
|
|
29
|
-
/import\s+(?:(?:type\s+)?(?:\{[^}]*\}|[A-
|
|
29
|
+
/import\s+(?:(?:type\s+)?(?:\{[^}]*\}|[A-Za-z_$][\w$]*)\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
30
30
|
for (const match of content.matchAll(esmDefault)) {
|
|
31
31
|
imports.push(match[1]);
|
|
32
32
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
/**
|
|
2
3
|
* Durable Review Acceptance Tests
|
|
3
4
|
*
|
|
@@ -24,6 +25,27 @@ import { handleReviewRequest, cancelJob, getJobStatus } from "../dist/worker.js"
|
|
|
24
25
|
const TEST_WORKSPACE = "/tmp/durable-review-test-" + Date.now();
|
|
25
26
|
const TEST_DB_DIR = join(process.env.HOME || "/tmp", ".pi-harness-runtime", "durable");
|
|
26
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The storage of the worker is SQLite, which needs `node:sqlite`.
|
|
30
|
+
*
|
|
31
|
+
* Node has that module, Bun does not. Without it the worker cannot start, so
|
|
32
|
+
* the tests that need a running worker are skipped with a reason instead of
|
|
33
|
+
* failing with a module error.
|
|
34
|
+
*/
|
|
35
|
+
const sqliteAvailable = await (async () => {
|
|
36
|
+
try {
|
|
37
|
+
await import("node:sqlite");
|
|
38
|
+
return true;
|
|
39
|
+
} catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
})();
|
|
43
|
+
|
|
44
|
+
const SKIP_WITHOUT_SQLITE = sqliteAvailable
|
|
45
|
+
? false
|
|
46
|
+
: "node:sqlite is not available in this runtime";
|
|
47
|
+
const describeWorker = sqliteAvailable ? describe : describe.skip;
|
|
48
|
+
|
|
27
49
|
describe("Acceptance Tests", () => {
|
|
28
50
|
// Setup
|
|
29
51
|
before(() => {
|
|
@@ -152,7 +174,7 @@ describe("Acceptance Tests", () => {
|
|
|
152
174
|
});
|
|
153
175
|
|
|
154
176
|
// --- Worker Lifecycle ---
|
|
155
|
-
|
|
177
|
+
describeWorker("Worker lifecycle", () => {
|
|
156
178
|
it("startWorker succeeds", async () => {
|
|
157
179
|
const result = await startWorker(TEST_WORKSPACE);
|
|
158
180
|
assert.strictEqual(result.success, true);
|
|
@@ -174,7 +196,7 @@ describe("Acceptance Tests", () => {
|
|
|
174
196
|
});
|
|
175
197
|
|
|
176
198
|
// --- Request Handling ---
|
|
177
|
-
|
|
199
|
+
describeWorker("Request handling", () => {
|
|
178
200
|
before(async () => {
|
|
179
201
|
await startWorker(TEST_WORKSPACE);
|
|
180
202
|
});
|