nobrainer-tech-flow 0.0.0-stage → 2.4.0
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/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +18 -0
- package/.claude-plugin/plugin.json +21 -0
- package/.codex-plugin/plugin.json +47 -0
- package/.opencode/INSTALL.md +37 -0
- package/.opencode/plugins/nobrainer-tech-skills.js +66 -0
- package/.pi/extensions/nobrainer-tech-skills.js +64 -0
- package/AGENTS.md +204 -0
- package/CLAUDE.md +204 -0
- package/CONTRIBUTING.md +70 -0
- package/GEMINI.md +1 -0
- package/LICENSE +21 -0
- package/README.md +658 -2
- package/SECURITY.md +33 -0
- package/adapters/bootstrap.md +27 -0
- package/assets/nobrainer-tech-logo.svg +1 -0
- package/assets/nobrainer-workflow.svg +155 -0
- package/assets/plugin-logo.png +0 -0
- package/bin/nobrainer-tech-flow.mjs +48 -0
- package/docs/BOUNDED_RUNNER.md +60 -0
- package/docs/CHAT_PLUGINS.md +29 -0
- package/docs/COMPATIBILITY.md +371 -0
- package/docs/INSTALL.md +626 -0
- package/docs/MIGRATION_TO_FLOW.md +117 -0
- package/docs/NAMING.md +39 -0
- package/docs/PRIVACY.md +9 -0
- package/docs/SESSION_RESTART.md +70 -0
- package/docs/SKILL_CURATION.md +124 -0
- package/docs/TESTING.md +232 -0
- package/docs/TRY_IT.md +109 -0
- package/docs/releases/v1.0.0.md +81 -0
- package/docs/releases/v1.1.0.md +85 -0
- package/docs/releases/v1.10.0.md +34 -0
- package/docs/releases/v1.11.0-publication-readback.md +25 -0
- package/docs/releases/v1.11.0.md +42 -0
- package/docs/releases/v1.12.0.md +30 -0
- package/docs/releases/v1.13.0.md +46 -0
- package/docs/releases/v1.14.0.md +43 -0
- package/docs/releases/v1.14.1.md +21 -0
- package/docs/releases/v1.2.0.md +87 -0
- package/docs/releases/v1.2.1.md +92 -0
- package/docs/releases/v1.3.0-publication-readback.md +69 -0
- package/docs/releases/v1.3.0.md +66 -0
- package/docs/releases/v1.3.1-publication-readback.md +76 -0
- package/docs/releases/v1.3.1.md +59 -0
- package/docs/releases/v1.4.0-publication-readback.md +81 -0
- package/docs/releases/v1.4.0.md +43 -0
- package/docs/releases/v1.5.0-publication-readback.md +76 -0
- package/docs/releases/v1.5.0.md +54 -0
- package/docs/releases/v1.6.0.md +64 -0
- package/docs/releases/v1.6.1-publication-readback.md +53 -0
- package/docs/releases/v1.6.1.md +82 -0
- package/docs/releases/v1.7.0.md +42 -0
- package/docs/releases/v1.7.1-publication-readback.md +64 -0
- package/docs/releases/v1.7.1.md +49 -0
- package/docs/releases/v1.8.0.md +63 -0
- package/docs/releases/v1.8.1.md +32 -0
- package/docs/releases/v1.9.0.md +33 -0
- package/docs/releases/v2.0.0-candidate.md +28 -0
- package/docs/releases/v2.0.0.md +53 -0
- package/docs/releases/v2.0.1.md +135 -0
- package/docs/releases/v2.0.2.md +189 -0
- package/docs/releases/v2.1.0.md +64 -0
- package/docs/releases/v2.1.1.md +43 -0
- package/docs/releases/v2.2.0.md +64 -0
- package/docs/releases/v2.2.1.md +11 -0
- package/docs/releases/v2.3.0.md +97 -0
- package/docs/releases/v2.3.1.md +71 -0
- package/docs/releases/v2.3.2.md +242 -0
- package/docs/releases/v2.4.0.md +126 -0
- package/gemini-extension.json +6 -0
- package/hooks/claude-hooks.json +17 -0
- package/hooks/hooks-cursor.json +10 -0
- package/hooks/run-hook.cmd +36 -0
- package/hooks/session-start +38 -0
- package/package.json +69 -4
- package/plugin.json +51 -0
- package/scripts/build_plugin.py +50 -0
- package/scripts/check_flow_update.py +18 -0
- package/scripts/check_public_commit.py +86 -0
- package/scripts/fetch_public_refs.py +69 -0
- package/scripts/install.py +600 -0
- package/scripts/install.sh +1392 -0
- package/scripts/install_guards.py +279 -0
- package/scripts/install_personalization.py +527 -0
- package/scripts/install_skills.py +951 -0
- package/scripts/npm_install.py +85 -0
- package/scripts/recommend_flow_setup.py +1522 -0
- package/scripts/validate_skills.py +465 -0
- package/skills/nobrainer-auto-fine-tune/SKILL.md +79 -0
- package/skills/nobrainer-auto-fine-tune/references/capacity-audit.md +49 -0
- package/skills/nobrainer-autoimprove/SKILL.md +212 -0
- package/skills/nobrainer-autoimprove/scripts/count_words.py +22 -0
- package/skills/nobrainer-browser/SKILL.md +234 -0
- package/skills/nobrainer-browser/references/cdp-profile-restart.md +93 -0
- package/skills/nobrainer-build/SKILL.md +173 -0
- package/skills/nobrainer-codex-context/SKILL.md +111 -0
- package/skills/nobrainer-codex-context/scripts/codex_context.py +175 -0
- package/skills/nobrainer-decide/SKILL.md +198 -0
- package/skills/nobrainer-dispatcher/SKILL.md +256 -0
- package/skills/nobrainer-dispatcher/agents/openai.yaml +4 -0
- package/skills/nobrainer-rca/SKILL.md +163 -0
- package/skills/nobrainer-research/SKILL.md +131 -0
- package/skills/nobrainer-review/SKILL.md +195 -0
- package/skills/nobrainer-security/SKILL.md +166 -0
- package/skills/nobrainer-sessions/SKILL.md +223 -0
- package/skills/nobrainer-sessions/references/evidence-receipt.md +55 -0
- package/skills/nobrainer-sessions/references/protocol.md +337 -0
- package/skills/nobrainer-sessions/references/session-restart.md +255 -0
- package/skills/nobrainer-sessions/scripts/evidence_receipt.py +373 -0
- package/skills/nobrainer-sessions/scripts/restart_gate.py +140 -0
- package/skills/nobrainer-sessions/scripts/run_bounded.py +390 -0
- package/skills/nobrainer-sessions/scripts/session_title.py +43 -0
- package/skills/nobrainer-skill-doctor/SKILL.md +149 -0
- package/skills/nobrainer-skill-doctor/references/astra.md +19 -0
- package/skills/nobrainer-skill-doctor/scripts/audit.py +100 -0
- package/skills/nobrainer-skill-doctor/scripts/context_candidates.py +133 -0
- package/skills/nobrainer-spec-driven-development/SKILL.md +132 -0
- package/skills/nobrainer-spec-driven-development/references/spec-template.md +114 -0
- package/skills/nobrainer-team/SKILL.md +165 -0
- package/skills/nobrainer-team/references/team-plan.md +64 -0
- package/skills/nobrainer-tech-flow/SKILL.md +239 -0
- package/skills/nobrainer-tech-flow/VERSION +1 -0
- package/skills/nobrainer-tech-flow/references/autopilot.md +72 -0
- package/skills/nobrainer-tech-flow/references/codex-routing.md +21 -0
- package/skills/nobrainer-tech-flow/references/communication.md +108 -0
- package/skills/nobrainer-tech-flow/references/correction-hooks.md +110 -0
- package/skills/nobrainer-tech-flow/references/daily-update.md +28 -0
- package/skills/nobrainer-tech-flow/references/delivery.md +243 -0
- package/skills/nobrainer-tech-flow/references/idea-to-delivery.md +82 -0
- package/skills/nobrainer-tech-flow/references/long-run-state.md +209 -0
- package/skills/nobrainer-tech-flow/references/model-routing.md +83 -0
- package/skills/nobrainer-tech-flow/references/optional-decisions.md +83 -0
- package/skills/nobrainer-tech-flow/references/project-start.md +22 -0
- package/skills/nobrainer-tech-flow/references/routing.md +125 -0
- package/skills/nobrainer-tech-flow/references/setup.md +180 -0
- package/skills/nobrainer-tech-flow/references/worktrees.md +138 -0
- package/skills/nobrainer-tech-flow/scripts/check_flow_update.py +298 -0
- package/skills/nobrainer-tech-flow/scripts/cleanup_worktree.py +327 -0
- package/skills/nobrainer-tech-flow/scripts/decision_config.py +107 -0
- package/skills/nobrainer-tech-flow/scripts/flow_guard.py +252 -0
- package/skills/nobrainer-tech-flow/scripts/typed_decisions.py +210 -0
- package/skills/nobrainer-wiki/SKILL.md +164 -0
- package/skills/nobrainer-wiki/references/setup.md +88 -0
- package/skills/nobrainer-writing/SKILL.md +272 -0
- package/skills/nobrainer-writing/agents/openai.yaml +4 -0
- package/skills/nobrainer-writing/references/brief-artifacts.md +357 -0
- package/skills/nobrainer-writing/references/plain-technical-english.md +76 -0
- package/skills/nobrainer-writing/references/research.md +86 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Keep an npm release at a stable profile path, then use the existing reversible installer."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import importlib.util
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def load(name: str):
|
|
16
|
+
spec = importlib.util.spec_from_file_location("_npm_" + name, ROOT / "scripts" / (name + ".py"))
|
|
17
|
+
module = importlib.util.module_from_spec(spec)
|
|
18
|
+
sys.modules[spec.name] = module
|
|
19
|
+
spec.loader.exec_module(module)
|
|
20
|
+
return module
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def main() -> int:
|
|
24
|
+
installer = load("install")
|
|
25
|
+
args = installer.parse_args()
|
|
26
|
+
if (args.apply or args.undo) and (ROOT / ".git").exists():
|
|
27
|
+
print("ERROR: use scripts/install.py from a Git checkout; npm installation expects the packed release.", file=sys.stderr)
|
|
28
|
+
return 2
|
|
29
|
+
metadata = json.loads((ROOT / "package.json").read_text(encoding="utf-8"))
|
|
30
|
+
version = metadata["version"]
|
|
31
|
+
# --home chooses storage and the client profile without changing the caller's HOME.
|
|
32
|
+
home = (args.home or Path.home()).expanduser().resolve()
|
|
33
|
+
# Beside ~/.nobrainer-tech-flow, not in it: that is where the README suggests a Git
|
|
34
|
+
# clone, and a git clean there would delete the files live skill links point to.
|
|
35
|
+
storage = home / ".nobrainer-tech-flow-npm"
|
|
36
|
+
target = storage / version
|
|
37
|
+
records = (home / f".nobrainer-flow-onboarding-{args.client}.json", home / ".nobrainer-flow-onboarding.json")
|
|
38
|
+
if args.undo and not any(path.exists() or path.is_symlink() for path in records):
|
|
39
|
+
# Nothing is recorded for this client, so nothing links to a release and there is
|
|
40
|
+
# nothing to reverse, whatever the retained storage holds; the installer says so
|
|
41
|
+
# and writes nothing.
|
|
42
|
+
return installer.main()
|
|
43
|
+
if any(p.is_symlink() for p in (storage, *storage.parents)):
|
|
44
|
+
print("ERROR: npm release storage must not pass through a symlink.", file=sys.stderr)
|
|
45
|
+
return 3
|
|
46
|
+
low = load("install_skills")
|
|
47
|
+
source_manifest = low.tree_manifest(ROOT)
|
|
48
|
+
if target.exists() or target.is_symlink():
|
|
49
|
+
if target.is_symlink() or not target.is_dir() or low.tree_manifest(target) != source_manifest:
|
|
50
|
+
print(f"PRESERVED: release storage is different or untrusted: {target}", file=sys.stderr)
|
|
51
|
+
return 3
|
|
52
|
+
elif args.undo:
|
|
53
|
+
print("ERROR: retained npm release is missing; preserve the client and inspect its setup record.", file=sys.stderr)
|
|
54
|
+
earlier = home / ".nobrainer-tech-flow" / "npm"
|
|
55
|
+
if earlier.is_dir() and not earlier.is_symlink():
|
|
56
|
+
# Releases before 2.3.2 kept their files inside ~/.nobrainer-tech-flow.
|
|
57
|
+
print(f"HINT: an earlier release kept its files in {earlier}; undo with the command of the "
|
|
58
|
+
"release that made this setup, then apply this one.", file=sys.stderr)
|
|
59
|
+
return 3
|
|
60
|
+
elif not args.apply:
|
|
61
|
+
print("NPM_SOURCE: release files will be copied to a stable profile directory on --apply.")
|
|
62
|
+
return installer.main()
|
|
63
|
+
else:
|
|
64
|
+
storage.mkdir(parents=True, exist_ok=True)
|
|
65
|
+
if storage.resolve() != storage or any(p.is_symlink() for p in (storage, *storage.parents)):
|
|
66
|
+
print("ERROR: npm release storage must not pass through a symlink.", file=sys.stderr)
|
|
67
|
+
return 3
|
|
68
|
+
_, expected, stage = low.stage_and_publish_copy(ROOT, target)
|
|
69
|
+
if low.tree_manifest(target) != expected:
|
|
70
|
+
raise RuntimeError("npm release copy failed its readback")
|
|
71
|
+
stage.rmdir()
|
|
72
|
+
print(f"NPM_SOURCE: retained release {version}; client links use this stable source.")
|
|
73
|
+
run = subprocess.run([sys.executable, str(target / "scripts" / "install.py"), *sys.argv[1:]],
|
|
74
|
+
env={**os.environ, "PYTHONDONTWRITEBYTECODE": "1"}, check=False)
|
|
75
|
+
if args.undo and run.returncode == 0:
|
|
76
|
+
print("NPM_CACHE: retained release files remain available for other profiles and future setup.")
|
|
77
|
+
return run.returncode
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
if __name__ == "__main__":
|
|
81
|
+
try:
|
|
82
|
+
raise SystemExit(main())
|
|
83
|
+
except (OSError, RuntimeError, ValueError) as exc:
|
|
84
|
+
print(f"ERROR: npm installer stopped: {exc}", file=sys.stderr)
|
|
85
|
+
raise SystemExit(2)
|