@appchy/jarvis 0.1.89 → 0.1.90

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/dist/data/mcp.mjs CHANGED
@@ -1651,14 +1651,14 @@ function planScope(ctx, req) {
1651
1651
  anticipated,
1652
1652
  editCodeNodes,
1653
1653
  governance,
1654
- obligations: toObligations(governance, anticipated),
1654
+ obligations: toObligations(governance, anticipated, testsCovering),
1655
1655
  references,
1656
1656
  testsCovering,
1657
1657
  blastRadius,
1658
1658
  lowConfidence
1659
1659
  };
1660
1660
  }
1661
- function toObligations(governance, existing = []) {
1661
+ function toObligations(governance, existing = [], keep = []) {
1662
1662
  const rules = governance.map((g) => {
1663
1663
  const full = g.body !== void 0;
1664
1664
  return {
@@ -1668,13 +1668,19 @@ function toObligations(governance, existing = []) {
1668
1668
  statement: full ? `Its full text is here. Say how the plan satisfies it, or why it does not apply.` : `Not read yet \u2014 only its title arrived. Read it, then say how the plan satisfies it.`
1669
1669
  };
1670
1670
  });
1671
+ const preserved = keep.map((c) => ({
1672
+ type: "keep",
1673
+ id: c.line === void 0 ? c.file : `${c.file}:${c.line}`,
1674
+ statement: `Passes over this code today. It must still pass \u2014 and it must not be the thing the plan changes to make it.`
1675
+ }));
1671
1676
  return [
1672
1677
  ...rules,
1673
1678
  ...existing.map((e) => ({
1674
1679
  type: "existing",
1675
1680
  id: e.line === void 0 ? e.file : `${e.file}:${e.line}`,
1676
1681
  statement: `Already in the tree and close to what was described. Reuse it, or say why the plan builds alongside it.`
1677
- }))
1682
+ })),
1683
+ ...preserved
1678
1684
  ];
1679
1685
  }
1680
1686
  function isCodeHit(hit) {
@@ -2304,7 +2310,8 @@ async function scope(ctx, req) {
2304
2310
  const topGov = plan.governance.filter((g) => g.body === void 0).slice(0, 3).map((g) => g.id).join(", ");
2305
2311
  const unread = plan.obligations.filter((o) => o.type === "governance" && !o.full).length;
2306
2312
  const reuse = plan.obligations.filter((o) => o.type === "existing").length;
2307
- const summary = plan.lowConfidence ? `Low-confidence (build-new) scope for "${req.task}": no code strongly matched \u2014 ${plan.anticipated.length} integration point(s) to READ, not edit; ${plan.governance.length} concept-matched governance. Lead with search + read.` : `Scoped "${req.task}": ${plan.editSet.length} edit target(s), ${plan.governance.length} governance, ${plan.testsCovering.length} covering test(s), blast radius ${plan.blastRadius.total} (${confidence})${topFiles ? ` \u2014 ${topFiles}` : ""}.${rules.ids > 0 && topGov ? ` ${rules.full} rule(s) came back in full; NEXT: read ${topGov} for the ${rules.ids} that did not,` : rules.full > 0 ? ` All ${rules.full} governing rule(s) came back in FULL \u2014 read them here, not with map_read;` : " NEXT:"} then check the edit-set with map_scope {edits} before you commit.${plan.obligations.length > 0 ? ` ${plan.obligations.length} obligation(s) outstanding${unread > 0 ? `, ${unread} rule(s) not yet read` : ""}${reuse > 0 ? `, ${reuse} thing(s) that already exist` : ""} \u2014 see \`obligations\`.` : ""}`;
2313
+ const keep = plan.obligations.filter((o) => o.type === "keep").length;
2314
+ const summary = plan.lowConfidence ? `Low-confidence (build-new) scope for "${req.task}": no code strongly matched \u2014 ${plan.anticipated.length} integration point(s) to READ, not edit; ${plan.governance.length} concept-matched governance. Lead with search + read.` : `Scoped "${req.task}": ${plan.editSet.length} edit target(s), ${plan.governance.length} governance, ${plan.testsCovering.length} covering test(s), blast radius ${plan.blastRadius.total} (${confidence})${topFiles ? ` \u2014 ${topFiles}` : ""}.${rules.ids > 0 && topGov ? ` ${rules.full} rule(s) came back in full; NEXT: read ${topGov} for the ${rules.ids} that did not,` : rules.full > 0 ? ` All ${rules.full} governing rule(s) came back in FULL \u2014 read them here, not with map_read;` : " NEXT:"} then check the edit-set with map_scope {edits} before you commit.${plan.obligations.length > 0 ? ` ${plan.obligations.length} obligation(s) outstanding${unread > 0 ? `, ${unread} rule(s) not yet read` : ""}${reuse > 0 ? `, ${reuse} thing(s) that already exist` : ""}${keep > 0 ? `, ${keep} that must keep passing` : ""} \u2014 see \`obligations\`.` : ""}`;
2308
2315
  return {
2309
2316
  summary,
2310
2317
  task: req.task,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appchy/jarvis",
3
- "version": "0.1.89",
3
+ "version": "0.1.90",
4
4
  "description": "Jarvis — local AI coding assistant CLI",
5
5
  "private": false,
6
6
  "type": "module",
@@ -56,17 +56,17 @@
56
56
  "tsup": "^8.5.1",
57
57
  "typescript": "^5.7.0",
58
58
  "vitest": "^2.1.0",
59
- "@jarvis/anthropic": "1.0.0",
60
59
  "@jarvis/agents": "1.0.0",
60
+ "@jarvis/anthropic": "1.0.0",
61
61
  "@jarvis/board": "0.1.0",
62
62
  "@jarvis/data": "0.1.0",
63
63
  "@jarvis/errors": "1.0.0",
64
64
  "@jarvis/logger": "1.0.0",
65
- "@jarvis/types": "1.0.0",
66
65
  "@jarvis/rpc": "1.0.0",
67
66
  "@jarvis/typescript-config": "1.0.0",
68
67
  "@jarvis/vitest-config": "1.0.0",
69
- "@jarvis/ui": "0.1.0"
68
+ "@jarvis/ui": "0.1.0",
69
+ "@jarvis/types": "1.0.0"
70
70
  },
71
71
  "scripts": {
72
72
  "dev": "tsx watch src/bin.ts start --foreground",