projectionlab-mcp 1.1.0 → 1.2.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.
Files changed (73) hide show
  1. package/HOW-IT-WORKS.md +2 -2
  2. package/README.md +1 -0
  3. package/REFERENCE.md +11 -2
  4. package/dist/bootstrap.js +5 -3
  5. package/dist/bootstrap.js.map +1 -1
  6. package/dist/bridge.d.ts +2 -0
  7. package/dist/config.d.ts +4 -0
  8. package/dist/config.js +41 -6
  9. package/dist/config.js.map +1 -1
  10. package/dist/errors.d.ts +6 -0
  11. package/dist/errors.js +10 -0
  12. package/dist/errors.js.map +1 -1
  13. package/dist/extensionBridge.d.ts +14 -1
  14. package/dist/extensionBridge.js +74 -20
  15. package/dist/extensionBridge.js.map +1 -1
  16. package/dist/index.js +9 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/instructions.d.ts +1 -1
  19. package/dist/instructions.js +1 -1
  20. package/dist/largeOutput.js +25 -0
  21. package/dist/largeOutput.js.map +1 -1
  22. package/dist/logger.js +11 -4
  23. package/dist/logger.js.map +1 -1
  24. package/dist/pathPatch.js +5 -0
  25. package/dist/pathPatch.js.map +1 -1
  26. package/dist/plans.d.ts +45 -10
  27. package/dist/plans.js +139 -42
  28. package/dist/plans.js.map +1 -1
  29. package/dist/redact.d.ts +24 -0
  30. package/dist/redact.js +91 -0
  31. package/dist/redact.js.map +1 -1
  32. package/dist/resources/planData.js +3 -1
  33. package/dist/resources/planData.js.map +1 -1
  34. package/dist/resources/summary.js +4 -1
  35. package/dist/resources/summary.js.map +1 -1
  36. package/dist/snapshot.js +18 -11
  37. package/dist/snapshot.js.map +1 -1
  38. package/dist/tools/clonePlan.js +3 -3
  39. package/dist/tools/clonePlan.js.map +1 -1
  40. package/dist/tools/connection.js +21 -3
  41. package/dist/tools/connection.js.map +1 -1
  42. package/dist/tools/diff.js +7 -7
  43. package/dist/tools/diff.js.map +1 -1
  44. package/dist/tools/getPlan.js +4 -4
  45. package/dist/tools/getPlan.js.map +1 -1
  46. package/dist/tools/getPlanSection.js +5 -5
  47. package/dist/tools/getPlanSection.js.map +1 -1
  48. package/dist/tools/getPlanSettings.js +3 -3
  49. package/dist/tools/getPlanSettings.js.map +1 -1
  50. package/dist/tools/restore.js +18 -1
  51. package/dist/tools/restore.js.map +1 -1
  52. package/dist/tools/snapshots.js +17 -1
  53. package/dist/tools/snapshots.js.map +1 -1
  54. package/dist/tools/updatePlanEvent.js +63 -37
  55. package/dist/tools/updatePlanEvent.js.map +1 -1
  56. package/dist/tools/updatePlanSection.js +11 -6
  57. package/dist/tools/updatePlanSection.js.map +1 -1
  58. package/dist/tools/updatePlanSettings.js +3 -3
  59. package/dist/tools/updatePlanSettings.js.map +1 -1
  60. package/dist/types/wire.d.ts +27 -2
  61. package/dist/types/wire.js +6 -2
  62. package/dist/types/wire.js.map +1 -1
  63. package/dist/updateCheck.d.ts +22 -0
  64. package/dist/updateCheck.js +58 -0
  65. package/dist/updateCheck.js.map +1 -0
  66. package/dist/versionCompare.d.ts +5 -0
  67. package/dist/versionCompare.js +33 -0
  68. package/dist/versionCompare.js.map +1 -0
  69. package/dist/versionNotices.d.ts +9 -0
  70. package/dist/versionNotices.js +42 -0
  71. package/dist/versionNotices.js.map +1 -0
  72. package/package.json +1 -1
  73. package/skills/projectionlab/SKILL.md +55 -15
