intentional-cognition-os 1.6.0 → 1.7.0

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
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## [v1.7.0] - 2026-05-29
4
+
5
+ - feat(demo): add scripts/demo-e2e.sh — cross-repo proof-of-work orchestrator (1at) (#118) (aaca71b)
6
+ - ci(codecov): add Test Analytics + Components baseline customization (#117) (a1b79b8)
7
+ - ci(codecov): wire up Codecov coverage upload + project + patch gates (#116) (062e295)
8
+ - test(cli/spool): add handler tests for ico spool emit (zp6) (#115) (6d4ebc5)
9
+ - chore(beads,docs): file Q1 cross-repo proof-of-work demo epic + CLAUDE.md pointer (832ca87)
10
+ - docs(claude-md): refresh project state to v1.6.1 + bd race warning (b2c3403)
11
+ - chore(beads): re-close lhm (rapid-write race clobbered prior close) (d380fdc)
12
+
13
+ ## [v1.6.1] - 2026-05-27
14
+
15
+ - Merge pull request #113 from jeremylongshore/docs/readme-tagline-version-align (78082c5)
16
+ - docs(readme): add v1.6.0 version suffix + align tagline with gist (8470685)
17
+ - chore(beads): final state — nwh closed, three epics closed, 11 deferred (e7e8c62)
18
+ - Merge pull request #112 from jeremylongshore/feat/plugin-scripts-lint-nwh (246b801)
19
+ - chore(beads): defer 11 P3 beads to 2026-07-01 + close 3 epics (39ee882)
20
+ - ci(plugin-lint): add shellcheck + ruff CI job for plugin scripts (nwh) (7ecebc7)
21
+ - Merge pull request #111 from jeremylongshore/feat/docs-sweep-dsn-55q.3 (1965501)
22
+ - docs(037): tighten GFM table-cell + YAML escape rationale (closes dsn) (19577e1)
23
+
3
24
  ## [v1.6.0] - 2026-05-27
4
25
 
5
26
  - Merge pull request #110 from jeremylongshore/feat/test-hygiene-quickwins-0wy.2-wie (b910839)
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
- # intentional-cognition-os
1
+ # intentional-cognition-os v1.7.0
2
2
 
3
- > **A local-first knowledge OS.** Point `ico` at a folder of PDFs, markdown notes, and web clips. It compiles them into a queryable wiki you can read, runs grounded Q&A with inline citations, spins up multi-agent research tasks for hard questions, generates spaced-repetition flashcards from what landed, and writes every step to an append-only audit trail. Single CLI. Your data never leaves disk except for the Claude API calls you opt into.
3
+ Compile knowledge for the machine. Distill understanding for the human.
4
+
5
+ A local-first knowledge OS. Point `ico` at a folder of PDFs, markdown notes, and web clips. It compiles them into a queryable wiki you can read, runs grounded Q&A with inline citations, spins up multi-agent research tasks for hard questions, generates spaced-repetition flashcards from what landed, and writes every step to an append-only audit trail. Single CLI. Your data never leaves disk except for the Claude API calls you opt into.
4
6
 
5
7
  [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
6
8
  [![npm](https://img.shields.io/npm/v/intentional-cognition-os.svg)](https://www.npmjs.com/package/intentional-cognition-os)
@@ -152,7 +154,7 @@ Global flags on every command: `--workspace <path>`, `--json`, `--verbose`, `--q
152
154
 
153
155
  ## Status
154
156
 
155
- **v1.0.5 — stable.** 1.6.0 tests passing across 5 packages. Used daily by the author. Public release on npm.
157
+ **v1.0.5 — stable.** 1.7.0 tests passing across 5 packages. Used daily by the author. Public release on npm.
156
158
 
157
159
  - **Stable**: all 14 commands, the compilation passes, ask + research + recall + render + promote, the audit chain.
158
160
  - **In progress**: post-v1 coverage uplift on compiler + cli packages; mutation-testing baseline.
package/dist/index.js CHANGED
@@ -4363,21 +4363,24 @@ import { join as join7 } from "path";
4363
4363
  import matter3 from "gray-matter";
4364
4364
  import { createHash as createHash4 } from "crypto";
4365
4365
  import {
4366
+ closeSync as closeSync2,
4367
+ constants as fsConstants2,
4366
4368
  existsSync as existsSync13,
4369
+ fstatSync as fstatSync2,
4367
4370
  mkdirSync as mkdirSync6,
4371
+ openSync as openSync2,
4368
4372
  readdirSync as readdirSync6,
4369
4373
  readFileSync as readFileSync11,
4370
4374
  renameSync as renameSync2,
4371
- statSync as statSync3,
4372
- writeFileSync as writeFileSync5
4375
+ writeSync as writeSync2
4373
4376
  } from "fs";
4374
4377
  import { basename as basename3, join as join9, resolve as resolve7 } from "path";
4375
4378
  import matter4 from "gray-matter";
4376
4379
  import { existsSync as existsSync14, readdirSync as readdirSync7, readFileSync as readFileSync12 } from "fs";
4377
4380
  import { basename as basename4, join as join10 } from "path";
4378
- import { mkdirSync as mkdirSync7, readdirSync as readdirSync8, statSync as statSync4, writeFileSync as writeFileSync6 } from "fs";
4381
+ import { mkdirSync as mkdirSync7, readdirSync as readdirSync8, statSync as statSync3, writeFileSync as writeFileSync5 } from "fs";
4379
4382
  import { join as join11 } from "path";
4380
- import { readdirSync as readdirSync9, readFileSync as readFileSync13, statSync as statSync5 } from "fs";
4383
+ import { readdirSync as readdirSync9, readFileSync as readFileSync13, statSync as statSync4 } from "fs";
4381
4384
  import { join as join12, resolve as resolve8 } from "path";
4382
4385
  import { load as yamlLoad } from "js-yaml";
4383
4386
  import { randomUUID as randomUUID6 } from "crypto";
@@ -6104,10 +6107,17 @@ function atomicWriteSpool(outDirAbs, filename, jsonlBody, candidateIds, emittedA
6104
6107
  const spoolTmp = `${spoolFile}.tmp`;
6105
6108
  const manifestFile = `${spoolFile}.manifest.json`;
6106
6109
  const manifestTmp = `${manifestFile}.tmp`;
6110
+ const O_FLAGS = fsConstants2.O_CREAT | fsConstants2.O_EXCL | fsConstants2.O_WRONLY;
6111
+ const MODE = 384;
6112
+ let spoolFd = -1;
6113
+ let manifestFd = -1;
6107
6114
  try {
6108
- writeFileSync5(spoolTmp, jsonlBody, "utf-8");
6115
+ spoolFd = openSync2(spoolTmp, O_FLAGS, MODE);
6116
+ writeSync2(spoolFd, jsonlBody, null, "utf-8");
6117
+ const bytes = fstatSync2(spoolFd).size;
6118
+ closeSync2(spoolFd);
6119
+ spoolFd = -1;
6109
6120
  renameSync2(spoolTmp, spoolFile);
6110
- const bytes = statSync3(spoolFile).size;
6111
6121
  const sha256 = createHash4("sha256").update(jsonlBody, "utf-8").digest("hex");
6112
6122
  const manifest = {
6113
6123
  schemaVersion,
@@ -6118,10 +6128,25 @@ function atomicWriteSpool(outDirAbs, filename, jsonlBody, candidateIds, emittedA
6118
6128
  spoolFileSha256: sha256,
6119
6129
  candidateIds
6120
6130
  };
6121
- writeFileSync5(manifestTmp, JSON.stringify(manifest, null, 2) + "\n", "utf-8");
6131
+ manifestFd = openSync2(manifestTmp, O_FLAGS, MODE);
6132
+ writeSync2(manifestFd, JSON.stringify(manifest, null, 2) + "\n", null, "utf-8");
6133
+ closeSync2(manifestFd);
6134
+ manifestFd = -1;
6122
6135
  renameSync2(manifestTmp, manifestFile);
6123
6136
  return ok({ spoolFile, manifestFile, spoolFileSha256: sha256, spoolFileBytes: bytes });
6124
6137
  } catch (e) {
6138
+ if (spoolFd !== -1) {
6139
+ try {
6140
+ closeSync2(spoolFd);
6141
+ } catch {
6142
+ }
6143
+ }
6144
+ if (manifestFd !== -1) {
6145
+ try {
6146
+ closeSync2(manifestFd);
6147
+ } catch {
6148
+ }
6149
+ }
6125
6150
  return err(e instanceof Error ? e : new Error(String(e)));
6126
6151
  }
6127
6152
  }
@@ -6436,7 +6461,7 @@ function countFiles(dirPath) {
6436
6461
  const files = [];
6437
6462
  for (const entry of entries) {
6438
6463
  try {
6439
- const s = statSync4(join11(dirPath, entry));
6464
+ const s = statSync3(join11(dirPath, entry));
6440
6465
  if (s.isFile()) {
6441
6466
  files.push(entry);
6442
6467
  }
@@ -7177,7 +7202,7 @@ import { existsSync as existsSync22, readdirSync as readdirSync5, readFileSync a
7177
7202
  import { basename as basename22, join as join22 } from "path";
7178
7203
  import Anthropic, { APIError } from "@anthropic-ai/sdk";
7179
7204
  import { randomUUID as randomUUID22 } from "crypto";
7180
- import { existsSync as existsSync32, mkdirSync as mkdirSync22, renameSync as renameSync22, writeFileSync as writeFileSync7 } from "fs";
7205
+ import { existsSync as existsSync32, mkdirSync as mkdirSync22, renameSync as renameSync22, writeFileSync as writeFileSync6 } from "fs";
7181
7206
  import { basename as basename32, extname as extname2, join as join32 } from "path";
7182
7207
  import { randomUUID as randomUUID32 } from "crypto";
7183
7208
  import { existsSync as existsSync42, mkdirSync as mkdirSync32, readFileSync as readFileSync52, renameSync as renameSync3, writeFileSync as writeFileSync22 } from "fs";
@@ -7216,7 +7241,7 @@ import {
7216
7241
  import { join as join8 } from "path";
7217
7242
  import { existsSync as existsSync92, readFileSync as readFileSync10 } from "fs";
7218
7243
  import { join as join92 } from "path";
7219
- import { existsSync as existsSync10, mkdirSync as mkdirSync72, writeFileSync as writeFileSync72 } from "fs";
7244
+ import { existsSync as existsSync10, mkdirSync as mkdirSync72, writeFileSync as writeFileSync7 } from "fs";
7220
7245
  import { dirname as dirname2, join as join102, resolve as resolve22 } from "path";
7221
7246
  import { existsSync as existsSync112, mkdirSync as mkdirSync8, writeFileSync as writeFileSync8 } from "fs";
7222
7247
  import { dirname as dirname3, join as join112 } from "path";
@@ -8050,7 +8075,7 @@ async function summarizeSource(client, db, workspacePath, sourceId, sourceConten
8050
8075
  if (!existsSync32(absoluteOutputDir)) {
8051
8076
  mkdirSync22(absoluteOutputDir, { recursive: true });
8052
8077
  }
8053
- writeFileSync7(tmpPath, content, "utf-8");
8078
+ writeFileSync6(tmpPath, content, "utf-8");
8054
8079
  renameSync22(tmpPath, absoluteOutputPath);
8055
8080
  } catch (e) {
8056
8081
  return err(e instanceof Error ? e : new Error(String(e)));
@@ -9285,7 +9310,7 @@ ${content}`;
9285
9310
  }
9286
9311
  }
9287
9312
  try {
9288
- writeFileSync72(outputPath, markdown, "utf-8");
9313
+ writeFileSync7(outputPath, markdown, "utf-8");
9289
9314
  } catch (e) {
9290
9315
  return err(
9291
9316
  new Error(
@@ -13245,7 +13270,7 @@ function parseScope(raw) {
13245
13270
  const v = raw ?? "wiki";
13246
13271
  return VALID_SCOPES.includes(v) ? v : null;
13247
13272
  }
13248
- function emitHandler(options, command) {
13273
+ function runSpoolEmit(options, command) {
13249
13274
  const global = command.optsWithGlobals();
13250
13275
  const workspaceFlag = options.workspace ?? global.workspace;
13251
13276
  const ws = resolveWorkspace(workspaceFlag !== void 0 ? { workspace: workspaceFlag } : {});
@@ -13379,7 +13404,7 @@ function register14(program) {
13379
13404
  `Which artifacts to emit: ${VALID_SCOPES.join(" | ")} (default: wiki)`,
13380
13405
  "wiki"
13381
13406
  ).option("--tenant <id>", "Tenant identifier (overrides spool.tenantId in config)").option("--dry-run", "Print what would be emitted, structure only; no writes", false).option("-w, --workspace <path>", "Workspace path (defaults to ICO_WORKSPACE or cwd)").action((options, command) => {
13382
- emitHandler(options, command);
13407
+ runSpoolEmit(options, command);
13383
13408
  });
13384
13409
  }
13385
13410