2fb067ecbf
checklocks / checklocks (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
natlab-integrationtest / natlab-integrationtest (push) Has been cancelled
CI / gomod-cache (push) Has been cancelled
CI / race-root-integration (1/4) (push) Has been cancelled
CI / race-root-integration (2/4) (push) Has been cancelled
CI / race-root-integration (3/4) (push) Has been cancelled
CI / race-root-integration (4/4) (push) Has been cancelled
CI / test (-race, amd64, 1/3) (push) Has been cancelled
CI / test (-race, amd64, 2/3) (push) Has been cancelled
CI / test (-race, amd64, 3/3) (push) Has been cancelled
CI / test (386) (push) Has been cancelled
CI / test (amd64) (push) Has been cancelled
CI / Windows (benchmarks) (push) Has been cancelled
CI / Windows (1/2) (push) Has been cancelled
CI / Windows (2/2) (push) Has been cancelled
CI / macos (push) Has been cancelled
CI / privileged (push) Has been cancelled
CI / vm (push) Has been cancelled
CI / cross (386, linux) (push) Has been cancelled
CI / cross (amd64, darwin) (push) Has been cancelled
CI / cross (amd64, freebsd) (push) Has been cancelled
CI / cross (amd64, openbsd) (push) Has been cancelled
CI / cross (amd64, windows) (push) Has been cancelled
CI / cross (arm, 5, linux) (push) Has been cancelled
CI / cross (arm, 7, linux) (push) Has been cancelled
CI / cross (arm64, darwin) (push) Has been cancelled
CI / cross (arm64, linux) (push) Has been cancelled
CI / cross (arm64, windows) (push) Has been cancelled
CI / cross (loong64, linux) (push) Has been cancelled
CI / ios (push) Has been cancelled
CI / crossmin (amd64, illumos) (push) Has been cancelled
CI / crossmin (amd64, plan9) (push) Has been cancelled
CI / crossmin (amd64, solaris) (push) Has been cancelled
CI / crossmin (ppc64, aix) (push) Has been cancelled
CI / android (push) Has been cancelled
CI / wasm (push) Has been cancelled
CI / tailscale_go (push) Has been cancelled
CI / fuzz (push) Has been cancelled
CI / depaware (push) Has been cancelled
CI / go_generate (push) Has been cancelled
CI / make_tidy (push) Has been cancelled
CI / licenses (push) Has been cancelled
CI / staticcheck (macOS) (push) Has been cancelled
CI / staticcheck (Linux) (push) Has been cancelled
CI / staticcheck (Windows) (push) Has been cancelled
CI / staticcheck (Portable (1/4)) (push) Has been cancelled
CI / staticcheck (Portable (2/4)) (push) Has been cancelled
CI / staticcheck (Portable (3/4)) (push) Has been cancelled
CI / staticcheck (Portable (4/4)) (push) Has been cancelled
CI / notify_slack (push) Has been cancelled
CI / merge_blocker (push) Has been cancelled
CI / check_mergeability_strict (push) Has been cancelled
CI / check_mergeability (push) Has been cancelled
Dockerfile build / deploy (push) Has been cancelled
test installer.sh / test (curl, alpine:3.21) (push) Has been cancelled
test installer.sh / test (curl, alpine:edge) (push) Has been cancelled
test installer.sh / test (curl, alpine:latest) (push) Has been cancelled
test installer.sh / test (curl, amazonlinux:latest) (push) Has been cancelled
test installer.sh / test (curl, archlinux:latest) (push) Has been cancelled
test installer.sh / test (curl, debian:oldstable-slim) (push) Has been cancelled
test installer.sh / test (curl, debian:sid-slim) (push) Has been cancelled
test installer.sh / test (curl, debian:stable-slim, 1.80.0) (push) Has been cancelled
test installer.sh / test (curl, debian:testing-slim) (push) Has been cancelled
test installer.sh / test (curl, elementary/docker:stable) (push) Has been cancelled
test installer.sh / test (curl, elementary/docker:unstable) (push) Has been cancelled
test installer.sh / test (curl, fedora:latest, 1.80.0) (push) Has been cancelled
test installer.sh / test (curl, kalilinux/kali-dev) (push) Has been cancelled
test installer.sh / test (curl, kalilinux/kali-rolling) (push) Has been cancelled
test installer.sh / test (curl, opensuse/leap:latest) (push) Has been cancelled
test installer.sh / test (curl, opensuse/tumbleweed:latest) (push) Has been cancelled
test installer.sh / test (curl, oraclelinux:8) (push) Has been cancelled
test installer.sh / test (curl, oraclelinux:9) (push) Has been cancelled
test installer.sh / test (curl, parrotsec/core:latest) (push) Has been cancelled
test installer.sh / test (curl, rockylinux:8.7) (push) Has been cancelled
test installer.sh / test (curl, rockylinux:9) (push) Has been cancelled
test installer.sh / test (curl, ubuntu:20.04) (push) Has been cancelled
test installer.sh / test (curl, ubuntu:22.04) (push) Has been cancelled
test installer.sh / test (curl, ubuntu:24.04, 1.80.0) (push) Has been cancelled
test installer.sh / test (wget, debian:oldstable-slim) (push) Has been cancelled
test installer.sh / test (wget, debian:sid-slim) (push) Has been cancelled
update-flake / update-flake (push) Has been cancelled
tailscale.com/cmd/vet / vet (push) Has been cancelled
test installer.sh / notify-slack (push) Has been cancelled
Client security fixes (cmd/tailscale-tray/main.go): - SSRF protection in Add Server dialog (validateControlURL): reject private/loopback/link-local/cloud-metadata IPs via DNS resolution - RCE gate on AuthURL/BrowseToURL exec paths (validateAuthURL) - Sanitized URL logging (sanitizeURLForLog drops query auth tokens) - Error handling on exec.Command with user-facing showError() Admin panel security (web-admin): - Bcrypt password hashing (replaces SHA256) - Rate limiting: 5 failed logins → 15-min lockout - Session + login attempt cleanup goroutine (hourly) - url.QueryEscape / encodeURIComponent for all API params - Fail-hard startup when no TLS and non-loopback bind - ADMIN_PASSWORD required (no default), password min 12 chars - Username regex whitelist Installer hardening (Setup.wxs): - util:PermissionEx restricts SCM access: only Administrators + SYSTEM can start/stop/reconfigure service. Authenticated Users limited to QueryStatus/QueryConfig/Interrogate - Vital="yes" on ServiceInstall Docs & roadmap: - PRODUCTION_ROADMAP.md: 5-milestone plan (security + features + distribution + ops) with granular tasks, effort, done-when - CLIENT_SECURITY_AUDIT.md, SECURITY_FIXES.md, DEPLOYMENT.md - AI assistant rules (.cursorrules, .antigravityrules, etc.) Build & distribution: - build-msi.ps1, deploy-and-sign.ps1, sign-release.ps1 - redeploy.ps1, tray-deploy.ps1, test-msi.ps1 - installer/msi/ alternative WXS setup - Restored .github/workflows/ removed in mirror cleanup .gitignore hardened: *.pfx, *.p12, *.key, *.pem, .env*
107 lines
4.9 KiB
Python
107 lines
4.9 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
UI/UX Pro Max Search - BM25 search engine for UI/UX style guides
|
|
Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]
|
|
python search.py "<query>" --design-system [-p "Project Name"]
|
|
python search.py "<query>" --design-system --persist [-p "Project Name"] [--page "dashboard"]
|
|
|
|
Domains: style, prompt, color, chart, landing, product, ux, typography
|
|
Stacks: html-tailwind, react, nextjs
|
|
|
|
Persistence (Master + Overrides pattern):
|
|
--persist Save design system to design-system/MASTER.md
|
|
--page Also create a page-specific override file in design-system/pages/
|
|
"""
|
|
|
|
import argparse
|
|
from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack
|
|
from design_system import generate_design_system, persist_design_system
|
|
|
|
|
|
def format_output(result):
|
|
"""Format results for Claude consumption (token-optimized)"""
|
|
if "error" in result:
|
|
return f"Error: {result['error']}"
|
|
|
|
output = []
|
|
if result.get("stack"):
|
|
output.append(f"## UI Pro Max Stack Guidelines")
|
|
output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")
|
|
else:
|
|
output.append(f"## UI Pro Max Search Results")
|
|
output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
|
|
output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
|
|
|
|
for i, row in enumerate(result['results'], 1):
|
|
output.append(f"### Result {i}")
|
|
for key, value in row.items():
|
|
value_str = str(value)
|
|
if len(value_str) > 300:
|
|
value_str = value_str[:300] + "..."
|
|
output.append(f"- **{key}:** {value_str}")
|
|
output.append("")
|
|
|
|
return "\n".join(output)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="UI Pro Max Search")
|
|
parser.add_argument("query", help="Search query")
|
|
parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
|
|
parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help="Stack-specific search (html-tailwind, react, nextjs)")
|
|
parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
|
|
parser.add_argument("--json", action="store_true", help="Output as JSON")
|
|
# Design system generation
|
|
parser.add_argument("--design-system", "-ds", action="store_true", help="Generate complete design system recommendation")
|
|
parser.add_argument("--project-name", "-p", type=str, default=None, help="Project name for design system output")
|
|
parser.add_argument("--format", "-f", choices=["ascii", "markdown"], default="ascii", help="Output format for design system")
|
|
# Persistence (Master + Overrides pattern)
|
|
parser.add_argument("--persist", action="store_true", help="Save design system to design-system/MASTER.md (creates hierarchical structure)")
|
|
parser.add_argument("--page", type=str, default=None, help="Create page-specific override file in design-system/pages/")
|
|
parser.add_argument("--output-dir", "-o", type=str, default=None, help="Output directory for persisted files (default: current directory)")
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Design system takes priority
|
|
if args.design_system:
|
|
result = generate_design_system(
|
|
args.query,
|
|
args.project_name,
|
|
args.format,
|
|
persist=args.persist,
|
|
page=args.page,
|
|
output_dir=args.output_dir
|
|
)
|
|
print(result)
|
|
|
|
# Print persistence confirmation
|
|
if args.persist:
|
|
project_slug = args.project_name.lower().replace(' ', '-') if args.project_name else "default"
|
|
print("\n" + "=" * 60)
|
|
print(f"✅ Design system persisted to design-system/{project_slug}/")
|
|
print(f" 📄 design-system/{project_slug}/MASTER.md (Global Source of Truth)")
|
|
if args.page:
|
|
page_filename = args.page.lower().replace(' ', '-')
|
|
print(f" 📄 design-system/{project_slug}/pages/{page_filename}.md (Page Overrides)")
|
|
print("")
|
|
print(f"📖 Usage: When building a page, check design-system/{project_slug}/pages/[page].md first.")
|
|
print(f" If exists, its rules override MASTER.md. Otherwise, use MASTER.md.")
|
|
print("=" * 60)
|
|
# Stack search
|
|
elif args.stack:
|
|
result = search_stack(args.query, args.stack, args.max_results)
|
|
if args.json:
|
|
import json
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
else:
|
|
print(format_output(result))
|
|
# Domain search
|
|
else:
|
|
result = search(args.query, args.domain, args.max_results)
|
|
if args.json:
|
|
import json
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
else:
|
|
print(format_output(result))
|