@@ -15,7 +15,7 @@ export function readGuide() {
15
15
  */
16
16
  export const SERVER_INSTRUCTIONS = `ProjectionLab MCP: reads and edits the user's ProjectionLab retirement plan through their logged-in browser tab.
17
17
 
18
- - Call projectionlab_check_connection first in every session. If any check fails, read the resource projectionlab://guide and walk the user through the fix one step at a time.
18
+ - Call projectionlab_check_connection first in every session. If any check fails, read the resource projectionlab://guide and walk the user through the fix one step at a time. If it returns notices, relay each one to the user once, in plain words, then carry on with their request; do not repeat them later in the session and do not refuse to work because of them.
19
19
  - Writes are disabled unless the user sets PL_READ_ONLY=false. Every write tool is a dry run unless confirm: true is passed; describe the preview to the user in plain words (which plan, which item, the old and new value), never as JSON, and confirm only the specific change they approved. Confirmed changes are snapshotted and can be undone with projectionlab_rollback.
20
20
  - Change the plan only when the user explicitly asks.
21
21
  - Plan figures are private: never send them outside the conversation. Never reveal PL_API_KEY or the WebSocket token.
@@ -1,3 +1,4 @@
1
+ import { readdir, stat, unlink } from "node:fs/promises";
1
2
  import { join } from "node:path";
2
3
  import { homedir } from "node:os";
3
4
  import { toJson } from "./json.js";
@@ -5,6 +6,28 @@ import { secureMkdir, secureWriteFile } from "./secureFs.js";
5
6
  import { log } from "./logger.js";
6
7
  export const FILE_THRESHOLD = 100_000;
7
8
  export const EXPORT_DIR = join(homedir(), ".projectionlab-mcp", "exports");
9
+ const RETENTION_DAYS = 30;
10
+ /** Delete export files whose last modification is older than the retention
11
+ * window. Only .json files this module writes are touched. */
12
+ async function prune() {
13
+ const cutoff = Date.now() - RETENTION_DAYS * 24 * 60 * 60 * 1000;
14
+ const files = await readdir(EXPORT_DIR);
15
+ for (const file of files) {
16
+ if (!file.endsWith(".json"))
17
+ continue;
18
+ const filePath = join(EXPORT_DIR, file);
19
+ try {
20
+ const info = await stat(filePath);
21
+ if (info.mtimeMs < cutoff) {
22
+ await unlink(filePath);
23
+ log.info("largeOutput", `Pruned expired export ${file}`);
24
+ }
25
+ }
26
+ catch {
27
+ // Skip unreadable files.
28
+ }
29
+ }
30
+ }
8
31
  /**
9
32
  * Returns the text as-is when small enough; otherwise writes it to a file
10
33
  * and returns a pointer message so MCP clients don't truncate mid-JSON.
@@ -17,6 +40,8 @@ export async function textOrFile(text, label, summary = {}) {
17
40
  const filePath = join(EXPORT_DIR, `${label}-${timestamp}.json`);
18
41
  await secureWriteFile(filePath, text);
19
42
  log.info("largeOutput", `Wrote ${text.length} chars to ${filePath}`);
43
+ // Prune expired exports in the background, the way snapshots do.
44
+ prune().catch((err) => log.warn("largeOutput", `Prune failed: ${err}`));
20
45
  return toJson({
21
46
  truncated: true,
22
47
  reason: `Result is ${text.length} chars, larger than the ${FILE_THRESHOLD} char inline limit`,
@@ -1 +1 @@
1
- {"version":3,"file":"largeOutput.js","sourceRoot":"","sources":["../src/largeOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,KAAa,EACb,UAAmC,EAAE;IAErC,IAAI,IAAI,CAAC,MAAM,IAAI,cAAc;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,SAAS,OAAO,CAAC,CAAC;IAChE,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,IAAI,CAAC,MAAM,aAAa,QAAQ,EAAE,CAAC,CAAC;IAErE,OAAO,MAAM,CACX;QACE,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,aAAa,IAAI,CAAC,MAAM,2BAA2B,cAAc,oBAAoB;QAC7F,QAAQ;QACR,IAAI,EAAE,8DAA8D;QACpE,GAAG,OAAO;KACX,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"largeOutput.js","sourceRoot":"","sources":["../src/largeOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;AAC3E,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;8DAC8D;AAC9D,KAAK,UAAU,KAAK;IAClB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;gBAC1B,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACvB,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,yBAAyB,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,KAAa,EACb,UAAmC,EAAE;IAErC,IAAI,IAAI,CAAC,MAAM,IAAI,cAAc;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,SAAS,OAAO,CAAC,CAAC;IAChE,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,IAAI,CAAC,MAAM,aAAa,QAAQ,EAAE,CAAC,CAAC;IAErE,iEAAiE;IACjE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,GAAG,EAAE,CAAC,CAAC,CAAC;IAExE,OAAO,MAAM,CACX;QACE,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,aAAa,IAAI,CAAC,MAAM,2BAA2B,cAAc,oBAAoB;QAC7F,QAAQ;QACR,IAAI,EAAE,8DAA8D;QACpE,GAAG,OAAO;KACX,CACF,CAAC;AACJ,CAAC"}
package/dist/logger.js CHANGED
@@ -1,25 +1,32 @@
1
1
  import { config } from "./config.js";
2
+ import { redactSecrets } from "./redact.js";
2
3
  const LEVELS = { error: 0, warn: 1, info: 2, debug: 3 };
3
4
  const threshold = LEVELS[config.logLevel] ?? LEVELS.info;
4
5
  function timestamp() {
5
6
  return new Date().toISOString();
6
7
  }
8
+ // Messages often carry an error from the browser executor, which can echo
9
+ // request data. Every line is scrubbed here so no call site can log the
10
+ // Plugin API key.
11
+ function write(label, op, msg) {
12
+ console.error(`[${timestamp()}] ${label} [${op}] ${redactSecrets(msg)}`);
13
+ }
7
14
  export const log = {
8
15
  error(op, msg) {
9
16
  if (threshold >= LEVELS.error)
10
- console.error(`[${timestamp()}] ERROR [${op}] ${msg}`);
17
+ write("ERROR", op, msg);
11
18
  },
12
19
  warn(op, msg) {
13
20
  if (threshold >= LEVELS.warn)
14
- console.error(`[${timestamp()}] WARN [${op}] ${msg}`);
21
+ write("WARN ", op, msg);
15
22
  },
16
23
  info(op, msg) {
17
24
  if (threshold >= LEVELS.info)
18
- console.error(`[${timestamp()}] INFO [${op}] ${msg}`);
25
+ write("INFO ", op, msg);
19
26
  },
20
27
  debug(op, msg) {
21
28
  if (threshold >= LEVELS.debug)
22
- console.error(`[${timestamp()}] DEBUG [${op}] ${msg}`);
29
+ write("DEBUG", op, msg);
23
30
  },
24
31
  };
25
32
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAW,CAAC;AAEjE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;AAEzD,SAAS,SAAS;IAChB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,KAAK,CAAC,EAAU,EAAE,GAAW;QAC3B,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK;YAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,YAAY,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,EAAU,EAAE,GAAW;QAC1B,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,YAAY,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,EAAU,EAAE,GAAW;QAC1B,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,YAAY,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,CAAC,EAAU,EAAE,GAAW;QAC3B,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK;YAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,YAAY,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAW,CAAC;AAEjE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;AAEzD,SAAS,SAAS;IAChB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,0EAA0E;AAC1E,wEAAwE;AACxE,kBAAkB;AAClB,SAAS,KAAK,CAAC,KAAa,EAAE,EAAU,EAAE,GAAW;IACnD,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,KAAK,CAAC,EAAU,EAAE,GAAW;QAC3B,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,EAAU,EAAE,GAAW;QAC1B,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI;YAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,EAAU,EAAE,GAAW;QAC1B,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI;YAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,KAAK,CAAC,EAAU,EAAE,GAAW;QAC3B,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;CACF,CAAC"}
package/dist/pathPatch.js CHANGED
@@ -98,6 +98,11 @@ function assertCompatibleType(path, current, incoming, context) {
98
98
  }
99
99
  function replaceAtPath(root, parts, incoming, fullPath, context) {
100
100
  const [head, ...tail] = parts;
101
+ // "length" is an own property of arrays, so hasOwnProperty alone would let
102
+ // a leaf patch resize the array through copy[Number("length")].
103
+ if (Array.isArray(root) && !/^(0|[1-9]\d*)$/.test(head)) {
104
+ throw new ProjectionLabError("INVALID_INPUT", `Array segment "${head}" in ${context.label} path "${fullPath}" is not an index`, `Use a numeric array index returned by ${context.discoveryTool}`);
105
+ }
101
106
  if (!Object.prototype.hasOwnProperty.call(root, head)) {
102
107
  throw new ProjectionLabError("INVALID_INPUT", `Unknown ${context.label} path "${fullPath}"`, `Only existing paths returned by ${context.discoveryTool} can be changed`);
103
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pathPatch.js","sourceRoot":"","sources":["../src/pathPatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pathPatch.js","sourceRoot":"","sources":["../src/pathPatch.ts"],"names":[],"mappings":"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"}
package/dist/plans.d.ts CHANGED
@@ -2,13 +2,34 @@ import { ProjectionLabError } from "./errors.js";
2
2
  export type PlanObj = Record<string, unknown>;
3
3
  export declare const PLAN_SECTIONS: readonly ["income", "expenses", "accounts", "assets", "milestones", "variables", "withdrawalStrategy", "montecarlo", "priorities"];
4
4
  export type PlanSection = (typeof PLAN_SECTIONS)[number];
5
+ /** Sections whose members are events addressed by id or name; the
6
+ * settings-like sections use projectionlab_update_plan_settings instead. */
7
+ export declare const EVENT_SECTIONS: readonly ["income", "expenses", "accounts", "assets", "milestones", "priorities"];
8
+ /** The container each section holds, known from its name alone and not from
9
+ * what a plan happens to store: milestones is a direct array, the event
10
+ * sections are objects with an events array, and the settings-like sections
11
+ * are plain objects. Per DATA-MODEL.md sections 5.1 to 5.6 and the
12
+ * `variables`, `montecarlo` and `withdrawalStrategy` field trees. */
13
+ export declare const SECTION_CONTAINERS: {
14
+ readonly income: "events";
15
+ readonly expenses: "events";
16
+ readonly accounts: "events";
17
+ readonly assets: "events";
18
+ readonly milestones: "array";
19
+ readonly variables: "object";
20
+ readonly withdrawalStrategy: "object";
21
+ readonly montecarlo: "object";
22
+ readonly priorities: "events";
23
+ };
5
24
  /**
6
- * Find a plan by identifier. Match priority: exact ID, exact name
7
- * (case-insensitive), then partial name. Exact matches win over partial so
8
- * plans with shared name prefixes can't be silently confused on write paths.
25
+ * Index of the plan the identifier names, -1 when nothing matches. Throws
26
+ * INVALID_INPUT when several plans match the same way, so a read and the
27
+ * following write can never target different plans.
9
28
  */
10
- export declare function findPlanIndex(plans: unknown[], identifier: string): number;
11
- export declare function findPlan(plans: unknown[], identifier: string): PlanObj | null;
29
+ export declare function resolvePlanIndex(plans: unknown[], identifier: string): number;
30
+ /** The plan the identifier names, or null when nothing matches. Refuses
31
+ * ambiguous identifiers the way resolvePlanIndex does. */
32
+ export declare function resolvePlan(plans: unknown[], identifier: string): PlanObj | null;
12
33
  export declare function planNotFoundError(plans: unknown[], identifier: string): ProjectionLabError;
13
34
  export declare function requirePlans(data: {
14
35
  plans?: unknown[];
@@ -24,8 +45,12 @@ export declare function planEventCounts(plan: unknown): {
24
45
  expenseCount: number;
25
46
  milestoneCount: number;
26
47
  };
27
- /** Index of the event matching `identifier`: exact id, then exact name (case-insensitive), then name substring. -1 if none. */
28
- export declare function findEventIndex(events: unknown[], identifier: string): number;
48
+ /**
49
+ * Index of the event the identifier names: exact id, then exact name
50
+ * (case-insensitive), then name substring. -1 when nothing matches. Throws
51
+ * INVALID_INPUT when several events match the same way.
52
+ */
53
+ export declare function resolveEventIndex(events: unknown[], identifier: string): number;
29
54
  export declare function eventLabel(event: unknown): string;
30
55
  /**
31
56
  * Key events for diffing by label plus occurrence number, so events sharing a
@@ -37,11 +62,21 @@ export declare function keyEvents(events: unknown[]): Map<string, {
37
62
  name: string;
38
63
  event: unknown;
39
64
  }>;
65
+ /** The container kind of a section value, or null when it is not a usable
66
+ * container (null, undefined, a primitive, or a non-plain object). */
67
+ export declare function sectionContainer(value: unknown): "array" | "events" | "object" | null;
40
68
  /**
41
- * True when every leaf value in `expected` is present and equal in `actual`.
42
- * Tolerates fields ProjectionLab adds on its own (e.g. generated IDs) but
43
- * catches dropped or changed values. Arrays must match in length and order.
69
+ * Refuse sectionData whose container shape does not match the section named.
70
+ * The expected container comes from the section's name, not from what the
71
+ * plan currently stores, so an event section held as {} still accepts the
72
+ * correct { events: [...] } replacement. One exception: when the stored
73
+ * section is itself a usable container that contradicts the table, a
74
+ * replacement in the stored shape is accepted too, so the tool never refuses
75
+ * to write back what it just read. An omitted value would delete the
76
+ * section, and a container of the wrong kind would store data ProjectionLab
77
+ * cannot read.
44
78
  */
79
+ export declare function assertSectionShape(section: string, planName: string, current: unknown, incoming: unknown): void;
45
80
  /**
46
81
  * True when every value in `expected` is present and equal in `actual`.
47
82
  * Objects may carry extra keys; arrays must match in length and order.
package/dist/plans.js CHANGED
@@ -10,34 +10,93 @@ export const PLAN_SECTIONS = [
10
10
  "montecarlo",
11
11
  "priorities",
12
12
  ];
13
+ /** Sections whose members are events addressed by id or name; the
14
+ * settings-like sections use projectionlab_update_plan_settings instead. */
15
+ export const EVENT_SECTIONS = [
16
+ "income",
17
+ "expenses",
18
+ "accounts",
19
+ "assets",
20
+ "milestones",
21
+ "priorities",
22
+ ];
23
+ /** The container each section holds, known from its name alone and not from
24
+ * what a plan happens to store: milestones is a direct array, the event
25
+ * sections are objects with an events array, and the settings-like sections
26
+ * are plain objects. Per DATA-MODEL.md sections 5.1 to 5.6 and the
27
+ * `variables`, `montecarlo` and `withdrawalStrategy` field trees. */
28
+ export const SECTION_CONTAINERS = {
29
+ income: "events",
30
+ expenses: "events",
31
+ accounts: "events",
32
+ assets: "events",
33
+ milestones: "array",
34
+ variables: "object",
35
+ withdrawalStrategy: "object",
36
+ montecarlo: "object",
37
+ priorities: "events",
38
+ };
13
39
  /**
14
- * Find a plan by identifier. Match priority: exact ID, exact name
15
- * (case-insensitive), then partial name. Exact matches win over partial so
16
- * plans with shared name prefixes can't be silently confused on write paths.
40
+ * Resolve one identifier against a list of { id, name } items. Match
41
+ * priority: exact ID, then exact name (case-insensitive), then name
42
+ * substring. Anything beyond a single match at the level reached is
43
+ * ambiguous: picking the first would silently target whichever item happens
44
+ * to come first, so the caller must refuse and ask for an exact name or ID.
17
45
  */
18
- export function findPlanIndex(plans, identifier) {
46
+ function matchOne(items, identifier) {
19
47
  if (!identifier.trim())
20
- return -1;
48
+ return { kind: "none" };
21
49
  const lower = identifier.toLowerCase();
22
- let exactName = -1;
23
- let partial = -1;
24
- for (let i = 0; i < plans.length; i++) {
25
- const plan = plans[i];
26
- if (!plan || typeof plan !== "object")
50
+ const exact = [];
51
+ const partial = [];
52
+ for (let i = 0; i < items.length; i++) {
53
+ const item = items[i];
54
+ if (!item || typeof item !== "object")
27
55
  continue;
28
- const obj = plan;
56
+ const obj = item;
29
57
  if (String(obj.id ?? "") === identifier)
30
- return i;
58
+ return { kind: "found", index: i };
31
59
  const name = String(obj.name ?? "").toLowerCase();
32
- if (name === lower && exactName === -1)
33
- exactName = i;
34
- else if (name.includes(lower) && partial === -1)
35
- partial = i;
60
+ if (name === lower)
61
+ exact.push(i);
62
+ else if (name.includes(lower))
63
+ partial.push(i);
64
+ }
65
+ if (exact.length === 1)
66
+ return { kind: "found", index: exact[0] };
67
+ if (exact.length > 1)
68
+ return { kind: "ambiguous", indexes: exact };
69
+ if (partial.length === 1)
70
+ return { kind: "found", index: partial[0] };
71
+ if (partial.length > 1)
72
+ return { kind: "ambiguous", indexes: partial };
73
+ return { kind: "none" };
74
+ }
75
+ function ambiguousMatchError(kind, identifier, items, indexes) {
76
+ const candidates = indexes
77
+ .map((i) => {
78
+ const obj = items[i];
79
+ return ` - "${obj.name ?? "(unnamed)"}" (ID: ${obj.id ?? "?"})`;
80
+ })
81
+ .join("\n");
82
+ return new ProjectionLabError("INVALID_INPUT", `More than one ${kind} matches "${identifier}"`, `Candidates:\n${candidates}\nSupply an exact name or one of the IDs`);
83
+ }
84
+ /**
85
+ * Index of the plan the identifier names, -1 when nothing matches. Throws
86
+ * INVALID_INPUT when several plans match the same way, so a read and the
87
+ * following write can never target different plans.
88
+ */
89
+ export function resolvePlanIndex(plans, identifier) {
90
+ const outcome = matchOne(plans, identifier);
91
+ if (outcome.kind === "ambiguous") {
92
+ throw ambiguousMatchError("plan", identifier, plans, outcome.indexes);
36
93
  }
37
- return exactName !== -1 ? exactName : partial;
94
+ return outcome.kind === "found" ? outcome.index : -1;
38
95
  }
39
- export function findPlan(plans, identifier) {
40
- const i = findPlanIndex(plans, identifier);
96
+ /** The plan the identifier names, or null when nothing matches. Refuses
97
+ * ambiguous identifiers the way resolvePlanIndex does. */
98
+ export function resolvePlan(plans, identifier) {
99
+ const i = resolvePlanIndex(plans, identifier);
41
100
  return i === -1 ? null : plans[i];
42
101
  }
43
102
  export function planNotFoundError(plans, identifier) {
@@ -87,27 +146,17 @@ function eventId(event) {
87
146
  }
88
147
  return undefined;
89
148
  }
90
- /** Index of the event matching `identifier`: exact id, then exact name (case-insensitive), then name substring. -1 if none. */
91
- export function findEventIndex(events, identifier) {
92
- if (!identifier.trim())
93
- return -1;
94
- const lower = identifier.toLowerCase();
95
- let exactName = -1;
96
- let partial = -1;
97
- for (let i = 0; i < events.length; i++) {
98
- const e = events[i];
99
- if (!e || typeof e !== "object")
100
- continue;
101
- const obj = e;
102
- if (String(obj.id ?? "") === identifier)
103
- return i;
104
- const name = String(obj.name ?? "").toLowerCase();
105
- if (name === lower && exactName === -1)
106
- exactName = i;
107
- else if (name.includes(lower) && partial === -1)
108
- partial = i;
149
+ /**
150
+ * Index of the event the identifier names: exact id, then exact name
151
+ * (case-insensitive), then name substring. -1 when nothing matches. Throws
152
+ * INVALID_INPUT when several events match the same way.
153
+ */
154
+ export function resolveEventIndex(events, identifier) {
155
+ const outcome = matchOne(events, identifier);
156
+ if (outcome.kind === "ambiguous") {
157
+ throw ambiguousMatchError("event", identifier, events, outcome.indexes);
109
158
  }
110
- return exactName !== -1 ? exactName : partial;
159
+ return outcome.kind === "found" ? outcome.index : -1;
111
160
  }
112
161
  export function eventLabel(event) {
113
162
  if (event && typeof event === "object") {
@@ -147,11 +196,59 @@ function sectionIsEventBased(section) {
147
196
  typeof section === "object" &&
148
197
  Array.isArray(section.events));
149
198
  }
199
+ function isPlainSectionObject(value) {
200
+ if (!value || typeof value !== "object" || Array.isArray(value))
201
+ return false;
202
+ const prototype = Object.getPrototypeOf(value);
203
+ return prototype === Object.prototype || prototype === null;
204
+ }
205
+ /** The container kind of a section value, or null when it is not a usable
206
+ * container (null, undefined, a primitive, or a non-plain object). */
207
+ export function sectionContainer(value) {
208
+ if (Array.isArray(value))
209
+ return "array";
210
+ if (isPlainSectionObject(value)) {
211
+ return Array.isArray(value.events) ? "events" : "object";
212
+ }
213
+ return null;
214
+ }
215
+ const CONTAINER_WORDS = {
216
+ array: "an array of events",
217
+ events: "an object with an events array",
218
+ object: "an object",
219
+ };
150
220
  /**
151
- * True when every leaf value in `expected` is present and equal in `actual`.
152
- * Tolerates fields ProjectionLab adds on its own (e.g. generated IDs) but
153
- * catches dropped or changed values. Arrays must match in length and order.
221
+ * Refuse sectionData whose container shape does not match the section named.
222
+ * The expected container comes from the section's name, not from what the
223
+ * plan currently stores, so an event section held as {} still accepts the
224
+ * correct { events: [...] } replacement. One exception: when the stored
225
+ * section is itself a usable container that contradicts the table, a
226
+ * replacement in the stored shape is accepted too, so the tool never refuses
227
+ * to write back what it just read. An omitted value would delete the
228
+ * section, and a container of the wrong kind would store data ProjectionLab
229
+ * cannot read.
154
230
  */
231
+ export function assertSectionShape(section, planName, current, incoming) {
232
+ const incomingShape = sectionContainer(incoming);
233
+ if (incomingShape === null) {
234
+ const got = incoming === undefined
235
+ ? "missing"
236
+ : incoming === null
237
+ ? "null"
238
+ : Array.isArray(incoming)
239
+ ? "an array"
240
+ : typeof incoming;
241
+ throw new ProjectionLabError("INVALID_INPUT", `sectionData for "${section}" of plan "${planName}" is ${got}; a section is ${CONTAINER_WORDS.array} or ${CONTAINER_WORDS.object}`, "Send the complete section in the same shape projectionlab_get_plan_section returns: an array for milestones, an object with an events array for event sections, an object for settings-like sections");
242
+ }
243
+ const expected = SECTION_CONTAINERS[section];
244
+ const accepted = new Set([expected]);
245
+ const currentShape = sectionContainer(current);
246
+ if (currentShape !== null && currentShape !== expected)
247
+ accepted.add(currentShape);
248
+ if (!accepted.has(incomingShape)) {
249
+ throw new ProjectionLabError("INVALID_INPUT", `sectionData for "${section}" of plan "${planName}" must be ${CONTAINER_WORDS[expected]}, which is how this section is stored; received ${CONTAINER_WORDS[incomingShape]}`, `Read the section with projectionlab_get_plan_section and send the replacement in the container shape the section name calls for`);
250
+ }
251
+ }
155
252
  /**
156
253
  * True when every value in `expected` is present and equal in `actual`.
157
254
  * Objects may carry extra keys; arrays must match in length and order.
package/dist/plans.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
package/dist/redact.d.ts CHANGED
@@ -1,6 +1,30 @@
1
1
  /** The stand-in every redacted value carries; shared with the diff engine. */
2
2
  export declare const REDACTED = "[REDACTED]";
3
3
  export declare function isSecretFieldName(name: string): boolean;
4
+ /**
5
+ * Dot paths (array indices joined with dots) where a secret-named key holds
6
+ * exactly the `REDACTED` sentinel. A payload built from a redacted read
7
+ * carries these; writing one back would store the sentinel as real data.
8
+ */
9
+ export declare function findRedactedSecretPaths(value: unknown, prefix?: string): string[];
10
+ /**
11
+ * Snapshot-only stand-in for the Plugin API key. Unlike REDACTED it is
12
+ * restorable: snapshot files hold it in place of the key, and every read
13
+ * path (SnapshotManager.get) puts the current config.apiKey back, so a
14
+ * rollback writes the real key while no snapshot file ever holds it.
15
+ */
16
+ export declare const SNAPSHOT_KEY_PLACEHOLDER = "[[PL_API_KEY]]";
17
+ /** Snapshot-write direction: every occurrence of the Plugin API key inside
18
+ * any string becomes SNAPSHOT_KEY_PLACEHOLDER. */
19
+ export declare function redactApiKeyToPlaceholder<T>(value: T): T;
20
+ /** Snapshot-read direction: SNAPSHOT_KEY_PLACEHOLDER inside any string
21
+ * becomes the current Plugin API key. Without a configured key the value is
22
+ * returned unchanged, so callers can detect placeholder-bound writes. */
23
+ export declare function restoreApiKeyFromPlaceholder<T>(value: T): T;
24
+ /** True when any string inside `value` contains `needle`. */
25
+ export declare function containsText(value: unknown, needle: string): boolean;
26
+ /** True when any string in `value` still holds SNAPSHOT_KEY_PLACEHOLDER. */
27
+ export declare function hasApiKeyPlaceholder(value: unknown): boolean;
4
28
  export interface RedactOptions {
5
29
  /**
6
30
  * Also redact any field whose *name* looks like a secret (apiKey, token,