sift-light 1.0.3-1 → 1.0.3-2

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,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.3-2 — 2026-09-30
4
+
5
+ - Accept an empty `sourceCursor` placeholder outside `mode: "inspect"` by removing the key before mode validation, with the normalization disclosed in text and `details.requestNotes` ([#101](https://github.com/lightsifter/sift-light/issues/101)). Nonempty source continuation tokens still require inspection mode; empty inspection tokens and ordinary `cursor` validation retain their existing failure behavior.
6
+ - Apply the same normalization to Pi, OMP and MCP through the shared request boundary. This fixes the reported rejected request shape without attributing the placeholder to a particular model or host.
7
+
3
8
  ## 1.0.3-1 — 2026-09-30
4
9
 
5
10
  - Explain missing inspection paths explicitly while retaining the `source-unavailable` status for compatibility.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sift-light",
3
- "version": "1.0.3-1",
3
+ "version": "1.0.3-2",
4
4
  "description": "Context-efficient local search for files, documents, notes and logs across Pi, OMP and MCP clients",
5
5
  "keywords": [
6
6
  "ai-agent",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sift-light",
3
- "version": "1.0.3-1",
3
+ "version": "1.0.3-2",
4
4
  "description": "Require sift-light for conventional local searches while keeping development tools available.",
5
5
  "author": {
6
6
  "name": "baoer"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sift-light",
3
- "version": "1.0.3-1",
3
+ "version": "1.0.3-2",
4
4
  "description": "Require sift-light for conventional local searches while keeping development tools available.",
5
5
  "author": {
6
6
  "name": "baoer"
@@ -5,7 +5,7 @@
5
5
  "args": [
6
6
  "--yes",
7
7
  "--package",
8
- "sift-light-runtime@npm:sift-light@1.0.3-1",
8
+ "sift-light-runtime@npm:sift-light@1.0.3-2",
9
9
  "sift-light-mcp",
10
10
  "--stdio"
11
11
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sift-light",
3
- "version": "1.0.3-1",
3
+ "version": "1.0.3-2",
4
4
  "description": "Require sift-light for conventional local searches while keeping development tools available.",
5
5
  "author": {
6
6
  "name": "baoer"
@@ -13,7 +13,7 @@
13
13
  "args": [
14
14
  "--yes",
15
15
  "--package",
16
- "sift-light-runtime@npm:sift-light@1.0.3-1",
16
+ "sift-light-runtime@npm:sift-light@1.0.3-2",
17
17
  "sift-light-mcp",
18
18
  "--stdio"
19
19
  ],
@@ -1822,7 +1822,7 @@ function createCtagsStructureProvider(options = {}) {
1822
1822
  // package.json
1823
1823
  var package_default = {
1824
1824
  name: "sift-light",
1825
- version: "1.0.3-1",
1825
+ version: "1.0.3-2",
1826
1826
  description: "Context-efficient local search for files, documents, notes and logs across Pi, OMP and MCP clients",
1827
1827
  keywords: [
1828
1828
  "ai-agent",
@@ -11634,6 +11634,11 @@ function normalizeRequestAliases(request) {
11634
11634
  } else if (mode !== undefined) {
11635
11635
  input = { ...rest, mode };
11636
11636
  }
11637
+ if (input.mode !== "inspect" && input.sourceCursor === "") {
11638
+ const { sourceCursor: _sourceCursor, ...withoutSourceCursor } = input;
11639
+ input = withoutSourceCursor;
11640
+ notes.push("Empty sourceCursor is ignored outside mode=inspect.");
11641
+ }
11637
11642
  if (input.sourceCursor !== undefined && input.line !== undefined) {
11638
11643
  const { line: _line, ...withoutLine } = input;
11639
11644
  input = withoutLine;
@@ -21067,7 +21072,7 @@ var siftLightSchema = _Object_({
21067
21072
  })
21068
21073
  })),
21069
21074
  sourceCursor: Optional(String2({
21070
- description: "Missing-source continuation token. Copy nextRequest exactly: mode=inspect plus sourceCursor only. Same token replays the same page; changed or expired sources fail clearly."
21075
+ description: "Missing-source continuation token. Copy nextRequest exactly: mode=inspect plus sourceCursor only. Same token replays the same page; changed or expired sources fail clearly. An empty string outside mode=inspect is treated as an omitted placeholder and disclosed in request notes; nonempty tokens still require mode=inspect."
21071
21076
  })),
21072
21077
  symbol: Optional(String2({
21073
21078
  description: "Syntax name for outline/imports/tests; use a concrete source file and line to narrow repeated names."
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sift-light",
3
- "version": "1.0.3-1",
3
+ "version": "1.0.3-2",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "omp": {
@@ -7,7 +7,7 @@ import { URL as URL2 } from "node:url";
7
7
  // package.json
8
8
  var package_default = {
9
9
  name: "sift-light",
10
- version: "1.0.3-1",
10
+ version: "1.0.3-2",
11
11
  description: "Context-efficient local search for files, documents, notes and logs across Pi, OMP and MCP clients",
12
12
  keywords: [
13
13
  "ai-agent",
@@ -11666,6 +11666,11 @@ function normalizeRequestAliases(request) {
11666
11666
  } else if (mode !== undefined) {
11667
11667
  input = { ...rest, mode };
11668
11668
  }
11669
+ if (input.mode !== "inspect" && input.sourceCursor === "") {
11670
+ const { sourceCursor: _sourceCursor, ...withoutSourceCursor } = input;
11671
+ input = withoutSourceCursor;
11672
+ notes.push("Empty sourceCursor is ignored outside mode=inspect.");
11673
+ }
11669
11674
  if (input.sourceCursor !== undefined && input.line !== undefined) {
11670
11675
  const { line: _line, ...withoutLine } = input;
11671
11676
  input = withoutLine;
@@ -13781,7 +13786,7 @@ var siftLightSchema = Type.Object({
13781
13786
  })
13782
13787
  })),
13783
13788
  sourceCursor: Type.Optional(Type.String({
13784
- description: "Missing-source continuation token. Copy nextRequest exactly: mode=inspect plus sourceCursor only. Same token replays the same page; changed or expired sources fail clearly."
13789
+ description: "Missing-source continuation token. Copy nextRequest exactly: mode=inspect plus sourceCursor only. Same token replays the same page; changed or expired sources fail clearly. An empty string outside mode=inspect is treated as an omitted placeholder and disclosed in request notes; nonempty tokens still require mode=inspect."
13785
13790
  })),
13786
13791
  symbol: Type.Optional(Type.String({
13787
13792
  description: "Syntax name for outline/imports/tests; use a concrete source file and line to narrow repeated names."
@@ -39,6 +39,11 @@ export function normalizeRequestAliases(request: SiftLightRequest): NormalizedRe
39
39
  } else if (mode !== undefined) {
40
40
  input = { ...rest, mode };
41
41
  }
42
+ if (input.mode !== "inspect" && input.sourceCursor === "") {
43
+ const { sourceCursor: _sourceCursor, ...withoutSourceCursor } = input;
44
+ input = withoutSourceCursor;
45
+ notes.push("Empty sourceCursor is ignored outside mode=inspect.");
46
+ }
42
47
  if (input.sourceCursor !== undefined && input.line !== undefined) {
43
48
  const { line: _line, ...withoutLine } = input;
44
49
  input = withoutLine;
@@ -127,7 +127,7 @@ export const siftLightSchema = Type.Object({
127
127
  sourceCursor: Type.Optional(
128
128
  Type.String({
129
129
  description:
130
- "Missing-source continuation token. Copy nextRequest exactly: mode=inspect plus sourceCursor only. Same token replays the same page; changed or expired sources fail clearly.",
130
+ "Missing-source continuation token. Copy nextRequest exactly: mode=inspect plus sourceCursor only. Same token replays the same page; changed or expired sources fail clearly. An empty string outside mode=inspect is treated as an omitted placeholder and disclosed in request notes; nonempty tokens still require mode=inspect.",
131
131
  }),
132
132
  ),
133
133
  symbol: Type.Optional(