pi-readseek 0.5.3 → 0.5.5

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/README.md CHANGED
@@ -48,7 +48,7 @@ optional (defaults shown):
48
48
  ```json
49
49
  {
50
50
  "readseek": {
51
- "replaceTools": [],
51
+ "replacedTools": [],
52
52
  "imageMode": "force",
53
53
  "syntaxValidation": "warn",
54
54
  "timeoutMs": 120000,
@@ -60,7 +60,7 @@ optional (defaults shown):
60
60
  }
61
61
  ```
62
62
 
63
- - **replaceTools:** built-in tool names to replace with their `readSeek_*` equivalents.
63
+ - **replacedTools:** built-in tool names to replace with their `readSeek_*` equivalents.
64
64
  Valid values are `"read"`, `"edit"`, `"write"`, and `"grep"`. For a
65
65
  readseek-only file surface, use `["read", "edit", "write", "grep"]`.
66
66
  - **imageMode:** image OCR/caption/object analysis in `readSeek_read`: `"force"`
package/index.ts CHANGED
@@ -45,7 +45,7 @@ export default function piReadSeekExtension(pi: ExtensionAPI): void {
45
45
 
46
46
  pi.on("session_start", (_event, ctx) => {
47
47
  const { settings, warnings } = resolveReadSeekJsonSettings();
48
- const replaceTools = new Set<string>(settings.replaceTools ?? []);
48
+ const replacedTools = new Set<string>(settings.replacedTools ?? []);
49
49
  const problems = warnings.map(formatSettingsWarning);
50
50
 
51
51
  const availability = readSeekBinaryAvailability();
@@ -61,7 +61,7 @@ export default function piReadSeekExtension(pi: ExtensionAPI): void {
61
61
  if (!availability.available) return;
62
62
 
63
63
  const activeTools = [...pi.getActiveTools(), ...READSEEK_TOOL_NAMES]
64
- .filter((name) => !replaceTools.has(name));
64
+ .filter((name) => !replacedTools.has(name));
65
65
  pi.setActiveTools([...new Set(activeTools)]);
66
66
  });
67
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-readseek",
3
- "version": "0.5.3",
3
+ "version": "0.5.5",
4
4
  "description": "Pi extension for readseek-backed hash-anchored read/edit/grep, structural code maps, structural search, and file exploration",
5
5
  "type": "module",
6
6
  "exports": {
@@ -19,7 +19,7 @@ const READSEEK_TOOL_REPLACEMENTS = {
19
19
  type ReadSeekReplacementTool = keyof typeof READSEEK_TOOL_REPLACEMENTS;
20
20
 
21
21
  interface ReadSeekJsonSettings {
22
- replaceTools?: ReadSeekReplacementTool[];
22
+ replacedTools?: ReadSeekReplacementTool[];
23
23
  imageMode?: ReadSeekImageAnalysisMode;
24
24
  syntaxValidation?: ReadSeekSyntaxValidationMode;
25
25
  timeoutMs?: number;
@@ -37,7 +37,7 @@ export interface ReadSeekSettingsResult {
37
37
  warnings: ReadSeekSettingsWarning[];
38
38
  }
39
39
 
40
- const READSEEK_KEYS = ["replaceTools", "imageMode", "syntaxValidation", "timeoutMs", "grep"];
40
+ const READSEEK_KEYS = ["replacedTools", "imageMode", "syntaxValidation", "timeoutMs", "grep"];
41
41
  const READSEEK_GREP_KEYS = ["maxLines", "maxBytes"];
42
42
 
43
43
  function globalSettingsPath(): string {
@@ -112,15 +112,15 @@ function readImageMode(
112
112
  return undefined;
113
113
  }
114
114
 
115
- function readReplaceTools(
115
+ function readReplacedTools(
116
116
  raw: Record<string, unknown>,
117
117
  source: string,
118
118
  warnings: ReadSeekSettingsWarning[],
119
119
  ): ReadSeekReplacementTool[] | undefined {
120
- if (!("replaceTools" in raw)) return undefined;
121
- const value = raw.replaceTools;
120
+ if (!("replacedTools" in raw)) return undefined;
121
+ const value = raw.replacedTools;
122
122
  if (!Array.isArray(value)) {
123
- warnings.push(invalid(source, "readseek.replaceTools"));
123
+ warnings.push(invalid(source, "readseek.replacedTools"));
124
124
  return undefined;
125
125
  }
126
126
 
@@ -129,7 +129,7 @@ function readReplaceTools(
129
129
  if (typeof tool === "string" && Object.hasOwn(READSEEK_TOOL_REPLACEMENTS, tool)) {
130
130
  tools.push(tool as ReadSeekReplacementTool);
131
131
  } else {
132
- warnings.push(invalid(source, `readseek.replaceTools[${index}]`));
132
+ warnings.push(invalid(source, `readseek.replacedTools[${index}]`));
133
133
  }
134
134
  });
135
135
  return tools;
@@ -143,8 +143,13 @@ function validateSettings(raw: unknown, source: string): ReadSeekSettingsResult
143
143
  return { settings, warnings };
144
144
  }
145
145
  if (!("readseek" in raw)) {
146
- if (Object.keys(raw).length > 0) {
147
- warnings.push({ source, path: "readseek", message: "Missing readseek section: every setting belongs under \"readseek\"" });
146
+ const misplaced = READSEEK_KEYS.filter((key) => key in raw);
147
+ if (misplaced.length > 0) {
148
+ warnings.push({
149
+ source,
150
+ path: misplaced[0],
151
+ message: `Readseek setting at top level: move ${misplaced.join(", ")} under "readseek"`,
152
+ });
148
153
  }
149
154
  return { settings, warnings };
150
155
  }
@@ -156,8 +161,8 @@ function validateSettings(raw: unknown, source: string): ReadSeekSettingsResult
156
161
  const section = raw.readseek;
157
162
  warnUnknownKeys(section, READSEEK_KEYS, "readseek", source, warnings);
158
163
 
159
- const replaceTools = readReplaceTools(section, source, warnings);
160
- if (replaceTools !== undefined) settings.replaceTools = replaceTools;
164
+ const replacedTools = readReplacedTools(section, source, warnings);
165
+ if (replacedTools !== undefined) settings.replacedTools = replacedTools;
161
166
 
162
167
  const imageMode = readImageMode(section, source, warnings);
163
168
  if (imageMode !== undefined) settings.imageMode = imageMode;