@logicseek/hello-cc 1.1.0-rc.5 → 1.1.0-rc.6

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/CHANGELOG.md CHANGED
@@ -16,6 +16,29 @@ the release description from the current changelog section. Use
16
16
  `npm run release:github` with `GH_TOKEN` or `GITHUB_TOKEN` only for local
17
17
  backfills.
18
18
 
19
+ ## 1.1.0-rc.6
20
+
21
+ ### Summary
22
+
23
+ This preview makes the official Harness inbox acceptance observer tolerate
24
+ brief SQLite locks while another process updates the same isolated database.
25
+ It continues the existing preview channel and retains the rc.5 desktop bridge.
26
+
27
+ ### Highlights
28
+
29
+ - Bound read-only acceptance queries with a busy timeout instead of failing
30
+ immediately on transient contention. Preserve failures for invalid queries
31
+ and locks that outlast the bound.
32
+ - Keep the rc.5 archive and tag immutable, including its original macOS
33
+ acceptance failure receipt. This change does not alter product database
34
+ policy, replay messages, or expand desktop endpoint access.
35
+
36
+ ### Validation
37
+
38
+ An independent SQLite writer exercises a short held lock and the observer's
39
+ bounded wait. The release also retains separate source, installed-package,
40
+ official-runtime and actual Desktop acceptance boundaries.
41
+
19
42
  ## 1.1.0-rc.5
20
43
 
21
44
  ### Summary
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicseek/hello-cc",
3
- "version": "1.1.0-rc.5",
3
+ "version": "1.1.0-rc.6",
4
4
  "description": "Local control plane for coordinating Claude Code, Codex, and other coding CLI sessions.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,9 +11,9 @@ import { createHash, randomUUID } from 'node:crypto';
11
11
  import { spawnSync } from 'node:child_process';
12
12
  import { fileURLToPath, pathToFileURL } from 'node:url';
13
13
  import { setTimeout as delay } from 'node:timers/promises';
14
- import { DatabaseSync } from 'node:sqlite';
15
14
  import { checkDshRuntime } from '../lib/integrations/dsh-cordis.mjs';
16
15
  import { JsonRpcProcess } from '../lib/integrations/native/jsonrpc.mjs';
16
+ import { readAcceptanceRows } from './helpers/sqlite-observer.mjs';
17
17
 
18
18
  const args = process.argv.slice(2);
19
19
  if (args.includes('--help')) {
@@ -44,7 +44,7 @@ const traceFile = path.join(sandbox, 'events.jsonl');
44
44
  const hash = file => createHash('sha256').update(fs.readFileSync(file)).digest('hex');
45
45
  const sources = ['lib/integrations/dsh-cordis.mjs', 'lib/integrations/dsh-inbox.mjs',
46
46
  'lib/integrations/dsh-collaboration.mjs', 'lib/core/coordination/messages.mjs',
47
- 'lib/coordination-state.mjs', 'scripts/dsh-inbox-acceptance.mjs'];
47
+ 'lib/coordination-state.mjs', 'scripts/dsh-inbox-acceptance.mjs', 'scripts/helpers/sqlite-observer.mjs'];
48
48
  const receipt = { schemaVersion: 1, startedAt: new Date().toISOString(), baseline: '0.2.0-rc.2',
49
49
  mode: 'Official Cordis Agent runtime; deterministic local model; isolated sessions; no Desktop UI',
50
50
  realModelCalls: false, explicitPromptRequests: 0, permissions: [], checks: [], completed: false,
@@ -67,8 +67,7 @@ function rows(root, sql, ...values) {
67
67
  databases.set(root, childNode(['--input-type=module', '-e',
68
68
  `import { projectDbPath } from ${JSON.stringify(module)}; console.log(projectDbPath(process.argv[1]));`, root], root));
69
69
  }
70
- const db = new DatabaseSync(databases.get(root), { readOnly: true });
71
- try { return db.prepare(sql).all(...values); } finally { db.close(); }
70
+ return readAcceptanceRows(databases.get(root), sql, ...values);
72
71
  }
73
72
  const events = () => fs.existsSync(traceFile)
74
73
  ? fs.readFileSync(traceFile, 'utf8').trim().split('\n').filter(Boolean).map(line => JSON.parse(line)) : [];
@@ -0,0 +1,9 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+
3
+ // Acceptance observers race the real runtime's short-lived SQLite connections.
4
+ // Match its bounded busy timeout without retrying tasks or hiding query errors.
5
+ export function readAcceptanceRows(database, sql, ...values) {
6
+ const db = new DatabaseSync(database, { readOnly: true, timeout: 5000 });
7
+ try { return db.prepare(sql).all(...values); }
8
+ finally { db.close(); }
9
+ }