squick 1.0.1__py3-none-win_amd64.whl
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.
- squick/__init__.py +79 -0
- squick/__main__.py +7 -0
- squick/_binary/dictionaries/components/html-semantic.yaml +12 -0
- squick/_binary/dictionaries/components/ui-patterns.yaml +25 -0
- squick/_binary/dictionaries/files/node.yaml +21 -0
- squick/_binary/dictionaries/files/python.yaml +19 -0
- squick/_binary/dictionaries/frameworks/django.yaml +10 -0
- squick/_binary/dictionaries/frameworks/express.yaml +22 -0
- squick/_binary/dictionaries/frameworks/fastapi.yaml +15 -0
- squick/_binary/dictionaries/frameworks/flask.yaml +13 -0
- squick/_binary/dictionaries/frameworks/nextjs.yaml +42 -0
- squick/_binary/dictionaries/frameworks/payload.yaml +14 -0
- squick/_binary/dictionaries/frameworks/react.yaml +11 -0
- squick/_binary/dictionaries/frameworks/sanity.yaml +16 -0
- squick/_binary/dictionaries/frameworks/strapi.yaml +29 -0
- squick/_binary/dictionaries/frameworks/wordpress.yaml +20 -0
- squick/_binary/dictionaries/naming/python.yaml +51 -0
- squick/_binary/dictionaries/naming/suffixes.yaml +17 -0
- squick/_binary/dictionaries/naming/verbs.yaml +20 -0
- squick/_binary/dictionaries/routes/web-common.yaml +28 -0
- squick/_binary/squick.exe +0 -0
- squick-1.0.1.dist-info/METADATA +83 -0
- squick-1.0.1.dist-info/RECORD +26 -0
- squick-1.0.1.dist-info/WHEEL +5 -0
- squick-1.0.1.dist-info/entry_points.txt +2 -0
- squick-1.0.1.dist-info/top_level.txt +1 -0
squick/__init__.py
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Copyright 2026 Horizon LLC
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""Squick CLI wrapper.
|
|
4
|
+
|
|
5
|
+
Bundles a platform-specific ``squick`` binary inside the wheel and exposes
|
|
6
|
+
it both as a ``squick`` console script and a thin Python API. The wheel
|
|
7
|
+
is platform-specific: ``pip`` picks the right one for the host.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import os
|
|
13
|
+
import subprocess
|
|
14
|
+
import sys
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Iterable
|
|
17
|
+
|
|
18
|
+
__all__ = ["main", "scan", "binary_path", "BinaryNotFoundError"]
|
|
19
|
+
|
|
20
|
+
_BINARY_NAME = "squick.exe" if sys.platform == "win32" else "squick"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class BinaryNotFoundError(RuntimeError):
|
|
24
|
+
"""Raised when the bundled squick binary cannot be located."""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def binary_path() -> str:
|
|
28
|
+
"""Return the absolute path to the bundled squick binary."""
|
|
29
|
+
|
|
30
|
+
pkg_dir = Path(__file__).resolve().parent
|
|
31
|
+
candidate = pkg_dir / "_binary" / _BINARY_NAME
|
|
32
|
+
if candidate.is_file():
|
|
33
|
+
return str(candidate)
|
|
34
|
+
override = os.environ.get("SQUICK_BINARY")
|
|
35
|
+
if override and Path(override).is_file():
|
|
36
|
+
return override
|
|
37
|
+
raise BinaryNotFoundError(
|
|
38
|
+
f"squick binary not found at {candidate}. "
|
|
39
|
+
"This usually indicates a broken installation; reinstall the package "
|
|
40
|
+
"or set SQUICK_BINARY to point at a valid squick executable."
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def main() -> None:
|
|
45
|
+
"""Console-script entrypoint. Execs the binary with the caller's argv."""
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
binary = binary_path()
|
|
49
|
+
except BinaryNotFoundError as exc:
|
|
50
|
+
print(f"squick: {exc}", file=sys.stderr)
|
|
51
|
+
sys.exit(1)
|
|
52
|
+
completed = subprocess.run([binary, *sys.argv[1:]], check=False)
|
|
53
|
+
sys.exit(completed.returncode)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def scan(
|
|
57
|
+
root: str | os.PathLike[str] = ".",
|
|
58
|
+
*,
|
|
59
|
+
extra_args: Iterable[str] | None = None,
|
|
60
|
+
capture: bool = False,
|
|
61
|
+
) -> str:
|
|
62
|
+
"""Run ``squick scan`` against ``root`` and return the context markdown.
|
|
63
|
+
|
|
64
|
+
By default the binary is invoked in pass-through mode so it writes
|
|
65
|
+
``.squick/context.md`` next to the project; the returned string is
|
|
66
|
+
the contents of that file. Pass ``capture=True`` to return what the
|
|
67
|
+
binary prints to stdout instead (useful when overriding ``--out -``).
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
binary = binary_path()
|
|
71
|
+
args: list[str] = [binary, "scan", str(root)]
|
|
72
|
+
if extra_args:
|
|
73
|
+
args.extend(extra_args)
|
|
74
|
+
if capture:
|
|
75
|
+
result = subprocess.run(args, check=True, capture_output=True, text=True)
|
|
76
|
+
return result.stdout
|
|
77
|
+
subprocess.run(args, check=True)
|
|
78
|
+
context_md = Path(root) / ".squick" / "context.md"
|
|
79
|
+
return context_md.read_text(encoding="utf-8") if context_md.is_file() else ""
|
squick/__main__.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name: components/html-semantic
|
|
2
|
+
description: HTML5 semantic tags whose presence implies a UI region.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "nav", match: component, tag: navigation, confidence: high }
|
|
5
|
+
- { pattern: "header", match: component, tag: page-header, confidence: high }
|
|
6
|
+
- { pattern: "footer", match: component, tag: page-footer, confidence: high }
|
|
7
|
+
- { pattern: "main", match: component, tag: main-content, confidence: high }
|
|
8
|
+
- { pattern: "aside", match: component, tag: sidebar, confidence: high }
|
|
9
|
+
- { pattern: "article", match: component, tag: article-region, confidence: high }
|
|
10
|
+
- { pattern: "section", match: component, tag: section-region, confidence: medium }
|
|
11
|
+
- { pattern: "form", match: component, tag: form-region, confidence: high }
|
|
12
|
+
- { pattern: "dialog", match: component, tag: dialog-region, confidence: high }
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: components/ui-patterns
|
|
2
|
+
description: Conventional UI component names. Match against component or filename.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "navbar", kind: glob, match: component, tag: navigation, confidence: high }
|
|
5
|
+
- { pattern: "*navbar*", kind: glob, match: component, tag: navigation, confidence: high }
|
|
6
|
+
- { pattern: "*sidebar*", kind: glob, match: component, tag: sidebar, confidence: high }
|
|
7
|
+
- { pattern: "*header*", kind: glob, match: component, tag: page-header, confidence: medium }
|
|
8
|
+
- { pattern: "*footer*", kind: glob, match: component, tag: page-footer, confidence: medium }
|
|
9
|
+
- { pattern: "*hero*", kind: glob, match: component, tag: hero-section, confidence: high }
|
|
10
|
+
- { pattern: "*modal*", kind: glob, match: component, tag: modal, confidence: high }
|
|
11
|
+
- { pattern: "*dialog*", kind: glob, match: component, tag: dialog, confidence: high }
|
|
12
|
+
- { pattern: "*dropdown*", kind: glob, match: component, tag: dropdown, confidence: high }
|
|
13
|
+
- { pattern: "*accordion*", kind: glob, match: component, tag: accordion, confidence: high }
|
|
14
|
+
- { pattern: "*breadcrumb*", kind: glob, match: component, tag: breadcrumb, confidence: high }
|
|
15
|
+
- { pattern: "*pagination*", kind: glob, match: component, tag: pagination, confidence: high }
|
|
16
|
+
- { pattern: "*tabs*", kind: glob, match: component, tag: tabs, confidence: medium }
|
|
17
|
+
- { pattern: "*toast*", kind: glob, match: component, tag: toast, confidence: high }
|
|
18
|
+
- { pattern: "*tooltip*", kind: glob, match: component, tag: tooltip, confidence: high }
|
|
19
|
+
- { pattern: "*card*", kind: glob, match: component, tag: card, confidence: medium }
|
|
20
|
+
- { pattern: "*button*", kind: glob, match: component, tag: button, confidence: medium }
|
|
21
|
+
- { pattern: "*spinner*", kind: glob, match: component, tag: spinner, confidence: high }
|
|
22
|
+
- { pattern: "*loader*", kind: glob, match: component, tag: spinner, confidence: medium }
|
|
23
|
+
- { pattern: "*contactform*", kind: glob, match: component, tag: contact-form, confidence: high }
|
|
24
|
+
- { pattern: "*loginform*", kind: glob, match: component, tag: login-form, confidence: high }
|
|
25
|
+
- { pattern: "*signupform*", kind: glob, match: component, tag: signup-form, confidence: high }
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: files/node
|
|
2
|
+
description: Node.js / TypeScript file roles signalled by canonical filenames.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "index.js", match: filename, tag: entrypoint, confidence: high }
|
|
5
|
+
- { pattern: "index.ts", match: filename, tag: entrypoint, confidence: high }
|
|
6
|
+
- { pattern: "index.tsx", match: filename, tag: entrypoint, confidence: medium }
|
|
7
|
+
- { pattern: "main.js", match: filename, tag: entrypoint, confidence: high }
|
|
8
|
+
- { pattern: "main.ts", match: filename, tag: entrypoint, confidence: high }
|
|
9
|
+
- { pattern: "server.js", match: filename, tag: server-entrypoint, confidence: high }
|
|
10
|
+
- { pattern: "server.ts", match: filename, tag: server-entrypoint, confidence: high }
|
|
11
|
+
- { pattern: "app.js", match: filename, tag: app-entrypoint, confidence: high }
|
|
12
|
+
- { pattern: "app.ts", match: filename, tag: app-entrypoint, confidence: high }
|
|
13
|
+
- { pattern: "package.json", match: filename, tag: package-manifest, confidence: high }
|
|
14
|
+
- { pattern: "tsconfig.json", match: filename, tag: build-config, confidence: high }
|
|
15
|
+
- { pattern: "*.config.js", kind: glob, match: filename, tag: build-config, confidence: high }
|
|
16
|
+
- { pattern: "*.config.ts", kind: glob, match: filename, tag: build-config, confidence: high }
|
|
17
|
+
- { pattern: "*.test.ts", kind: glob, match: filename, tag: unit-test, confidence: high }
|
|
18
|
+
- { pattern: "*.test.js", kind: glob, match: filename, tag: unit-test, confidence: high }
|
|
19
|
+
- { pattern: "*.spec.ts", kind: glob, match: filename, tag: unit-test, confidence: high }
|
|
20
|
+
- { pattern: "*.spec.js", kind: glob, match: filename, tag: unit-test, confidence: high }
|
|
21
|
+
- { pattern: "*.d.ts", kind: glob, match: filename, tag: type-declaration, confidence: high }
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: files/python
|
|
2
|
+
description: Python file roles signalled by canonical filenames.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "main.py", match: filename, tag: entrypoint, confidence: high, note: "Conventional script entry point." }
|
|
5
|
+
- { pattern: "__main__.py", match: filename, tag: entrypoint, confidence: high }
|
|
6
|
+
- { pattern: "__init__.py", match: filename, tag: package-init, confidence: high }
|
|
7
|
+
- { pattern: "setup.py", match: filename, tag: build-config, confidence: high }
|
|
8
|
+
- { pattern: "pyproject.toml", match: filename, tag: build-config, confidence: high }
|
|
9
|
+
- { pattern: "conftest.py", match: filename, tag: test-config, confidence: high }
|
|
10
|
+
- { pattern: "manage.py", match: filename, tag: django-cli, confidence: high }
|
|
11
|
+
- { pattern: "asgi.py", match: filename, tag: asgi-entrypoint, confidence: high }
|
|
12
|
+
- { pattern: "wsgi.py", match: filename, tag: wsgi-entrypoint, confidence: high }
|
|
13
|
+
- { pattern: "models.py", match: filename, tag: data-models, confidence: high }
|
|
14
|
+
- { pattern: "views.py", match: filename, tag: views-handlers, confidence: high }
|
|
15
|
+
- { pattern: "urls.py", match: filename, tag: url-routing, confidence: high }
|
|
16
|
+
- { pattern: "admin.py", match: filename, tag: admin-config, confidence: high }
|
|
17
|
+
- { pattern: "serializers.py", match: filename, tag: data-serializers, confidence: high }
|
|
18
|
+
- { pattern: "schemas.py", match: filename, tag: data-schemas, confidence: high }
|
|
19
|
+
- { pattern: "tasks.py", match: filename, tag: background-tasks, confidence: medium }
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
name: frameworks/django
|
|
2
|
+
description: Django markers — imports and conventional layout.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "django", kind: glob, match: import, tag: framework-django, confidence: high }
|
|
5
|
+
- { pattern: "django.*", kind: glob, match: import, tag: framework-django, confidence: high }
|
|
6
|
+
- { pattern: "rest_framework", kind: glob, match: import, tag: framework-drf, confidence: high }
|
|
7
|
+
- { pattern: "rest_framework.*", kind: glob, match: import, tag: framework-drf, confidence: high }
|
|
8
|
+
- { pattern: "migrations", match: path-segment, tag: db-migrations, confidence: high }
|
|
9
|
+
- { pattern: "templates", match: path-segment, tag: html-templates, confidence: high }
|
|
10
|
+
- { pattern: "static", match: path-segment, tag: static-assets, confidence: medium }
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: frameworks/express
|
|
2
|
+
description: Express.js and Koa conventions.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "express", match: import, tag: framework-express, confidence: high }
|
|
5
|
+
- { pattern: "@express/*", kind: glob, match: import, tag: framework-express, confidence: high }
|
|
6
|
+
- { pattern: "koa", match: import, tag: framework-koa, confidence: high }
|
|
7
|
+
- { pattern: "@koa/*", kind: glob, match: import, tag: framework-koa, confidence: high }
|
|
8
|
+
- { pattern: "fastify", match: import, tag: framework-fastify, confidence: high }
|
|
9
|
+
- { pattern: "@fastify/*", kind: glob, match: import, tag: framework-fastify, confidence: high }
|
|
10
|
+
- { pattern: "hapi", match: import, tag: framework-hapi, confidence: high }
|
|
11
|
+
- { pattern: "@hapi/*", kind: glob, match: import, tag: framework-hapi, confidence: high }
|
|
12
|
+
- { pattern: "@nestjs/*", kind: glob, match: import, tag: framework-nestjs, confidence: high }
|
|
13
|
+
|
|
14
|
+
- { pattern: "routes", match: path-segment, tag: api-routes, confidence: medium }
|
|
15
|
+
- { pattern: "middleware", match: path-segment, tag: middleware-layer, confidence: high }
|
|
16
|
+
- { pattern: "middlewares", match: path-segment, tag: middleware-layer, confidence: high }
|
|
17
|
+
- { pattern: "controllers", match: path-segment, tag: controllers, confidence: high }
|
|
18
|
+
|
|
19
|
+
- { pattern: "server.js", match: filename, tag: server-entrypoint, confidence: high }
|
|
20
|
+
- { pattern: "server.ts", match: filename, tag: server-entrypoint, confidence: high }
|
|
21
|
+
- { pattern: "app.module.ts", match: filename, tag: nestjs-root-module, confidence: high }
|
|
22
|
+
- { pattern: "main.ts", match: filename, tag: nestjs-bootstrap, confidence: medium, note: "NestJS bootstrap file." }
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
name: frameworks/fastapi
|
|
2
|
+
description: FastAPI conventions and entry points.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "fastapi", match: import, tag: framework-fastapi, confidence: high }
|
|
5
|
+
- { pattern: "fastapi.*", kind: glob, match: import, tag: framework-fastapi, confidence: high }
|
|
6
|
+
- { pattern: "starlette", match: import, tag: framework-starlette, confidence: high }
|
|
7
|
+
- { pattern: "starlette.*", kind: glob, match: import, tag: framework-starlette, confidence: high }
|
|
8
|
+
|
|
9
|
+
- { pattern: "routers", match: path-segment, tag: fastapi-routers, confidence: high }
|
|
10
|
+
- { pattern: "dependencies", match: path-segment, tag: fastapi-dependencies, confidence: medium }
|
|
11
|
+
|
|
12
|
+
- { pattern: "main.py", match: filename, tag: fastapi-entrypoint, confidence: medium, note: "Conventional FastAPI app entrypoint." }
|
|
13
|
+
- { pattern: "app.py", match: filename, tag: fastapi-entrypoint, confidence: medium }
|
|
14
|
+
- { pattern: "deps.py", match: filename, tag: fastapi-dependencies, confidence: medium }
|
|
15
|
+
- { pattern: "schemas.py", match: filename, tag: fastapi-pydantic-schemas, confidence: medium }
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
name: frameworks/flask
|
|
2
|
+
description: Flask conventions and blueprint layout.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "flask", match: import, tag: framework-flask, confidence: high }
|
|
5
|
+
- { pattern: "flask.*", kind: glob, match: import, tag: framework-flask, confidence: high }
|
|
6
|
+
- { pattern: "flask_*", kind: glob, match: import, tag: framework-flask-extension, confidence: high }
|
|
7
|
+
|
|
8
|
+
- { pattern: "blueprints", match: path-segment, tag: flask-blueprints, confidence: high }
|
|
9
|
+
|
|
10
|
+
- { pattern: "app.py", match: filename, tag: flask-app, confidence: medium }
|
|
11
|
+
- { pattern: "wsgi.py", match: filename, tag: wsgi-entrypoint, confidence: high }
|
|
12
|
+
- { pattern: "routes.py", match: filename, tag: flask-routes, confidence: medium }
|
|
13
|
+
- { pattern: "extensions.py", match: filename, tag: flask-extensions, confidence: medium }
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: frameworks/nextjs
|
|
2
|
+
description: Next.js App Router and Pages Router conventions.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "next", match: import, tag: framework-nextjs, confidence: high }
|
|
5
|
+
- { pattern: "next/*", kind: glob, match: import, tag: framework-nextjs, confidence: high }
|
|
6
|
+
- { pattern: "next-intl", match: import, tag: nextjs-i18n, confidence: high }
|
|
7
|
+
- { pattern: "next-intl/*", kind: glob, match: import, tag: nextjs-i18n, confidence: high }
|
|
8
|
+
|
|
9
|
+
- { pattern: "app", match: path-segment, tag: nextjs-app-router, confidence: high }
|
|
10
|
+
- { pattern: "pages", match: path-segment, tag: nextjs-pages-router, confidence: medium }
|
|
11
|
+
|
|
12
|
+
- { pattern: "page.tsx", match: filename, tag: nextjs-route-page, confidence: high, note: "App Router page component." }
|
|
13
|
+
- { pattern: "page.jsx", match: filename, tag: nextjs-route-page, confidence: high }
|
|
14
|
+
- { pattern: "page.ts", match: filename, tag: nextjs-route-page, confidence: high }
|
|
15
|
+
- { pattern: "page.js", match: filename, tag: nextjs-route-page, confidence: high }
|
|
16
|
+
- { pattern: "layout.tsx", match: filename, tag: nextjs-layout, confidence: high }
|
|
17
|
+
- { pattern: "layout.jsx", match: filename, tag: nextjs-layout, confidence: high }
|
|
18
|
+
- { pattern: "layout.ts", match: filename, tag: nextjs-layout, confidence: high }
|
|
19
|
+
- { pattern: "layout.js", match: filename, tag: nextjs-layout, confidence: high }
|
|
20
|
+
- { pattern: "loading.tsx", match: filename, tag: nextjs-loading-ui, confidence: high }
|
|
21
|
+
- { pattern: "loading.jsx", match: filename, tag: nextjs-loading-ui, confidence: high }
|
|
22
|
+
- { pattern: "error.tsx", match: filename, tag: nextjs-error-boundary, confidence: high }
|
|
23
|
+
- { pattern: "error.jsx", match: filename, tag: nextjs-error-boundary, confidence: high }
|
|
24
|
+
- { pattern: "not-found.tsx", match: filename, tag: nextjs-not-found, confidence: high }
|
|
25
|
+
- { pattern: "not-found.jsx", match: filename, tag: nextjs-not-found, confidence: high }
|
|
26
|
+
- { pattern: "route.ts", match: filename, tag: nextjs-route-handler, confidence: high, note: "App Router API route handler." }
|
|
27
|
+
- { pattern: "route.js", match: filename, tag: nextjs-route-handler, confidence: high }
|
|
28
|
+
- { pattern: "middleware.ts", match: filename, tag: nextjs-middleware, confidence: high }
|
|
29
|
+
- { pattern: "middleware.js", match: filename, tag: nextjs-middleware, confidence: high }
|
|
30
|
+
- { pattern: "next.config.ts", match: filename, tag: nextjs-config, confidence: high }
|
|
31
|
+
- { pattern: "next.config.js", match: filename, tag: nextjs-config, confidence: high }
|
|
32
|
+
- { pattern: "next.config.mjs", match: filename, tag: nextjs-config, confidence: high }
|
|
33
|
+
|
|
34
|
+
- { pattern: "^GET$", kind: regex, match: symbol-name, tag: http-handler-get, confidence: high }
|
|
35
|
+
- { pattern: "^POST$", kind: regex, match: symbol-name, tag: http-handler-post, confidence: high }
|
|
36
|
+
- { pattern: "^PUT$", kind: regex, match: symbol-name, tag: http-handler-put, confidence: high }
|
|
37
|
+
- { pattern: "^DELETE$", kind: regex, match: symbol-name, tag: http-handler-delete, confidence: high }
|
|
38
|
+
- { pattern: "^PATCH$", kind: regex, match: symbol-name, tag: http-handler-patch, confidence: high }
|
|
39
|
+
- { pattern: "^HEAD$", kind: regex, match: symbol-name, tag: http-handler-head, confidence: high }
|
|
40
|
+
- { pattern: "^OPTIONS$", kind: regex, match: symbol-name, tag: http-handler-options, confidence: high }
|
|
41
|
+
- { pattern: "^generateMetadata$", kind: regex, match: symbol-name, tag: nextjs-metadata, confidence: high }
|
|
42
|
+
- { pattern: "^generateStaticParams$", kind: regex, match: symbol-name, tag: nextjs-static-params, confidence: high }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: frameworks/payload
|
|
2
|
+
description: Payload CMS conventions.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "payload", match: import, tag: framework-payload, confidence: high }
|
|
5
|
+
- { pattern: "@payloadcms/*", kind: glob, match: import, tag: framework-payload, confidence: high }
|
|
6
|
+
|
|
7
|
+
- { pattern: "payload.config.ts", match: filename, tag: payload-config, confidence: high }
|
|
8
|
+
- { pattern: "payload.config.js", match: filename, tag: payload-config, confidence: high }
|
|
9
|
+
- { pattern: "payload-types.ts", match: filename, tag: payload-generated-types, confidence: high }
|
|
10
|
+
|
|
11
|
+
- { pattern: "collections", match: path-segment, tag: payload-collections, confidence: high }
|
|
12
|
+
- { pattern: "globals", match: path-segment, tag: payload-globals, confidence: medium }
|
|
13
|
+
- { pattern: "access", match: path-segment, tag: payload-access-control, confidence: medium }
|
|
14
|
+
- { pattern: "fields", match: path-segment, tag: payload-fields, confidence: medium }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
name: frameworks/react
|
|
2
|
+
description: React markers — hooks, HOCs, JSX-based identifiers.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "react", match: import, tag: framework-react, confidence: high }
|
|
5
|
+
- { pattern: "react-dom", match: import, tag: framework-react, confidence: high }
|
|
6
|
+
- { pattern: "^use[A-Z][A-Za-z0-9]*$", kind: regex, match: symbol-name, tag: react-hook, confidence: high, note: "Custom hook naming convention." }
|
|
7
|
+
- { pattern: "^with[A-Z][A-Za-z0-9]*$", kind: regex, match: symbol-name, tag: react-hoc, confidence: high, note: "Higher-order component convention." }
|
|
8
|
+
- { pattern: "components", match: path-segment, tag: ui-components, confidence: high }
|
|
9
|
+
- { pattern: "hooks", match: path-segment, tag: react-hooks, confidence: high }
|
|
10
|
+
- { pattern: "pages", match: path-segment, tag: route-pages, confidence: high }
|
|
11
|
+
- { pattern: "app", match: path-segment, tag: nextjs-app-router, confidence: medium }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: frameworks/sanity
|
|
2
|
+
description: Sanity headless CMS conventions.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "@sanity/client", match: import, tag: framework-sanity, confidence: high }
|
|
5
|
+
- { pattern: "@sanity/*", kind: glob, match: import, tag: framework-sanity, confidence: high }
|
|
6
|
+
- { pattern: "sanity", match: import, tag: framework-sanity, confidence: high }
|
|
7
|
+
- { pattern: "next-sanity", match: import, tag: framework-sanity, confidence: high }
|
|
8
|
+
|
|
9
|
+
- { pattern: "sanity.config.ts", match: filename, tag: sanity-config, confidence: high }
|
|
10
|
+
- { pattern: "sanity.config.js", match: filename, tag: sanity-config, confidence: high }
|
|
11
|
+
- { pattern: "sanity.cli.ts", match: filename, tag: sanity-cli-config, confidence: high }
|
|
12
|
+
- { pattern: "sanity.cli.js", match: filename, tag: sanity-cli-config, confidence: high }
|
|
13
|
+
|
|
14
|
+
- { pattern: "schemas", match: path-segment, tag: sanity-schemas, confidence: medium }
|
|
15
|
+
- { pattern: "schemaTypes", match: path-segment, tag: sanity-schemas, confidence: high }
|
|
16
|
+
- { pattern: "studio", match: path-segment, tag: sanity-studio, confidence: medium }
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: frameworks/strapi
|
|
2
|
+
description: Strapi headless CMS conventions.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "@strapi/strapi", match: import, tag: framework-strapi, confidence: high }
|
|
5
|
+
- { pattern: "@strapi/*", kind: glob, match: import, tag: framework-strapi, confidence: high }
|
|
6
|
+
- { pattern: "strapi", match: import, tag: framework-strapi, confidence: high }
|
|
7
|
+
|
|
8
|
+
- { pattern: "controllers", match: path-segment, tag: strapi-controllers, confidence: high }
|
|
9
|
+
- { pattern: "routes", match: path-segment, tag: strapi-routes, confidence: high }
|
|
10
|
+
- { pattern: "services", match: path-segment, tag: strapi-services, confidence: high }
|
|
11
|
+
- { pattern: "content-types", match: path-segment, tag: strapi-content-types, confidence: high }
|
|
12
|
+
- { pattern: "policies", match: path-segment, tag: strapi-policies, confidence: high }
|
|
13
|
+
- { pattern: "middlewares", match: path-segment, tag: strapi-middlewares, confidence: high }
|
|
14
|
+
|
|
15
|
+
- { pattern: "lifecycles.js", match: filename, tag: strapi-lifecycle-hooks, confidence: high, note: "Strapi entity lifecycle callbacks." }
|
|
16
|
+
- { pattern: "lifecycles.ts", match: filename, tag: strapi-lifecycle-hooks, confidence: high }
|
|
17
|
+
- { pattern: "schema.json", match: filename, tag: strapi-content-schema, confidence: high, note: "Strapi content-type schema." }
|
|
18
|
+
- { pattern: "bootstrap.js", match: filename, tag: strapi-bootstrap, confidence: medium }
|
|
19
|
+
- { pattern: "register.js", match: filename, tag: strapi-register-hook, confidence: medium }
|
|
20
|
+
- { pattern: "destroy.js", match: filename, tag: strapi-destroy-hook, confidence: medium }
|
|
21
|
+
|
|
22
|
+
- { pattern: "^beforeCreate$", kind: regex, match: symbol-name, tag: lifecycle-hook, confidence: high }
|
|
23
|
+
- { pattern: "^beforeUpdate$", kind: regex, match: symbol-name, tag: lifecycle-hook, confidence: high }
|
|
24
|
+
- { pattern: "^beforeDelete$", kind: regex, match: symbol-name, tag: lifecycle-hook, confidence: high }
|
|
25
|
+
- { pattern: "^afterCreate$", kind: regex, match: symbol-name, tag: lifecycle-hook, confidence: high }
|
|
26
|
+
- { pattern: "^afterUpdate$", kind: regex, match: symbol-name, tag: lifecycle-hook, confidence: high }
|
|
27
|
+
- { pattern: "^afterDelete$", kind: regex, match: symbol-name, tag: lifecycle-hook, confidence: high }
|
|
28
|
+
- { pattern: "^beforeFind.*$", kind: regex, match: symbol-name, tag: lifecycle-hook, confidence: high }
|
|
29
|
+
- { pattern: "^afterFind.*$", kind: regex, match: symbol-name, tag: lifecycle-hook, confidence: high }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: frameworks/wordpress
|
|
2
|
+
description: WordPress theme and plugin file roles.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "wp-config.php", match: filename, tag: wordpress-config, confidence: high }
|
|
5
|
+
- { pattern: "functions.php", match: filename, tag: wordpress-theme-bootstrap, confidence: high }
|
|
6
|
+
- { pattern: "style.css", match: filename, tag: wordpress-theme-manifest, confidence: medium, note: "Header comment declares theme metadata." }
|
|
7
|
+
- { pattern: "index.php", match: filename, tag: wordpress-template, confidence: medium }
|
|
8
|
+
- { pattern: "header.php", match: filename, tag: wordpress-template, confidence: high }
|
|
9
|
+
- { pattern: "footer.php", match: filename, tag: wordpress-template, confidence: high }
|
|
10
|
+
- { pattern: "sidebar.php", match: filename, tag: wordpress-template, confidence: high }
|
|
11
|
+
- { pattern: "single.php", match: filename, tag: wordpress-template, confidence: high }
|
|
12
|
+
- { pattern: "archive.php", match: filename, tag: wordpress-template, confidence: high }
|
|
13
|
+
- { pattern: "page.php", match: filename, tag: wordpress-template, confidence: high }
|
|
14
|
+
- { pattern: "comments.php", match: filename, tag: wordpress-template, confidence: high }
|
|
15
|
+
- { pattern: "search.php", match: filename, tag: wordpress-template, confidence: high }
|
|
16
|
+
- { pattern: "404.php", match: filename, tag: wordpress-template, confidence: high }
|
|
17
|
+
|
|
18
|
+
- { pattern: "wp-content", match: path-segment, tag: wordpress-content-root, confidence: high }
|
|
19
|
+
- { pattern: "plugins", match: path-segment, tag: wordpress-plugins, confidence: medium }
|
|
20
|
+
- { pattern: "themes", match: path-segment, tag: wordpress-themes, confidence: medium }
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: naming/python
|
|
2
|
+
description: Python snake_case naming conventions and dunder methods.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "^get_.*", kind: regex, match: symbol-name, tag: getter, confidence: high }
|
|
5
|
+
- { pattern: "^set_.*", kind: regex, match: symbol-name, tag: setter, confidence: high }
|
|
6
|
+
- { pattern: "^fetch_.*", kind: regex, match: symbol-name, tag: fetcher, confidence: high }
|
|
7
|
+
- { pattern: "^load_.*", kind: regex, match: symbol-name, tag: loader, confidence: high }
|
|
8
|
+
- { pattern: "^save_.*", kind: regex, match: symbol-name, tag: saver, confidence: high }
|
|
9
|
+
- { pattern: "^delete_.*", kind: regex, match: symbol-name, tag: deleter, confidence: high }
|
|
10
|
+
- { pattern: "^remove_.*", kind: regex, match: symbol-name, tag: deleter, confidence: high }
|
|
11
|
+
- { pattern: "^create_.*", kind: regex, match: symbol-name, tag: creator, confidence: high }
|
|
12
|
+
- { pattern: "^update_.*", kind: regex, match: symbol-name, tag: updater, confidence: high }
|
|
13
|
+
- { pattern: "^validate_.*", kind: regex, match: symbol-name, tag: validator, confidence: high }
|
|
14
|
+
- { pattern: "^parse_.*", kind: regex, match: symbol-name, tag: parser, confidence: high }
|
|
15
|
+
- { pattern: "^format_.*", kind: regex, match: symbol-name, tag: formatter, confidence: high }
|
|
16
|
+
- { pattern: "^render_.*", kind: regex, match: symbol-name, tag: renderer, confidence: high }
|
|
17
|
+
- { pattern: "^handle_.*", kind: regex, match: symbol-name, tag: handler, confidence: high }
|
|
18
|
+
- { pattern: "^process_.*", kind: regex, match: symbol-name, tag: processor, confidence: high }
|
|
19
|
+
- { pattern: "^on_.*", kind: regex, match: symbol-name, tag: event-handler, confidence: medium }
|
|
20
|
+
- { pattern: "^is_.*", kind: regex, match: symbol-name, tag: predicate, confidence: high }
|
|
21
|
+
- { pattern: "^has_.*", kind: regex, match: symbol-name, tag: predicate, confidence: high }
|
|
22
|
+
- { pattern: "^can_.*", kind: regex, match: symbol-name, tag: predicate, confidence: high }
|
|
23
|
+
- { pattern: "^should_.*", kind: regex, match: symbol-name, tag: predicate, confidence: high }
|
|
24
|
+
|
|
25
|
+
- { pattern: ".*_view$", kind: regex, match: symbol-name, tag: view-handler, confidence: high, note: "Django/Flask view function." }
|
|
26
|
+
- { pattern: ".*_handler$", kind: regex, match: symbol-name, tag: handler, confidence: high }
|
|
27
|
+
- { pattern: ".*_service$", kind: regex, match: symbol-name, tag: service, confidence: high }
|
|
28
|
+
- { pattern: ".*_repository$", kind: regex, match: symbol-name, tag: repository, confidence: high }
|
|
29
|
+
- { pattern: ".*_factory$", kind: regex, match: symbol-name, tag: factory, confidence: high }
|
|
30
|
+
- { pattern: ".*_validator$", kind: regex, match: symbol-name, tag: validator, confidence: high }
|
|
31
|
+
- { pattern: ".*_serializer$", kind: regex, match: symbol-name, tag: serializer, confidence: high }
|
|
32
|
+
- { pattern: ".*_form$", kind: regex, match: symbol-name, tag: form, confidence: high }
|
|
33
|
+
- { pattern: ".*_filter$", kind: regex, match: symbol-name, tag: filter, confidence: high }
|
|
34
|
+
- { pattern: ".*_middleware$", kind: regex, match: symbol-name, tag: middleware, confidence: high }
|
|
35
|
+
- { pattern: ".*_task$", kind: regex, match: symbol-name, tag: task, confidence: high, note: "Celery or background task." }
|
|
36
|
+
- { pattern: ".*_command$", kind: regex, match: symbol-name, tag: command, confidence: medium }
|
|
37
|
+
|
|
38
|
+
- { pattern: "__init__", match: symbol-name, tag: constructor, confidence: high }
|
|
39
|
+
- { pattern: "__new__", match: symbol-name, tag: constructor, confidence: high }
|
|
40
|
+
- { pattern: "__str__", match: symbol-name, tag: repr-method, confidence: high }
|
|
41
|
+
- { pattern: "__repr__", match: symbol-name, tag: repr-method, confidence: high }
|
|
42
|
+
- { pattern: "__eq__", match: symbol-name, tag: equality-method, confidence: high }
|
|
43
|
+
- { pattern: "__hash__", match: symbol-name, tag: hash-method, confidence: high }
|
|
44
|
+
- { pattern: "__call__", match: symbol-name, tag: callable-method, confidence: high }
|
|
45
|
+
- { pattern: "__enter__", match: symbol-name, tag: context-manager, confidence: high }
|
|
46
|
+
- { pattern: "__exit__", match: symbol-name, tag: context-manager, confidence: high }
|
|
47
|
+
- { pattern: "__iter__", match: symbol-name, tag: iterable, confidence: high }
|
|
48
|
+
- { pattern: "__next__", match: symbol-name, tag: iterable, confidence: high }
|
|
49
|
+
- { pattern: "__len__", match: symbol-name, tag: sized, confidence: high }
|
|
50
|
+
- { pattern: "__getitem__", match: symbol-name, tag: indexable, confidence: high }
|
|
51
|
+
- { pattern: "__setitem__", match: symbol-name, tag: indexable, confidence: high }
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: naming/suffixes
|
|
2
|
+
description: Class/identifier suffixes that signal architectural role.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: ".*Handler$", kind: regex, match: symbol-name, tag: handler, confidence: high }
|
|
5
|
+
- { pattern: ".*Controller$", kind: regex, match: symbol-name, tag: controller, confidence: high }
|
|
6
|
+
- { pattern: ".*Service$", kind: regex, match: symbol-name, tag: service, confidence: high }
|
|
7
|
+
- { pattern: ".*Repository$", kind: regex, match: symbol-name, tag: repository, confidence: high }
|
|
8
|
+
- { pattern: ".*Factory$", kind: regex, match: symbol-name, tag: factory, confidence: high }
|
|
9
|
+
- { pattern: ".*Provider$", kind: regex, match: symbol-name, tag: provider, confidence: high }
|
|
10
|
+
- { pattern: ".*Manager$", kind: regex, match: symbol-name, tag: manager, confidence: high }
|
|
11
|
+
- { pattern: ".*Builder$", kind: regex, match: symbol-name, tag: builder, confidence: high }
|
|
12
|
+
- { pattern: ".*Adapter$", kind: regex, match: symbol-name, tag: adapter, confidence: high }
|
|
13
|
+
- { pattern: ".*Validator$", kind: regex, match: symbol-name, tag: validator, confidence: high }
|
|
14
|
+
- { pattern: ".*Serializer$", kind: regex, match: symbol-name, tag: serializer, confidence: high }
|
|
15
|
+
- { pattern: ".*Mapper$", kind: regex, match: symbol-name, tag: mapper, confidence: high }
|
|
16
|
+
- { pattern: ".*DTO$", kind: regex, match: symbol-name, tag: dto, confidence: high }
|
|
17
|
+
- { pattern: ".*Model$", kind: regex, match: symbol-name, tag: model, confidence: medium }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: naming/verbs
|
|
2
|
+
description: Common function-name verbs that signal intent.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "^get[A-Z].*", kind: regex, match: symbol-name, tag: getter, confidence: high }
|
|
5
|
+
- { pattern: "^set[A-Z].*", kind: regex, match: symbol-name, tag: setter, confidence: high }
|
|
6
|
+
- { pattern: "^fetch[A-Z].*", kind: regex, match: symbol-name, tag: fetcher, confidence: high }
|
|
7
|
+
- { pattern: "^load[A-Z].*", kind: regex, match: symbol-name, tag: loader, confidence: high }
|
|
8
|
+
- { pattern: "^save[A-Z].*", kind: regex, match: symbol-name, tag: saver, confidence: high }
|
|
9
|
+
- { pattern: "^delete[A-Z].*", kind: regex, match: symbol-name, tag: deleter, confidence: high }
|
|
10
|
+
- { pattern: "^create[A-Z].*", kind: regex, match: symbol-name, tag: creator, confidence: high }
|
|
11
|
+
- { pattern: "^update[A-Z].*", kind: regex, match: symbol-name, tag: updater, confidence: high }
|
|
12
|
+
- { pattern: "^validate[A-Z].*", kind: regex, match: symbol-name, tag: validator, confidence: high }
|
|
13
|
+
- { pattern: "^parse[A-Z].*", kind: regex, match: symbol-name, tag: parser, confidence: high }
|
|
14
|
+
- { pattern: "^format[A-Z].*", kind: regex, match: symbol-name, tag: formatter, confidence: high }
|
|
15
|
+
- { pattern: "^render[A-Z].*", kind: regex, match: symbol-name, tag: renderer, confidence: high }
|
|
16
|
+
- { pattern: "^handle[A-Z].*", kind: regex, match: symbol-name, tag: handler, confidence: high }
|
|
17
|
+
- { pattern: "^on[A-Z].*", kind: regex, match: symbol-name, tag: event-handler, confidence: medium }
|
|
18
|
+
- { pattern: "^is[A-Z].*", kind: regex, match: symbol-name, tag: predicate, confidence: high }
|
|
19
|
+
- { pattern: "^has[A-Z].*", kind: regex, match: symbol-name, tag: predicate, confidence: high }
|
|
20
|
+
- { pattern: "^can[A-Z].*", kind: regex, match: symbol-name, tag: predicate, confidence: high }
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: routes/web-common
|
|
2
|
+
description: Common public-facing web routes whose meaning is conventional.
|
|
3
|
+
entries:
|
|
4
|
+
- { pattern: "/", match: route, tag: home-page, confidence: high }
|
|
5
|
+
- { pattern: "/about", match: route, tag: about-page, confidence: high }
|
|
6
|
+
- { pattern: "/about-us", match: route, tag: about-page, confidence: high }
|
|
7
|
+
- { pattern: "/aboutus", match: route, tag: about-page, confidence: high }
|
|
8
|
+
- { pattern: "/contact", match: route, tag: contact-page, confidence: high }
|
|
9
|
+
- { pattern: "/contact-us", match: route, tag: contact-page, confidence: high }
|
|
10
|
+
- { pattern: "/pricing", match: route, tag: pricing-page, confidence: high }
|
|
11
|
+
- { pattern: "/privacy", match: route, tag: privacy-page, confidence: high }
|
|
12
|
+
- { pattern: "/terms", match: route, tag: terms-page, confidence: high }
|
|
13
|
+
- { pattern: "/login", match: route, tag: auth-login, confidence: high }
|
|
14
|
+
- { pattern: "/signin", match: route, tag: auth-login, confidence: high }
|
|
15
|
+
- { pattern: "/signup", match: route, tag: auth-signup, confidence: high }
|
|
16
|
+
- { pattern: "/register", match: route, tag: auth-signup, confidence: high }
|
|
17
|
+
- { pattern: "/logout", match: route, tag: auth-logout, confidence: high }
|
|
18
|
+
- { pattern: "/dashboard", match: route, tag: dashboard-page, confidence: high }
|
|
19
|
+
- { pattern: "/settings", match: route, tag: settings-page, confidence: high }
|
|
20
|
+
- { pattern: "/profile", match: route, tag: profile-page, confidence: high }
|
|
21
|
+
- { pattern: "/admin", match: route, tag: admin-area, confidence: high }
|
|
22
|
+
- { pattern: "/api", match: route, tag: api-root, confidence: high }
|
|
23
|
+
- { pattern: "/health", match: route, tag: health-check, confidence: high }
|
|
24
|
+
- { pattern: "/status", match: route, tag: health-check, confidence: medium }
|
|
25
|
+
- { pattern: "/cart", match: route, tag: ecommerce-cart, confidence: high }
|
|
26
|
+
- { pattern: "/checkout", match: route, tag: ecommerce-checkout, confidence: high }
|
|
27
|
+
- { pattern: "/orders", match: route, tag: ecommerce-orders, confidence: high }
|
|
28
|
+
- { pattern: "/products", match: route, tag: ecommerce-products, confidence: high }
|
|
Binary file
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: squick
|
|
3
|
+
Version: 1.0.1
|
|
4
|
+
Summary: Pre-computed LLM context for AI coding agents.
|
|
5
|
+
Author: Horizon LLC
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/pwnaxe/squick
|
|
8
|
+
Project-URL: Repository, https://github.com/pwnaxe/squick
|
|
9
|
+
Project-URL: Issues, https://github.com/pwnaxe/squick/issues
|
|
10
|
+
Keywords: mcp,ai,llm,context,scanner,ast,tree-sitter
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
17
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Rust
|
|
25
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
26
|
+
Classifier: Topic :: Software Development :: Pre-processors
|
|
27
|
+
Requires-Python: >=3.9
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# squick (Python)
|
|
31
|
+
|
|
32
|
+
Pre-computed, LLM-targeted code context for AI coding agents.
|
|
33
|
+
|
|
34
|
+
This PyPI package ships the right platform-specific binary inside the
|
|
35
|
+
wheel and exposes it both as a `squick` console script and a small
|
|
36
|
+
Python API. Installation is platform-aware: `pip` picks the wheel for
|
|
37
|
+
your OS and architecture automatically.
|
|
38
|
+
|
|
39
|
+
## Install
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install squick
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Use from the shell
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
squick scan ./your-project # one-shot scan
|
|
49
|
+
squick watch ./your-project # re-scan on file save
|
|
50
|
+
squick mcp # start an MCP server on stdio
|
|
51
|
+
python -m squick scan . # equivalent to the above
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Use from Python
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
import squick
|
|
58
|
+
|
|
59
|
+
# Run a scan and return the generated context.md as a string.
|
|
60
|
+
context = squick.scan("./your-project")
|
|
61
|
+
print(context)
|
|
62
|
+
|
|
63
|
+
# Locate the bundled binary, e.g. to spawn the MCP server manually.
|
|
64
|
+
print(squick.binary_path())
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Supported platforms
|
|
68
|
+
|
|
69
|
+
| OS | Architecture | Wheel tag |
|
|
70
|
+
| ------- | ------------ | -------------------------- |
|
|
71
|
+
| Linux | x86_64 | `manylinux2014_x86_64` |
|
|
72
|
+
| Linux | aarch64 | `manylinux2014_aarch64` |
|
|
73
|
+
| macOS | x86_64 | `macosx_10_12_x86_64` |
|
|
74
|
+
| macOS | arm64 | `macosx_11_0_arm64` |
|
|
75
|
+
| Windows | x86_64 | `win_amd64` |
|
|
76
|
+
|
|
77
|
+
See the [main project README](https://github.com/pwnaxe/squick) for
|
|
78
|
+
full documentation, dictionary format, and MCP client configuration.
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
Apache-2.0. Copyright 2026 Horizon LLC.
|
|
83
|
+
"Squick" is a trademark of Horizon LLC.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
squick/__init__.py,sha256=2NwfozOqyEtxeNphWAHWcjekO7LCG432FIPScvkq9Wc,2583
|
|
2
|
+
squick/__main__.py,sha256=MlY2KONOPYQ8gC5qhN2DCTIghInTrQWP3VAtDPE7xG4,126
|
|
3
|
+
squick/_binary/squick.exe,sha256=vkvti2o3eSQDu4RGyMWBLGVwC99272m05NOp8G0SZcg,9637376
|
|
4
|
+
squick/_binary/dictionaries/components/html-semantic.yaml,sha256=6jpfLu92ShZKDbjqvNSULLZIr23Qq1_kHQ5pNo-ElV0,856
|
|
5
|
+
squick/_binary/dictionaries/components/ui-patterns.yaml,sha256=85c0aC_nf43aThy1wbT04zZdWXgfm_9teVe7qjjfmYk,2380
|
|
6
|
+
squick/_binary/dictionaries/files/node.yaml,sha256=dnSCxmB9JOpRKEASrpw5Wf28aLh2DM3CBXMndZW-HOY,1777
|
|
7
|
+
squick/_binary/dictionaries/files/python.yaml,sha256=Dps21X-0KsUasGz9878JzjrrZUMkG_lj-DNA0q63fdY,1562
|
|
8
|
+
squick/_binary/dictionaries/frameworks/django.yaml,sha256=svGsqeZ1LQbkCK9YOxjIYb-ME9f4GLKJPv-TouweigM,793
|
|
9
|
+
squick/_binary/dictionaries/frameworks/express.yaml,sha256=ADySZ-3qXNHgZPmelwMfagoQT1yxx5ald8ZIw24l7wk,1765
|
|
10
|
+
squick/_binary/dictionaries/frameworks/fastapi.yaml,sha256=n2D7nfcGYqJ8jTm8DeWDpLNDOcMihX-QFepvgNnGAPM,1129
|
|
11
|
+
squick/_binary/dictionaries/frameworks/flask.yaml,sha256=uBi90IwgIfBm_e_AXqzFtv3AMWLVeuE2tum7uQVtkCM,867
|
|
12
|
+
squick/_binary/dictionaries/frameworks/nextjs.yaml,sha256=liXKe2LwG07V-6sef_-bN0bEbb8TTiCeW6EsIwWtG9E,3848
|
|
13
|
+
squick/_binary/dictionaries/frameworks/payload.yaml,sha256=gYHcoNesygad7B3sIoyewSEieoP9hq0lO3f2tvDn6jE,1011
|
|
14
|
+
squick/_binary/dictionaries/frameworks/react.yaml,sha256=1RibmTXYAyNCBoBlsGCb2m3O7hnz0U2F7sMmFsWKqfU,977
|
|
15
|
+
squick/_binary/dictionaries/frameworks/sanity.yaml,sha256=6InO9t4ZPYcUVT5q6ZMc40aJGKRkVxUDnLr8I6MspIc,1184
|
|
16
|
+
squick/_binary/dictionaries/frameworks/strapi.yaml,sha256=oUa4OOpfRyxzVRanDsJtZrasi3A0RVuypAQT-_r7ge0,2575
|
|
17
|
+
squick/_binary/dictionaries/frameworks/wordpress.yaml,sha256=eGLUpc3V10cc0MPnLMuZXmeLkV0F7p16yw8DYMy3sTQ,1774
|
|
18
|
+
squick/_binary/dictionaries/naming/python.yaml,sha256=-lT2ebwMCIivHN6PSaCSyn5PrrbudcDo7_IMZBFEXd8,4817
|
|
19
|
+
squick/_binary/dictionaries/naming/suffixes.yaml,sha256=FF0Zup_AogAAIi3hKTb9Vy_trO2TktEFKLSlqt0VB4k,1535
|
|
20
|
+
squick/_binary/dictionaries/naming/verbs.yaml,sha256=N8bTeCBWDiqUV2r0-15jPpG8iENwvVQr2sXtZ2dDwPc,1865
|
|
21
|
+
squick/_binary/dictionaries/routes/web-common.yaml,sha256=TxcOZak2aVXhBVwTOjgS6VxmX5BiITgasuHx0q4q-9g,2296
|
|
22
|
+
squick-1.0.1.dist-info/METADATA,sha256=WMy7ka54U_WZZHp5B9CPytqmk7QQsYgsIS9BmKTa9qs,2798
|
|
23
|
+
squick-1.0.1.dist-info/WHEEL,sha256=QR8DNjG6Lr6bNErJWJgF4dP2dJ2N7NpY-BWly1OvcTM,97
|
|
24
|
+
squick-1.0.1.dist-info/entry_points.txt,sha256=CfBR4ZYgixzhad5h2N8mLCDkntpcqO8Wy2Vo2wlGxZM,39
|
|
25
|
+
squick-1.0.1.dist-info/top_level.txt,sha256=Ax_HMSliBbTtH7YelPlK6iQnEZhZOyOkH41pZ1QbF2c,7
|
|
26
|
+
squick-1.0.1.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
squick
|