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.
Files changed (181) hide show
  1. package/harness/key-file-audit.ts +2 -2
  2. package/package.json +1 -1
  3. package/packages/a2a-adapter/package.json +1 -1
  4. package/packages/agent-policy/package.json +1 -1
  5. package/packages/architecture-generator/package.json +1 -1
  6. package/packages/auth/package.json +1 -1
  7. package/packages/autonomous-refactor/package.json +1 -1
  8. package/packages/autonomous-runtime/package.json +1 -1
  9. package/packages/autonomous-runtime/test/types.test.ts +59 -32
  10. package/packages/cache-strategy/package.json +1 -1
  11. package/packages/capability-registry/package.json +1 -1
  12. package/packages/checkpoint/package.json +1 -1
  13. package/packages/cli-plugin-sdk/package.json +1 -1
  14. package/packages/clipboard/package.json +1 -1
  15. package/packages/clipboard-plugin/package.json +1 -1
  16. package/packages/code-generation/package.json +1 -1
  17. package/packages/code-review/package.json +1 -1
  18. package/packages/codex-adapter/package.json +1 -1
  19. package/packages/codex-watcher/package.json +1 -1
  20. package/packages/config-capture/package.json +1 -1
  21. package/packages/connection-runtime/package.json +1 -1
  22. package/packages/context-compiler/package.json +1 -1
  23. package/packages/context-discovery/package.json +1 -1
  24. package/packages/context-manager/package.json +1 -1
  25. package/packages/contracts/package.json +1 -1
  26. package/packages/cookie-sanitizer/package.json +1 -1
  27. package/packages/cookie-sanitizer/test/sync.test.ts +7 -1
  28. package/packages/cost-optimizer/package.json +1 -1
  29. package/packages/dependency-analyzer/dist/src/imports.js +3 -3
  30. package/packages/dependency-analyzer/dist/src/imports.js.map +1 -1
  31. package/packages/dependency-analyzer/package.json +1 -1
  32. package/packages/dependency-analyzer/src/imports.ts +3 -3
  33. package/packages/dependency-analyzer/test/analyzer.test.ts +1 -0
  34. package/packages/django-plugin/package.json +1 -1
  35. package/packages/doc-generator/package.json +1 -1
  36. package/packages/durable-review/package.json +1 -1
  37. package/packages/durable-review/test/acceptance.test.ts +24 -2
  38. package/packages/durable-review/test/smoke.test.ts +85 -47
  39. package/packages/e2e-tester/package.json +1 -1
  40. package/packages/evaluation-engine/package.json +1 -1
  41. package/packages/evaluation-runner/package.json +1 -1
  42. package/packages/event-bus/package.json +1 -1
  43. package/packages/event-bus/test/bus.test.ts +16 -4
  44. package/packages/event-sink/package.json +1 -1
  45. package/packages/event-store/package.json +1 -1
  46. package/packages/experience-replay/package.json +1 -1
  47. package/packages/feedback-collector/package.json +1 -1
  48. package/packages/file-copy-helper/package.json +1 -1
  49. package/packages/framework-detector/package.json +1 -1
  50. package/packages/framework-plugin-sdk/package.json +1 -1
  51. package/packages/frappe-plugin/package.json +1 -1
  52. package/packages/generic-web-plugin/package.json +1 -1
  53. package/packages/health-monitor/package.json +1 -1
  54. package/packages/intent-analyzer/package.json +1 -1
  55. package/packages/jev-judge/package.json +1 -1
  56. package/packages/knowledge-graph/package.json +1 -1
  57. package/packages/knowledge-retrieval/package.json +1 -1
  58. package/packages/laravel-plugin/package.json +1 -1
  59. package/packages/learning-engine/package.json +1 -1
  60. package/packages/logging/package.json +1 -1
  61. package/packages/mcp-adapter/package.json +1 -1
  62. package/packages/memory-engine/package.json +1 -1
  63. package/packages/milestone-manager/package.json +1 -1
  64. package/packages/model-registry/package.json +1 -1
  65. package/packages/nextjs-plugin/package.json +1 -1
  66. package/packages/notification/package.json +1 -1
  67. package/packages/observability/package.json +1 -1
  68. package/packages/okf-indexer/package.json +1 -1
  69. package/packages/paperclip-integration/package.json +1 -1
  70. package/packages/performance-optimizer/package.json +1 -1
  71. package/packages/permission-mode/package.json +1 -1
  72. package/packages/privilege-broker/package.json +1 -1
  73. package/packages/project-analyzer/package.json +1 -1
  74. package/packages/project-bootstrap/package.json +1 -1
  75. package/packages/projection-engine/package.json +1 -1
  76. package/packages/prompt-compiler/package.json +1 -1
  77. package/packages/prompt-versioning/package.json +1 -1
  78. package/packages/provider-adapter-sdk/package.json +1 -1
  79. package/packages/provider-router/package.json +1 -1
  80. package/packages/provider-selector/package.json +1 -1
  81. package/packages/providers/dist/adapters.d.ts +1 -1
  82. package/packages/providers/dist/adapters.d.ts.map +1 -1
  83. package/packages/providers/dist/deepagents-adapter.d.ts +22 -1
  84. package/packages/providers/dist/deepagents-adapter.d.ts.map +1 -1
  85. package/packages/providers/dist/deepagents-adapter.js +3 -8
  86. package/packages/providers/dist/deepagents-adapter.js.map +1 -1
  87. package/packages/providers/package.json +1 -1
  88. package/packages/providers/src/adapters.ts +1 -1
  89. package/packages/providers/src/deepagents-adapter.ts +28 -31
  90. package/packages/qdrant-skills/dist/embedder.d.ts +32 -1
  91. package/packages/qdrant-skills/dist/embedder.d.ts.map +1 -1
  92. package/packages/qdrant-skills/dist/embedder.js +106 -37
  93. package/packages/qdrant-skills/dist/embedder.js.map +1 -1
  94. package/packages/qdrant-skills/dist/index.d.ts +1 -1
  95. package/packages/qdrant-skills/dist/index.d.ts.map +1 -1
  96. package/packages/qdrant-skills/dist/index.js +1 -1
  97. package/packages/qdrant-skills/dist/index.js.map +1 -1
  98. package/packages/qdrant-skills/package.json +1 -1
  99. package/packages/qdrant-skills/src/embedder.ts +145 -39
  100. package/packages/qdrant-skills/src/index.ts +3 -0
  101. package/packages/qdrant-skills/test/embedder-batch.test.ts +184 -0
  102. package/packages/qdrant-skills/test/embedder.test.ts +97 -0
  103. package/packages/quota-manager/dist/quota-manager.d.ts +1 -1
  104. package/packages/quota-manager/dist/quota-manager.d.ts.map +1 -1
  105. package/packages/quota-manager/dist/quota-manager.js +10 -8
  106. package/packages/quota-manager/dist/quota-manager.js.map +1 -1
  107. package/packages/quota-manager/dist/tui-usage-monitor.d.ts +5 -3
  108. package/packages/quota-manager/dist/tui-usage-monitor.d.ts.map +1 -1
  109. package/packages/quota-manager/dist/tui-usage-monitor.js +30 -10
  110. package/packages/quota-manager/dist/tui-usage-monitor.js.map +1 -1
  111. package/packages/quota-manager/package.json +1 -1
  112. package/packages/quota-manager/src/quota-manager.ts +10 -9
  113. package/packages/quota-manager/src/tui-usage-monitor.ts +40 -17
  114. package/packages/rate-limiter/package.json +1 -1
  115. package/packages/react-vite-plugin/package.json +1 -1
  116. package/packages/relay/package.json +1 -1
  117. package/packages/release-manager/package.json +1 -1
  118. package/packages/requirement-compiler/package.json +1 -1
  119. package/packages/runtime/package.json +1 -1
  120. package/packages/scheduler/package.json +1 -1
  121. package/packages/scheduler-adapter/package.json +1 -1
  122. package/packages/session/package.json +1 -1
  123. package/packages/session-api/package.json +1 -1
  124. package/packages/session-export/package.json +1 -1
  125. package/packages/shared-context/package.json +1 -1
  126. package/packages/skill-mcp-client/package.json +1 -1
  127. package/packages/skill-registry/package.json +1 -1
  128. package/packages/skills/dist/index.d.ts +5 -0
  129. package/packages/skills/dist/index.d.ts.map +1 -1
  130. package/packages/skills/dist/index.js +4 -1
  131. package/packages/skills/dist/index.js.map +1 -1
  132. package/packages/skills/dist/loader.d.ts +94 -3
  133. package/packages/skills/dist/loader.d.ts.map +1 -1
  134. package/packages/skills/dist/loader.js +201 -31
  135. package/packages/skills/dist/loader.js.map +1 -1
  136. package/packages/skills/package.json +1 -1
  137. package/packages/skills/src/index.ts +12 -3
  138. package/packages/skills/src/loader.ts +255 -32
  139. package/packages/skills/test/init-skills.test.ts +107 -111
  140. package/packages/skills/test/vector-indexing.test.ts +205 -0
  141. package/packages/sprint-planner/package.json +1 -1
  142. package/packages/subscription-engine/package.json +1 -1
  143. package/packages/task-compiler/package.json +1 -1
  144. package/packages/telegram/package.json +1 -1
  145. package/packages/tencentdb-memory/package.json +1 -1
  146. package/packages/tencentdb-sync/package.json +1 -1
  147. package/packages/test-data-generator/package.json +1 -1
  148. package/packages/test-generator/package.json +1 -1
  149. package/packages/todo-bd-sync/package.json +1 -1
  150. package/packages/token-estimation/package.json +1 -1
  151. package/packages/token-optimizer/package.json +1 -1
  152. package/packages/tooling-preference/package.json +1 -1
  153. package/packages/trajectory/package.json +1 -1
  154. package/packages/tui/package.json +1 -1
  155. package/packages/two-phase-review/package.json +1 -1
  156. package/packages/types/package.json +1 -1
  157. package/packages/voice-api/package.json +1 -1
  158. package/packages/webmcp-tester/package.json +1 -1
  159. package/packages/wiki/package.json +1 -1
  160. package/packages/workflow-events/package.json +1 -1
  161. package/packages/workspace-scanner/package.json +1 -1
  162. package/packages/workspace-scanner/test/scanner.test.ts +4 -3
  163. package/packages/worktree/dist/worktree.d.ts +1 -1
  164. package/packages/worktree/dist/worktree.d.ts.map +1 -1
  165. package/packages/worktree/package.json +1 -1
  166. package/packages/worktree/src/worktree.ts +1 -1
  167. package/packages/write-review/package.json +1 -1
  168. package/scripts/typecheck-packages.mjs +3 -3
  169. package/packages/autonomous-runtime/test/autonomous-runtime.test.ts +0 -194
  170. package/packages/autonomous-runtime/test/inbox.test.ts +0 -80
  171. package/packages/providers/adapters.ts +0 -362
  172. package/packages/providers/deepagents-adapter.ts +0 -458
  173. package/packages/providers/glm-usage.ts +0 -248
  174. package/packages/providers/index.ts +0 -85
  175. package/packages/providers/openai-usage.ts +0 -263
  176. package/packages/trajectory/dist/test/store.test.d.ts +0 -2
  177. package/packages/trajectory/dist/test/store.test.d.ts.map +0 -1
  178. package/packages/trajectory/dist/test/store.test.js +0 -228
  179. package/packages/trajectory/dist/test/store.test.js.map +0 -1
  180. package/packages/types/src/agent-worker-types.d.ts +0 -206
  181. 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 embedder accepts a TypeSafe or an OpenRouter key as well.
