lastlight 0.1.15 → 0.2.1
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 +265 -118
- package/agent-context/rules.md +62 -9
- package/agent-context/security.md +69 -0
- package/config/default.yaml +89 -0
- package/deploy/.env.production.example +20 -2
- package/deploy/entrypoint.sh +16 -17
- package/deploy/native/README.md +160 -0
- package/deploy/native/install.sh +110 -0
- package/deploy/native/lastlight.env.example +95 -0
- package/deploy/native/lastlight.service +50 -0
- package/deploy/sandbox-entrypoint.sh +59 -42
- package/dist/admin/auth.d.ts +1 -1
- package/dist/admin/auth.js +3 -1
- package/dist/admin/auth.js.map +1 -1
- package/dist/admin/chat-session-reader.d.ts +11 -14
- package/dist/admin/chat-session-reader.js +27 -51
- package/dist/admin/chat-session-reader.js.map +1 -1
- package/dist/admin/docker.d.ts +37 -0
- package/dist/admin/docker.js +86 -1
- package/dist/admin/docker.js.map +1 -1
- package/dist/admin/index.js +38 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/log-search.test.d.ts +1 -0
- package/dist/admin/log-search.test.js +78 -0
- package/dist/admin/log-search.test.js.map +1 -0
- package/dist/admin/routes.d.ts +52 -3
- package/dist/admin/routes.js +780 -63
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/routes.test.js +680 -14
- package/dist/admin/routes.test.js.map +1 -1
- package/dist/admin/server-logs.test.d.ts +1 -0
- package/dist/admin/server-logs.test.js +58 -0
- package/dist/admin/server-logs.test.js.map +1 -0
- package/dist/admin/sessions.d.ts +26 -39
- package/dist/admin/sessions.js +86 -310
- package/dist/admin/sessions.js.map +1 -1
- package/dist/admin/sessions.test.d.ts +1 -0
- package/dist/admin/sessions.test.js +78 -0
- package/dist/admin/sessions.test.js.map +1 -0
- package/dist/admin/version.d.ts +15 -0
- package/dist/admin/version.js +73 -0
- package/dist/admin/version.js.map +1 -0
- package/dist/admin/version.test.d.ts +1 -0
- package/dist/admin/version.test.js +71 -0
- package/dist/admin/version.test.js.map +1 -0
- package/dist/cli-config.d.ts +55 -0
- package/dist/cli-config.js +119 -0
- package/dist/cli-config.js.map +1 -0
- package/dist/cli-config.test.d.ts +1 -0
- package/dist/cli-config.test.js +92 -0
- package/dist/cli-config.test.js.map +1 -0
- package/dist/cli-format.d.ts +19 -0
- package/dist/cli-format.js +107 -0
- package/dist/cli-format.js.map +1 -0
- package/dist/cli-server.d.ts +73 -0
- package/dist/cli-server.js +347 -0
- package/dist/cli-server.js.map +1 -0
- package/dist/cli-server.test.d.ts +1 -0
- package/dist/cli-server.test.js +38 -0
- package/dist/cli-server.test.js.map +1 -0
- package/dist/cli-timeline.d.ts +35 -0
- package/dist/cli-timeline.js +373 -0
- package/dist/cli-timeline.js.map +1 -0
- package/dist/cli-timeline.test.d.ts +1 -0
- package/dist/cli-timeline.test.js +104 -0
- package/dist/cli-timeline.test.js.map +1 -0
- package/dist/cli.d.ts +0 -19
- package/dist/cli.js +910 -194
- package/dist/cli.js.map +1 -1
- package/dist/config-overlay.test.d.ts +1 -0
- package/dist/config-overlay.test.js +112 -0
- package/dist/config-overlay.test.js.map +1 -0
- package/dist/config-resolve.d.ts +28 -0
- package/dist/config-resolve.js +47 -0
- package/dist/config-resolve.js.map +1 -0
- package/dist/config-resolve.test.d.ts +1 -0
- package/dist/config-resolve.test.js +68 -0
- package/dist/config-resolve.test.js.map +1 -0
- package/dist/config.d.ts +62 -49
- package/dist/config.js +452 -76
- package/dist/config.js.map +1 -1
- package/dist/config.test.js +201 -32
- package/dist/config.test.js.map +1 -1
- package/dist/connectors/github-webhook.js +83 -5
- package/dist/connectors/github-webhook.js.map +1 -1
- package/dist/connectors/github-webhook.test.d.ts +1 -0
- package/dist/connectors/github-webhook.test.js +156 -0
- package/dist/connectors/github-webhook.test.js.map +1 -0
- package/dist/connectors/messaging/session-manager.d.ts +18 -0
- package/dist/connectors/messaging/session-manager.js +83 -2
- package/dist/connectors/messaging/session-manager.js.map +1 -1
- package/dist/connectors/messaging/session-manager.test.d.ts +1 -0
- package/dist/connectors/messaging/session-manager.test.js +144 -0
- package/dist/connectors/messaging/session-manager.test.js.map +1 -0
- package/dist/connectors/slack/connector.d.ts +9 -0
- package/dist/connectors/slack/connector.js +15 -0
- package/dist/connectors/slack/connector.js.map +1 -1
- package/dist/connectors/slack/mrkdwn.js +81 -0
- package/dist/connectors/slack/mrkdwn.js.map +1 -1
- package/dist/connectors/slack/mrkdwn.test.js +49 -0
- package/dist/connectors/slack/mrkdwn.test.js.map +1 -1
- package/dist/connectors/types.d.ts +1 -1
- package/dist/cron/fanout.d.ts +33 -0
- package/dist/cron/fanout.js +55 -0
- package/dist/cron/fanout.js.map +1 -0
- package/dist/cron/fanout.test.d.ts +1 -0
- package/dist/cron/fanout.test.js +73 -0
- package/dist/cron/fanout.test.js.map +1 -0
- package/dist/cron/jobs.d.ts +5 -0
- package/dist/cron/jobs.js +10 -3
- package/dist/cron/jobs.js.map +1 -1
- package/dist/cron/scheduler.d.ts +12 -0
- package/dist/cron/scheduler.js +27 -1
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/engine/agent-executor.d.ts +158 -0
- package/dist/engine/agent-executor.js +1140 -0
- package/dist/engine/agent-executor.js.map +1 -0
- package/dist/engine/agent-executor.test.d.ts +1 -0
- package/dist/engine/agent-executor.test.js +395 -0
- package/dist/engine/agent-executor.test.js.map +1 -0
- package/dist/engine/chat-runner.d.ts +123 -0
- package/dist/engine/chat-runner.js +379 -0
- package/dist/engine/chat-runner.js.map +1 -0
- package/dist/engine/chat-runner.test.d.ts +1 -0
- package/dist/engine/chat-runner.test.js +104 -0
- package/dist/engine/chat-runner.test.js.map +1 -0
- package/dist/engine/chat-skills.d.ts +45 -0
- package/dist/engine/chat-skills.js +184 -0
- package/dist/engine/chat-skills.js.map +1 -0
- package/dist/engine/chat-skills.test.d.ts +1 -0
- package/dist/engine/chat-skills.test.js +20 -0
- package/dist/engine/chat-skills.test.js.map +1 -0
- package/dist/engine/chat.d.ts +20 -23
- package/dist/engine/chat.js +251 -155
- package/dist/engine/chat.js.map +1 -1
- package/dist/engine/chat.test.d.ts +1 -0
- package/dist/engine/chat.test.js +42 -0
- package/dist/engine/chat.test.js.map +1 -0
- package/dist/engine/classifier.d.ts +35 -2
- package/dist/engine/classifier.js +170 -31
- package/dist/engine/classifier.js.map +1 -1
- package/dist/engine/classifier.test.d.ts +1 -0
- package/dist/engine/classifier.test.js +115 -0
- package/dist/engine/classifier.test.js.map +1 -0
- package/dist/engine/dispatcher.d.ts +60 -0
- package/dist/engine/dispatcher.js +601 -0
- package/dist/engine/dispatcher.js.map +1 -0
- package/dist/engine/dispatcher.test.d.ts +1 -0
- package/dist/engine/dispatcher.test.js +511 -0
- package/dist/engine/dispatcher.test.js.map +1 -0
- package/dist/engine/event-shim.d.ts +117 -0
- package/dist/engine/event-shim.js +435 -0
- package/dist/engine/event-shim.js.map +1 -0
- package/dist/engine/event-shim.test.d.ts +1 -0
- package/dist/engine/event-shim.test.js +194 -0
- package/dist/engine/event-shim.test.js.map +1 -0
- package/dist/engine/git-auth.d.ts +13 -17
- package/dist/engine/git-auth.js +99 -42
- package/dist/engine/git-auth.js.map +1 -1
- package/dist/engine/git-auth.test.d.ts +1 -0
- package/dist/engine/git-auth.test.js +117 -0
- package/dist/engine/git-auth.test.js.map +1 -0
- package/dist/engine/github-app-client.d.ts +7 -0
- package/dist/engine/github-app-client.js +16 -0
- package/dist/engine/github-app-client.js.map +1 -0
- package/dist/engine/github-app-client.test.d.ts +1 -0
- package/dist/engine/github-app-client.test.js +44 -0
- package/dist/engine/github-app-client.test.js.map +1 -0
- package/dist/engine/github-tools.d.ts +12 -0
- package/dist/engine/github-tools.js +261 -0
- package/dist/engine/github-tools.js.map +1 -0
- package/dist/engine/github.d.ts +1027 -43
- package/dist/engine/github.js +153 -14
- package/dist/engine/github.js.map +1 -1
- package/dist/engine/llm.d.ts +47 -0
- package/dist/engine/llm.js +221 -0
- package/dist/engine/llm.js.map +1 -0
- package/dist/engine/llm.test.d.ts +1 -0
- package/dist/engine/llm.test.js +189 -0
- package/dist/engine/llm.test.js.map +1 -0
- package/dist/engine/profiles.d.ts +249 -0
- package/dist/engine/profiles.js +42 -0
- package/dist/engine/profiles.js.map +1 -0
- package/dist/engine/router.d.ts +12 -6
- package/dist/engine/router.js +339 -81
- package/dist/engine/router.js.map +1 -1
- package/dist/engine/router.test.js +428 -78
- package/dist/engine/router.test.js.map +1 -1
- package/dist/engine/screen.d.ts +41 -0
- package/dist/engine/screen.js +93 -0
- package/dist/engine/screen.js.map +1 -0
- package/dist/engine/screen.test.d.ts +1 -0
- package/dist/engine/screen.test.js +82 -0
- package/dist/engine/screen.test.js.map +1 -0
- package/dist/index.js +377 -432
- package/dist/index.js.map +1 -1
- package/dist/managed-repos.d.ts +7 -9
- package/dist/managed-repos.js +12 -15
- package/dist/managed-repos.js.map +1 -1
- package/dist/managed-repos.test.js +24 -19
- package/dist/managed-repos.test.js.map +1 -1
- package/dist/notify/index.d.ts +15 -0
- package/dist/notify/index.js +6 -0
- package/dist/notify/index.js.map +1 -0
- package/dist/notify/model.d.ts +57 -0
- package/dist/notify/model.js +89 -0
- package/dist/notify/model.js.map +1 -0
- package/dist/notify/model.test.d.ts +1 -0
- package/dist/notify/model.test.js +109 -0
- package/dist/notify/model.test.js.map +1 -0
- package/dist/notify/notifier.d.ts +17 -0
- package/dist/notify/notifier.js +87 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/notify/notifier.test.d.ts +1 -0
- package/dist/notify/notifier.test.js +100 -0
- package/dist/notify/notifier.test.js.map +1 -0
- package/dist/notify/render.d.ts +21 -0
- package/dist/notify/render.js +59 -0
- package/dist/notify/render.js.map +1 -0
- package/dist/notify/render.test.d.ts +1 -0
- package/dist/notify/render.test.js +65 -0
- package/dist/notify/render.test.js.map +1 -0
- package/dist/notify/transports/github.d.ts +26 -0
- package/dist/notify/transports/github.js +26 -0
- package/dist/notify/transports/github.js.map +1 -0
- package/dist/notify/transports/slack.d.ts +26 -0
- package/dist/notify/transports/slack.js +28 -0
- package/dist/notify/transports/slack.js.map +1 -0
- package/dist/notify/transports.test.d.ts +1 -0
- package/dist/notify/transports.test.js +71 -0
- package/dist/notify/transports.test.js.map +1 -0
- package/dist/notify/types.d.ts +95 -0
- package/dist/notify/types.js +16 -0
- package/dist/notify/types.js.map +1 -0
- package/dist/sandbox/docker-compose.test.d.ts +1 -0
- package/dist/sandbox/docker-compose.test.js +128 -0
- package/dist/sandbox/docker-compose.test.js.map +1 -0
- package/dist/sandbox/docker.d.ts +97 -9
- package/dist/sandbox/docker.js +192 -41
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/docker.test.d.ts +1 -0
- package/dist/sandbox/docker.test.js +137 -0
- package/dist/sandbox/docker.test.js.map +1 -0
- package/dist/sandbox/egress-allowlist.d.ts +69 -0
- package/dist/sandbox/egress-allowlist.js +164 -0
- package/dist/sandbox/egress-allowlist.js.map +1 -0
- package/dist/sandbox/egress-allowlist.test.d.ts +1 -0
- package/dist/sandbox/egress-allowlist.test.js +65 -0
- package/dist/sandbox/egress-allowlist.test.js.map +1 -0
- package/dist/sandbox/egress-firewall-config.d.ts +127 -0
- package/dist/sandbox/egress-firewall-config.js +434 -0
- package/dist/sandbox/egress-firewall-config.js.map +1 -0
- package/dist/sandbox/egress-firewall-config.test.d.ts +1 -0
- package/dist/sandbox/egress-firewall-config.test.js +244 -0
- package/dist/sandbox/egress-firewall-config.test.js.map +1 -0
- package/dist/sandbox/images.d.ts +23 -0
- package/dist/sandbox/images.js +55 -0
- package/dist/sandbox/images.js.map +1 -0
- package/dist/sandbox/index.d.ts +82 -3
- package/dist/sandbox/index.js +223 -93
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/index.test.d.ts +1 -0
- package/dist/sandbox/index.test.js +157 -0
- package/dist/sandbox/index.test.js.map +1 -0
- package/dist/session-log.d.ts +63 -0
- package/dist/session-log.js +290 -0
- package/dist/session-log.js.map +1 -0
- package/dist/session-log.test.d.ts +1 -0
- package/dist/session-log.test.js +85 -0
- package/dist/session-log.test.js.map +1 -0
- package/dist/setup.d.ts +30 -1
- package/dist/setup.js +241 -25
- package/dist/setup.js.map +1 -1
- package/dist/setup.test.js +138 -6
- package/dist/setup.test.js.map +1 -1
- package/dist/state/approval-store.d.ts +86 -0
- package/dist/state/approval-store.js +140 -0
- package/dist/state/approval-store.js.map +1 -0
- package/dist/state/build-assets.d.ts +50 -0
- package/dist/state/build-assets.js +154 -0
- package/dist/state/build-assets.js.map +1 -0
- package/dist/state/build-assets.test.d.ts +1 -0
- package/dist/state/build-assets.test.js +106 -0
- package/dist/state/build-assets.test.js.map +1 -0
- package/dist/state/db.d.ts +65 -333
- package/dist/state/db.js +112 -835
- package/dist/state/db.js.map +1 -1
- package/dist/state/db.test.js +127 -91
- package/dist/state/db.test.js.map +1 -1
- package/dist/state/execution-store.d.ts +257 -0
- package/dist/state/execution-store.js +527 -0
- package/dist/state/execution-store.js.map +1 -0
- package/dist/state/migrate.d.ts +15 -0
- package/dist/state/migrate.js +175 -0
- package/dist/state/migrate.js.map +1 -0
- package/dist/state/workflow-run-store.d.ts +195 -0
- package/dist/state/workflow-run-store.js +363 -0
- package/dist/state/workflow-run-store.js.map +1 -0
- package/dist/state/workflow-run-store.test.d.ts +1 -0
- package/dist/state/workflow-run-store.test.js +264 -0
- package/dist/state/workflow-run-store.test.js.map +1 -0
- package/dist/telemetry/index.d.ts +38 -0
- package/dist/telemetry/index.js +253 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/index.test.d.ts +1 -0
- package/dist/telemetry/index.test.js +73 -0
- package/dist/telemetry/index.test.js.map +1 -0
- package/dist/telemetry/pi-events.d.ts +12 -0
- package/dist/telemetry/pi-events.js +134 -0
- package/dist/telemetry/pi-events.js.map +1 -0
- package/dist/telemetry/pi-events.test.d.ts +1 -0
- package/dist/telemetry/pi-events.test.js +69 -0
- package/dist/telemetry/pi-events.test.js.map +1 -0
- package/dist/workflows/dag.d.ts +13 -1
- package/dist/workflows/dag.js +7 -3
- package/dist/workflows/dag.js.map +1 -1
- package/dist/workflows/dag.test.js +22 -0
- package/dist/workflows/dag.test.js.map +1 -1
- package/dist/workflows/golden-build.test.d.ts +1 -0
- package/dist/workflows/golden-build.test.js +45 -0
- package/dist/workflows/golden-build.test.js.map +1 -0
- package/dist/workflows/loader-overlay.test.d.ts +1 -0
- package/dist/workflows/loader-overlay.test.js +101 -0
- package/dist/workflows/loader-overlay.test.js.map +1 -0
- package/dist/workflows/loader.d.ts +36 -11
- package/dist/workflows/loader.js +311 -87
- package/dist/workflows/loader.js.map +1 -1
- package/dist/workflows/loader.test.js +114 -10
- package/dist/workflows/loader.test.js.map +1 -1
- package/dist/workflows/loop-eval.js +2 -0
- package/dist/workflows/loop-eval.js.map +1 -1
- package/dist/workflows/loop-eval.test.js +14 -0
- package/dist/workflows/loop-eval.test.js.map +1 -1
- package/dist/workflows/phase-executor.d.ts +145 -0
- package/dist/workflows/phase-executor.js +691 -0
- package/dist/workflows/phase-executor.js.map +1 -0
- package/dist/workflows/phase-executor.test.d.ts +1 -0
- package/dist/workflows/phase-executor.test.js +434 -0
- package/dist/workflows/phase-executor.test.js.map +1 -0
- package/dist/workflows/phase-ref.d.ts +44 -0
- package/dist/workflows/phase-ref.js +78 -0
- package/dist/workflows/phase-ref.js.map +1 -0
- package/dist/workflows/phase-ref.test.d.ts +1 -0
- package/dist/workflows/phase-ref.test.js +24 -0
- package/dist/workflows/phase-ref.test.js.map +1 -0
- package/dist/workflows/resume.d.ts +5 -11
- package/dist/workflows/resume.js +88 -7
- package/dist/workflows/resume.js.map +1 -1
- package/dist/workflows/runner.d.ts +34 -27
- package/dist/workflows/runner.js +252 -930
- package/dist/workflows/runner.js.map +1 -1
- package/dist/workflows/runner.test.js +346 -35
- package/dist/workflows/runner.test.js.map +1 -1
- package/dist/workflows/schema.d.ts +52 -10
- package/dist/workflows/schema.js +147 -7
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/simple.d.ts +67 -3
- package/dist/workflows/simple.js +248 -87
- package/dist/workflows/simple.js.map +1 -1
- package/dist/workflows/simple.test.d.ts +1 -0
- package/dist/workflows/simple.test.js +107 -0
- package/dist/workflows/simple.test.js.map +1 -0
- package/dist/workflows/templates.d.ts +29 -0
- package/dist/workflows/templates.js +42 -4
- package/dist/workflows/templates.js.map +1 -1
- package/dist/workflows/templates.test.js +103 -0
- package/dist/workflows/templates.test.js.map +1 -1
- package/dist/workflows/triggers.d.ts +21 -0
- package/dist/workflows/triggers.js +44 -0
- package/dist/workflows/triggers.js.map +1 -0
- package/dist/workflows/verdict.d.ts +19 -0
- package/dist/workflows/verdict.js +30 -0
- package/dist/workflows/verdict.js.map +1 -0
- package/dist/workflows/verdict.test.d.ts +1 -0
- package/dist/workflows/verdict.test.js +44 -0
- package/dist/workflows/verdict.test.js.map +1 -0
- package/dist/worktree/manager.d.ts +1 -1
- package/dist/worktree/manager.js +14 -14
- package/dist/worktree/manager.js.map +1 -1
- package/dist/worktree/manager.test.d.ts +1 -0
- package/dist/worktree/manager.test.js +87 -0
- package/dist/worktree/manager.test.js.map +1 -0
- package/docker-compose.yml +206 -5
- package/package.json +19 -9
- package/sandbox.Dockerfile +97 -18
- package/skills/README.md +40 -0
- package/skills/browser-qa/SKILL.md +193 -0
- package/skills/browser-qa/scripts/agent-browser.mjs +380 -0
- package/skills/building/SKILL.md +95 -0
- package/skills/chat/SKILL.md +30 -11
- package/skills/code-review/SKILL.md +59 -0
- package/skills/debug-production/SKILL.md +108 -0
- package/skills/demo/SKILL.md +194 -0
- package/skills/demo/scripts/compose-demo.sh +205 -0
- package/skills/issue-answer/SKILL.md +90 -0
- package/skills/issue-comment/SKILL.md +38 -24
- package/skills/issue-triage/SKILL.md +103 -37
- package/skills/issue-triage/references/AGENT-BRIEF.md +61 -0
- package/skills/pr-comment/SKILL.md +64 -0
- package/skills/pr-review/SKILL.md +65 -49
- package/skills/qa-test/SKILL.md +97 -0
- package/skills/repo-health/SKILL.md +48 -45
- package/skills/security-feedback/SKILL.md +173 -0
- package/skills/security-feedback/references/templates.md +77 -0
- package/skills/security-review/SKILL.md +213 -0
- package/skills/security-review/references/issue-format.md +302 -0
- package/skills/verify/SKILL.md +118 -0
- package/workflows/answer.yaml +37 -0
- package/workflows/build.yaml +32 -22
- package/workflows/cron-security.yaml +6 -0
- package/workflows/demo.yaml +55 -0
- package/workflows/explore.yaml +9 -0
- package/workflows/pr-comment.yaml +16 -0
- package/workflows/pr-fix.yaml +3 -0
- package/workflows/pr-review.yaml +4 -1
- package/workflows/prompts/answer.md +67 -0
- package/workflows/prompts/architect.md +24 -7
- package/workflows/prompts/demo.md +100 -0
- package/workflows/prompts/executor.md +29 -20
- package/workflows/prompts/explore-ask.md +51 -22
- package/workflows/prompts/explore-publish.md +2 -2
- package/workflows/prompts/explore-read.md +24 -10
- package/workflows/prompts/explore-synthesize.md +15 -8
- package/workflows/prompts/fix.md +9 -10
- package/workflows/prompts/guardrails.md +26 -8
- package/workflows/prompts/pr-fix.md +6 -7
- package/workflows/prompts/pr.md +11 -10
- package/workflows/prompts/qa-browser.md +95 -0
- package/workflows/prompts/qa-synth.md +44 -0
- package/workflows/prompts/qa-test.md +60 -0
- package/workflows/prompts/re-reviewer.md +8 -9
- package/workflows/prompts/reviewer.md +10 -9
- package/workflows/prompts/verify-browser.md +93 -0
- package/workflows/prompts/verify-synth.md +44 -0
- package/workflows/prompts/verify.md +63 -0
- package/workflows/qa-test.yaml +87 -0
- package/workflows/security-feedback.yaml +25 -0
- package/workflows/security-review.yaml +29 -0
- package/workflows/verify.yaml +85 -0
- package/deploy/mcp-config.tmpl.json +0 -14
- package/dist/cron/rate-limits.d.ts +0 -26
- package/dist/cron/rate-limits.js +0 -193
- package/dist/cron/rate-limits.js.map +0 -1
- package/dist/engine/executor.d.ts +0 -75
- package/dist/engine/executor.js +0 -292
- package/dist/engine/executor.js.map +0 -1
- package/mcp-github-app/package.json +0 -18
- package/mcp-github-app/src/auth.js +0 -66
- package/mcp-github-app/src/github.js +0 -371
- package/mcp-github-app/src/index.js +0 -534
- package/skills/devops/webhook-subscriptions/SKILL.md +0 -180
- package/skills/github/DESCRIPTION.md +0 -3
- package/skills/github/codebase-inspection/SKILL.md +0 -115
- package/skills/github/github-auth/SKILL.md +0 -54
- package/skills/github/github-auth/scripts/gh-env.sh +0 -66
- package/skills/github/github-code-review/SKILL.md +0 -480
- package/skills/github/github-code-review/references/review-output-template.md +0 -74
- package/skills/github/github-issues/SKILL.md +0 -369
- package/skills/github/github-issues/templates/bug-report.md +0 -35
- package/skills/github/github-issues/templates/feature-request.md +0 -31
- package/skills/github/github-pr-workflow/SKILL.md +0 -395
- package/skills/github/github-pr-workflow/references/ci-troubleshooting.md +0 -183
- package/skills/github/github-pr-workflow/references/conventional-commits.md +0 -71
- package/skills/github/github-pr-workflow/templates/pr-body-bugfix.md +0 -35
- package/skills/github/github-pr-workflow/templates/pr-body-feature.md +0 -33
- package/skills/github/github-repo-management/SKILL.md +0 -515
- package/skills/github/github-repo-management/references/github-api-cheatsheet.md +0 -161
- package/skills/github-orchestrator/SKILL.md +0 -103
- package/skills/mcp/DESCRIPTION.md +0 -3
- package/skills/mcp/mcporter/SKILL.md +0 -122
- package/skills/mcp/native-mcp/SKILL.md +0 -356
- package/skills/software-development/architect/SKILL.md +0 -154
- package/skills/software-development/assure-guardrails/SKILL.md +0 -239
- package/skills/software-development/plan/SKILL.md +0 -64
- package/skills/software-development/requesting-code-review/SKILL.md +0 -291
- package/skills/software-development/subagent-driven-development/SKILL.md +0 -433
- package/skills/software-development/systematic-debugging/SKILL.md +0 -366
- package/skills/software-development/test-driven-development/SKILL.md +0 -342
|
@@ -1,433 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: subagent-driven-development
|
|
3
|
-
description: Use when executing implementation plans with independent tasks. Dispatches fresh delegate_task per task with two-stage review (spec compliance then code quality).
|
|
4
|
-
version: 1.1.0
|
|
5
|
-
author: Hermes Agent (adapted from obra/superpowers)
|
|
6
|
-
license: MIT
|
|
7
|
-
metadata:
|
|
8
|
-
hermes:
|
|
9
|
-
tags: [delegation, subagent, implementation, workflow, parallel]
|
|
10
|
-
related_skills: [plan, requesting-code-review, test-driven-development]
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Subagent-Driven Development
|
|
14
|
-
|
|
15
|
-
## Overview
|
|
16
|
-
|
|
17
|
-
Execute implementation plans by dispatching fresh subagents per task with systematic two-stage review.
|
|
18
|
-
|
|
19
|
-
**Core principle:** Fresh subagent per task + two-stage review (spec then quality) = high quality, fast iteration.
|
|
20
|
-
|
|
21
|
-
## GitHub-First Gate
|
|
22
|
-
|
|
23
|
-
Before starting any implementation work, ensure a **GitHub issue** exists to track it:
|
|
24
|
-
- If an issue already exists (e.g. from a webhook event), use it.
|
|
25
|
-
- If the request came from Discord, Slack, or CLI with no linked issue, **create one first**
|
|
26
|
-
in the appropriate managed repo. Use the request as the issue body.
|
|
27
|
-
- Post progress updates (plan, task completion, review verdicts) as comments on the issue.
|
|
28
|
-
- **Never start coding without a tracking issue.** The issue is the authorisation gate and audit trail.
|
|
29
|
-
|
|
30
|
-
## Guardrails Check
|
|
31
|
-
|
|
32
|
-
Before dispatching the first task, run the `assure-guardrails` skill on the target repo.
|
|
33
|
-
This verifies that test framework, linting, and type checking are in place. If any are
|
|
34
|
-
missing (verdict: BLOCKED), create a guardrails issue, fix the foundations first, then
|
|
35
|
-
resume. The build cycle depends on these: TDD needs tests, requesting-code-review needs
|
|
36
|
-
lint/typecheck, the Reviewer needs tests to run.
|
|
37
|
-
|
|
38
|
-
## When to Use
|
|
39
|
-
|
|
40
|
-
Use this skill when:
|
|
41
|
-
- You have an implementation plan (from plan skill or user requirements)
|
|
42
|
-
- Tasks are mostly independent
|
|
43
|
-
- Quality and spec compliance are important
|
|
44
|
-
- You want automated review between tasks
|
|
45
|
-
|
|
46
|
-
**vs. manual execution:**
|
|
47
|
-
- Fresh context per task (no confusion from accumulated state)
|
|
48
|
-
- Automated review process catches issues early
|
|
49
|
-
- Consistent quality checks across all tasks
|
|
50
|
-
- Subagents can ask questions before starting work
|
|
51
|
-
|
|
52
|
-
## The Process
|
|
53
|
-
|
|
54
|
-
### 1. Read and Parse Plan
|
|
55
|
-
|
|
56
|
-
Read the plan file. Extract ALL tasks with their full text and context upfront. Create a todo list:
|
|
57
|
-
|
|
58
|
-
```python
|
|
59
|
-
# Read the plan
|
|
60
|
-
read_file("docs/plans/feature-plan.md")
|
|
61
|
-
|
|
62
|
-
# Create todo list with all tasks
|
|
63
|
-
todo([
|
|
64
|
-
{"id": "task-1", "content": "Create User model with email field", "status": "pending"},
|
|
65
|
-
{"id": "task-2", "content": "Add password hashing utility", "status": "pending"},
|
|
66
|
-
{"id": "task-3", "content": "Create login endpoint", "status": "pending"},
|
|
67
|
-
])
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**Key:** Read the plan ONCE. Extract everything. Don't make subagents read the plan file — provide the full task text directly in context.
|
|
71
|
-
|
|
72
|
-
### 2. Per-Task Workflow
|
|
73
|
-
|
|
74
|
-
For EACH task in the plan:
|
|
75
|
-
|
|
76
|
-
#### Step 1: Dispatch Implementer Subagent
|
|
77
|
-
|
|
78
|
-
Use `delegate_task` with complete context and explicit role identity:
|
|
79
|
-
|
|
80
|
-
```python
|
|
81
|
-
delegate_task(
|
|
82
|
-
goal="Implement Task 1: Create User model with email and password_hash fields",
|
|
83
|
-
context="""
|
|
84
|
-
ROLE: You are the EXECUTOR. You implement precisely what the task spec
|
|
85
|
-
requires, no more, no less. Keep going until the task is fully resolved.
|
|
86
|
-
Do not claim completion without fresh verification output (test results,
|
|
87
|
-
build output). Prefer the smallest viable diff. Do not broaden scope
|
|
88
|
-
unless correctness requires it.
|
|
89
|
-
|
|
90
|
-
TASK FROM PLAN:
|
|
91
|
-
- Create: src/models/user.py
|
|
92
|
-
- Add User class with email (str) and password_hash (str) fields
|
|
93
|
-
- Use bcrypt for password hashing
|
|
94
|
-
- Include __repr__ for debugging
|
|
95
|
-
|
|
96
|
-
FOLLOW TDD:
|
|
97
|
-
1. Write failing test in tests/models/test_user.py
|
|
98
|
-
2. Run: pytest tests/models/test_user.py -v (verify FAIL)
|
|
99
|
-
3. Write minimal implementation
|
|
100
|
-
4. Run: pytest tests/models/test_user.py -v (verify PASS)
|
|
101
|
-
5. Run: pytest tests/ -q (verify no regressions)
|
|
102
|
-
6. Commit with Lore format:
|
|
103
|
-
git add -A && git commit -m "feat: add User model with password hashing
|
|
104
|
-
|
|
105
|
-
Tested: pytest tests/models/test_user.py -> all passing
|
|
106
|
-
Scope-risk: low"
|
|
107
|
-
|
|
108
|
-
PROJECT CONTEXT:
|
|
109
|
-
- Python 3.11, Flask app in src/app.py
|
|
110
|
-
- Existing models in src/models/
|
|
111
|
-
- Tests use pytest, run from project root
|
|
112
|
-
- bcrypt already in requirements.txt
|
|
113
|
-
""",
|
|
114
|
-
toolsets=['terminal', 'file']
|
|
115
|
-
)
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
#### Step 2: Dispatch Spec Compliance Reviewer
|
|
119
|
-
|
|
120
|
-
After the implementer completes, verify against the original spec:
|
|
121
|
-
|
|
122
|
-
```python
|
|
123
|
-
delegate_task(
|
|
124
|
-
goal="Review if implementation matches the spec from the plan",
|
|
125
|
-
context="""
|
|
126
|
-
ROLE: You are the SPEC REVIEWER. You verify implementations against
|
|
127
|
-
specifications. You do not fix code — you report gaps. Every finding
|
|
128
|
-
must cite file:line evidence. You have no shared context with the
|
|
129
|
-
implementer. Judge only by the spec and the code.
|
|
130
|
-
|
|
131
|
-
ORIGINAL TASK SPEC:
|
|
132
|
-
- Create src/models/user.py with User class
|
|
133
|
-
- Fields: email (str), password_hash (str)
|
|
134
|
-
- Use bcrypt for password hashing
|
|
135
|
-
- Include __repr__
|
|
136
|
-
|
|
137
|
-
CHECK:
|
|
138
|
-
- [ ] All requirements from spec implemented?
|
|
139
|
-
- [ ] File paths match spec?
|
|
140
|
-
- [ ] Function signatures match spec?
|
|
141
|
-
- [ ] Behavior matches expected?
|
|
142
|
-
- [ ] Nothing extra added (no scope creep)?
|
|
143
|
-
|
|
144
|
-
OUTPUT: PASS or list of specific spec gaps to fix (with file:line refs).
|
|
145
|
-
""",
|
|
146
|
-
toolsets=['file']
|
|
147
|
-
)
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
**If spec issues found:** Fix gaps, then re-run spec review. Continue only when spec-compliant.
|
|
151
|
-
|
|
152
|
-
#### Step 3: Dispatch Code Quality Reviewer
|
|
153
|
-
|
|
154
|
-
After spec compliance passes:
|
|
155
|
-
|
|
156
|
-
```python
|
|
157
|
-
delegate_task(
|
|
158
|
-
goal="Review code quality for Task 1 implementation",
|
|
159
|
-
context="""
|
|
160
|
-
ROLE: You are the CODE REVIEWER. Independent quality verification.
|
|
161
|
-
You have no shared context with the implementer. Review only the code,
|
|
162
|
-
not the process. Every finding must cite file:line evidence. You do not
|
|
163
|
-
fix code — you report issues.
|
|
164
|
-
|
|
165
|
-
FILES TO REVIEW:
|
|
166
|
-
- src/models/user.py
|
|
167
|
-
- tests/models/test_user.py
|
|
168
|
-
|
|
169
|
-
CHECK:
|
|
170
|
-
- [ ] Follows project conventions and style?
|
|
171
|
-
- [ ] Proper error handling?
|
|
172
|
-
- [ ] Clear variable/function names?
|
|
173
|
-
- [ ] Adequate test coverage?
|
|
174
|
-
- [ ] No obvious bugs or missed edge cases?
|
|
175
|
-
- [ ] No security issues?
|
|
176
|
-
|
|
177
|
-
OUTPUT FORMAT:
|
|
178
|
-
- Critical Issues: [must fix before proceeding] (with file:line refs)
|
|
179
|
-
- Important Issues: [should fix]
|
|
180
|
-
- Minor Issues: [optional]
|
|
181
|
-
- Verdict: APPROVED or REQUEST_CHANGES
|
|
182
|
-
""",
|
|
183
|
-
toolsets=['file']
|
|
184
|
-
)
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
**If quality issues found:** Fix issues, re-review. Continue only when approved.
|
|
188
|
-
|
|
189
|
-
#### Step 4: Mark Complete
|
|
190
|
-
|
|
191
|
-
```python
|
|
192
|
-
todo([{"id": "task-1", "content": "Create User model with email field", "status": "completed"}], merge=True)
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
### 3. Final Review
|
|
196
|
-
|
|
197
|
-
After ALL tasks are complete, dispatch a final integration reviewer:
|
|
198
|
-
|
|
199
|
-
```python
|
|
200
|
-
delegate_task(
|
|
201
|
-
goal="Review the entire implementation for consistency and integration issues",
|
|
202
|
-
context="""
|
|
203
|
-
ROLE: You are the CODE REVIEWER performing integration review of
|
|
204
|
-
THIS BRANCH'S CHANGES ONLY. You have no shared context with the
|
|
205
|
-
implementers. You do not fix code — you report issues.
|
|
206
|
-
|
|
207
|
-
SCOPE — CRITICAL:
|
|
208
|
-
Review ONLY the files changed on this branch vs main. Get the scope first:
|
|
209
|
-
git diff main --name-only # list of changed files
|
|
210
|
-
git diff main # the actual changes
|
|
211
|
-
|
|
212
|
-
Do NOT review unchanged files. Do NOT flag pre-existing issues.
|
|
213
|
-
You may read unchanged files for context only if needed to understand
|
|
214
|
-
a specific change.
|
|
215
|
-
|
|
216
|
-
CHECK (on changed files only):
|
|
217
|
-
- Do the changes work together as a cohesive whole?
|
|
218
|
-
- Any inconsistencies between the tasks just completed?
|
|
219
|
-
- All tests passing? (run them — do not assume)
|
|
220
|
-
- Ready for merge?
|
|
221
|
-
|
|
222
|
-
OUTPUT: APPROVED or REQUEST_CHANGES with specific issues (file:line refs).
|
|
223
|
-
""",
|
|
224
|
-
toolsets=['terminal', 'file']
|
|
225
|
-
)
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### 3b. Architect Completion Gate
|
|
229
|
-
|
|
230
|
-
After the integration reviewer passes, dispatch an architect for a final completeness check.
|
|
231
|
-
This is the "persistent until verified complete" gate — it catches gaps that individual task
|
|
232
|
-
reviews miss because they lack the full picture.
|
|
233
|
-
|
|
234
|
-
```python
|
|
235
|
-
delegate_task(
|
|
236
|
-
goal="Architect completion verification — is this truly done?",
|
|
237
|
-
context="""
|
|
238
|
-
ROLE: You are the ARCHITECT. Read-only verification. You do not fix
|
|
239
|
-
code — you assess completeness and architectural coherence.
|
|
240
|
-
|
|
241
|
-
All tasks from the plan are implemented and have passed both spec
|
|
242
|
-
compliance and code quality review.
|
|
243
|
-
|
|
244
|
-
Verify the ENTIRE implementation against the original requirements:
|
|
245
|
-
- Does the full implementation satisfy the original requirements?
|
|
246
|
-
- Any gaps between what was planned and what was built?
|
|
247
|
-
- Any architectural concerns with how the pieces fit together?
|
|
248
|
-
- Are there loose ends, missing error paths, or untested edge cases?
|
|
249
|
-
- Would you ship this? If not, what specifically is missing?
|
|
250
|
-
|
|
251
|
-
ORIGINAL PLAN:
|
|
252
|
-
[INSERT FULL PLAN CONTENT]
|
|
253
|
-
|
|
254
|
-
OUTPUT FORMAT:
|
|
255
|
-
- Verdict: COMPLETE or INCOMPLETE
|
|
256
|
-
- If INCOMPLETE: specific gaps with file:line references
|
|
257
|
-
- If COMPLETE: one-sentence confirmation
|
|
258
|
-
""",
|
|
259
|
-
toolsets=['terminal', 'file']
|
|
260
|
-
)
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
**If INCOMPLETE:** Create new tasks for the identified gaps, execute them through the
|
|
264
|
-
same per-task workflow (Steps 2-3), and re-run the architect gate. Maximum 2 cycles —
|
|
265
|
-
after that, report remaining gaps to the user.
|
|
266
|
-
|
|
267
|
-
### 4. Verify and Commit
|
|
268
|
-
|
|
269
|
-
```bash
|
|
270
|
-
# Run full test suite
|
|
271
|
-
pytest tests/ -q
|
|
272
|
-
|
|
273
|
-
# Review all changes
|
|
274
|
-
git diff --stat
|
|
275
|
-
|
|
276
|
-
# Final commit if needed
|
|
277
|
-
git add -A && git commit -m "feat: complete [feature name] implementation"
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
## Task Granularity
|
|
281
|
-
|
|
282
|
-
**Each task = 2-5 minutes of focused work.**
|
|
283
|
-
|
|
284
|
-
**Too big:**
|
|
285
|
-
- "Implement user authentication system"
|
|
286
|
-
|
|
287
|
-
**Right size:**
|
|
288
|
-
- "Create User model with email and password fields"
|
|
289
|
-
- "Add password hashing function"
|
|
290
|
-
- "Create login endpoint"
|
|
291
|
-
- "Add JWT token generation"
|
|
292
|
-
- "Create registration endpoint"
|
|
293
|
-
|
|
294
|
-
## Red Flags — Never Do These
|
|
295
|
-
|
|
296
|
-
- Start implementation without a plan
|
|
297
|
-
- Skip reviews (spec compliance OR code quality)
|
|
298
|
-
- Proceed with unfixed critical/important issues
|
|
299
|
-
- Dispatch multiple implementation subagents for tasks that touch the same files
|
|
300
|
-
- Make subagent read the plan file (provide full text in context instead)
|
|
301
|
-
- Skip scene-setting context (subagent needs to understand where the task fits)
|
|
302
|
-
- Ignore subagent questions (answer before letting them proceed)
|
|
303
|
-
- Accept "close enough" on spec compliance
|
|
304
|
-
- Skip review loops (reviewer found issues → implementer fixes → review again)
|
|
305
|
-
- Let implementer self-review replace actual review (both are needed)
|
|
306
|
-
- **Start code quality review before spec compliance is PASS** (wrong order)
|
|
307
|
-
- Move to next task while either review has open issues
|
|
308
|
-
|
|
309
|
-
## Handling Issues
|
|
310
|
-
|
|
311
|
-
### If Subagent Asks Questions
|
|
312
|
-
|
|
313
|
-
- Answer clearly and completely
|
|
314
|
-
- Provide additional context if needed
|
|
315
|
-
- Don't rush them into implementation
|
|
316
|
-
|
|
317
|
-
### If Reviewer Finds Issues
|
|
318
|
-
|
|
319
|
-
- Implementer subagent (or a new one) fixes them
|
|
320
|
-
- Reviewer reviews again
|
|
321
|
-
- Repeat until approved
|
|
322
|
-
- Don't skip the re-review
|
|
323
|
-
|
|
324
|
-
### If Subagent Fails a Task
|
|
325
|
-
|
|
326
|
-
- Dispatch a new fix subagent with specific instructions about what went wrong
|
|
327
|
-
- Don't try to fix manually in the controller session (context pollution)
|
|
328
|
-
|
|
329
|
-
## Efficiency Notes
|
|
330
|
-
|
|
331
|
-
**Why fresh subagent per task:**
|
|
332
|
-
- Prevents context pollution from accumulated state
|
|
333
|
-
- Each subagent gets clean, focused context
|
|
334
|
-
- No confusion from prior tasks' code or reasoning
|
|
335
|
-
|
|
336
|
-
**Why two-stage review:**
|
|
337
|
-
- Spec review catches under/over-building early
|
|
338
|
-
- Quality review ensures the implementation is well-built
|
|
339
|
-
- Catches issues before they compound across tasks
|
|
340
|
-
|
|
341
|
-
**Cost trade-off:**
|
|
342
|
-
- More subagent invocations (implementer + 2 reviewers per task)
|
|
343
|
-
- But catches issues early (cheaper than debugging compounded problems later)
|
|
344
|
-
|
|
345
|
-
## Integration with Other Skills
|
|
346
|
-
|
|
347
|
-
### With plan
|
|
348
|
-
|
|
349
|
-
This skill EXECUTES plans created by the plan skill:
|
|
350
|
-
1. User requirements → plan → implementation plan
|
|
351
|
-
2. Implementation plan → subagent-driven-development → working code
|
|
352
|
-
|
|
353
|
-
### With test-driven-development
|
|
354
|
-
|
|
355
|
-
Implementer subagents should follow TDD:
|
|
356
|
-
1. Write failing test first
|
|
357
|
-
2. Implement minimal code
|
|
358
|
-
3. Verify test passes
|
|
359
|
-
4. Commit
|
|
360
|
-
|
|
361
|
-
Include TDD instructions in every implementer context.
|
|
362
|
-
|
|
363
|
-
### With requesting-code-review
|
|
364
|
-
|
|
365
|
-
The two-stage review process IS the code review. For final integration review, use the requesting-code-review skill's review dimensions.
|
|
366
|
-
|
|
367
|
-
### With systematic-debugging
|
|
368
|
-
|
|
369
|
-
If a subagent encounters bugs during implementation:
|
|
370
|
-
1. Follow systematic-debugging process
|
|
371
|
-
2. Find root cause before fixing
|
|
372
|
-
3. Write regression test
|
|
373
|
-
4. Resume implementation
|
|
374
|
-
|
|
375
|
-
## Example Workflow
|
|
376
|
-
|
|
377
|
-
```
|
|
378
|
-
[Read plan: docs/plans/auth-feature.md]
|
|
379
|
-
[Create todo list with 5 tasks]
|
|
380
|
-
|
|
381
|
-
--- Task 1: Create User model ---
|
|
382
|
-
[Dispatch implementer subagent]
|
|
383
|
-
Implementer: "Should email be unique?"
|
|
384
|
-
You: "Yes, email must be unique"
|
|
385
|
-
Implementer: Implemented, 3/3 tests passing, committed.
|
|
386
|
-
|
|
387
|
-
[Dispatch spec reviewer]
|
|
388
|
-
Spec reviewer: ✅ PASS — all requirements met
|
|
389
|
-
|
|
390
|
-
[Dispatch quality reviewer]
|
|
391
|
-
Quality reviewer: ✅ APPROVED — clean code, good tests
|
|
392
|
-
|
|
393
|
-
[Mark Task 1 complete]
|
|
394
|
-
|
|
395
|
-
--- Task 2: Password hashing ---
|
|
396
|
-
[Dispatch implementer subagent]
|
|
397
|
-
Implementer: No questions, implemented, 5/5 tests passing.
|
|
398
|
-
|
|
399
|
-
[Dispatch spec reviewer]
|
|
400
|
-
Spec reviewer: ❌ Missing: password strength validation (spec says "min 8 chars")
|
|
401
|
-
|
|
402
|
-
[Implementer fixes]
|
|
403
|
-
Implementer: Added validation, 7/7 tests passing.
|
|
404
|
-
|
|
405
|
-
[Dispatch spec reviewer again]
|
|
406
|
-
Spec reviewer: ✅ PASS
|
|
407
|
-
|
|
408
|
-
[Dispatch quality reviewer]
|
|
409
|
-
Quality reviewer: Important: Magic number 8, extract to constant
|
|
410
|
-
Implementer: Extracted MIN_PASSWORD_LENGTH constant
|
|
411
|
-
Quality reviewer: ✅ APPROVED
|
|
412
|
-
|
|
413
|
-
[Mark Task 2 complete]
|
|
414
|
-
|
|
415
|
-
... (continue for all tasks)
|
|
416
|
-
|
|
417
|
-
[After all tasks: dispatch final integration reviewer]
|
|
418
|
-
[Run full test suite: all passing]
|
|
419
|
-
[Done!]
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
## Remember
|
|
423
|
-
|
|
424
|
-
```
|
|
425
|
-
Fresh subagent per task
|
|
426
|
-
Two-stage review every time
|
|
427
|
-
Spec compliance FIRST
|
|
428
|
-
Code quality SECOND
|
|
429
|
-
Never skip reviews
|
|
430
|
-
Catch issues early
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
**Quality is not an accident. It's the result of systematic process.**
|