poller-service-deploy-via-factory (fork 1). New optional module `agents-task-runner` — the standing-duty stack (task-runner + watchdog + appeals-inbox) installed as OS-native services by the L2 setup skill. - creates: setup_skill setup-agents-task-runner - forward-looking `service:` block (run_as: user + 3 processes + health_check) for factory L1 Go-CLI; L0b bootstrap.ps1 ignores extra module fields - nested processes use `- name:` not `- id:` so the bootstrap regex parser doesn't mis-ingest them as phantom modules - factory_version 0.3.0 -> 0.4.0 (MINOR: new module) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
173 lines
5.8 KiB
YAML
173 lines
5.8 KiB
YAML
# factory.yaml — manifest компонентов factory
|
|
#
|
|
# Runtime variables (expanded from ~/.config/factory/home.toml):
|
|
# {git_host} — e.g. https://git.kzntsv.site
|
|
# {git_org} — e.g. OpeItcLoc03
|
|
# {projects_dir} — e.g. C:\Users\alice\projects
|
|
# {factory} — {projects_dir}\.factory
|
|
# {home} — user home dir (~)
|
|
|
|
schema_version: "1"
|
|
factory_version: "0.4.0"
|
|
|
|
# ── Core (always installed) ──────────────────────────────────────────────────
|
|
#
|
|
# Everything in core ships inside the factory repo:
|
|
# lib/ — MCP servers (built locally on install)
|
|
# skills/ — skill files (copied to ~/.claude/skills/)
|
|
#
|
|
# bootstrap.ps1 reads this list to drive the build loop.
|
|
|
|
core:
|
|
components:
|
|
|
|
- id: projects-meta-mcp
|
|
display_name: "Projects-meta MCP server"
|
|
source: lib/projects-meta-mcp
|
|
version: "2.25.0"
|
|
type: typescript
|
|
install:
|
|
run:
|
|
- npm install --silent
|
|
- npm run build
|
|
health_check:
|
|
type: mcp_tool
|
|
tool: mcp__projects-meta__meta_status
|
|
|
|
- id: wiki-graph
|
|
display_name: "Wiki-graph MCP server"
|
|
source: lib/wiki-graph
|
|
version: "0.3.1"
|
|
type: typescript
|
|
install:
|
|
run:
|
|
- npm install --silent
|
|
- npm run build
|
|
health_check:
|
|
type: mcp_tool
|
|
tool: mcp__wiki-graph__stats
|
|
|
|
- id: interns-mcp
|
|
display_name: "Interns MCP server"
|
|
source: lib/interns-mcp
|
|
version: "0.3.3"
|
|
type: python
|
|
install:
|
|
venv: .venv
|
|
pip: "-e ."
|
|
health_check:
|
|
type: mcp_tool
|
|
tool: mcp__interns__bulk_text_read
|
|
|
|
- id: skills
|
|
display_name: "Claude skills"
|
|
source: skills
|
|
version: "bundled"
|
|
type: skills
|
|
install:
|
|
copy_to: "{home}/.claude/skills/"
|
|
health_check:
|
|
type: directory_exists
|
|
path: "{home}/.claude/skills"
|
|
|
|
# ── Modules (selected at install time) ──────────────────────────────────────
|
|
#
|
|
# Each module is optional. bootstrap.ps1 asks the user which to install.
|
|
# creates[] describes what bootstrap creates on the user's machine/Gitea.
|
|
#
|
|
# create types:
|
|
# local_dir — create a local directory
|
|
# gitea_repo — create a repo on the user's Gitea via API
|
|
# local_clone — git clone a repo locally
|
|
# claude_md_snippet — append a trigger line to CLAUDE.md
|
|
# setup_skill — run a setup-* skill post-install
|
|
|
|
modules:
|
|
|
|
- id: tasks
|
|
optional: true
|
|
description: "Task management — projects-meta board + per-project .tasks/"
|
|
creates:
|
|
- type: local_dir
|
|
path: "{projects_dir}/.tasks"
|
|
- type: claude_md_snippet
|
|
content: "use task management system"
|
|
- type: setup_skill
|
|
skill: setup-tasks
|
|
|
|
- id: wiki
|
|
optional: true
|
|
description: "Shared knowledge wiki — linked plaintext, no RAG"
|
|
creates:
|
|
- type: gitea_repo
|
|
name: "projects-wiki"
|
|
visibility: private
|
|
description: "Shared project wiki"
|
|
init: true
|
|
- type: local_clone
|
|
repo: "{git_host}/{git_org}/projects-wiki"
|
|
path: "{projects_dir}/.wiki"
|
|
- type: claude_md_snippet
|
|
content: "use project wiki"
|
|
- type: setup_skill
|
|
skill: setup-wiki
|
|
|
|
- id: workshop
|
|
optional: true
|
|
description: "Boss-zone — design work, brainstorms, archived decisions"
|
|
creates:
|
|
- type: gitea_repo
|
|
name: ".workshop"
|
|
visibility: private
|
|
description: "Design workspace and brainstorm archive"
|
|
init: true
|
|
- type: local_clone
|
|
repo: "{git_host}/{git_org}/.workshop"
|
|
path: "{projects_dir}/.workshop"
|
|
|
|
- id: admin
|
|
optional: true
|
|
description: "Ops zone — infrastructure administration and runbooks"
|
|
creates:
|
|
- type: gitea_repo
|
|
name: ".admin"
|
|
visibility: private
|
|
description: "Infrastructure ops and admin notes"
|
|
init: true
|
|
- type: local_clone
|
|
repo: "{git_host}/{git_org}/.admin"
|
|
path: "{projects_dir}/.admin"
|
|
|
|
- id: agents-task-runner
|
|
optional: true
|
|
description: "Standing-duty stack — task-runner + watchdog + appeals-inbox as OS-native services"
|
|
# Host node processes (mongo + reconciler stay in docker, own restart policy). Installed as
|
|
# platform-native services (systemd / launchd / winsw) by the L2 setup skill — no node window,
|
|
# OS-supervised autostart + crash-restart. Scope is runtime config (poller-scope.json),
|
|
# disarmed by default. Service templates: OpeItcLoc03/common @ lib/agents-task-runner/service/.
|
|
creates:
|
|
- type: setup_skill
|
|
skill: setup-agents-task-runner
|
|
# Forward-looking for factory L1 (Go-CLI, build-pending): the three supervised processes and
|
|
# their health probes. bootstrap.ps1 (L0b) reads only `- id:` for modules and ignores the rest;
|
|
# the L2 setup skill performs the actual install + verification.
|
|
service:
|
|
run_as: user # NOT root / LocalSystem — reads ~/.config, ~/.claude, git creds; spawns claude
|
|
# NOTE: nested keys use `- name:` (not `- id:`) on purpose — the L0b bootstrap.ps1 manifest
|
|
# parser treats every `- id:` line as a top-level component/module item and would otherwise
|
|
# mis-ingest these processes as phantom modules. `- name:` is invisible to that regex.
|
|
processes:
|
|
- name: agents-task-runner
|
|
health_check:
|
|
type: http
|
|
url: "http://localhost:3000"
|
|
- name: agents-task-runner-watchdog
|
|
health_check:
|
|
type: log_fresh
|
|
path: "watchdog.log"
|
|
max_age_s: 120
|
|
- name: agents-task-runner-appeals-inbox
|
|
health_check:
|
|
type: http
|
|
url: "http://127.0.0.1:4317"
|