{"id":51339621,"url":"https://github.com/semcod/gillm","last_synced_at":"2026-07-02T06:04:37.164Z","repository":{"id":362287831,"uuid":"1258234276","full_name":"semcod/gillm","owner":"semcod","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-08T15:34:06.000Z","size":3296,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T17:23:33.897Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/semcod.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-03T11:48:26.000Z","updated_at":"2026-06-08T15:35:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/semcod/gillm","commit_stats":null,"previous_names":["semcod/gllm","semcod/gillm"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/semcod/gillm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fgillm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fgillm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fgillm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fgillm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/semcod","download_url":"https://codeload.github.com/semcod/gillm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fgillm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35035001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-02T06:04:36.432Z","updated_at":"2026-07-02T06:04:37.147Z","avatar_url":"https://github.com/semcod.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gillm\n\n**GUI Control Plugin with NLP \u0026 Intent Contracts**\n\nSterowanie GUI przez DSL, NLP i wiele adapterów wejścia (CLI, REST, MCP, URI). Domena (focus, inject, capture, orchestrator) żyje w `src/gillm/`; warstwa kontroli w `packages/*2gillm`.\n\n![PyPI](https://img.shields.io/badge/pypi-gillm-blue) ![Version](https://img.shields.io/badge/version-0.1.15-blue) ![Python](https://img.shields.io/badge/python-3.10+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)\n\n## AI Cost Tracking\n\n![AI Cost](https://img.shields.io/badge/AI%20Cost-$10.56-orange) ![AI Model](https://img.shields.io/badge/AI%20Model-openrouter%2Fqwen%2Fqwen3-coder-next-lightgrey)\n\nThis project uses AI-generated code. Total cost: **$10.5631** with **17** AI commits.\n\nGenerated on 2026-06-29 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/models/openrouter/qwen/qwen3-coder-next)\n\n---\n\n**Graphical interface** for LLM automation in the semcod/coru ecosystem. Pair with\n[`tillm`](../tillm) for **text / shell** control (`aider`, `claude`, `codex`, …).\n\n| Package | Interface | Role |\n| --- | --- | --- |\n| **gillm** | graphical | GUI domain + `*2gillm` adapters (REST, MCP, URI, NLP) |\n| **tillm** | text / shell | vendor CLI `drive`, NLP → shell DSL |\n\n## Contents\n\n- [Architecture](#architecture)\n- [Control layer packages](#control-layer-packages)\n- [Installation](#installation)\n- [Quick start](#quick-start)\n- [DSL verbs](#dsl-verbs)\n- [CLI](#cli)\n- [REST API](#rest-api)\n- [Environment variables](#environment-variables)\n- [Testing](#testing)\n- [Project layout](#project-layout)\n- [Documentation](#documentation)\n- [License](#license)\n\n## Architecture\n\n```\nSUMD (description) → DOQL/source (code) → taskfile (automation) → testql (verification)\n```\n\nSources: [`SUMD.md`](SUMD.md) · [`app.doql.less`](app.doql.less) · [`Makefile`](Makefile)\n\n```mermaid\nflowchart TB\n  subgraph adapters [Input adapters — packages]\n    NL[nlp2gillm]\n    URI[uri2gillm]\n    CLI[cli2gillm]\n    MCP[mcp2gillm]\n    REST[rest2gillm]\n  end\n\n  subgraph control [Control layer]\n    TXT[DSL text line]\n    DICT[JSON dict]\n    PBIN[protobuf bytes]\n    SCH[JSON Schema validate]\n    DSL[dsl2gillm.dispatch]\n    Q[QueryHandler]\n    C[CommandHandler]\n    ES[(EventStore)]\n  end\n\n  subgraph domain [Domain — src/gillm]\n    ORCH[orchestrator.drive]\n    FOCUS[focus / injection]\n    CAPTURE[capture]\n    NLP[nlp_bridge]\n  end\n\n  NL --\u003e TXT\n  URI --\u003e TXT\n  CLI --\u003e TXT\n  MCP --\u003e TXT\n  MCP --\u003e DICT\n  MCP --\u003e PBIN\n  REST --\u003e TXT\n  REST --\u003e DICT\n  REST --\u003e PBIN\n\n  TXT --\u003e SCH\n  DICT --\u003e SCH\n  PBIN --\u003e SCH\n  SCH --\u003e DSL\n  DSL --\u003e Q\n  DSL --\u003e C\n  C --\u003e ORCH\n  C --\u003e ES\n  Q --\u003e ORCH\n  Q --\u003e FOCUS\n  Q --\u003e CAPTURE\n  Q --\u003e NLP\n```\n\nJedyny punkt mutacji w warstwie kontroli: `dsl2gillm.dispatch()`.\n\n## Control layer packages\n\n| Package | Role | Docs |\n|---------|------|------|\n| **dsl2gillm** | DSL grammar, JSON Schema, Protobuf, CQRS bus, EventStore | [README](packages/dsl2gillm/README.md) |\n| **uri2gillm** | `gillm://` URI → DSL line → `dispatch()` | [README](packages/uri2gillm/README.md) |\n| **nlp2gillm** | Natural language → DSL (`to-dsl`); `apply` = dispatch | [README](packages/nlp2gillm/README.md) |\n| **cli2gillm** | Shell REPL / exec / run | [README](packages/cli2gillm/README.md) |\n| **mcp2gillm** | MCP stdio (`gillm_run_command`, `gillm_run_command_pb`, …) | [README](packages/mcp2gillm/README.md) |\n| **rest2gillm** | FastAPI `/v1/dsl`, default port **8220** | [README](packages/rest2gillm/README.md) |\n\nOverview: [`packages/README.md`](packages/README.md).\n\n## Installation\n\n**Runtime** (core GUI domain only):\n\n```bash\npip install -e .\n# or: make install\n```\n\n**Development** (control layer + test tooling):\n\n```bash\nbash packages/install-dev.sh\n# or: pip install -e \".[dev]\"\n# or: make dev-install\n```\n\nOptional control extras without full dev stack:\n\n```bash\npip install -e \".[control]\"\n```\n\nRequires **Python ≥ 3.10**.\n\n## Quick start\n\n```bash\n# Schema + dry-run workflow (no real GUI)\ndsl2gillm validate-schema\ngillm run fixtures/workflow.json --dry-run\ngillm run fixtures/workflow-dry.json --dry-run\n\n# NLP → DSL\nnlp2gillm to-dsl \"check health\"\n\n# REST smoke test (separate terminal)\nrest2gillm serve --port 8220\ncurl http://127.0.0.1:8220/health\ncurl -X POST http://127.0.0.1:8220/v1/dsl -d 'HEALTH'\n```\n\n## DSL verbs\n\n| Type | Verbs |\n|------|-------|\n| Query | `HEALTH`, `ORIENT`, `PARSE`, `ACTIONS`, `VALIDATE`, `RESOLVE`, `CAPTURE` |\n| Command | `EXECUTE`, `SIMULATE`, `FOCUS`, `INJECT` |\n\nExample lines:\n\n```text\nHEALTH\nORIENT\nACTIONS\nPARSE \"focus vscode and type hello\"\nVALIDATE STEPS [{\"action\":\"wait\",\"config\":{\"seconds\":0.01}}]\nRESOLVE \"capture screen\"\nCAPTURE SCALE 0.2\nEXECUTE FILE workflow.json\nSIMULATE FILE workflow.json\nFOCUS HINTS vscode,cursor\nINJECT \"hello\" IDE default\n```\n\nGenerate Pydantic models from JSON schemas:\n\n```bash\npython -m dsl2gillm.codegen\n# or: dsl2gillm codegen\n```\n\n## CLI\n\n| Entry point | Purpose | Docs |\n|-------------|---------|------|\n| `gillm` | Legacy CLI: `run`, `nlp`, `capture` (delegates to `dsl2gillm.dispatch`) | [README](README.md#cli) |\n| `dsl2gillm` | DSL bus: `-c 'HEALTH'`, `validate-schema`, `codegen`, protobuf codecs | [README](packages/dsl2gillm/README.md) |\n| `nlp2gillm` | NL → DSL translation | [README](packages/nlp2gillm/README.md) |\n| `uri2gillm` | `gillm://` URI resolution | [README](packages/uri2gillm/README.md) |\n| `cli2gillm` | Interactive shell | [README](packages/cli2gillm/README.md) |\n| `mcp2gillm` | MCP server | [README](packages/mcp2gillm/README.md) |\n| `rest2gillm` | FastAPI server (`serve --port 8220`) | [README](packages/rest2gillm/README.md) |\n\n```bash\ngillm run fixtures/workflow-dry.json --dry-run\ngillm nlp \"focus vscode and type hello\" --dry-run\ngillm capture --scale 0.2\ndsl2gillm -c 'HEALTH'\n```\n\n## REST API\n\n`GET /` returns an endpoint map. Default base URL: `http://127.0.0.1:8220/`.\n\n```bash\nrest2gillm serve --port 8220\ncurl http://127.0.0.1:8220/\ncurl http://127.0.0.1:8220/health\ncurl -X POST http://127.0.0.1:8220/v1/dsl -d 'HEALTH'\n```\n\n## Environment variables\n\nCopy `.env.example` to `.env` for local development.\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `OPENROUTER_API_KEY` | *(not set)* | OpenRouter API key ([keys](https://openrouter.ai/keys)) |\n| `LLM_MODEL` | `openrouter/qwen/qwen3-coder-next` | LLM model for NLP / pfix |\n| `PFIX_AUTO_APPLY` | `true` | Apply fixes without asking |\n| `PFIX_AUTO_INSTALL_DEPS` | `true` | Auto `pip`/`uv` install |\n| `PFIX_AUTO_RESTART` | `false` | Restart process after fix |\n| `PFIX_MAX_RETRIES` | `3` | Max self-heal retries |\n| `PFIX_DRY_RUN` | `false` | Dry-run mode |\n| `PFIX_ENABLED` | `true` | Enable pfix |\n| `PFIX_GIT_COMMIT` | `false` | Auto-commit fixes |\n| `PFIX_GIT_PREFIX` | `pfix:` | Commit message prefix |\n| `PFIX_CREATE_BACKUPS` | `false` | Disable `.pfix_backups/` |\n\nGUI injection (Wayland/X11) also reads `KORU_*` variables — see [`SUMD.md`](SUMD.md) for the full list (`KORU_OS_INJECTOR`, `KORU_INJECTOR_BACKEND`, `WAYLAND_DISPLAY`, `DISPLAY`, …).\n\n## Testing\n\n**Core domain** (`src/gillm`):\n\n```bash\npython -m pytest tests/ -q\n# or: make test\n```\n\nMain modules:\n\n- `tests/test_injector.py` — `gillm.injection.injector.Injector` (keyboard backends: xdotool/ydotool/wtype)\n- `tests/test_os_injector.py` — calibrated profiles under `~/.koru/ide-os-injector.json`\n- `tests/test_gui_driver.py`, `tests/test_drive_backend.py`, `tests/test_recovery.py`\n\n**Control layer** (`packages/*2gillm`):\n\n```bash\npython -m pytest packages/dsl2gillm/tests packages/uri2gillm/tests packages/nlp2gillm/tests \\\n       packages/cli2gillm/tests packages/mcp2gillm/tests packages/rest2gillm/tests -q\n```\n\nMakefile shortcuts: `make test-fast`, `make test-unit`, `make test-integration`, `make test-slow`.\n\nKoru keeps integration tests only (daemon wire protocol, IDE shims, CLI). Do not re-add duplicate injector unit tests under `koru/tests/`.\n\n## Project layout\n\n```\ngillm/\n├── src/gillm/          # GUI domain: focus, injection, capture, orchestrator, recovery\n├── packages/           # Control adapters: dsl2gillm, uri2gillm, nlp2gillm, cli2gillm, mcp2gillm, rest2gillm\n├── tests/              # Domain unit tests\n├── fixtures/           # Workflow JSON for dry-run smoke tests\n├── app.doql.less       # DOQL application declaration\n├── SUMD.md             # Structured Unified Markdown Descriptor (full project spec)\n└── pyproject.toml\n```\n\n## Documentation\n\n| Document | Purpose |\n|----------|---------|\n| [README.md](README.md) | User guide (this file) |\n| [SUMD.md](SUMD.md) | Full Structured Unified Markdown Descriptor — DOQL, interfaces, env vars, call graph, test contracts |\n| [SUMR.md](SUMR.md) | Compact SUMD for refactoring (call graph, duplication, evolution) |\n| [packages/README.md](packages/README.md) | Control layer architecture, smoke tests, DSL verbs |\n| [app.doql.less](app.doql.less) | DOQL application declaration (source of truth for entities/workflows) |\n| [CHANGELOG.md](CHANGELOG.md) | Release history |\n| [project/README.md](project/README.md) | Generated code analysis artifacts (`*.toon.yaml`, Mermaid) |\n| [project/context.md](project/context.md) | LLM-ready architecture narrative |\n| [packages/CONTROL_LAYER_PROMPT.template.md](packages/CONTROL_LAYER_PROMPT.template.md) | Template for extending `*2gillm` adapters |\n\nPer-package docs: [dsl2gillm](packages/dsl2gillm/README.md) · [uri2gillm](packages/uri2gillm/README.md) · [nlp2gillm](packages/nlp2gillm/README.md) · [cli2gillm](packages/cli2gillm/README.md) · [mcp2gillm](packages/mcp2gillm/README.md) · [rest2gillm](packages/rest2gillm/README.md)\n\n## License\n\nLicensed under Apache-2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemcod%2Fgillm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsemcod%2Fgillm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemcod%2Fgillm/lists"}