devflow-kit 1.8.3 → 2.0.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/CHANGELOG.md +182 -7
- package/LICENSE +1 -1
- package/README.md +139 -219
- package/dist/cli/agents-view/index.js +9 -0
- package/dist/cli/agents-view/render.js +310 -0
- package/dist/cli/agents-view/state.js +423 -0
- package/dist/cli/agents-view/terminal.js +179 -0
- package/dist/cli/commands/agents.js +585 -0
- package/dist/cli/commands/ambient.js +231 -0
- package/dist/cli/commands/capture.js +133 -0
- package/dist/cli/commands/compliance-prompts.js +174 -0
- package/dist/cli/commands/compliance.js +337 -0
- package/dist/cli/commands/context.js +66 -0
- package/dist/cli/commands/debug.js +122 -0
- package/dist/cli/commands/flags.js +119 -0
- package/dist/cli/commands/hud.js +229 -0
- package/dist/cli/commands/init-seed.js +226 -0
- package/dist/cli/commands/init.js +1786 -0
- package/dist/cli/commands/knowledge/index.js +25 -0
- package/dist/cli/commands/knowledge/list.js +115 -0
- package/dist/cli/commands/knowledge/toggle.js +84 -0
- package/dist/cli/commands/learning.js +311 -0
- package/dist/cli/commands/legacy-hooks.js +40 -0
- package/dist/cli/commands/memory.js +349 -0
- package/dist/cli/commands/proxy.js +1435 -0
- package/dist/cli/commands/rules.js +334 -0
- package/dist/cli/commands/safe-delete.js +140 -0
- package/dist/cli/commands/security.js +179 -0
- package/dist/cli/commands/skills.js +140 -0
- package/dist/cli/commands/uninstall.js +1214 -0
- package/dist/cli.js +35 -10
- package/dist/commands/bug-analysis.md +400 -0
- package/dist/commands/code-review.md +403 -0
- package/dist/commands/debug.md +282 -0
- package/dist/commands/dynamic-build.md +972 -0
- package/dist/commands/dynamic-plan.md +383 -0
- package/dist/commands/dynamic-profile.md +206 -0
- package/dist/commands/dynamic-tickets.md +583 -0
- package/dist/commands/explore.md +208 -0
- package/dist/commands/implement.md +590 -0
- package/dist/commands/plan.md +570 -0
- package/dist/commands/release.md +206 -0
- package/dist/commands/research.md +212 -0
- package/dist/commands/resolve.md +731 -0
- package/dist/commands/self-review.md +251 -0
- package/dist/core/agent-frontmatter.js +209 -0
- package/dist/core/agent-models.js +556 -0
- package/dist/core/agent-state.js +44 -0
- package/dist/core/assets.js +39 -0
- package/dist/core/cache.js +205 -0
- package/dist/core/codex-auth-inspect.js +128 -0
- package/dist/core/compliance-compose.js +458 -0
- package/dist/core/compliance.js +165 -0
- package/dist/core/external-models.js +76 -0
- package/dist/core/feature-config.js +125 -0
- package/dist/core/flags.js +309 -0
- package/dist/core/fs-atomic.js +74 -0
- package/dist/core/git.js +61 -0
- package/dist/core/learning-queue-cleanup.js +92 -0
- package/dist/core/learning-tuning-config.js +78 -0
- package/dist/core/manifest.js +171 -0
- package/dist/core/migrations.js +330 -0
- package/dist/core/model-discovery.js +655 -0
- package/dist/core/observation-io.js +50 -0
- package/dist/core/observations.js +109 -0
- package/dist/core/orphan-sweep.js +92 -0
- package/dist/core/paths.js +48 -0
- package/dist/core/plugins.js +525 -0
- package/dist/core/project-paths.js +159 -0
- package/dist/core/proxy-log.js +165 -0
- package/dist/core/proxy-state.js +305 -0
- package/dist/core/safe-delete-install.js +191 -0
- package/dist/core/teammate-mode-cleanup.js +33 -0
- package/dist/hud/colors.js +13 -2
- package/dist/hud/components/config-counts.js +2 -2
- package/dist/hud/components/context-usage.js +2 -2
- package/dist/hud/components/learning-counts.js +92 -0
- package/dist/hud/components/session-cost.js +10 -2
- package/dist/hud/components/usage-quota.js +43 -8
- package/dist/hud/components/version-badge.js +14 -4
- package/dist/hud/config.js +4 -2
- package/dist/hud/cost-history.js +281 -0
- package/dist/hud/git.js +112 -71
- package/dist/hud/index.js +47 -4
- package/dist/hud/render.js +8 -20
- package/dist/hud/transcript.js +5 -6
- package/dist/targets/claude-code/claude-paths.js +106 -0
- package/dist/targets/claude-code/compliance-install.js +305 -0
- package/dist/targets/claude-code/hooks.js +9 -0
- package/dist/targets/claude-code/installer.js +458 -0
- package/dist/targets/claude-code/legacy.js +239 -0
- package/dist/targets/claude-code/post-install.js +971 -0
- package/package.json +23 -17
- package/src/assets/agents/code.md +244 -0
- package/src/assets/agents/design.md +113 -0
- package/src/assets/agents/diagnose.md +210 -0
- package/src/assets/agents/evaluate.md +117 -0
- package/src/assets/agents/git.md +938 -0
- package/src/assets/agents/knowledge.md +89 -0
- package/src/assets/agents/learning.md +203 -0
- package/src/assets/agents/research.md +134 -0
- package/src/assets/agents/review.md +220 -0
- package/src/assets/agents/scrutinize.md +95 -0
- package/src/assets/agents/simplify.md +108 -0
- package/src/assets/agents/skim.md +136 -0
- package/src/assets/agents/synthesize.md +402 -0
- package/src/assets/agents/test.md +155 -0
- package/src/assets/agents/triage.md +141 -0
- package/src/assets/agents/validate.md +103 -0
- package/src/assets/commands/_partials/_compliance.mds +5 -0
- package/src/assets/commands/_partials/_decisions.mds +20 -0
- package/src/assets/commands/_partials/_engine.mds +244 -0
- package/src/assets/commands/_partials/_factory.mds +216 -0
- package/src/assets/commands/_partials/_knowledge.mds +95 -0
- package/src/assets/commands/_partials/_plan_contract.mds +51 -0
- package/src/assets/commands/_partials/_preamble.mds +82 -0
- package/src/assets/commands/_partials/_publication.mds +7 -0
- package/src/assets/commands/_partials/_roster.mds +31 -0
- package/src/assets/commands/_partials/_ticket_template.mds +59 -0
- package/src/assets/commands/_partials/_wave.mds +123 -0
- package/src/assets/commands/bug-analysis.mds +353 -0
- package/src/assets/commands/code-review.mds +355 -0
- package/src/assets/commands/debug.mds +224 -0
- package/src/assets/commands/dynamic-build.mds +534 -0
- package/src/assets/commands/dynamic-plan.mds +244 -0
- package/src/assets/commands/dynamic-profile.mds +132 -0
- package/src/assets/commands/dynamic-tickets.mds +226 -0
- package/src/assets/commands/explore.mds +150 -0
- package/src/assets/commands/implement.mds +496 -0
- package/src/assets/commands/plan.mds +523 -0
- package/src/assets/commands/release.md +206 -0
- package/src/assets/commands/research.mds +164 -0
- package/src/assets/commands/resolve.mds +636 -0
- package/src/assets/commands/self-review.mds +156 -0
- package/src/assets/rules/accessibility.md +11 -0
- package/src/assets/rules/compliance.md +15 -0
- package/src/assets/rules/engineering.md +13 -0
- package/src/assets/rules/go.md +12 -0
- package/src/assets/rules/java.md +12 -0
- package/src/assets/rules/python.md +12 -0
- package/src/assets/rules/quality.md +14 -0
- package/src/assets/rules/react.md +11 -0
- package/src/assets/rules/reliability.md +12 -0
- package/src/assets/rules/rust.md +12 -0
- package/src/assets/rules/security.md +12 -0
- package/src/assets/rules/typescript.md +12 -0
- package/src/assets/rules/ui-design.md +11 -0
- package/src/assets/scripts/hooks/assets/orchestrator-charter.md +21 -0
- package/src/assets/scripts/hooks/background-memory-update +460 -0
- package/src/assets/scripts/hooks/capture-prompt +87 -0
- package/src/assets/scripts/hooks/capture-question +153 -0
- package/src/assets/scripts/hooks/capture-turn +105 -0
- package/src/assets/scripts/hooks/debug-trace +75 -0
- package/src/assets/scripts/hooks/decisions-usage-scan.cjs +131 -0
- package/src/assets/scripts/hooks/ensure-devflow-init +39 -0
- package/src/assets/scripts/hooks/ensure-proxy +294 -0
- package/src/assets/scripts/hooks/ensure-root-gitignore +116 -0
- package/src/assets/scripts/hooks/get-mtime +23 -0
- package/src/assets/scripts/hooks/git-marker +16 -0
- package/src/assets/scripts/hooks/hook-bootstrap +25 -0
- package/src/assets/scripts/hooks/hook-log-init +41 -0
- package/src/assets/scripts/hooks/json-helper.cjs +725 -0
- package/src/assets/scripts/hooks/json-parse +243 -0
- package/src/assets/scripts/hooks/learning-lock +44 -0
- package/src/assets/scripts/hooks/lib/decisions-format.cjs +301 -0
- package/src/assets/scripts/hooks/lib/mkdir-lock.cjs +106 -0
- package/src/assets/scripts/hooks/lib/project-paths.cjs +230 -0
- package/src/assets/scripts/hooks/lib/render-decisions.cjs +398 -0
- package/src/assets/scripts/hooks/lib/safe-path.cjs +29 -0
- package/src/assets/scripts/hooks/log-paths +24 -0
- package/src/assets/scripts/hooks/memory-worker +101 -0
- package/src/assets/scripts/hooks/pre-compact-memory +126 -0
- package/src/assets/scripts/hooks/preamble +77 -0
- package/src/assets/scripts/hooks/queue-append +120 -0
- package/src/assets/scripts/hooks/resolve-project-root +37 -0
- package/src/assets/scripts/hooks/run-hook +31 -0
- package/src/assets/scripts/hooks/session-start-context +180 -0
- package/src/assets/scripts/hooks/session-start-memory +318 -0
- package/src/assets/scripts/hooks/session-start-orchestrator +54 -0
- package/src/assets/scripts/hud.sh +5 -0
- package/src/assets/scripts/redact-secrets.cjs +410 -0
- package/src/assets/skills/accessibility/SKILL.md +145 -0
- package/src/assets/skills/accessibility/references/patterns.md +398 -0
- package/src/assets/skills/accessibility/references/sources.md +26 -0
- package/src/assets/skills/accessibility/references/violations.md +358 -0
- package/src/assets/skills/apply-decisions/SKILL.md +100 -0
- package/src/assets/skills/apply-feature-knowledge/SKILL.md +69 -0
- package/src/assets/skills/architecture/SKILL.md +138 -0
- package/src/assets/skills/architecture/references/patterns.md +378 -0
- package/src/assets/skills/architecture/references/sources.md +41 -0
- package/src/assets/skills/architecture/references/violations.md +314 -0
- package/src/assets/skills/boundary-validation/SKILL.md +119 -0
- package/src/assets/skills/boundary-validation/references/detection.md +283 -0
- package/src/assets/skills/boundary-validation/references/patterns.md +283 -0
- package/src/assets/skills/boundary-validation/references/sources.md +41 -0
- package/src/assets/skills/boundary-validation/references/violations.md +211 -0
- package/src/assets/skills/complexity/SKILL.md +150 -0
- package/src/assets/skills/compliance/SKILL.md +121 -0
- package/src/assets/skills/compliance/frameworks/gdpr/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/gdpr/reference.md +50 -0
- package/src/assets/skills/compliance/frameworks/hipaa/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/hipaa/reference.md +44 -0
- package/src/assets/skills/compliance/frameworks/iso-27001/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/iso-27001/reference.md +45 -0
- package/src/assets/skills/compliance/frameworks/pci-dss/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/pci-dss/reference.md +55 -0
- package/src/assets/skills/compliance/frameworks/soc2/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/soc2/reference.md +53 -0
- package/src/assets/skills/compliance/frameworks/sox/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/sox/reference.md +67 -0
- package/src/assets/skills/compliance/references/detection.md +108 -0
- package/src/assets/skills/compliance/references/sources.md +28 -0
- package/src/assets/skills/consistency/SKILL.md +140 -0
- package/src/assets/skills/database/SKILL.md +134 -0
- package/src/assets/skills/dependencies/SKILL.md +141 -0
- package/src/assets/skills/dependency-research/SKILL.md +133 -0
- package/src/assets/skills/dependency-research/references/evaluation-criteria.md +101 -0
- package/src/assets/skills/design-review/SKILL.md +155 -0
- package/src/assets/skills/design-review/references/anti-patterns.md +207 -0
- package/src/assets/skills/docs-framework/SKILL.md +190 -0
- package/src/assets/skills/docs-framework/references/patterns.md +381 -0
- package/src/assets/skills/docs-framework/references/violations.md +221 -0
- package/src/assets/skills/documentation/SKILL.md +126 -0
- package/src/assets/skills/feature-knowledge/SKILL.md +341 -0
- package/src/assets/skills/gap-analysis/SKILL.md +151 -0
- package/src/assets/skills/gap-analysis/references/check-layers.md +125 -0
- package/src/assets/skills/git/SKILL.md +287 -0
- package/src/assets/skills/git/references/github-api.md +666 -0
- package/src/assets/skills/git/references/patterns.md +324 -0
- package/src/assets/skills/git/references/sources.md +16 -0
- package/src/assets/skills/git/references/violations.md +128 -0
- package/src/assets/skills/go/SKILL.md +147 -0
- package/src/assets/skills/go/references/concurrency.md +335 -0
- package/src/assets/skills/go/references/patterns.md +278 -0
- package/src/assets/skills/go/references/sources.md +41 -0
- package/src/assets/skills/go/references/violations.md +262 -0
- package/src/assets/skills/java/SKILL.md +148 -0
- package/src/assets/skills/java/references/modern-java.md +335 -0
- package/src/assets/skills/java/references/patterns.md +311 -0
- package/src/assets/skills/java/references/sources.md +44 -0
- package/src/assets/skills/java/references/violations.md +257 -0
- package/src/assets/skills/patterns/SKILL.md +162 -0
- package/src/assets/skills/performance/SKILL.md +135 -0
- package/src/assets/skills/performance/references/patterns.md +516 -0
- package/src/assets/skills/performance/references/sources.md +41 -0
- package/src/assets/skills/performance/references/violations.md +417 -0
- package/src/assets/skills/python/SKILL.md +156 -0
- package/src/assets/skills/python/references/async.md +255 -0
- package/src/assets/skills/python/references/patterns.md +280 -0
- package/src/assets/skills/python/references/sources.md +41 -0
- package/src/assets/skills/python/references/violations.md +272 -0
- package/src/assets/skills/qa/SKILL.md +136 -0
- package/src/assets/skills/qa/references/browser-testing.md +97 -0
- package/src/assets/skills/qa/references/patterns.md +118 -0
- package/src/assets/skills/qa/references/scenario-templates.md +102 -0
- package/src/assets/skills/qa/references/sources.md +30 -0
- package/src/assets/skills/qa/references/violations.md +98 -0
- package/src/assets/skills/quality-gates/SKILL.md +152 -0
- package/src/assets/skills/quality-gates/references/stub-detection.md +135 -0
- package/src/assets/skills/react/SKILL.md +143 -0
- package/src/assets/skills/react/references/error-handling.md +179 -0
- package/src/assets/skills/react/references/forms.md +214 -0
- package/src/assets/skills/react/references/hooks.md +193 -0
- package/src/assets/skills/react/references/patterns.md +1336 -0
- package/src/assets/skills/react/references/sources.md +35 -0
- package/src/assets/skills/react/references/violations.md +570 -0
- package/src/assets/skills/regression/SKILL.md +146 -0
- package/src/assets/skills/reliability/SKILL.md +153 -0
- package/src/assets/skills/reliability/references/detection.md +66 -0
- package/src/assets/skills/reliability/references/patterns.md +151 -0
- package/src/assets/skills/reliability/references/sources.md +27 -0
- package/src/assets/skills/reliability/references/violations.md +125 -0
- package/src/assets/skills/research-codebase/SKILL.md +135 -0
- package/src/assets/skills/research-competitor/SKILL.md +145 -0
- package/src/assets/skills/research-external/SKILL.md +141 -0
- package/src/assets/skills/research-market/SKILL.md +145 -0
- package/src/assets/skills/research-technology/SKILL.md +180 -0
- package/src/assets/skills/review-methodology/SKILL.md +121 -0
- package/src/assets/skills/review-methodology/references/patterns.md +186 -0
- package/src/assets/skills/review-methodology/references/report-template.md +142 -0
- package/src/assets/skills/review-methodology/references/violations.md +125 -0
- package/src/assets/skills/rust/SKILL.md +148 -0
- package/src/assets/skills/rust/references/ownership.md +278 -0
- package/src/assets/skills/rust/references/patterns.md +247 -0
- package/src/assets/skills/rust/references/sources.md +46 -0
- package/src/assets/skills/rust/references/violations.md +252 -0
- package/src/assets/skills/security/SKILL.md +121 -0
- package/src/assets/skills/security/references/patterns.md +271 -0
- package/src/assets/skills/security/references/sources.md +41 -0
- package/src/assets/skills/security/references/violations.md +241 -0
- package/src/assets/skills/software-design/SKILL.md +143 -0
- package/src/assets/skills/software-design/references/checklist.md +259 -0
- package/src/assets/skills/software-design/references/code-smell-violations.md +189 -0
- package/src/assets/skills/software-design/references/patterns.md +359 -0
- package/src/assets/skills/software-design/references/sources.md +41 -0
- package/src/assets/skills/software-design/references/violations.md +341 -0
- package/src/assets/skills/test-driven-development/SKILL.md +197 -0
- package/src/assets/skills/testing/SKILL.md +139 -0
- package/src/assets/skills/testing/references/patterns.md +346 -0
- package/src/assets/skills/testing/references/sources.md +53 -0
- package/src/assets/skills/testing/references/violations.md +322 -0
- package/src/assets/skills/typescript/SKILL.md +150 -0
- package/src/assets/skills/typescript/references/async.md +333 -0
- package/src/assets/skills/typescript/references/patterns.md +440 -0
- package/src/assets/skills/typescript/references/sources.md +41 -0
- package/src/assets/skills/typescript/references/type-guards.md +333 -0
- package/src/assets/skills/typescript/references/utility-types.md +255 -0
- package/src/assets/skills/typescript/references/violations.md +285 -0
- package/src/assets/skills/ui-design/SKILL.md +144 -0
- package/src/assets/skills/ui-design/references/patterns.md +341 -0
- package/src/assets/skills/ui-design/references/sources.md +41 -0
- package/src/assets/skills/ui-design/references/violations.md +312 -0
- package/src/assets/skills/worktree-support/SKILL.md +92 -0
- package/src/targets/claude-code/templates/claudeignore.template +188 -0
- package/src/targets/claude-code/templates/settings.json +86 -0
- package/dist/cli.d.ts +0 -3
- package/dist/commands/ambient.d.ts +0 -18
- package/dist/commands/ambient.js +0 -137
- package/dist/commands/hud.d.ts +0 -22
- package/dist/commands/hud.js +0 -180
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.js +0 -738
- package/dist/commands/list.d.ts +0 -24
- package/dist/commands/list.js +0 -89
- package/dist/commands/memory.d.ts +0 -22
- package/dist/commands/memory.js +0 -175
- package/dist/commands/skills.d.ts +0 -11
- package/dist/commands/skills.js +0 -116
- package/dist/commands/uninstall.d.ts +0 -22
- package/dist/commands/uninstall.js +0 -558
- package/dist/hud/cache.d.ts +0 -14
- package/dist/hud/cache.js +0 -54
- package/dist/hud/colors.d.ts +0 -23
- package/dist/hud/components/config-counts.d.ts +0 -8
- package/dist/hud/components/context-usage.d.ts +0 -8
- package/dist/hud/components/diff-stats.d.ts +0 -3
- package/dist/hud/components/directory.d.ts +0 -3
- package/dist/hud/components/git-ahead-behind.d.ts +0 -3
- package/dist/hud/components/git-branch.d.ts +0 -3
- package/dist/hud/components/model.d.ts +0 -3
- package/dist/hud/components/release-info.d.ts +0 -3
- package/dist/hud/components/session-cost.d.ts +0 -3
- package/dist/hud/components/session-duration.d.ts +0 -3
- package/dist/hud/components/todo-progress.d.ts +0 -3
- package/dist/hud/components/usage-quota.d.ts +0 -3
- package/dist/hud/components/version-badge.d.ts +0 -3
- package/dist/hud/components/worktree-count.d.ts +0 -3
- package/dist/hud/config.d.ts +0 -10
- package/dist/hud/credentials.d.ts +0 -17
- package/dist/hud/credentials.js +0 -99
- package/dist/hud/git.d.ts +0 -7
- package/dist/hud/index.d.ts +0 -2
- package/dist/hud/render.d.ts +0 -7
- package/dist/hud/stdin.d.ts +0 -6
- package/dist/hud/transcript.d.ts +0 -7
- package/dist/hud/types.d.ts +0 -116
- package/dist/hud/usage-api.d.ts +0 -7
- package/dist/hud/usage-api.js +0 -84
- package/dist/plugins.d.ts +0 -46
- package/dist/plugins.js +0 -233
- package/dist/utils/cli.d.ts +0 -5
- package/dist/utils/cli.js +0 -14
- package/dist/utils/git.d.ts +0 -11
- package/dist/utils/git.js +0 -36
- package/dist/utils/installer.d.ts +0 -41
- package/dist/utils/installer.js +0 -195
- package/dist/utils/manifest.d.ts +0 -46
- package/dist/utils/manifest.js +0 -100
- package/dist/utils/paths.d.ts +0 -42
- package/dist/utils/paths.js +0 -106
- package/dist/utils/post-install.d.ts +0 -87
- package/dist/utils/post-install.js +0 -546
- package/dist/utils/safe-delete-install.d.ts +0 -29
- package/dist/utils/safe-delete-install.js +0 -191
- package/dist/utils/safe-delete.d.ts +0 -12
- package/plugins/devflow-accessibility/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-accessibility/skills/accessibility/SKILL.md +0 -229
- package/plugins/devflow-accessibility/skills/accessibility/references/patterns.md +0 -670
- package/plugins/devflow-accessibility/skills/accessibility/references/violations.md +0 -419
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +0 -33
- package/plugins/devflow-ambient/README.md +0 -68
- package/plugins/devflow-ambient/agents/coder.md +0 -135
- package/plugins/devflow-ambient/agents/reviewer.md +0 -165
- package/plugins/devflow-ambient/agents/scrutinizer.md +0 -82
- package/plugins/devflow-ambient/agents/shepherd.md +0 -108
- package/plugins/devflow-ambient/agents/simplifier.md +0 -102
- package/plugins/devflow-ambient/agents/skimmer.md +0 -143
- package/plugins/devflow-ambient/agents/validator.md +0 -86
- package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +0 -145
- package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +0 -74
- package/plugins/devflow-ambient/skills/debug-orchestration/SKILL.md +0 -69
- package/plugins/devflow-ambient/skills/implementation-orchestration/SKILL.md +0 -92
- package/plugins/devflow-ambient/skills/plan-orchestration/SKILL.md +0 -71
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +0 -19
- package/plugins/devflow-audit-claude/README.md +0 -46
- package/plugins/devflow-audit-claude/agents/claude-md-auditor.md +0 -134
- package/plugins/devflow-audit-claude/commands/audit-claude.md +0 -89
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +0 -38
- package/plugins/devflow-code-review/README.md +0 -73
- package/plugins/devflow-code-review/agents/git.md +0 -277
- package/plugins/devflow-code-review/agents/reviewer.md +0 -165
- package/plugins/devflow-code-review/agents/synthesizer.md +0 -211
- package/plugins/devflow-code-review/commands/code-review-teams.md +0 -285
- package/plugins/devflow-code-review/commands/code-review.md +0 -163
- package/plugins/devflow-code-review/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-code-review/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-code-review/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-code-review/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +0 -153
- package/plugins/devflow-code-review/skills/architecture-patterns/references/patterns.md +0 -873
- package/plugins/devflow-code-review/skills/architecture-patterns/references/violations.md +0 -575
- package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +0 -143
- package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +0 -140
- package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +0 -134
- package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +0 -141
- package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +0 -125
- package/plugins/devflow-code-review/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-code-review/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +0 -154
- package/plugins/devflow-code-review/skills/performance-patterns/references/patterns.md +0 -503
- package/plugins/devflow-code-review/skills/performance-patterns/references/violations.md +0 -354
- package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +0 -146
- package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +0 -119
- package/plugins/devflow-code-review/skills/review-methodology/references/patterns.md +0 -186
- package/plugins/devflow-code-review/skills/review-methodology/references/report-template.md +0 -142
- package/plugins/devflow-code-review/skills/review-methodology/references/violations.md +0 -125
- package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +0 -156
- package/plugins/devflow-code-review/skills/security-patterns/references/patterns.md +0 -507
- package/plugins/devflow-code-review/skills/security-patterns/references/violations.md +0 -237
- package/plugins/devflow-code-review/skills/test-patterns/SKILL.md +0 -183
- package/plugins/devflow-code-review/skills/test-patterns/references/patterns.md +0 -220
- package/plugins/devflow-code-review/skills/test-patterns/references/violations.md +0 -221
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +0 -31
- package/plugins/devflow-core-skills/README.md +0 -50
- package/plugins/devflow-core-skills/skills/core-patterns/SKILL.md +0 -162
- package/plugins/devflow-core-skills/skills/core-patterns/references/checklist.md +0 -276
- package/plugins/devflow-core-skills/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/plugins/devflow-core-skills/skills/core-patterns/references/patterns.md +0 -576
- package/plugins/devflow-core-skills/skills/core-patterns/references/violations.md +0 -369
- package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +0 -143
- package/plugins/devflow-core-skills/skills/docs-framework/references/patterns.md +0 -346
- package/plugins/devflow-core-skills/skills/docs-framework/references/violations.md +0 -221
- package/plugins/devflow-core-skills/skills/git-safety/SKILL.md +0 -122
- package/plugins/devflow-core-skills/skills/git-safety/references/patterns.md +0 -289
- package/plugins/devflow-core-skills/skills/git-safety/references/violations.md +0 -18
- package/plugins/devflow-core-skills/skills/git-workflow/SKILL.md +0 -158
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-patterns.md +0 -115
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-violations.md +0 -77
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-patterns.md +0 -127
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-violations.md +0 -96
- package/plugins/devflow-core-skills/skills/github-patterns/SKILL.md +0 -153
- package/plugins/devflow-core-skills/skills/github-patterns/references/patterns.md +0 -572
- package/plugins/devflow-core-skills/skills/github-patterns/references/violations.md +0 -298
- package/plugins/devflow-core-skills/skills/input-validation/SKILL.md +0 -148
- package/plugins/devflow-core-skills/skills/input-validation/references/detection.md +0 -283
- package/plugins/devflow-core-skills/skills/input-validation/references/patterns.md +0 -361
- package/plugins/devflow-core-skills/skills/input-validation/references/violations.md +0 -224
- package/plugins/devflow-core-skills/skills/search-first/SKILL.md +0 -133
- package/plugins/devflow-core-skills/skills/search-first/references/evaluation-criteria.md +0 -101
- package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +0 -137
- package/plugins/devflow-core-skills/skills/test-patterns/SKILL.md +0 -183
- package/plugins/devflow-core-skills/skills/test-patterns/references/detection.md +0 -149
- package/plugins/devflow-core-skills/skills/test-patterns/references/patterns.md +0 -220
- package/plugins/devflow-core-skills/skills/test-patterns/references/report-template.md +0 -108
- package/plugins/devflow-core-skills/skills/test-patterns/references/violations.md +0 -221
- package/plugins/devflow-debug/.claude-plugin/plugin.json +0 -26
- package/plugins/devflow-debug/README.md +0 -65
- package/plugins/devflow-debug/agents/git.md +0 -277
- package/plugins/devflow-debug/agents/synthesizer.md +0 -211
- package/plugins/devflow-debug/commands/debug-teams.md +0 -245
- package/plugins/devflow-debug/commands/debug.md +0 -174
- package/plugins/devflow-debug/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-debug/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-debug/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-debug/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-debug/skills/git-safety/SKILL.md +0 -122
- package/plugins/devflow-debug/skills/git-safety/references/detection.md +0 -290
- package/plugins/devflow-debug/skills/git-safety/references/patterns.md +0 -289
- package/plugins/devflow-debug/skills/git-safety/references/violations.md +0 -18
- package/plugins/devflow-debug/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-debug/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-frontend-design/skills/frontend-design/SKILL.md +0 -254
- package/plugins/devflow-frontend-design/skills/frontend-design/references/patterns.md +0 -511
- package/plugins/devflow-frontend-design/skills/frontend-design/references/violations.md +0 -453
- package/plugins/devflow-go/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-go/skills/go/SKILL.md +0 -187
- package/plugins/devflow-go/skills/go/references/concurrency.md +0 -312
- package/plugins/devflow-go/skills/go/references/patterns.md +0 -232
- package/plugins/devflow-go/skills/go/references/violations.md +0 -205
- package/plugins/devflow-implement/.claude-plugin/plugin.json +0 -35
- package/plugins/devflow-implement/README.md +0 -71
- package/plugins/devflow-implement/agents/coder.md +0 -135
- package/plugins/devflow-implement/agents/git.md +0 -277
- package/plugins/devflow-implement/agents/scrutinizer.md +0 -82
- package/plugins/devflow-implement/agents/shepherd.md +0 -108
- package/plugins/devflow-implement/agents/simplifier.md +0 -102
- package/plugins/devflow-implement/agents/skimmer.md +0 -143
- package/plugins/devflow-implement/agents/synthesizer.md +0 -211
- package/plugins/devflow-implement/agents/validator.md +0 -86
- package/plugins/devflow-implement/commands/implement-teams.md +0 -620
- package/plugins/devflow-implement/commands/implement.md +0 -430
- package/plugins/devflow-implement/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-implement/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-implement/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-implement/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-implement/skills/implementation-patterns/SKILL.md +0 -162
- package/plugins/devflow-implement/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-implement/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-implement/skills/self-review/SKILL.md +0 -149
- package/plugins/devflow-implement/skills/self-review/references/stub-detection.md +0 -135
- package/plugins/devflow-java/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-java/skills/java/SKILL.md +0 -183
- package/plugins/devflow-java/skills/java/references/modern-java.md +0 -270
- package/plugins/devflow-java/skills/java/references/patterns.md +0 -235
- package/plugins/devflow-java/skills/java/references/violations.md +0 -213
- package/plugins/devflow-python/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-python/skills/python/SKILL.md +0 -188
- package/plugins/devflow-python/skills/python/references/async.md +0 -220
- package/plugins/devflow-python/skills/python/references/patterns.md +0 -226
- package/plugins/devflow-python/skills/python/references/violations.md +0 -204
- package/plugins/devflow-react/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-react/skills/react/SKILL.md +0 -276
- package/plugins/devflow-react/skills/react/references/patterns.md +0 -1331
- package/plugins/devflow-react/skills/react/references/violations.md +0 -565
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +0 -29
- package/plugins/devflow-resolve/README.md +0 -65
- package/plugins/devflow-resolve/agents/git.md +0 -277
- package/plugins/devflow-resolve/agents/resolver.md +0 -131
- package/plugins/devflow-resolve/agents/simplifier.md +0 -102
- package/plugins/devflow-resolve/commands/resolve-teams.md +0 -307
- package/plugins/devflow-resolve/commands/resolve.md +0 -246
- package/plugins/devflow-resolve/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-resolve/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-resolve/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-resolve/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-resolve/skills/implementation-patterns/SKILL.md +0 -162
- package/plugins/devflow-resolve/skills/implementation-patterns/references/patterns.md +0 -1063
- package/plugins/devflow-resolve/skills/implementation-patterns/references/violations.md +0 -483
- package/plugins/devflow-resolve/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-resolve/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +0 -156
- package/plugins/devflow-resolve/skills/security-patterns/references/detection.md +0 -287
- package/plugins/devflow-resolve/skills/security-patterns/references/patterns.md +0 -507
- package/plugins/devflow-resolve/skills/security-patterns/references/violations.md +0 -237
- package/plugins/devflow-rust/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-rust/skills/rust/SKILL.md +0 -193
- package/plugins/devflow-rust/skills/rust/references/ownership.md +0 -242
- package/plugins/devflow-rust/skills/rust/references/patterns.md +0 -210
- package/plugins/devflow-rust/skills/rust/references/violations.md +0 -191
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +0 -26
- package/plugins/devflow-self-review/README.md +0 -38
- package/plugins/devflow-self-review/agents/scrutinizer.md +0 -82
- package/plugins/devflow-self-review/agents/simplifier.md +0 -102
- package/plugins/devflow-self-review/agents/validator.md +0 -86
- package/plugins/devflow-self-review/commands/self-review.md +0 -132
- package/plugins/devflow-self-review/skills/core-patterns/SKILL.md +0 -162
- package/plugins/devflow-self-review/skills/core-patterns/references/checklist.md +0 -276
- package/plugins/devflow-self-review/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/plugins/devflow-self-review/skills/core-patterns/references/detection.md +0 -303
- package/plugins/devflow-self-review/skills/core-patterns/references/patterns.md +0 -576
- package/plugins/devflow-self-review/skills/core-patterns/references/violations.md +0 -369
- package/plugins/devflow-self-review/skills/self-review/SKILL.md +0 -149
- package/plugins/devflow-self-review/skills/self-review/references/patterns.md +0 -405
- package/plugins/devflow-self-review/skills/self-review/references/report-template.md +0 -253
- package/plugins/devflow-self-review/skills/self-review/references/stub-detection.md +0 -135
- package/plugins/devflow-self-review/skills/self-review/references/violations.md +0 -308
- package/plugins/devflow-specify/.claude-plugin/plugin.json +0 -25
- package/plugins/devflow-specify/README.md +0 -46
- package/plugins/devflow-specify/agents/skimmer.md +0 -143
- package/plugins/devflow-specify/agents/synthesizer.md +0 -211
- package/plugins/devflow-specify/commands/specify-teams.md +0 -321
- package/plugins/devflow-specify/commands/specify.md +0 -186
- package/plugins/devflow-specify/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-specify/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-specify/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-specify/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-typescript/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-typescript/skills/typescript/SKILL.md +0 -176
- package/plugins/devflow-typescript/skills/typescript/references/patterns.md +0 -1105
- package/plugins/devflow-typescript/skills/typescript/references/violations.md +0 -433
- package/scripts/hooks/ambient-prompt +0 -50
- package/scripts/hooks/background-memory-update +0 -257
- package/scripts/hooks/ensure-memory-gitignore +0 -17
- package/scripts/hooks/pre-compact-memory +0 -87
- package/scripts/hooks/run-hook +0 -23
- package/scripts/hooks/session-start-memory +0 -165
- package/scripts/hooks/stop-update-memory +0 -85
- package/scripts/hud/cache.d.ts +0 -14
- package/scripts/hud/cache.d.ts.map +0 -1
- package/scripts/hud/cache.js +0 -54
- package/scripts/hud/cache.js.map +0 -1
- package/scripts/hud/colors.d.ts +0 -23
- package/scripts/hud/colors.d.ts.map +0 -1
- package/scripts/hud/colors.js +0 -62
- package/scripts/hud/colors.js.map +0 -1
- package/scripts/hud/components/config-counts.d.ts +0 -8
- package/scripts/hud/components/config-counts.d.ts.map +0 -1
- package/scripts/hud/components/config-counts.js +0 -91
- package/scripts/hud/components/config-counts.js.map +0 -1
- package/scripts/hud/components/context-usage.d.ts +0 -8
- package/scripts/hud/components/context-usage.d.ts.map +0 -1
- package/scripts/hud/components/context-usage.js +0 -49
- package/scripts/hud/components/context-usage.js.map +0 -1
- package/scripts/hud/components/diff-stats.d.ts +0 -3
- package/scripts/hud/components/diff-stats.d.ts.map +0 -1
- package/scripts/hud/components/diff-stats.js +0 -36
- package/scripts/hud/components/diff-stats.js.map +0 -1
- package/scripts/hud/components/directory.d.ts +0 -3
- package/scripts/hud/components/directory.d.ts.map +0 -1
- package/scripts/hud/components/directory.js +0 -10
- package/scripts/hud/components/directory.js.map +0 -1
- package/scripts/hud/components/git-ahead-behind.d.ts +0 -3
- package/scripts/hud/components/git-ahead-behind.d.ts.map +0 -1
- package/scripts/hud/components/git-ahead-behind.js +0 -16
- package/scripts/hud/components/git-ahead-behind.js.map +0 -1
- package/scripts/hud/components/git-branch.d.ts +0 -3
- package/scripts/hud/components/git-branch.d.ts.map +0 -1
- package/scripts/hud/components/git-branch.js +0 -14
- package/scripts/hud/components/git-branch.js.map +0 -1
- package/scripts/hud/components/model.d.ts +0 -3
- package/scripts/hud/components/model.d.ts.map +0 -1
- package/scripts/hud/components/model.js +0 -21
- package/scripts/hud/components/model.js.map +0 -1
- package/scripts/hud/components/release-info.d.ts +0 -3
- package/scripts/hud/components/release-info.d.ts.map +0 -1
- package/scripts/hud/components/release-info.js +0 -9
- package/scripts/hud/components/release-info.js.map +0 -1
- package/scripts/hud/components/session-cost.d.ts +0 -3
- package/scripts/hud/components/session-cost.d.ts.map +0 -1
- package/scripts/hud/components/session-cost.js +0 -9
- package/scripts/hud/components/session-cost.js.map +0 -1
- package/scripts/hud/components/session-duration.d.ts +0 -3
- package/scripts/hud/components/session-duration.d.ts.map +0 -1
- package/scripts/hud/components/session-duration.js +0 -18
- package/scripts/hud/components/session-duration.js.map +0 -1
- package/scripts/hud/components/todo-progress.d.ts +0 -3
- package/scripts/hud/components/todo-progress.d.ts.map +0 -1
- package/scripts/hud/components/todo-progress.js +0 -11
- package/scripts/hud/components/todo-progress.js.map +0 -1
- package/scripts/hud/components/usage-quota.d.ts +0 -3
- package/scripts/hud/components/usage-quota.d.ts.map +0 -1
- package/scripts/hud/components/usage-quota.js +0 -45
- package/scripts/hud/components/usage-quota.js.map +0 -1
- package/scripts/hud/components/version-badge.d.ts +0 -3
- package/scripts/hud/components/version-badge.d.ts.map +0 -1
- package/scripts/hud/components/version-badge.js +0 -80
- package/scripts/hud/components/version-badge.js.map +0 -1
- package/scripts/hud/components/worktree-count.d.ts +0 -3
- package/scripts/hud/components/worktree-count.d.ts.map +0 -1
- package/scripts/hud/components/worktree-count.js +0 -8
- package/scripts/hud/components/worktree-count.js.map +0 -1
- package/scripts/hud/config.d.ts +0 -10
- package/scripts/hud/config.d.ts.map +0 -1
- package/scripts/hud/config.js +0 -55
- package/scripts/hud/config.js.map +0 -1
- package/scripts/hud/credentials.d.ts +0 -17
- package/scripts/hud/credentials.d.ts.map +0 -1
- package/scripts/hud/credentials.js +0 -99
- package/scripts/hud/credentials.js.map +0 -1
- package/scripts/hud/git.d.ts +0 -7
- package/scripts/hud/git.d.ts.map +0 -1
- package/scripts/hud/git.js +0 -153
- package/scripts/hud/git.js.map +0 -1
- package/scripts/hud/index.d.ts +0 -2
- package/scripts/hud/index.d.ts.map +0 -1
- package/scripts/hud/index.js +0 -81
- package/scripts/hud/index.js.map +0 -1
- package/scripts/hud/render.d.ts +0 -7
- package/scripts/hud/render.d.ts.map +0 -1
- package/scripts/hud/render.js +0 -111
- package/scripts/hud/render.js.map +0 -1
- package/scripts/hud/stdin.d.ts +0 -6
- package/scripts/hud/stdin.d.ts.map +0 -1
- package/scripts/hud/stdin.js +0 -25
- package/scripts/hud/stdin.js.map +0 -1
- package/scripts/hud/transcript.d.ts +0 -7
- package/scripts/hud/transcript.d.ts.map +0 -1
- package/scripts/hud/transcript.js +0 -130
- package/scripts/hud/transcript.js.map +0 -1
- package/scripts/hud/types.d.ts +0 -116
- package/scripts/hud/types.d.ts.map +0 -1
- package/scripts/hud/types.js +0 -2
- package/scripts/hud/types.js.map +0 -1
- package/scripts/hud/usage-api.d.ts +0 -7
- package/scripts/hud/usage-api.d.ts.map +0 -1
- package/scripts/hud/usage-api.js +0 -84
- package/scripts/hud/usage-api.js.map +0 -1
- package/scripts/hud.sh +0 -5
- package/shared/agents/coder.md +0 -135
- package/shared/agents/git.md +0 -277
- package/shared/agents/resolver.md +0 -131
- package/shared/agents/reviewer.md +0 -165
- package/shared/agents/scrutinizer.md +0 -82
- package/shared/agents/shepherd.md +0 -108
- package/shared/agents/simplifier.md +0 -102
- package/shared/agents/skimmer.md +0 -143
- package/shared/agents/synthesizer.md +0 -211
- package/shared/agents/validator.md +0 -86
- package/shared/skills/accessibility/SKILL.md +0 -229
- package/shared/skills/accessibility/references/detection.md +0 -171
- package/shared/skills/accessibility/references/patterns.md +0 -670
- package/shared/skills/accessibility/references/violations.md +0 -419
- package/shared/skills/agent-teams/SKILL.md +0 -124
- package/shared/skills/agent-teams/references/cleanup.md +0 -104
- package/shared/skills/agent-teams/references/communication.md +0 -122
- package/shared/skills/agent-teams/references/team-patterns.md +0 -217
- package/shared/skills/ambient-router/SKILL.md +0 -145
- package/shared/skills/ambient-router/references/skill-catalog.md +0 -74
- package/shared/skills/architecture-patterns/SKILL.md +0 -153
- package/shared/skills/architecture-patterns/references/detection.md +0 -337
- package/shared/skills/architecture-patterns/references/patterns.md +0 -873
- package/shared/skills/architecture-patterns/references/violations.md +0 -575
- package/shared/skills/complexity-patterns/SKILL.md +0 -143
- package/shared/skills/complexity-patterns/references/detection.md +0 -264
- package/shared/skills/complexity-patterns/references/patterns.md +0 -487
- package/shared/skills/complexity-patterns/references/violations.md +0 -361
- package/shared/skills/consistency-patterns/SKILL.md +0 -140
- package/shared/skills/consistency-patterns/references/detection.md +0 -207
- package/shared/skills/consistency-patterns/references/patterns.md +0 -202
- package/shared/skills/consistency-patterns/references/violations.md +0 -213
- package/shared/skills/core-patterns/SKILL.md +0 -162
- package/shared/skills/core-patterns/references/checklist.md +0 -276
- package/shared/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/shared/skills/core-patterns/references/detection.md +0 -303
- package/shared/skills/core-patterns/references/patterns.md +0 -576
- package/shared/skills/core-patterns/references/violations.md +0 -369
- package/shared/skills/database-patterns/SKILL.md +0 -134
- package/shared/skills/database-patterns/references/detection.md +0 -208
- package/shared/skills/database-patterns/references/patterns.md +0 -394
- package/shared/skills/database-patterns/references/violations.md +0 -332
- package/shared/skills/debug-orchestration/SKILL.md +0 -69
- package/shared/skills/dependencies-patterns/SKILL.md +0 -141
- package/shared/skills/dependencies-patterns/references/detection.md +0 -181
- package/shared/skills/dependencies-patterns/references/patterns.md +0 -225
- package/shared/skills/dependencies-patterns/references/violations.md +0 -247
- package/shared/skills/docs-framework/SKILL.md +0 -143
- package/shared/skills/docs-framework/references/patterns.md +0 -346
- package/shared/skills/docs-framework/references/violations.md +0 -221
- package/shared/skills/documentation-patterns/SKILL.md +0 -125
- package/shared/skills/documentation-patterns/references/detection.md +0 -190
- package/shared/skills/documentation-patterns/references/patterns.md +0 -189
- package/shared/skills/documentation-patterns/references/violations.md +0 -163
- package/shared/skills/frontend-design/SKILL.md +0 -254
- package/shared/skills/frontend-design/references/detection.md +0 -184
- package/shared/skills/frontend-design/references/patterns.md +0 -511
- package/shared/skills/frontend-design/references/violations.md +0 -453
- package/shared/skills/git-safety/SKILL.md +0 -122
- package/shared/skills/git-safety/references/detection.md +0 -290
- package/shared/skills/git-safety/references/patterns.md +0 -289
- package/shared/skills/git-safety/references/violations.md +0 -18
- package/shared/skills/git-workflow/SKILL.md +0 -158
- package/shared/skills/git-workflow/references/commit-patterns.md +0 -115
- package/shared/skills/git-workflow/references/commit-violations.md +0 -77
- package/shared/skills/git-workflow/references/pr-patterns.md +0 -127
- package/shared/skills/git-workflow/references/pr-violations.md +0 -96
- package/shared/skills/github-patterns/SKILL.md +0 -153
- package/shared/skills/github-patterns/references/patterns.md +0 -572
- package/shared/skills/github-patterns/references/violations.md +0 -298
- package/shared/skills/go/SKILL.md +0 -187
- package/shared/skills/go/references/concurrency.md +0 -312
- package/shared/skills/go/references/detection.md +0 -129
- package/shared/skills/go/references/patterns.md +0 -232
- package/shared/skills/go/references/violations.md +0 -205
- package/shared/skills/implementation-orchestration/SKILL.md +0 -92
- package/shared/skills/implementation-patterns/SKILL.md +0 -162
- package/shared/skills/implementation-patterns/references/patterns.md +0 -1063
- package/shared/skills/implementation-patterns/references/violations.md +0 -483
- package/shared/skills/input-validation/SKILL.md +0 -148
- package/shared/skills/input-validation/references/detection.md +0 -283
- package/shared/skills/input-validation/references/patterns.md +0 -361
- package/shared/skills/input-validation/references/violations.md +0 -224
- package/shared/skills/java/SKILL.md +0 -183
- package/shared/skills/java/references/detection.md +0 -120
- package/shared/skills/java/references/modern-java.md +0 -270
- package/shared/skills/java/references/patterns.md +0 -235
- package/shared/skills/java/references/violations.md +0 -213
- package/shared/skills/knowledge-persistence/SKILL.md +0 -128
- package/shared/skills/knowledge-persistence/references/examples.md +0 -44
- package/shared/skills/performance-patterns/SKILL.md +0 -154
- package/shared/skills/performance-patterns/references/detection.md +0 -351
- package/shared/skills/performance-patterns/references/patterns.md +0 -503
- package/shared/skills/performance-patterns/references/violations.md +0 -354
- package/shared/skills/plan-orchestration/SKILL.md +0 -71
- package/shared/skills/python/SKILL.md +0 -188
- package/shared/skills/python/references/async.md +0 -220
- package/shared/skills/python/references/detection.md +0 -128
- package/shared/skills/python/references/patterns.md +0 -226
- package/shared/skills/python/references/violations.md +0 -204
- package/shared/skills/react/SKILL.md +0 -276
- package/shared/skills/react/references/patterns.md +0 -1331
- package/shared/skills/react/references/violations.md +0 -565
- package/shared/skills/regression-patterns/SKILL.md +0 -146
- package/shared/skills/regression-patterns/references/detection.md +0 -237
- package/shared/skills/regression-patterns/references/patterns.md +0 -226
- package/shared/skills/regression-patterns/references/violations.md +0 -225
- package/shared/skills/review-methodology/SKILL.md +0 -119
- package/shared/skills/review-methodology/references/patterns.md +0 -186
- package/shared/skills/review-methodology/references/report-template.md +0 -142
- package/shared/skills/review-methodology/references/violations.md +0 -125
- package/shared/skills/rust/SKILL.md +0 -193
- package/shared/skills/rust/references/detection.md +0 -131
- package/shared/skills/rust/references/ownership.md +0 -242
- package/shared/skills/rust/references/patterns.md +0 -210
- package/shared/skills/rust/references/violations.md +0 -191
- package/shared/skills/search-first/SKILL.md +0 -133
- package/shared/skills/search-first/references/evaluation-criteria.md +0 -101
- package/shared/skills/security-patterns/SKILL.md +0 -156
- package/shared/skills/security-patterns/references/detection.md +0 -287
- package/shared/skills/security-patterns/references/patterns.md +0 -507
- package/shared/skills/security-patterns/references/violations.md +0 -237
- package/shared/skills/self-review/SKILL.md +0 -149
- package/shared/skills/self-review/references/patterns.md +0 -405
- package/shared/skills/self-review/references/report-template.md +0 -253
- package/shared/skills/self-review/references/stub-detection.md +0 -135
- package/shared/skills/self-review/references/violations.md +0 -308
- package/shared/skills/test-driven-development/SKILL.md +0 -137
- package/shared/skills/test-driven-development/references/rationalization-prevention.md +0 -111
- package/shared/skills/test-patterns/SKILL.md +0 -183
- package/shared/skills/test-patterns/references/detection.md +0 -149
- package/shared/skills/test-patterns/references/patterns.md +0 -220
- package/shared/skills/test-patterns/references/report-template.md +0 -108
- package/shared/skills/test-patterns/references/violations.md +0 -221
- package/shared/skills/typescript/SKILL.md +0 -176
- package/shared/skills/typescript/references/patterns.md +0 -1105
- package/shared/skills/typescript/references/violations.md +0 -433
- package/src/templates/claudeignore.template +0 -188
- package/src/templates/settings.json +0 -59
- /package/dist/{utils → core}/safe-delete.js +0 -0
- /package/{plugins/devflow-accessibility → src/assets}/skills/accessibility/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/architecture-patterns → src/assets/skills/architecture}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/violations.md +0 -0
- /package/{plugins/devflow-core-skills/skills/git-safety → src/assets/skills/git}/references/detection.md +0 -0
- /package/{plugins/devflow-go → src/assets}/skills/go/references/detection.md +0 -0
- /package/{plugins/devflow-java → src/assets}/skills/java/references/detection.md +0 -0
- /package/{plugins/devflow-implement/skills/implementation-patterns → src/assets/skills/patterns}/references/patterns.md +0 -0
- /package/{plugins/devflow-implement/skills/implementation-patterns → src/assets/skills/patterns}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/performance-patterns → src/assets/skills/performance}/references/detection.md +0 -0
- /package/{plugins/devflow-python → src/assets}/skills/python/references/detection.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/patterns.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/report-template.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/violations.md +0 -0
- /package/{plugins/devflow-rust → src/assets}/skills/rust/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/security-patterns → src/assets/skills/security}/references/detection.md +0 -0
- /package/{plugins/devflow-core-skills/skills/core-patterns → src/assets/skills/software-design}/references/detection.md +0 -0
- /package/{plugins/devflow-core-skills → src/assets}/skills/test-driven-development/references/rationalization-prevention.md +0 -0
- /package/{plugins/devflow-code-review/skills/test-patterns → src/assets/skills/testing}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/test-patterns → src/assets/skills/testing}/references/report-template.md +0 -0
- /package/{plugins/devflow-frontend-design/skills/frontend-design → src/assets/skills/ui-design}/references/detection.md +0 -0
- /package/src/{templates → targets/claude-code/templates}/managed-settings.json +0 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# ensure-proxy — SessionStart + UserPromptSubmit hook
|
|
4
|
+
# Ensures the Devflow proxy relay is running when external model routing is enabled.
|
|
5
|
+
# NOT git-gated (proxy is a global user-scope feature, not per-project).
|
|
6
|
+
# NOT project-scoped: proxy state lives at $DEVFLOW_DIR/proxy.json (user-scope).
|
|
7
|
+
#
|
|
8
|
+
# SessionStart: probe port → if DOWN attempt spawn → inject additionalContext warning if still down
|
|
9
|
+
# UserPromptSubmit: fast exit (both port-up and port-down) — silent; SessionStart handles all warnings
|
|
10
|
+
#
|
|
11
|
+
# Performance: UserPromptSubmit exits immediately after event detection — before any
|
|
12
|
+
# proxy-state reads. All json_field_file calls, log mkdir/stat, and CWD extraction
|
|
13
|
+
# run on SessionStart only. binPath/configPath reads are deferred to the port-down branch.
|
|
14
|
+
#
|
|
15
|
+
# Branding: "subswitch" is an internal identifier (health check body match, SUBSWITCH_CONFIG env var,
|
|
16
|
+
# spawn args); it MUST NOT appear in user-visible strings or additionalContext messages.
|
|
17
|
+
#
|
|
18
|
+
# avoids PF-001: port is digit-validated before interpolation into /dev/tcp and context strings.
|
|
19
|
+
# avoids PF-014: hook always exits 0; no fd held across exit.
|
|
20
|
+
|
|
21
|
+
# Safe no-op fallback — must exist before hook-bootstrap is sourced
|
|
22
|
+
dbg() { :; }
|
|
23
|
+
|
|
24
|
+
# Re-entrancy guard — must come before hook-bootstrap to minimize overhead
|
|
25
|
+
# in background worker sessions (claude -p for memory / learning workers fire hooks too)
|
|
26
|
+
if [ "${DEVFLOW_BG_UPDATER:-}" = "1" ]; then exit 0; fi
|
|
27
|
+
|
|
28
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
29
|
+
|
|
30
|
+
source "$SCRIPT_DIR/hook-bootstrap" "ensure-proxy"
|
|
31
|
+
|
|
32
|
+
source "$SCRIPT_DIR/json-parse" || { echo "ensure-proxy: failed to source json-parse" >&2; exit 0; }
|
|
33
|
+
if [ "$_JSON_AVAILABLE" = "false" ]; then exit 0; fi
|
|
34
|
+
|
|
35
|
+
INPUT=$(cat)
|
|
36
|
+
|
|
37
|
+
# ── Event detection ────────────────────────────────────────────────────────────
|
|
38
|
+
# Distinguish SessionStart vs UserPromptSubmit by presence of the "prompt" key.
|
|
39
|
+
# Session IDs are UUIDs — they cannot contain the literal string '"prompt"'.
|
|
40
|
+
# CWD paths that contain "prompt" still won't match '"prompt"' (with both quotes).
|
|
41
|
+
HOOK_EVENT="SessionStart"
|
|
42
|
+
case "$INPUT" in
|
|
43
|
+
*'"prompt"'*) HOOK_EVENT="UserPromptSubmit" ;;
|
|
44
|
+
esac
|
|
45
|
+
dbg "HOOK_EVENT=$HOOK_EVENT"
|
|
46
|
+
|
|
47
|
+
# ── UserPromptSubmit fast path ─────────────────────────────────────────────────
|
|
48
|
+
# Exit immediately before any proxy-state reads. On UserPromptSubmit the hook is
|
|
49
|
+
# always silent — SessionStart handles all relay-start and warning logic. Exiting
|
|
50
|
+
# here saves two json_field_file subprocess calls (~76ms on jq-less hosts, ~85%
|
|
51
|
+
# of hook wall time) on every prompt when the proxy is enabled.
|
|
52
|
+
if [ "$HOOK_EVENT" = "UserPromptSubmit" ]; then
|
|
53
|
+
dbg "UserPromptSubmit: fast exit (SessionStart handles all state changes)"
|
|
54
|
+
exit 0
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# ── Proxy state ────────────────────────────────────────────────────────────────
|
|
58
|
+
# Proxy is user-scope (global), not project-scoped. Use $DEVFLOW_DIR (env) or default.
|
|
59
|
+
DEVFLOW_DIR="${DEVFLOW_DIR:-$HOME/.devflow}"
|
|
60
|
+
PROXY_STATE_FILE="$DEVFLOW_DIR/proxy.json"
|
|
61
|
+
|
|
62
|
+
if [ ! -f "$PROXY_STATE_FILE" ]; then
|
|
63
|
+
dbg "EXIT: no proxy state file"
|
|
64
|
+
exit 0
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
PROXY_ENABLED=$(json_field_file "$PROXY_STATE_FILE" "enabled" "false")
|
|
68
|
+
if [ "$PROXY_ENABLED" != "true" ]; then
|
|
69
|
+
dbg "EXIT: proxy disabled"
|
|
70
|
+
exit 0
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Digit-validate port before use in /dev/tcp and string interpolation (avoids PF-001)
|
|
74
|
+
PROXY_PORT_RAW=$(json_field_file "$PROXY_STATE_FILE" "port" "4141")
|
|
75
|
+
PROXY_PORT="4141"
|
|
76
|
+
case "$PROXY_PORT_RAW" in
|
|
77
|
+
[0-9]|\
|
|
78
|
+
[0-9][0-9]|\
|
|
79
|
+
[0-9][0-9][0-9]|\
|
|
80
|
+
[0-9][0-9][0-9][0-9]|\
|
|
81
|
+
[0-9][0-9][0-9][0-9][0-9])
|
|
82
|
+
PROXY_PORT="$PROXY_PORT_RAW"
|
|
83
|
+
;;
|
|
84
|
+
esac
|
|
85
|
+
|
|
86
|
+
# ── CWD for debug tracing (SessionStart only, gated behind debug flag) ─────────
|
|
87
|
+
# json_field spawns a subprocess — only worthwhile when debug tracing is active.
|
|
88
|
+
if [ "${DEVFLOW_HOOK_DEBUG:-}" = "1" ]; then
|
|
89
|
+
_CWD=$(printf '%s' "$INPUT" | json_field "cwd" "" 2>/dev/null || true)
|
|
90
|
+
if [ -n "$_CWD" ]; then
|
|
91
|
+
devflow_debug_set_cwd "$_CWD" 2>/dev/null || true
|
|
92
|
+
fi
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# ── Log setup (SessionStart only) ──────────────────────────────────────────────
|
|
96
|
+
LOG_DIR="$DEVFLOW_DIR/logs"
|
|
97
|
+
mkdir -p "$LOG_DIR" 2>/dev/null || true
|
|
98
|
+
# SEC-2: harden log directory to 0700 (best-effort; pre-existing dirs may be wider).
|
|
99
|
+
chmod 700 "$LOG_DIR" 2>/dev/null || true
|
|
100
|
+
LOG_FILE="$LOG_DIR/proxy.log"
|
|
101
|
+
|
|
102
|
+
# Size guard: 2MB max → truncate to 1MB tail (matches hook-log-init guard pattern).
|
|
103
|
+
# Sharing hook-log-init is not feasible here: hook-log-init requires $CWD and targets
|
|
104
|
+
# the per-project log path; ensure-proxy uses the user-scope $DEVFLOW_DIR/logs path.
|
|
105
|
+
# The existence guard is required: wc -c uses a shell redirect whose failure is emitted
|
|
106
|
+
# by bash itself (before wc starts), bypassing 2>/dev/null.
|
|
107
|
+
_LOG_MAX_BYTES=2097152
|
|
108
|
+
_LOG_TAIL_BYTES=1048576
|
|
109
|
+
_LOG_SIZE=0
|
|
110
|
+
if [ -f "$LOG_FILE" ]; then
|
|
111
|
+
_LOG_SIZE=$(stat -f%z "$LOG_FILE" 2>/dev/null) || \
|
|
112
|
+
_LOG_SIZE=$(stat -c%s "$LOG_FILE" 2>/dev/null) || \
|
|
113
|
+
_LOG_SIZE=$(wc -c <"$LOG_FILE" 2>/dev/null | tr -d ' ') || \
|
|
114
|
+
_LOG_SIZE=0
|
|
115
|
+
fi
|
|
116
|
+
_LOG_SIZE="${_LOG_SIZE:-0}"
|
|
117
|
+
if [ -f "$LOG_FILE" ] && [ "$_LOG_SIZE" -gt "$_LOG_MAX_BYTES" ]; then
|
|
118
|
+
_LTMP="$LOG_FILE.tmp.$$"
|
|
119
|
+
# SEC-2: create rotation tmp under umask 077 so the post-mv inode carries 0600.
|
|
120
|
+
# mv replaces the inode, so the replacement inherits the tmp file's mode.
|
|
121
|
+
# chmod-after-mv would leave a window; setting mode at creation is the stronger
|
|
122
|
+
# guarantee. Mirrors the queue-append precedent (src/assets/scripts/hooks/queue-append).
|
|
123
|
+
(umask 077 && tail -c "$_LOG_TAIL_BYTES" "$LOG_FILE" > "$_LTMP") 2>/dev/null && \
|
|
124
|
+
mv "$_LTMP" "$LOG_FILE" 2>/dev/null || \
|
|
125
|
+
rm -f "$_LTMP" 2>/dev/null || true
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
log() {
|
|
129
|
+
echo "[$(date -u '+%Y-%m-%dT%H:%M:%SZ')] [ensure-proxy] $1" >> "$LOG_FILE" 2>/dev/null || true
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
# ── TCP probe (bash built-in, no nc/curl, Bash 3.2-safe) ──────────────────────
|
|
133
|
+
# /dev/tcp is a bash built-in; the exec runs in a subshell so failures don't
|
|
134
|
+
# affect the parent. bash 3.2 on macOS supports /dev/tcp.
|
|
135
|
+
# Port value is digit-validated above — safe to interpolate.
|
|
136
|
+
proxy_tcp_up() {
|
|
137
|
+
local _p="$1"
|
|
138
|
+
( exec 3<>/dev/tcp/127.0.0.1/"$_p" ) 2>/dev/null
|
|
139
|
+
return $?
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
# ── Main logic: SessionStart ───────────────────────────────────────────────────
|
|
143
|
+
if proxy_tcp_up "$PROXY_PORT"; then
|
|
144
|
+
dbg "port $PROXY_PORT up"
|
|
145
|
+
|
|
146
|
+
# SessionStart: verify identity to avoid adopting a foreign service on this port.
|
|
147
|
+
# Guard: curl may be absent on minimal hosts; when absent, assume the relay is ours
|
|
148
|
+
# (the CLI --status provides the authoritative identity check; this hook is advisory).
|
|
149
|
+
if command -v curl >/dev/null 2>&1; then
|
|
150
|
+
HEALTH_BODY=$(curl -s --max-time 2 "http://127.0.0.1:${PROXY_PORT}/__subswitch/health" 2>/dev/null || true)
|
|
151
|
+
dbg "health_body=$HEALTH_BODY"
|
|
152
|
+
# Parse the name field from the health body — key-order-independent.
|
|
153
|
+
# json_field is always available here: line 33 exits if _JSON_AVAILABLE=false.
|
|
154
|
+
# 'subswitch' is the internal package name — acceptable in hook code and logs,
|
|
155
|
+
# but must NEVER appear in user-visible strings or additionalContext messages.
|
|
156
|
+
HEALTH_NAME=$(printf '%s' "$HEALTH_BODY" | json_field "name" "" 2>/dev/null || true)
|
|
157
|
+
if [ "$HEALTH_NAME" = "subswitch" ]; then
|
|
158
|
+
log "SessionStart: port $PROXY_PORT healthy (correct identity)"
|
|
159
|
+
exit 0
|
|
160
|
+
else
|
|
161
|
+
log "SessionStart: port $PROXY_PORT accepting but identity mismatch — possible squatting"
|
|
162
|
+
CONTEXT="[Devflow proxy] Warning: port ${PROXY_PORT} is occupied by another application. External model routing may be unavailable. Run devflow proxy --status for details."
|
|
163
|
+
json_session_output "$CONTEXT"
|
|
164
|
+
exit 0
|
|
165
|
+
fi
|
|
166
|
+
fi
|
|
167
|
+
|
|
168
|
+
# curl absent — assume the relay is ours (no warning; CLI --status is the authoritative check)
|
|
169
|
+
log "SessionStart: port $PROXY_PORT up (curl absent — assuming ours)"
|
|
170
|
+
exit 0
|
|
171
|
+
fi
|
|
172
|
+
|
|
173
|
+
# Port NOT accepting connections
|
|
174
|
+
|
|
175
|
+
# ── SessionStart: attempt to start the relay ───────────────────────────────────
|
|
176
|
+
log "SessionStart: port $PROXY_PORT down — attempting start"
|
|
177
|
+
|
|
178
|
+
# Read binPath and configPath only here — deferred from the top-level block so that
|
|
179
|
+
# UserPromptSubmit and SessionStart-port-up paths pay zero json_field_file cost.
|
|
180
|
+
PROXY_BIN=$(json_field_file "$PROXY_STATE_FILE" "binPath" "")
|
|
181
|
+
PROXY_CONFIG=$(json_field_file "$PROXY_STATE_FILE" "configPath" "")
|
|
182
|
+
dbg "PROXY_BIN=$PROXY_BIN PROXY_CONFIG=$PROXY_CONFIG"
|
|
183
|
+
|
|
184
|
+
# Validate prerequisites before spawning
|
|
185
|
+
if [ -z "$PROXY_BIN" ] || [ ! -f "$PROXY_BIN" ]; then
|
|
186
|
+
log "prereq fail: binPath missing or not a file: $PROXY_BIN"
|
|
187
|
+
CONTEXT="[Devflow proxy] Warning: relay binary not found. Run 'devflow proxy --enable' to restore external model routing."
|
|
188
|
+
json_session_output "$CONTEXT"
|
|
189
|
+
exit 0
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
NODE_BIN=$(command -v node 2>/dev/null || true)
|
|
193
|
+
if [ -z "$NODE_BIN" ]; then
|
|
194
|
+
log "prereq fail: node not found in PATH"
|
|
195
|
+
CONTEXT="[Devflow proxy] Warning: Node.js not found in PATH. Install Node.js to enable external model routing."
|
|
196
|
+
json_session_output "$CONTEXT"
|
|
197
|
+
exit 0
|
|
198
|
+
fi
|
|
199
|
+
|
|
200
|
+
if [ -z "$PROXY_CONFIG" ] || [ ! -f "$PROXY_CONFIG" ]; then
|
|
201
|
+
log "prereq fail: configPath missing or not a file: $PROXY_CONFIG"
|
|
202
|
+
CONTEXT="[Devflow proxy] Warning: routing config not found. Run 'devflow proxy --enable' to restore external model routing."
|
|
203
|
+
json_session_output "$CONTEXT"
|
|
204
|
+
exit 0
|
|
205
|
+
fi
|
|
206
|
+
|
|
207
|
+
# Acquire spawn lock — prevents concurrent sessions from double-spawning the relay
|
|
208
|
+
# Stale break: 30s (lock abandoned by crashed hook)
|
|
209
|
+
source "$SCRIPT_DIR/get-mtime" 2>/dev/null || true
|
|
210
|
+
source "$SCRIPT_DIR/learning-lock" 2>/dev/null || true
|
|
211
|
+
|
|
212
|
+
SPAWN_LOCK="$DEVFLOW_DIR/.proxy-spawn.lock"
|
|
213
|
+
|
|
214
|
+
if ! learning_lock_acquire "$SPAWN_LOCK" 2 2>/dev/null; then
|
|
215
|
+
# Another session is racing to start the proxy — give it a moment then re-probe
|
|
216
|
+
log "spawn lock busy — another session may be starting proxy"
|
|
217
|
+
sleep 1
|
|
218
|
+
if proxy_tcp_up "$PROXY_PORT"; then
|
|
219
|
+
log "proxy started by another session — ok"
|
|
220
|
+
exit 0
|
|
221
|
+
fi
|
|
222
|
+
log "still down after lock wait"
|
|
223
|
+
CONTEXT="[Devflow proxy] Note: relay is starting in another session. If models are unavailable, retry your prompt."
|
|
224
|
+
json_session_output "$CONTEXT"
|
|
225
|
+
exit 0
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
# We hold the lock — spawn the relay
|
|
229
|
+
log "spawning relay: $NODE_BIN $PROXY_BIN serve"
|
|
230
|
+
|
|
231
|
+
# SEC-2: create proxy.log with 0600 before the append redirect so the file
|
|
232
|
+
# lands at the correct mode on first creation. If the file already exists,
|
|
233
|
+
# touch is a no-op for mode; the chmod below covers pre-existing wider modes.
|
|
234
|
+
# Follows the queue-append precedent (src/assets/scripts/hooks/queue-append).
|
|
235
|
+
(umask 077 && touch "$LOG_FILE") 2>/dev/null || true
|
|
236
|
+
chmod 600 "$LOG_FILE" 2>/dev/null || true
|
|
237
|
+
|
|
238
|
+
# SEC-2 (allowlist): scope the relay's env to exactly what it needs — avoids PF-017.
|
|
239
|
+
# NODE_EXTRA_CA_CERTS is included when non-empty so corporate-TLS deployments can
|
|
240
|
+
# supply a CA bundle; an unset/empty value is not injected (an empty path causes
|
|
241
|
+
# TLS errors rather than being a no-op). NODE_OPTIONS is deliberately excluded:
|
|
242
|
+
# it permits arbitrary code execution via --require/--import.
|
|
243
|
+
# Mirrored in scrubChildEnv() in proxy-log.ts; both allowlists must stay in sync.
|
|
244
|
+
# Bash 3.2-safe: bash arrays and array append (+=) are supported since bash 2.0.
|
|
245
|
+
# nohup + env -i chain: nohup inherits the parent env (irrelevant — env -i clears
|
|
246
|
+
# it for the relay); $! still captures the relay PID correctly.
|
|
247
|
+
_RELAY_ENV=(
|
|
248
|
+
"PATH=$PATH"
|
|
249
|
+
"HOME=$HOME"
|
|
250
|
+
"TMPDIR=${TMPDIR:-}"
|
|
251
|
+
"LANG=${LANG:-}"
|
|
252
|
+
"LC_ALL=${LC_ALL:-}"
|
|
253
|
+
"SUBSWITCH_CONFIG=$PROXY_CONFIG"
|
|
254
|
+
)
|
|
255
|
+
if [ -n "${NODE_EXTRA_CA_CERTS:-}" ]; then
|
|
256
|
+
_RELAY_ENV+=("NODE_EXTRA_CA_CERTS=$NODE_EXTRA_CA_CERTS")
|
|
257
|
+
fi
|
|
258
|
+
nohup env -i "${_RELAY_ENV[@]}" \
|
|
259
|
+
"$NODE_BIN" "$PROXY_BIN" serve </dev/null >>"$LOG_FILE" 2>&1 &
|
|
260
|
+
_RELAY_PID=$!
|
|
261
|
+
disown "$_RELAY_PID" 2>/dev/null || true
|
|
262
|
+
|
|
263
|
+
log "relay spawned with pid $_RELAY_PID"
|
|
264
|
+
|
|
265
|
+
# Best-effort pid record for `devflow proxy --status` — mirrors the CLI enable path.
|
|
266
|
+
# Written unconditionally after spawn (like the CLI): a stale pid from a relay that
|
|
267
|
+
# never came up is harmless, since --status liveness-checks it before display.
|
|
268
|
+
printf '%s' "$_RELAY_PID" > "$DEVFLOW_DIR/proxy.pid" 2>/dev/null || \
|
|
269
|
+
log "warn: could not write proxy.pid (non-fatal)"
|
|
270
|
+
|
|
271
|
+
# Bounded wait: 80×0.1s = 8s maximum (well within 15s hook timeout)
|
|
272
|
+
_i=0
|
|
273
|
+
_RELAY_UP=false
|
|
274
|
+
while [ "$_i" -lt 80 ]; do
|
|
275
|
+
sleep 0.1
|
|
276
|
+
if proxy_tcp_up "$PROXY_PORT"; then
|
|
277
|
+
_RELAY_UP=true
|
|
278
|
+
break
|
|
279
|
+
fi
|
|
280
|
+
_i=$(( _i + 1 ))
|
|
281
|
+
done
|
|
282
|
+
|
|
283
|
+
learning_lock_release "$SPAWN_LOCK"
|
|
284
|
+
|
|
285
|
+
if [ "$_RELAY_UP" = "true" ]; then
|
|
286
|
+
log "relay ready after $(( _i + 1 )) probe(s)"
|
|
287
|
+
exit 0
|
|
288
|
+
fi
|
|
289
|
+
|
|
290
|
+
# Relay did not accept connections within the bounded wait
|
|
291
|
+
log "relay not ready after 80 probes — emitting warning"
|
|
292
|
+
CONTEXT="[Devflow proxy] Warning: relay failed to start on port ${PROXY_PORT}. External model routing unavailable this session. See ${LOG_FILE} for details."
|
|
293
|
+
json_session_output "$CONTEXT"
|
|
294
|
+
exit 0
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# ensure-root-gitignore — single source of truth for the project root .gitignore
|
|
3
|
+
# rules that govern .devflow/.
|
|
4
|
+
#
|
|
5
|
+
# .devflow/ holds per-developer runtime state (memory, learning, docs, locks) —
|
|
6
|
+
# local by default. TWO exceptions are shared via git:
|
|
7
|
+
# 1. Feature knowledge bases under .devflow/features/: index.md and every
|
|
8
|
+
# {slug}/KNOWLEDGE.md (tracked, committed by the Knowledge agent at workflow end).
|
|
9
|
+
# 2. .devflow/conventions.md — naming-convention authority written by the Git
|
|
10
|
+
# learn-conventions operation; shared so the team uses one naming source.
|
|
11
|
+
#
|
|
12
|
+
# Everything else under .devflow/ stays local. A user opts back out by re-adding
|
|
13
|
+
# `.devflow/features/` or `.devflow/conventions.md` to their own .gitignore.
|
|
14
|
+
#
|
|
15
|
+
# Re-including files under an ignored tree requires un-ignoring each level with a
|
|
16
|
+
# `dir/*` + `!dir/keep` pair: a bare `.devflow/` excludes the directory outright,
|
|
17
|
+
# so git never descends and later negations are dead. Hence the multi-line block.
|
|
18
|
+
#
|
|
19
|
+
# Sourced by:
|
|
20
|
+
# - ensure-devflow-init (reached via the memory/learning hooks)
|
|
21
|
+
# - session-start-context (always-on, memory-independent — covers memory-off
|
|
22
|
+
# projects that still use learning/knowledge)
|
|
23
|
+
# Both reach this one writer so the rule is applied identically everywhere; this
|
|
24
|
+
# decouples git-tracking of .devflow/ from any single feature toggle (avoids PF-014).
|
|
25
|
+
#
|
|
26
|
+
# Idempotent and O(1) after the first run via the .root-gitignore-configured-v3
|
|
27
|
+
# marker. The marker is versioned: bumping it (v2 → v3) forces existing installs
|
|
28
|
+
# to re-run once and upgrade their block (adds !.devflow/conventions.md line).
|
|
29
|
+
#
|
|
30
|
+
# Usage: source ensure-root-gitignore "$PROJECT_ROOT"
|
|
31
|
+
# Sourced helper: uses `return` (never exit), _ERG_-prefixed locals (never clobbers
|
|
32
|
+
# caller vars).
|
|
33
|
+
|
|
34
|
+
[ -z "$1" ] && return 1
|
|
35
|
+
|
|
36
|
+
_ERG_DEVFLOW_DIR="$1/.devflow"
|
|
37
|
+
_ERG_MARKER="$_ERG_DEVFLOW_DIR/.root-gitignore-configured-v3"
|
|
38
|
+
_ERG_GITIGNORE="$1/.gitignore"
|
|
39
|
+
|
|
40
|
+
# Fast-path with verification: marker normally means the block is installed, but
|
|
41
|
+
# the marker is a claim, not proof — a merge-conflict resolution may have dropped
|
|
42
|
+
# the block. Gate the fast-path return on the v3 sentinel actually being present
|
|
43
|
+
# in .gitignore. Idempotent: sentinel present → return 0; sentinel absent → heal.
|
|
44
|
+
if [ -f "$_ERG_MARKER" ]; then
|
|
45
|
+
grep -qF '!.devflow/conventions.md' "$_ERG_GITIGNORE" 2>/dev/null && return 0
|
|
46
|
+
# Sentinel absent — marker is stale; fall through to re-apply the block.
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
# The marker lives under .devflow/, so the directory must exist before we touch it.
|
|
50
|
+
# (ensure-devflow-init creates it earlier; session-start-context may reach here first.)
|
|
51
|
+
mkdir -p "$_ERG_DEVFLOW_DIR" 2>/dev/null || return 1
|
|
52
|
+
|
|
53
|
+
# The carve-out block, built once into _ERG_BLOCK (emitted on create and append).
|
|
54
|
+
# Keep byte-identical to ensureDevflowGitignore in src/targets/claude-code/post-install.ts.
|
|
55
|
+
# D-GITIGNORE-V3: v3 adds !.devflow/conventions.md (naming authority, git-tracked).
|
|
56
|
+
printf -v _ERG_BLOCK '%s\n' \
|
|
57
|
+
'# Devflow runtime data — local by default (memory, learning, docs, locks).' \
|
|
58
|
+
'# Two exceptions are shared via git: feature knowledge bases under .devflow/features/' \
|
|
59
|
+
'# (index.md and every {slug}/KNOWLEDGE.md) and .devflow/conventions.md (naming' \
|
|
60
|
+
'# authority). To stop sharing, re-add `.devflow/features/` or `.devflow/conventions.md`' \
|
|
61
|
+
'# to your own .gitignore.' \
|
|
62
|
+
'.devflow/*' \
|
|
63
|
+
'!.devflow/features/' \
|
|
64
|
+
'.devflow/features/*' \
|
|
65
|
+
'!.devflow/features/index.md' \
|
|
66
|
+
'!.devflow/features/*/' \
|
|
67
|
+
'.devflow/features/*/*' \
|
|
68
|
+
'!.devflow/features/*/KNOWLEDGE.md' \
|
|
69
|
+
'!.devflow/conventions.md'
|
|
70
|
+
|
|
71
|
+
_ERG_OK=0
|
|
72
|
+
if [ ! -f "$_ERG_GITIGNORE" ]; then
|
|
73
|
+
# No .gitignore yet — create it with the block.
|
|
74
|
+
printf '%s' "$_ERG_BLOCK" > "$_ERG_GITIGNORE" && _ERG_OK=1
|
|
75
|
+
elif grep -qF '!.devflow/conventions.md' "$_ERG_GITIGNORE"; then
|
|
76
|
+
# v3 carve-out already present — nothing to do.
|
|
77
|
+
_ERG_OK=1
|
|
78
|
+
elif grep -qE '^/\.devflow/[[:space:]]*$' "$_ERG_GITIGNORE"; then
|
|
79
|
+
# User-authored `/.devflow/` (leading slash) — respect it; don't force the carve-out.
|
|
80
|
+
# Checked BEFORE the v2 sentinel so a file containing both keeps the user-authored
|
|
81
|
+
# entry (matches ensureDevflowGitignore TS order: v3→/.devflow/→v2→wholesale→append).
|
|
82
|
+
_ERG_OK=1
|
|
83
|
+
elif grep -qF '!.devflow/features/*/KNOWLEDGE.md' "$_ERG_GITIGNORE"; then
|
|
84
|
+
# v2→v3 upgrade: v2 sentinel present but conventions.md line absent — append just the
|
|
85
|
+
# missing line. A .gitignore whose last byte is not a newline would otherwise fuse the
|
|
86
|
+
# appended line onto the last existing one, corrupting BOTH patterns; the sibling append
|
|
87
|
+
# branches below get this for free by emitting a leading '\n'. `tail -c 1` yields the
|
|
88
|
+
# empty string when the file already ends in a newline (command substitution strips it).
|
|
89
|
+
if [ -n "$(tail -c 1 "$_ERG_GITIGNORE" 2>/dev/null)" ]; then
|
|
90
|
+
printf '\n' >> "$_ERG_GITIGNORE"
|
|
91
|
+
fi
|
|
92
|
+
printf '!.devflow/conventions.md\n' >> "$_ERG_GITIGNORE" && _ERG_OK=1
|
|
93
|
+
elif grep -qE '^\.devflow/[[:space:]]*$' "$_ERG_GITIGNORE"; then
|
|
94
|
+
# Upgrade our legacy wholesale entry: strip the bare `.devflow/` line and our old
|
|
95
|
+
# comment, then append the carve-out block. Portable (grep filter + mv; no sed -i,
|
|
96
|
+
# which differs on BSD/GNU). An empty filter result is fine — the block is appended
|
|
97
|
+
# regardless; a leading blank is added only when prior content survived.
|
|
98
|
+
_ERG_TMP="$_ERG_GITIGNORE.devflow-tmp.$$"
|
|
99
|
+
grep -vE '^\.devflow/[[:space:]]*$' "$_ERG_GITIGNORE" 2>/dev/null \
|
|
100
|
+
| grep -vF '# Devflow runtime data (local by default; remove to share via git)' \
|
|
101
|
+
> "$_ERG_TMP" 2>/dev/null
|
|
102
|
+
{ [ -s "$_ERG_TMP" ] && printf '\n'; printf '%s' "$_ERG_BLOCK"; } >> "$_ERG_TMP" \
|
|
103
|
+
&& mv "$_ERG_TMP" "$_ERG_GITIGNORE" && _ERG_OK=1
|
|
104
|
+
[ "$_ERG_OK" = 1 ] || rm -f "$_ERG_TMP" 2>/dev/null
|
|
105
|
+
else
|
|
106
|
+
# .gitignore exists but has no Devflow entry — append the block.
|
|
107
|
+
{ printf '\n'; printf '%s' "$_ERG_BLOCK"; } >> "$_ERG_GITIGNORE" && _ERG_OK=1
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# On success, stamp the current-format v3 marker and drop legacy markers.
|
|
111
|
+
[ "$_ERG_OK" = 1 ] && {
|
|
112
|
+
touch "$_ERG_MARKER"
|
|
113
|
+
rm -f "$_ERG_DEVFLOW_DIR/.root-gitignore-configured-v2" 2>/dev/null
|
|
114
|
+
rm -f "$_ERG_DEVFLOW_DIR/.root-gitignore-configured" 2>/dev/null
|
|
115
|
+
}
|
|
116
|
+
return 0
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Portable file mtime extraction (BSD/GNU stat compatible)
|
|
3
|
+
# Usage: source "$SCRIPT_DIR/get-mtime" then mtime=$(get_mtime "/path/to/file")
|
|
4
|
+
# Returns: Unix epoch seconds of file's last modification time
|
|
5
|
+
|
|
6
|
+
# Cache platform detection on first call to avoid repeated capability probes
|
|
7
|
+
_GET_MTIME_STAT_TYPE=""
|
|
8
|
+
|
|
9
|
+
get_mtime() {
|
|
10
|
+
local file="$1"
|
|
11
|
+
if [ -z "$_GET_MTIME_STAT_TYPE" ]; then
|
|
12
|
+
if stat --version &>/dev/null 2>&1; then
|
|
13
|
+
_GET_MTIME_STAT_TYPE="gnu"
|
|
14
|
+
else
|
|
15
|
+
_GET_MTIME_STAT_TYPE="bsd"
|
|
16
|
+
fi
|
|
17
|
+
fi
|
|
18
|
+
if [ "$_GET_MTIME_STAT_TYPE" = "gnu" ]; then
|
|
19
|
+
stat -c %Y "$file" 2>/dev/null # GNU (Linux)
|
|
20
|
+
else
|
|
21
|
+
stat -f %m "$file" 2>/dev/null # BSD (macOS)
|
|
22
|
+
fi
|
|
23
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Sourced helper: df_has_git_marker <dir> — returns 0 if <dir> or any of its
|
|
3
|
+
# ancestors (bounded, max 64 levels) contains a .git entry (dir or file).
|
|
4
|
+
# Pure bash, no subprocess — safe for the per-prompt UserPromptSubmit hot path.
|
|
5
|
+
# The -e test covers both .git directories and worktree/submodule .git files.
|
|
6
|
+
df_has_git_marker() {
|
|
7
|
+
local _dir="$1" _i=0
|
|
8
|
+
while [ "$_i" -lt 64 ]; do
|
|
9
|
+
[ -e "$_dir/.git" ] && return 0
|
|
10
|
+
if [ "$_dir" = "/" ] || [ -z "$_dir" ]; then return 1; fi
|
|
11
|
+
_dir="${_dir%/*}"
|
|
12
|
+
[ -z "$_dir" ] && _dir="/"
|
|
13
|
+
_i=$((_i + 1))
|
|
14
|
+
done
|
|
15
|
+
return 1
|
|
16
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Shared debug bootstrap helper for Devflow hooks.
|
|
3
|
+
# Source this file AFTER setting SCRIPT_DIR and defining dbg() no-op fallback.
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
# dbg() { :; }
|
|
7
|
+
# SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
8
|
+
# source "$SCRIPT_DIR/hook-bootstrap" "hook-name"
|
|
9
|
+
#
|
|
10
|
+
# What this does:
|
|
11
|
+
# 1. Sources debug-trace from $SCRIPT_DIR (soft-fail — hook still runs if absent)
|
|
12
|
+
# 2. Calls devflow_debug_init with the hook name passed as $1
|
|
13
|
+
# 3. Emits "=== HOOK START ===" debug trace
|
|
14
|
+
#
|
|
15
|
+
# What this does NOT do:
|
|
16
|
+
# - set -e (per-hook policy; caller must set it before or after)
|
|
17
|
+
# - Compute SCRIPT_DIR (must be set by caller before sourcing)
|
|
18
|
+
#
|
|
19
|
+
# Requires: $SCRIPT_DIR set by caller; fails fast with clear error if missing.
|
|
20
|
+
|
|
21
|
+
: "${SCRIPT_DIR:?hook-bootstrap: SCRIPT_DIR must be set by caller}"
|
|
22
|
+
|
|
23
|
+
source "$SCRIPT_DIR/debug-trace" || true
|
|
24
|
+
devflow_debug_init "${1:-hook}"
|
|
25
|
+
dbg "=== HOOK START ==="
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Shared log initialisation helper for Devflow hooks.
|
|
3
|
+
# Source this file AFTER hook-bootstrap (so dbg() is available) and after CWD is validated.
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
# source "$SCRIPT_DIR/hook-log-init" "hook-name"
|
|
7
|
+
#
|
|
8
|
+
# What this does:
|
|
9
|
+
# 1. Sources log-paths from $SCRIPT_DIR (soft-fail)
|
|
10
|
+
# 2. Computes LOG_DIR via devflow_log_dir "$CWD" with ${TMPDIR:-/tmp} fallback
|
|
11
|
+
# 3. Sets LOG_FILE to $LOG_DIR/.<hook-name>.log
|
|
12
|
+
# 4. Applies 2MB→1MB tail size guard on LOG_FILE
|
|
13
|
+
# 5. Defines log() function with ISO timestamp and hook name label
|
|
14
|
+
#
|
|
15
|
+
# Exports: LOG_DIR, LOG_FILE, log()
|
|
16
|
+
#
|
|
17
|
+
# Requires:
|
|
18
|
+
# $SCRIPT_DIR — set by caller (needed to locate log-paths)
|
|
19
|
+
# $CWD — set and validated by caller; fails fast with clear error if missing
|
|
20
|
+
|
|
21
|
+
: "${SCRIPT_DIR:?hook-log-init: SCRIPT_DIR must be set by caller}"
|
|
22
|
+
: "${CWD:?hook-log-init: CWD must be set by caller}"
|
|
23
|
+
|
|
24
|
+
_HOOK_LOG_NAME="${1:-hook}"
|
|
25
|
+
|
|
26
|
+
source "$SCRIPT_DIR/log-paths" || true
|
|
27
|
+
LOG_DIR=$(devflow_log_dir "$CWD" 2>/dev/null || echo "${TMPDIR:-/tmp}")
|
|
28
|
+
LOG_FILE="$LOG_DIR/.${_HOOK_LOG_NAME}.log"
|
|
29
|
+
|
|
30
|
+
# Size guard: truncate log to tail 1MB when it exceeds 2MB (runs once per hook invocation)
|
|
31
|
+
# stat -f%z (macOS/BSD) → stat -c%s (GNU/Linux) → wc -c (last resort), matching debug-trace pattern.
|
|
32
|
+
_LOG_SIZE=$(stat -f%z "$LOG_FILE" 2>/dev/null) \
|
|
33
|
+
|| _LOG_SIZE=$(stat -c%s "$LOG_FILE" 2>/dev/null) \
|
|
34
|
+
|| _LOG_SIZE=$(wc -c < "$LOG_FILE" 2>/dev/null) \
|
|
35
|
+
|| _LOG_SIZE=0
|
|
36
|
+
if [ -f "$LOG_FILE" ] && [ "$_LOG_SIZE" -gt 2097152 ]; then
|
|
37
|
+
_LTMP="$LOG_FILE.tmp.$$"
|
|
38
|
+
tail -c 1048576 "$LOG_FILE" > "$_LTMP" 2>/dev/null && mv "$_LTMP" "$LOG_FILE" 2>/dev/null || rm -f "$_LTMP" 2>/dev/null || true
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
log() { echo "[$(date -u '+%Y-%m-%dT%H:%M:%SZ')] [${_HOOK_LOG_NAME}] $1" >> "$LOG_FILE" 2>/dev/null || true; }
|