239
- altEnv: ["TYPESAFE_API_KEY", "OPENROUTER_API_KEY"],
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,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "[BETA] Codex-style /usage status + autonomous coding harness for pi. Not production ready — expect breaking changes.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/a2a-adapter",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "description": "Google Agent-to-Agent (A2A) protocol adapter for pi-harness",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/agent-policy",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Agent policy runtime for pi-harness - enforces mandatory rule delivery and mutation gating",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/architecture-generator",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Generate ADR and Mermaid diagrams from project analysis",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/auth",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "pi-harness-runtime — auth",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/autonomous-refactor",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "description": "Autonomous refactoring engine",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/autonomous-runtime",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Autonomous Operations Runtime — task inbox, lease management, and worker lifecycle (RFC-0101)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -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
- LeaseStatus,
12
- WorkerStatus,
11
+ TaskLease,
12
+ WorkerHeartbeat,
13
13
  } from "../src/types.js";
14
14
 
15
- describe("TaskStatus enum", () => {
15
+ describe("TaskStatus", () => {
16
16
  it("has all expected values", () => {
17
17
  const values: TaskStatus[] = [
18
- "pending",
18
+ "queued",
19
19
  "claimed",
20
20
  "running",
21
+ "waiting_approval",
22
+ "waiting_quota",
23
+ "retrying",
21
24
  "completed",
22
25
  "failed",
23
- "cancelled",
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("LeaseStatus enum", () => {
32
- it("has all expected values", () => {
33
- const values: LeaseStatus[] = [
34
- "active",
35
- "renewed",
36
- "released",
37
- "expired",
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("TaskSpec", () => {
46
- it("accepts a minimal valid spec", () => {
47
- const spec: TaskSpec = {
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
- kind: "once",
50
- priority: 5,
51
- spec: {},
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(spec.id).toBe("task-1");
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("WorkerStatus", () => {
60
- it("accepts a valid status", () => {
61
- const status: WorkerStatus = {
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
- running: true,
64
- heartbeatIntervalMs: 30_000,
88
+ startedAt: now,
89
+ lastBeatAt: now,
90
+ capacity: 2,
91
+ inflightTaskIds: [],
65
92
  };
66
- expect(status.running).toBe(true);
93
+ expect(heartbeat.workerId).toBe("worker-1");
67
94
  });
68
95
  });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/cache-strategy",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "description": "Smart caching with TTL and invalidation strategies (RFC-0022)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/capability-registry",
3
- "version": "1.1.408",
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/checkpoint",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Enhanced checkpoint system with incremental snapshots, diff-based storage, and recovery strategies",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/cli-plugin-sdk",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "description": "CLI Plugin SDK for pi-harness — install, list, remove, update, invoke plugins",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/clipboard",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/clipboard-plugin",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/code-generation",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Code generation pipeline for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/code-review",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Automated code review engine for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/codex-adapter",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "description": "OpenAI Codex provider adapter for pi-harness",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/codex-watcher",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Watches Codex CLI sessions and emits visible messages for PING-PONG monitoring",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/config-capture",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Auto-capture API-fetched configuration values to AGENTS.md",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/connection-runtime",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "description": "Connection management with jittered exponential backoff for pi-harness",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/context-compiler",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Bounded context selection engine for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/context-discovery",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/context-manager",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Context Window Manager — prevents model context overflow via compaction and resume prompts (RFC-0010)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/contracts",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "description": "RPC schema definitions for pi-harness runtime",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cookie-sanitizer",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "pi-harness-runtime — cookie sanitizer (provider-quota cookie file normaliser)",
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
- expirationDate: 1700000000,
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,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cost-optimizer",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Cost Optimizer for pi-harness-runtime — budget tracking, forecasting, and model selection optimization",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -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
- const ext = extname(filePath).toLowerCase();
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-Z][\w$]*)\s+from\s+)?['"]([^'"]+)['"]/g;
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":"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"}
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/imports.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/dependency-analyzer",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -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
- const ext = extname(filePath).toLowerCase();
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-Z][\w$]*)\s+from\s+)?['"]([^'"]+)['"]/g;
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
  import { describe, it } from "node:test";
2
3
  import { equal, deepEqual } from "node:assert";
3
4
  import { parseImports } from "../src/imports.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/django-plugin",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Django framework analysis — models, management commands, settings",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/doc-generator",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "Auto-Doc Generator — generate documentation from source code (RFC-0014)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/durable-review",
3
- "version": "1.1.408",
3
+ "version": "1.1.411",
4
4
  "description": "SQLite-backed durable reviewer using @earendil-works/pi-durable",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -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
- describe("Worker lifecycle", () => {
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
- describe("Request handling", () => {
199
+ describeWorker("Request handling", () => {
178
200
  before(async () => {
179
201
  await startWorker(TEST_WORKSPACE);
180
202
  });