@sylphx/lookout 0.1.0 → 0.1.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/README.md +1 -1
- package/docs/BRAND_PUBLISH.md +5 -30
- package/docs/LOCAL_FIRST_FRONTIER.md +19 -0
- package/docs/POSITIONING.md +1 -1
- package/docs/PUBLISH.md +12 -15
- package/docs/TOOL_SURFACE.md +15 -8
- package/package.json +2 -2
- package/server.json +3 -3
- package/src/doctor.ts +1 -1
- package/src/engine.ts +2 -2
- package/src/mcp.ts +1 -1
package/README.md
CHANGED
|
@@ -95,7 +95,7 @@ const extracted = await lookout.extract({ url: 'https://example.com' })
|
|
|
95
95
|
| `web_search` | Public adapters (DuckDuckGo HTML + Wikipedia + npm registry + HN Algolia), rank fusion, query-term boost, host filters |
|
|
96
96
|
| `web_fetch` | SSRF-safe HTTP(S) fetch, redirects, size limits, cite spans |
|
|
97
97
|
| `web_extract` | Title, description, JSON-LD, tables, spans from HTML/URL |
|
|
98
|
-
| `web_cache` | Local disk cache query/stats/clear/prune (`LOOKOUT_CACHE_DIR`, optional max age) |
|
|
98
|
+
| `web_cache` (advanced) | Local disk cache query/stats/clear/prune (`LOOKOUT_CACHE_DIR`, optional max age) |
|
|
99
99
|
| `web_crawl` *(advanced)* | Same-origin, depth-limited crawl (not a full-site crawler) |
|
|
100
100
|
| `web_research` *(advanced)* | Search then fetch/extract top pages with citeable excerpts |
|
|
101
101
|
|
package/docs/BRAND_PUBLISH.md
CHANGED
|
@@ -1,36 +1,11 @@
|
|
|
1
|
-
# Lookout — brand npm publish
|
|
1
|
+
# Lookout — brand npm publish
|
|
2
2
|
|
|
3
|
-
**Publish authority:** this repository only
|
|
3
|
+
**Publish authority:** this repository only.
|
|
4
4
|
|
|
5
5
|
| Field | Value |
|
|
6
6
|
| --- | --- |
|
|
7
7
|
| Brand | **Lookout** |
|
|
8
|
-
|
|
|
9
|
-
|
|
|
10
|
-
| Brand bin | `lookout` |
|
|
11
|
-
| Marketplace title | Lookout (`server.json`) |
|
|
8
|
+
| Canonical npm id | `@sylphx/lookout` |
|
|
9
|
+
| Transitional id | _(none — shipped as brand from day one)_ |
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
1. Ship/publish `@sylphx/lookout` from this repo (existing CI/release train).
|
|
16
|
-
2. Optional second publish of `@sylphx/lookout` **from this same repo** (same artifacts, renamed package.json at pack time).
|
|
17
|
-
3. Never publish brand packages from any other repository.
|
|
18
|
-
|
|
19
|
-
## Dry-run (no npm auth required)
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
# Transitional package as configured
|
|
23
|
-
npm pack --dry-run
|
|
24
|
-
# Or product-specific brand pack plan script when present:
|
|
25
|
-
# bun scripts/brand-pack-plan.ts
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Blockers for live brand publish
|
|
29
|
-
|
|
30
|
-
- npm automation token / 2FA for `@sylphx` scope
|
|
31
|
-
- Changeset/version alignment with transitional package
|
|
32
|
-
- Registry readback proof after publish
|
|
33
|
-
|
|
34
|
-
## Authority
|
|
35
|
-
|
|
36
|
-
Publish and brand packages only from **this repository**. No central Instruments monorepo.
|
|
11
|
+
No dual-name expand required.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Local-first frontier
|
|
2
|
+
|
|
3
|
+
## Principles
|
|
4
|
+
|
|
5
|
+
1. **Less dependency** — prefer OS/Rust binaries over heavy npm ML
|
|
6
|
+
2. **Zero config** — works without API keys
|
|
7
|
+
3. **Local first, cloud optional**
|
|
8
|
+
4. **Speed / size / performance**
|
|
9
|
+
5. **Rust first** where engines exist
|
|
10
|
+
|
|
11
|
+
See product README + EVIDENCE_CONTRACT for surfaces.
|
|
12
|
+
|
|
13
|
+
## Non-negotiable
|
|
14
|
+
|
|
15
|
+
1. Zero API key for default path
|
|
16
|
+
2. Prefer Rust native MCP when present
|
|
17
|
+
3. Few tools; primary path documented in TOOL_SURFACE.md
|
|
18
|
+
4. Cloud / LLM only optional and non-authority
|
|
19
|
+
5. Product SSOT is this repository only (no instruments monorepo)
|
package/docs/POSITIONING.md
CHANGED
package/docs/PUBLISH.md
CHANGED
|
@@ -2,22 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
| Field | Value |
|
|
4
4
|
| --- | --- |
|
|
5
|
-
|
|
|
6
|
-
|
|
|
7
|
-
|
|
|
8
|
-
|
|
|
5
|
+
| Transitional npm | `@sylphx/lookout` |
|
|
6
|
+
| Brand npm | `— (canonical)` |
|
|
7
|
+
| Version | `0.1.1` |
|
|
8
|
+
| Registry | **live** (dual expand–contract where brand ≠ transitional) |
|
|
9
|
+
| Auth | GitHub org `NPM_TOKEN` via publish workflows |
|
|
9
10
|
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
- CI/tests/release-gate green on tip
|
|
13
|
-
- `npm pack --dry-run` produces a valid TS package (~23KB)
|
|
14
|
-
- Live `npm publish` blocked only by missing `@sylphx` registry auth in this environment
|
|
15
|
-
|
|
16
|
-
## Install until publish lands
|
|
11
|
+
## Install
|
|
17
12
|
|
|
18
13
|
```bash
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
# preferred brand
|
|
15
|
+
npm i -g @sylphx/lookout
|
|
16
|
+
# transitional still valid during expand
|
|
17
|
+
npm i -g @sylphx/lookout
|
|
23
18
|
```
|
|
19
|
+
|
|
20
|
+
Workflows: `publish-npm-package.yml`, `publish-brand-alias.yml`.
|
package/docs/TOOL_SURFACE.md
CHANGED
|
@@ -1,19 +1,26 @@
|
|
|
1
|
-
# Tool surface —
|
|
1
|
+
# Tool surface — Lookout
|
|
2
2
|
|
|
3
|
-
Policy: **few, powerful, obvious** tools.
|
|
3
|
+
Policy: **few, powerful, obvious** tools.
|
|
4
|
+
|
|
5
|
+
## Primary
|
|
4
6
|
|
|
5
7
|
| Tool | Role |
|
|
6
8
|
| --- | --- |
|
|
7
|
-
| `web_search` | Local-first public search adapters |
|
|
9
|
+
| `web_search` | Local-first public search adapters (no paid key required) |
|
|
8
10
|
| `web_fetch` | SSRF-aware fetch |
|
|
9
11
|
| `web_extract` | Main-content extract with citeable spans |
|
|
12
|
+
|
|
13
|
+
## Advanced
|
|
14
|
+
|
|
15
|
+
| Tool | Role |
|
|
16
|
+
| --- | --- |
|
|
10
17
|
| `web_cache` | Cache stats/control |
|
|
11
|
-
| `web_crawl` |
|
|
12
|
-
| `web_research` |
|
|
18
|
+
| `web_crawl` | Multi-page crawl |
|
|
19
|
+
| `web_research` | Multi-step research orchestration |
|
|
13
20
|
|
|
14
21
|
## Rules
|
|
15
22
|
|
|
16
|
-
1.
|
|
23
|
+
1. Default agent path: **search → fetch → extract**.
|
|
17
24
|
2. Advanced tools must be labeled advanced in README/skill.
|
|
18
|
-
3.
|
|
19
|
-
4.
|
|
25
|
+
3. No paid API key required for primary path.
|
|
26
|
+
4. Local-first means process runs locally; network is inherent to web.
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sylphx/lookout",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "Lookout
|
|
5
|
+
"description": "Lookout — local-first web instrument for agents. Search, fetch, extract, cache with citeable excerpts. No required API key. SDK · CLI · MCP.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"bin": {
|
package/server.json
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.SylphxAI/lookout",
|
|
4
4
|
"title": "Lookout",
|
|
5
|
-
"description": "Local-first web instrument for agents: search, fetch, extract, cache. No required API key. SDK
|
|
5
|
+
"description": "Local-first web instrument for agents: search, fetch, extract, cache. No required API key. SDK \u00b7 CLI \u00b7 MCP.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "https://github.com/SylphxAI/lookout",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "0.1.
|
|
10
|
+
"version": "0.1.1",
|
|
11
11
|
"websiteUrl": "https://github.com/SylphxAI/lookout#readme",
|
|
12
12
|
"packages": [
|
|
13
13
|
{
|
|
14
14
|
"registryType": "npm",
|
|
15
15
|
"identifier": "@sylphx/lookout",
|
|
16
|
-
"version": "0.1.
|
|
16
|
+
"version": "0.1.1",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
|
19
19
|
}
|
package/src/doctor.ts
CHANGED
|
@@ -14,7 +14,7 @@ export function runDoctor(version = '0.1.0'): DoctorReport {
|
|
|
14
14
|
const checks: DoctorReport['checks'] = [];
|
|
15
15
|
checks.push({
|
|
16
16
|
name: 'core_tools',
|
|
17
|
-
status: CORE_TOOLS.length ===
|
|
17
|
+
status: CORE_TOOLS.length === 3 ? 'ok' : 'fail',
|
|
18
18
|
message: `core: ${CORE_TOOLS.join(', ')}; advanced: ${ADVANCED_TOOLS.join(', ')}`,
|
|
19
19
|
});
|
|
20
20
|
const cacheDir = defaultCacheDir();
|
package/src/engine.ts
CHANGED
|
@@ -423,5 +423,5 @@ export class LookoutEngine {
|
|
|
423
423
|
}
|
|
424
424
|
}
|
|
425
425
|
|
|
426
|
-
export const CORE_TOOLS = ['web_search', 'web_fetch', 'web_extract'
|
|
427
|
-
export const ADVANCED_TOOLS = ['web_crawl', 'web_research'] as const;
|
|
426
|
+
export const CORE_TOOLS = ['web_search', 'web_fetch', 'web_extract'] as const;
|
|
427
|
+
export const ADVANCED_TOOLS = ['web_cache', 'web_crawl', 'web_research'] as const;
|
package/src/mcp.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Lookout MCP server — stdio tools:
|
|
3
|
-
* core: web_search, web_fetch, web_extract,
|
|
3
|
+
* core: web_search, web_fetch, web_extract; advanced: web_cache, web_crawl, web_research
|
|
4
4
|
* advanced: web_crawl, web_research
|
|
5
5
|
*/
|
|
6
6
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|