threadnote 1.6.0 → 1.6.1

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.
@@ -3394,7 +3394,7 @@ var program = new Command();
3394
3394
  // src/constants.ts
3395
3395
  var DEFAULT_HOST = "127.0.0.1";
3396
3396
  var DEFAULT_PORT = 1933;
3397
- var DEFAULT_OPENVIKING_VERSION = "0.4.5";
3397
+ var DEFAULT_OPENVIKING_VERSION = "0.4.7";
3398
3398
  var OPENVIKING_TOOL_PYTHON = "3.12";
3399
3399
  var DEFAULT_ACCOUNT = "local";
3400
3400
  var DEFAULT_AGENT_ID = "threadnote";
@@ -13238,8 +13238,6 @@ async function runSeed(config, options) {
13238
13238
  importPath,
13239
13239
  "--to",
13240
13240
  candidate.destinationUri,
13241
- "--reason",
13242
- seedResourceReason(candidate),
13243
13241
  ...seedWatchArgs({
13244
13242
  watchIntervalMinutes,
13245
13243
  importedOriginal: importPath === candidate.filePath,
@@ -13306,19 +13304,7 @@ async function seedDependencyGraphs(config, ov, manifest, targetProjects, dryRun
13306
13304
  await ensureDirectory((0, import_node_path13.dirname)(graphPath), false);
13307
13305
  await (0, import_promises11.writeFile)(graphPath, document, { encoding: "utf8", mode: 384 });
13308
13306
  await (0, import_promises11.chmod)(graphPath, 384);
13309
- await maybeRun(
13310
- false,
13311
- ov,
13312
- withIdentity(config, [
13313
- "add-resource",
13314
- graphPath,
13315
- "--to",
13316
- destinationUri,
13317
- "--reason",
13318
- `Dependency facts for ${project.name}`,
13319
- "--wait"
13320
- ])
13321
- );
13307
+ await maybeRun(false, ov, withIdentity(config, ["add-resource", graphPath, "--to", destinationUri, "--wait"]));
13322
13308
  written += 1;
13323
13309
  }
13324
13310
  console.log(
@@ -13475,15 +13461,7 @@ async function runSeedSkills(config, options) {
13475
13461
  console.log(`SKIP command in native skill mode: ${skill.filePath}`);
13476
13462
  continue;
13477
13463
  }
13478
- const args = nativeMode ? ["add-skill", skill.filePath, "--wait"] : [
13479
- "add-resource",
13480
- skill.filePath,
13481
- "--to",
13482
- skillResourceUri(skill),
13483
- "--reason",
13484
- skillResourceReason(skill),
13485
- "--wait"
13486
- ];
13464
+ const args = nativeMode ? ["add-skill", skill.filePath, "--wait"] : ["add-resource", skill.filePath, "--to", skillResourceUri(skill), "--wait"];
13487
13465
  await maybeRun(options.dryRun === true, ov, withIdentity(config, args));
13488
13466
  }
13489
13467
  console.log(
@@ -13581,17 +13559,9 @@ async function prepareSeedFile(config, candidate, dryRun) {
13581
13559
  await (0, import_promises11.chmod)(redactedPath, 384);
13582
13560
  return redactedPath;
13583
13561
  }
13584
- function seedResourceReason(candidate) {
13585
- return `Project guidance for ${candidate.projectName}: ${candidate.relativePath}`;
13586
- }
13587
13562
  function graphCacheFileName(projectName) {
13588
13563
  return `${uriSegment(projectName)}-${sha256(projectName).slice(0, 8)}.graph.md`;
13589
13564
  }
13590
- function skillResourceReason(skill) {
13591
- return `${skill.kind === "command" ? "Agent command" : "Agent skill"} catalog item from ${skill.source}: ${(0, import_node_path13.basename)(
13592
- skill.filePath
13593
- )}`;
13594
- }
13595
13565
  async function collectSkillCandidates(config) {
13596
13566
  const sources = [
13597
13567
  { kind: "skill", pattern: "~/.codex/skills/**/SKILL.md", source: "codex-global" },
package/docs/index.html CHANGED
@@ -25,7 +25,7 @@
25
25
  <link rel="preconnect" href="https://fonts.googleapis.com" />
26
26
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
27
27
  <link
28
- href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap"
28
+ href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&amp;family=JetBrains+Mono:wght@400;500;600&amp;display=swap"
29
29
  rel="stylesheet"
30
30
  />
31
31
 
@@ -783,7 +783,7 @@
783
783
  handoffs, seeded repo docs, reusable skills, and team knowledge.
784
784
  </p>
785
785
  <div class="cta-row">
786
- <span class="pill"><span id="version-tag">v1.3.2</span> · local-first · AGPL-3.0-or-later</span>
786
+ <span class="pill"><span id="version-tag">v1.6.0</span> · local-first · AGPL-3.0-or-later</span>
787
787
  </div>
788
788
  </div>
789
789
  <div class="scroll-cue">scroll ↓ &nbsp;·&nbsp; <span class="kbd">↓</span> / <span class="kbd">j</span></div>
@@ -1147,7 +1147,7 @@
1147
1147
  <span class="out">--user`, which fails on PEP 668 setups.</span>
1148
1148
  <span class="out">Install uv now? [Y/n] </span><span class="out-strong">Y</span>
1149
1149
  <span class="out">Installing uv via Homebrew…</span>
1150
- <span class="out-strong">OK openviking 0.4.5 ready · server healthy</span></pre>
1150
+ <span class="out-strong">OK openviking 0.4.7 ready · server healthy</span></pre>
1151
1151
  </div>
1152
1152
  <p class="muted" style="margin-top: 0.75rem; font-size: 0.9rem">
1153
1153
  Or manually: <code>npm install -g threadnote && threadnote install</code>. On a fresh macOS / modern
@@ -1203,7 +1203,7 @@
1203
1203
  --repo ~/src/mobile-app</span>
1204
1204
  <span class="out">Wrote ~/.openviking/seed-manifest.yaml (2 project(s))</span>
1205
1205
 
1206
- <span class="cmd">$ threadnote seed</span>
1206
+ <span class="cmd">$ threadnote seed --graph</span>
1207
1207
  <span class="out-strong">Imported 47 curated path(s); skipped 6 secret-flagged.</span>
1208
1208
 
1209
1209
  <span class="cmd">$ threadnote seed-skills</span>
@@ -1228,7 +1228,11 @@ projects:
1228
1228
  uri: viking://resources/repos/mobile-app
1229
1229
  seed:
1230
1230
  - AGENTS.md
1231
- - docs/**/*.md</code></pre>
1231
+ - docs/**/*.md
1232
+ worksets:
1233
+ - name: mobile_web
1234
+ description: Mobile and web app context
1235
+ projects: [web-app, mobile-app]</code></pre>
1232
1236
  </div>
1233
1237
  </div>
1234
1238
 
@@ -1241,6 +1245,14 @@ projects:
1241
1245
  <strong>Seeding is opt-in and re-runnable.</strong> <code>threadnote seed</code> never deletes; it
1242
1246
  upserts.
1243
1247
  </li>
1248
+ <li>
1249
+ <strong>Worksets recall related repos together.</strong> Ask for a workset when a task crosses mobile,
1250
+ web, API, or shared-library boundaries.
1251
+ </li>
1252
+ <li>
1253
+ <strong>Dependency facts are searchable.</strong> <code>threadnote seed --graph</code> adds compact
1254
+ package and module facts without indexing source files.
1255
+ </li>
1244
1256
  <li>
1245
1257
  <strong>Skills are a first-class catalog.</strong> <code>seed-skills</code> makes reusable workflows
1246
1258
  discoverable: testing, release, on-call, debugging, plugin guidance.
@@ -1339,6 +1351,9 @@ threadnote remember \
1339
1351
  threadnote handoff \
1340
1352
  --project web-app --topic auth-token-refresh \
1341
1353
  --task "Address reviewer comments on token refresh PR" \
1354
+ --pr "https://github.com/acme/web-app/pull/184" \
1355
+ --ci "lint and auth tests passing" \
1356
+ --reference "viking://user/&lt;you&gt;/memories/durable/projects/web-app/token-client.md" \
1342
1357
  --tests "make lint-lite; mocha auth_client_test 77 passing" \
1343
1358
  --next-step "Push and request re-review"
1344
1359
 
@@ -1553,6 +1568,19 @@ threadnote remember \
1553
1568
  </div>
1554
1569
  </div>
1555
1570
 
1571
+ <div class="vignette reveal">
1572
+ <div class="v-say">Find the latest mobile and web context for sign-in.</div>
1573
+ <pre class="v-call">recall_context({query: "latest sign-in handoff", workset: "mobile_web"})</pre>
1574
+ <pre class="v-response">
1575
+ → mobile-app guidance, handoffs, and durable memories
1576
+ → web-app guidance, handoffs, and durable memories</pre
1577
+ >
1578
+ <div class="v-answer">
1579
+ Worksets let a manifest group related repos once, then recall them together for cross-platform work. A
1580
+ typo fails early instead of silently falling back to broad search.
1581
+ </div>
1582
+ </div>
1583
+
1556
1584
  <div class="vignette reveal">
1557
1585
  <div class="v-say">Save where we are — I'm switching to another agent.</div>
1558
1586
  <pre class="v-call">
@@ -1591,8 +1619,9 @@ remember_context({kind: "handoff", project: "&lt;repo&gt;", topic: "auto-precomp
1591
1619
  Stored: viking://user/you/memories/handoffs/active/&lt;repo&gt;/auto-precompact.md</pre
1592
1620
  >
1593
1621
  <div class="v-answer">
1594
- Compaction summarizes the conversation arc but loses the durable facts. Threadnote's hook captures them
1595
- first; the post-compaction turn recalls them and resumes without amnesia.
1622
+ Compaction summarizes the conversation arc but loses concrete working state. Threadnote's hook captures
1623
+ a scrubbed trace summary and current handoff first; the post-compaction turn recalls them and resumes
1624
+ without amnesia.
1596
1625
  </div>
1597
1626
  </div>
1598
1627
 
@@ -1651,7 +1680,7 @@ threadnote doctor --dry-run</code></pre>
1651
1680
  </div>
1652
1681
 
1653
1682
  <p class="colophon">
1654
- threadnote · AGPL-3.0-or-later · built on OpenViking 0.4.5 · use <span class="kbd">↑</span>
1683
+ threadnote · AGPL-3.0-or-later · built on OpenViking 0.4.7 · use <span class="kbd">↑</span>
1655
1684
  <span class="kbd">↓</span> / <span class="kbd">j</span> <span class="kbd">k</span> to navigate
1656
1685
  </p>
1657
1686
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "threadnote",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "type": "commonjs",
5
5
  "main": "dist/threadnote.cjs",
6
6
  "description": "Shared local context and handoffs for development agents",