rhachet-roles-ehmpathy 1.13.2 → 1.13.3
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/dist/logic/roles/architect/.briefs/criteria.given_when_then.[seed].v3.md +87 -0
- package/dist/logic/roles/architect/.briefs/practices/prefer.env_access.prep_over_dev.md +12 -0
- package/dist/logic/roles/architect/.briefs/ubiqlang.ambiguous-from-overload.md +1 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog000.overview.and.premise.md +115 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.coordinates.spherical.md +69 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.cauliflorous.md +44 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.galactic_spacetravel.[article].md +42 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.galactic_spacetravel.[lesson].md +60 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.catalog.md +51 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.treestruct.md +85 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.vector.md +112 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.definition.md +115 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct._.md +112 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.1.spherical.md +80 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.2.abstractive.md +59 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.3.descriptive.md +64 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.1.perspectives.md +88 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.2.universal.md +82 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.3.relative.md +106 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.4.fractal.md +83 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog151.concept.treestruct.gravity.md +89 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p1.definition.md +231 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p1.examples.cont.md +82 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.acuity.md +134 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.breadth.md +151 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.depth.md +147 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.fabric.md +96 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.mode.md +68 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.rythm.md +56 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.usecases.md +76 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives._.md +155 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.acuity.md +94 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.breadth.md +114 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.breadth.vary.md +105 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.depth.md +132 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.2.motion.composites._.md +106 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.2.motion.composites.grammar.md +105 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.._.md +209 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.as.berries.md +168 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.as.vectors.md +74 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.has.precision.tunable.md +80 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough._.md +99 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough.interrogative.md +108 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough.why.[article].md +55 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.2.composite.smooth._.md +83 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.2.composite.smooth.examples.md +101 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives._.md +134 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.recall.md +149 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.steer.md +146 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.think.md +141 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.2.composites.zoom.md +127 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.3.catalogs.md +107 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.3.grammar.md +124 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang_.md +0 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/inflight/concept.vs.idea.md +70 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/inflight/core.concept.adjectives.md +8 -0
- package/dist/logic/roles/bhrain/.briefs/distilisys.grammar.compressed.md +19 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.common.[article].md +32 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.term_smells.[article].md +36 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.term_smells.detection.[lesson].md +73 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.2.tactic.eliminate.[article].md +55 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.2.tactic.eliminate.[lesson].md +41 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait]._.md +66 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].balance.md +36 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].bane.md +34 -0
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].boon.md +35 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.1.ontology.[article].frame.docs_as_materializations.md +63 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.1.ontology.[article].frame.docs_as_references.md +45 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.2.rel.many_to_many.[article].md +37 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.3.instances.[article].md +39 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.4.documents.[article].md +37 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.5.concepts.[article].md +39 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents._.[article].md +48 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents._.[catalog].md +52 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.articles.[article].md +40 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.catalogs.[article].md +41 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.demos.[article].md +42 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.lessons.[article].md +42 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.1.refs._.[article].md +41 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.2.kernels._.[article].i1.md +50 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.3.briefs._.[article].md +40 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression._.[article].md +90 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression._.[catalog].persp.garden.md +64 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[article].md +45 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].algorithm.md +54 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].color.md +56 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].empathy.md +54 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].entropy.md +54 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].gravity.md +54 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].joke.md +56 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].value.md +54 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2._.[catalog].md +43 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.articulate.[article].md +27 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.articulate.[lesson].md +49 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.catalogize.[article].md +27 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.catalogize.[lesson].md +54 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.demonstrate.[article].md +26 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.demonstrate.[lesson].md +49 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.lessonize.[article].md +26 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.lessonize.[lesson].md +54 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.kernelize._.[article].md +58 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.kernelize._.[lesson].md +88 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno351.docs.are_instances.[article].md +34 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno351.docs.recursion.[catalog].md +44 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.1.role.author.[article].md +36 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.1.role.librarian.[article].md +40 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.2.interdependence.[article].md +52 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno501.doc.enbrief.catalog.structure1.[article].md +53 -0
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno501.doc.enbrief.catalog.structure1.[lesson].template.md +101 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/article.variant.vision.[article].md +60 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.expectation.vs_assumption._.md +60 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.frame.vs_perspective.[article].md +96 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.invariant.[article].md +29 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.lesson._vs_article.[article].md +36 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.ref._vs_brief.md +90 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.referent.[article].md +43 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/usage.lesson_vs_article.[lesson].md +31 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.context/usage.lesson_vs_article_vs_demo.[lesson].md +37 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/.readme.md +12 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>._.[article].frame.cognitive.md +33 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>._.[article].frame.tactical.md +45 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.[catalog].md +83 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.concept_dimension.examples.[article][seed].md +4 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.concept_dimension.invariants.[article].md +36 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.from.examples.md +44 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.from.seed.md +48 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.with.templates.[article].md +57 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.with.templates.[gallery][review].effective.md +1 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tone.bluecollar.[article][seed].md +5 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>._.[article][seed].md +3 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>.observation.via_clusterage_over_via_imagination.[seed].md +6 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>.vs_diverge.[article].persp.save_compute.md +46 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>._.[article].frame.colloquial.i2.by_grok.md +64 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.[catalog].md +106 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.contrast.[demo].usecase.vs_userjourney.by_chatgpt.md +45 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.counter.[demo].usecase.flyer.by_chargpt.md +38 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.counter.[demo].walkability.phoenix.by_chargpt.md +41 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].shear_force.scissors.by_grok.md +52 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].tea.darjeeling.by_grok.md +50 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].usecase.book_flight.by_grok.md +54 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].usecase.order_food.by_chatgpt.md +40 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].walkability.portland.by_chatgpt.i3.md +42 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].walkability.portland.by_grok.i2.md +49 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[lesson].howto.md +28 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.structure.[article].i2.md +73 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.narrative.[demo].usecase.order_online.by_chatgpt.md +34 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.walkthrough.[demo].usecase.book_online.by_chatgpt.md +47 -0
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/[brief].verbiage.outline.over.narrative.md +55 -0
- package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.[article].md +21 -0
- package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.of_information.[article].md +22 -0
- package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.of_knowledge.[article].md +29 -0
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.acuity.md +77 -0
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.breadth.md +74 -0
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.depth.md +77 -0
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.distance.md +92 -0
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.tradeoffs.md +107 -0
- package/dist/logic/roles/bhrain/.briefs/tactician/tactics.compose.traits_and_skills.[article].md +76 -0
- package/dist/logic/roles/bhrain/.briefs/tactician/trait.articulation.[article].md +67 -0
- package/dist/logic/roles/bhrain/.briefs/tactician/trait.purpose.[article].md +56 -0
- package/dist/logic/roles/bhrain/.briefs/tactician/trait.vs_skill.[article].md +55 -0
- package/dist/logic/roles/bhrain/.briefs/tactician/trait.vs_tactic.[article].md +70 -0
- package/dist/logic/roles/bhrain/.briefs/terms.motive.intent.goal.md +46 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<cluster>._.[article].frame.tactical._.md +85 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<cluster>.vs_<diverge>.duality.[article].md +43 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<diverge>._.[article].frame.cognitive.[seed].md +4 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<diverge>._.[article].frame.tactical.md +89 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<elaborate>_vs_<elucidate>.[seed].md +1 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[article].md +113 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[gallery].plumber.diagnose.md +130 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[gallery].thinker.enquestion.md +125 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>.tactic.perspectives.[article].md +36 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>._.[article].frame.tactical.md +85 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>.persp.grades_from_context.[article].md +48 -0
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>.persp.implicit_question.[article].md +65 -0
- package/dist/logic/roles/bhrain/.briefs/trait.chillnature.md +14 -0
- package/dist/logic/roles/bhrain/.briefs/trait.ocd.md +5 -0
- package/dist/logic/roles/bhrain/.briefs/worders/core.matmuls_vecmuls_elemuls.md +93 -0
- package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.as_origin.md +62 -0
- package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[article].md +93 -0
- package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[demo].ambig.bank.md +80 -0
- package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[demo].cat_sat.md +67 -0
- package/dist/logic/roles/bhrain/.briefs/worders/force.repeat_input_structures.md +48 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.interdependence.[article].md +37 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.interdependence.[demo].domain.physics.md +30 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[article].artist_vs_librarian.md +44 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[demo].artist_vs_librarian.md +37 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[demo].domain.physics.md +39 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[article].md +35 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].artist.md +36 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].neural.md +37 -0
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].pianist.md +34 -0
- package/dist/logic/roles/bhrain/.briefs/worders/limits.rhyme.md +46 -0
- package/dist/logic/roles/bhrain/.briefs/worders/limits.spell.md +49 -0
- package/dist/logic/roles/bhrain/.briefs/worders/teach.via.library.examples.md +28 -0
- package/dist/logic/roles/bhrain/.briefs/worders/teach.via.library.explanations_vs_examples.md +40 -0
- package/dist/logic/roles/bhrain/.briefs/worders/trend.prefer_reuse.[seed].md +10 -0
- package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.template.md +120 -0
- package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.template.md +135 -0
- package/dist/logic/roles/bhrain/khue.cluster/stepCluster.template.md +134 -0
- package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.template.md +110 -0
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.template.md +73 -0
- package/dist/logic/roles/bhrain/khue.triage/stepTriage.template.md +128 -0
- package/dist/logic/roles/coach/.briefs/claude.context-caching.md +76 -0
- package/dist/logic/roles/designer/.briefs/declarative-over-imperative.md +79 -0
- package/dist/logic/roles/designer/.briefs/declarative-over-imperative.stub.md +14 -0
- package/dist/logic/roles/designer/.briefs/pit-of-success.md +70 -0
- package/dist/logic/roles/designer/.briefs/pit-of-success.stub.md +3 -0
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.template.md +173 -0
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.template.md +88 -0
- package/dist/logic/roles/designer/outlineVision/stepOutlineVision.template.md +47 -0
- package/dist/logic/roles/ecologist/.briefs/.readme.md +17 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys101.distilisys.grammar.md +221 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive._.summary.md +82 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p1.reversibility.entropy.md +39 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p2.option.chance.choice.md +140 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p3.chance.motive.polarity.threat.md +72 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p4.motive.horizon.md +101 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p5.motive.grammar.md +131 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources._.primitives.summary.md +108 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt1.primitive.time.md +56 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt2.primitive.energy.md +69 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt3.primitive.space.md +85 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt4.primitive.claim.md +113 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt5.composites.md +146 -0
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys231.actor.claims.p1.primitive.exchange.md +130 -0
- package/dist/logic/roles/ecologist/.briefs/ecology/.eco001.origin.prompt.md +11 -0
- package/dist/logic/roles/ecologist/.briefs/ecology/eco001.overview.md +44 -0
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.core-system-understanding.md +70 -0
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p1.ecosystem-structure.md +62 -0
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p2.trophic-dynamics.md +59 -0
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p3.population-ecology.md +71 -0
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p4.community-interactions.md +78 -0
- package/dist/logic/roles/ecologist/.briefs/ecology/eco505.systems-thinking.md +62 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ001.overview.md +65 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.core-mechanics.md +65 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.p1.supply-and-demand.md +76 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.p2.opportunity-cost.md +106 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.p3.marginal-analysis.md +79 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.p4.rational-choice.md +81 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ201.market-structures-and-failures.md +81 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ301.production-and-growth.md +71 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ401.macro-systems.md +92 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ501.global-and-institutional.md +85 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ501.p1.game-theory.md +142 -0
- package/dist/logic/roles/ecologist/.briefs/economy/econ501.p4.behavioral-economics.md +146 -0
- package/dist/logic/roles/ecologist/.briefs/product/user.journey._.[article].i1.md +68 -0
- package/dist/logic/roles/ecologist/.briefs/product/user.journey._.[article].md +0 -0
- package/dist/logic/roles/ecologist/.briefs/product/user.journey.purpose.[article].i1.md +52 -0
- package/dist/logic/roles/ecologist/.briefs/product/user.journey.purpose.[article].md +52 -0
- package/dist/logic/roles/ecologist/.briefs/term.distillation.md +93 -0
- package/dist/logic/roles/mechanic/.briefs/architecture/bounded-contexts.md +61 -0
- package/dist/logic/roles/mechanic/.briefs/architecture/directional-dependencies.md +82 -0
- package/dist/logic/roles/mechanic/.briefs/architecture/domain-driven-design.md +61 -0
- package/dist/logic/roles/mechanic/.briefs/architecture/ubiqlang.md +37 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/_mech.compressed.md +57 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/_mech.compressed.prompt.md +5 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.failfast.md +37 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.idempotency.md +63 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.immutability.md +48 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.narratives.md +74 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.single-responsibility.md +67 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.transformers_over_conditionals.[lesson].md +97 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.args.input-context.md +61 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.args.input-inline.md +63 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.arrowonly.md +47 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.clear-contracts.md +53 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.tests.given-when-then.md +62 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.what-why.md +88 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.what-why.v2.md +98 -0
- package/dist/logic/roles/mechanic/.briefs/codestyle/pit-of-success.via.minimize-surface-area.md +58 -0
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/never.term.script.md +7 -0
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.emojis.chill_nature.md +24 -0
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.jq.over_alt.[demo].md +29 -0
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.terraform.[criteria].md +4 -0
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.terraform.[seed].md +17 -0
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.dependency.pinned_versions.md +3 -0
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.idempotency.md +33 -0
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.knowledge.externalized.md +17 -0
- package/dist/logic/roles/mechanic/.briefs/engineer/dependency-injection.md +118 -0
- package/dist/logic/roles/mechanic/.briefs/engineer/dependency-injection.stub.md +11 -0
- package/dist/logic/roles/mechanic/.briefs/lessons/code.prod.typescript.types/bivariance_vs_contravariance.[lesson].md +95 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.contract.inputs.nameargs/bad-practice/forbid.positional-args.md +43 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.contract.inputs.nameargs/best-practice/require.namedargs.md +6 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.declarative/.readme.md +0 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.declarative/best-practice/declastruct.[demo].md +485 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.has.attributes.nullable.md +13 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.has.attributes.undefined.md +15 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.refs.immuatble.md +9 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/best-practice/ref.package.domain-objects.[readme].md +585 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.operations/best-practice/require.sync.names.md +14 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/bad-practices/forbid.failhide.md +19 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/bad-practices/forbid.hide_errors.md +13 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/prefer.HelpfulError.wrap.md +54 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/require.fail_fast.[demo].shell.md +17 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/require.fail_fast.md +28 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.narrative/bad-practices/forbid.else.md +54 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.narrative/best-practice/early-returns.named-checks.[demo].md +181 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/bad-practices/forbid.barrel.exports.ts.md +41 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/bad-practices/forbid.index.ts.md +3 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/best-practice/directional-dependencies.md +82 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/best-practice/dot-test-and-dot-temp.md +20 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.typescript.utils/best-practice/ref.package.as-command.[tips].md +7 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.acceptance/best-practice/blackbox.md +5 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.diagnose.[lesson].md +14 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.run.[lesson].md +18 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.use.[lesson].md +20 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].md +3 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].on_scope.for_integ.md +8 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].on_scope.for_units.md +9 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.bdd.[lesson].md +280 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/prefer.datadriven.md +41 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/ref.test-fns.[readme].md +185 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/whento.snapshots.[lesson].md +23 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/.readme.md +1 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/bad-practices/forbid.term=existing.md +10 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/best-practice/require.order.noun_adj.md +39 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/domain=practices.terms=forbid_prefer_desire_require.md +13 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/domain=software.terms=prodcode_vs_testcode.md +7 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/.readme.md +3 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/prefer.chill-nature.md +0 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/prefer.lowercase.md +0 -0
- package/dist/logic/roles/mechanic/.briefs/style.compressed.md +29 -0
- package/dist/logic/roles/mechanic/.briefs/style.compressed.prompt.md +5 -0
- package/dist/logic/roles/mechanic/.briefs/style.names.treestruct.md +48 -0
- package/dist/logic/roles/mechanic/.briefs/style.names.ubiqlang.md +37 -0
- package/dist/logic/roles/mechanic/.briefs/style.words.lowercase.md +36 -0
- package/dist/logic/roles/mechanic/.briefs/terms/badpractice/script.md +9 -0
- package/dist/logic/roles/mechanic/.briefs/terms/plan.exec_vs_apply.md +45 -0
- package/dist/logic/roles/mechanic/.skills/claude.hooks/check.pretooluse.permissions.sh +235 -0
- package/dist/logic/roles/mechanic/.skills/claude.hooks/forbid.stderr.redirect.sh +57 -0
- package/dist/logic/roles/mechanic/.skills/declapract.upgrade.sh +50 -0
- package/dist/logic/roles/mechanic/.skills/git.worktree.common.sh +58 -0
- package/dist/logic/roles/mechanic/.skills/git.worktree.del.sh +51 -0
- package/dist/logic/roles/mechanic/.skills/git.worktree.get.sh +51 -0
- package/dist/logic/roles/mechanic/.skills/git.worktree.set.sh +108 -0
- package/dist/logic/roles/mechanic/.skills/git.worktree.sh +46 -0
- package/dist/logic/roles/mechanic/.skills/init.bhuild.sh +260 -0
- package/dist/logic/roles/mechanic/.skills/init.claude.hooks.forbid.stderr.redirect.sh +116 -0
- package/dist/logic/roles/mechanic/.skills/init.claude.hooks.pretooluse.sh +118 -0
- package/dist/logic/roles/mechanic/.skills/init.claude.hooks.sessionstart.sh +113 -0
- package/dist/logic/roles/mechanic/.skills/init.claude.hooks.sh +25 -0
- package/dist/logic/roles/mechanic/.skills/init.claude.permissions.sh +156 -0
- package/dist/logic/roles/mechanic/.skills/init.claude.sh +47 -0
- package/dist/logic/roles/mechanic/.skills/link.claude.transcripts.sh +43 -0
- package/dist/logic/roles/mechanic/.skills/test.integration.sh +50 -0
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.template.md +46 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.template.md +78 -0
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.template.md +75 -0
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.template.md +67 -0
- package/dist/logic/roles/mechanic/study/routeStudyAsk.template.md +73 -0
- package/dist/logic/roles/mechanic/write/.test/prior.template.md +21 -0
- package/dist/logic/roles/mechanic/write/stepWrite.template.md +38 -0
- package/package.json +2 -2
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
######################################################################
|
|
3
|
+
# .what = findsert a git worktree for a branch
|
|
4
|
+
#
|
|
5
|
+
# .why = enable parallel work on same repo without nested worktrees
|
|
6
|
+
# worktrees are placed outside repo so git diff stays clean
|
|
7
|
+
#
|
|
8
|
+
# .how = creates worktree at @gitroot/../_worktrees/$reponame/$branch
|
|
9
|
+
#
|
|
10
|
+
# usage:
|
|
11
|
+
# git.worktree.set.sh <branch> # findsert worktree
|
|
12
|
+
# git.worktree.set.sh <branch> --open # findsert + open in codium
|
|
13
|
+
# git.worktree.set.sh <branch> --main # create from origin/main
|
|
14
|
+
#
|
|
15
|
+
# guarantee:
|
|
16
|
+
# - idempotent: [KEEP] if exists, [CREATE] if not
|
|
17
|
+
# - works from root repo or from within a worktree
|
|
18
|
+
# - worktree placed outside repo (not nested)
|
|
19
|
+
######################################################################
|
|
20
|
+
|
|
21
|
+
set -euo pipefail
|
|
22
|
+
|
|
23
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
24
|
+
|
|
25
|
+
# source shared helpers
|
|
26
|
+
source "$SCRIPT_DIR/git.worktree.common.sh"
|
|
27
|
+
|
|
28
|
+
# parse arguments
|
|
29
|
+
BRANCH=""
|
|
30
|
+
FLAG_OPEN=false
|
|
31
|
+
FLAG_MAIN=false
|
|
32
|
+
|
|
33
|
+
while [[ $# -gt 0 ]]; do
|
|
34
|
+
case $1 in
|
|
35
|
+
--open)
|
|
36
|
+
FLAG_OPEN=true
|
|
37
|
+
shift
|
|
38
|
+
;;
|
|
39
|
+
--main)
|
|
40
|
+
FLAG_MAIN=true
|
|
41
|
+
shift
|
|
42
|
+
;;
|
|
43
|
+
-*)
|
|
44
|
+
echo "error: unknown flag '$1'"
|
|
45
|
+
echo "usage: git.worktree.set.sh <branch> [--open] [--main]"
|
|
46
|
+
exit 1
|
|
47
|
+
;;
|
|
48
|
+
*)
|
|
49
|
+
if [[ -z "$BRANCH" ]]; then
|
|
50
|
+
BRANCH="$1"
|
|
51
|
+
else
|
|
52
|
+
echo "error: unexpected argument '$1'"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
shift
|
|
56
|
+
;;
|
|
57
|
+
esac
|
|
58
|
+
done
|
|
59
|
+
|
|
60
|
+
# validate branch argument
|
|
61
|
+
if [[ -z "$BRANCH" ]]; then
|
|
62
|
+
echo "error: branch name required"
|
|
63
|
+
echo "usage: git.worktree.set.sh <branch> [--open] [--main]"
|
|
64
|
+
exit 1
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# resolve paths
|
|
68
|
+
REPO_WORKTREES_DIR="$(resolve_worktrees_dir)"
|
|
69
|
+
WORKTREE_NAME="$(sanitize_branch_name "$BRANCH")"
|
|
70
|
+
WORKTREE_PATH="$REPO_WORKTREES_DIR/$WORKTREE_NAME"
|
|
71
|
+
|
|
72
|
+
# ensure parent directory exists
|
|
73
|
+
mkdir -p "$REPO_WORKTREES_DIR"
|
|
74
|
+
|
|
75
|
+
# findsert logic
|
|
76
|
+
if [[ -d "$WORKTREE_PATH" ]]; then
|
|
77
|
+
echo "[KEEP] $WORKTREE_NAME => $WORKTREE_PATH"
|
|
78
|
+
else
|
|
79
|
+
# create worktree
|
|
80
|
+
if [[ "$FLAG_MAIN" == true ]]; then
|
|
81
|
+
# fetch latest main first
|
|
82
|
+
git fetch origin main 2>/dev/null || git fetch origin master 2>/dev/null || true
|
|
83
|
+
|
|
84
|
+
# create new branch from origin/main
|
|
85
|
+
git worktree add -b "$BRANCH" "$WORKTREE_PATH" origin/main 2>/dev/null || \
|
|
86
|
+
git worktree add -b "$BRANCH" "$WORKTREE_PATH" origin/master
|
|
87
|
+
else
|
|
88
|
+
# check if branch exists
|
|
89
|
+
if git show-ref --verify --quiet "refs/heads/$BRANCH" 2>/dev/null; then
|
|
90
|
+
# branch exists locally, checkout existing
|
|
91
|
+
git worktree add "$WORKTREE_PATH" "$BRANCH"
|
|
92
|
+
elif git show-ref --verify --quiet "refs/remotes/origin/$BRANCH" 2>/dev/null; then
|
|
93
|
+
# branch exists on remote, track it
|
|
94
|
+
git worktree add --track -b "$BRANCH" "$WORKTREE_PATH" "origin/$BRANCH"
|
|
95
|
+
else
|
|
96
|
+
# create new branch from current HEAD
|
|
97
|
+
git worktree add -b "$BRANCH" "$WORKTREE_PATH"
|
|
98
|
+
fi
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
echo "[CREATE] $WORKTREE_NAME => $WORKTREE_PATH"
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
# open in codium if requested
|
|
105
|
+
if [[ "$FLAG_OPEN" == true ]]; then
|
|
106
|
+
echo "opening in codium..."
|
|
107
|
+
codium "$WORKTREE_PATH"
|
|
108
|
+
fi
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
######################################################################
|
|
3
|
+
# .what = dispatcher for git worktree management
|
|
4
|
+
#
|
|
5
|
+
# .why = single entry point for get|set|del subcommands
|
|
6
|
+
# enables convenient `git.worktree.sh get|set|del` interface
|
|
7
|
+
#
|
|
8
|
+
# .how = routes to git.worktree.{get,set,del}.sh based on subcommand
|
|
9
|
+
#
|
|
10
|
+
# usage:
|
|
11
|
+
# git.worktree.sh get # list worktrees
|
|
12
|
+
# git.worktree.sh set <branch> # findsert worktree
|
|
13
|
+
# git.worktree.sh set <branch> --open # findsert + open in codium
|
|
14
|
+
# git.worktree.sh set <branch> --main # create from origin/main
|
|
15
|
+
# git.worktree.sh del <branch> # remove worktree
|
|
16
|
+
#
|
|
17
|
+
# guarantee:
|
|
18
|
+
# - dispatches to correct subcommand script
|
|
19
|
+
# - shows usage on invalid/missing subcommand
|
|
20
|
+
# - fail-fast on errors
|
|
21
|
+
######################################################################
|
|
22
|
+
|
|
23
|
+
set -euo pipefail
|
|
24
|
+
|
|
25
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
26
|
+
SUBCOMMAND="${1:-}"
|
|
27
|
+
|
|
28
|
+
case "$SUBCOMMAND" in
|
|
29
|
+
get|set|del)
|
|
30
|
+
shift
|
|
31
|
+
exec "$SCRIPT_DIR/git.worktree.$SUBCOMMAND.sh" "$@"
|
|
32
|
+
;;
|
|
33
|
+
*)
|
|
34
|
+
echo "usage: git.worktree.sh <command> [args]"
|
|
35
|
+
echo ""
|
|
36
|
+
echo "commands:"
|
|
37
|
+
echo " get list worktrees for this repo"
|
|
38
|
+
echo " set <branch> findsert worktree for branch"
|
|
39
|
+
echo " del <branch> remove worktree for branch"
|
|
40
|
+
echo ""
|
|
41
|
+
echo "options (for set):"
|
|
42
|
+
echo " --open open worktree in codium after creation"
|
|
43
|
+
echo " --main create branch from origin/main"
|
|
44
|
+
exit 1
|
|
45
|
+
;;
|
|
46
|
+
esac
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
######################################################################
|
|
3
|
+
# .what = initialize a .behavior directory for bhuild thoughtroute
|
|
4
|
+
#
|
|
5
|
+
# .why = standardize the behavior-driven development thoughtroute
|
|
6
|
+
# by scaffolding a structured directory with:
|
|
7
|
+
# - wish definition
|
|
8
|
+
# - vision statement
|
|
9
|
+
# - acceptance criteria
|
|
10
|
+
# - research prompts
|
|
11
|
+
# - distillation prompts
|
|
12
|
+
# - blueprint prompts
|
|
13
|
+
# - roadmap prompts
|
|
14
|
+
# - execution prompts
|
|
15
|
+
# - feedback template
|
|
16
|
+
#
|
|
17
|
+
# .how = creates .behavior/v${isodate}.${behaviorname}/ with
|
|
18
|
+
# all necessary scaffold files for the bhuild thoughtroute
|
|
19
|
+
#
|
|
20
|
+
# usage:
|
|
21
|
+
# init.bhuild.sh --name <behaviorname> [--dir <directory>]
|
|
22
|
+
#
|
|
23
|
+
# guarantee:
|
|
24
|
+
# - creates .behavior/ if missing
|
|
25
|
+
# - creates versioned behavior directory
|
|
26
|
+
# - findserts all thoughtroute files (creates if missing, skips if exists)
|
|
27
|
+
# - idempotent: safe to rerun
|
|
28
|
+
# - fail-fast on errors
|
|
29
|
+
######################################################################
|
|
30
|
+
|
|
31
|
+
set -euo pipefail
|
|
32
|
+
|
|
33
|
+
# parse arguments
|
|
34
|
+
BEHAVIOR_NAME=""
|
|
35
|
+
TARGET_DIR="$PWD"
|
|
36
|
+
while [[ $# -gt 0 ]]; do
|
|
37
|
+
case $1 in
|
|
38
|
+
--name)
|
|
39
|
+
BEHAVIOR_NAME="$2"
|
|
40
|
+
shift 2
|
|
41
|
+
;;
|
|
42
|
+
--dir)
|
|
43
|
+
TARGET_DIR="$2"
|
|
44
|
+
shift 2
|
|
45
|
+
;;
|
|
46
|
+
*)
|
|
47
|
+
echo "error: unknown argument '$1'"
|
|
48
|
+
echo "usage: init.bhuild.sh --name <behaviorname> [--dir <directory>]"
|
|
49
|
+
exit 1
|
|
50
|
+
;;
|
|
51
|
+
esac
|
|
52
|
+
done
|
|
53
|
+
|
|
54
|
+
# validate required arguments
|
|
55
|
+
if [[ -z "$BEHAVIOR_NAME" ]]; then
|
|
56
|
+
echo "error: --name is required"
|
|
57
|
+
echo "usage: init.bhuild.sh --name <behaviorname> [--dir <directory>]"
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# generate isodate in format YYYY_MM_DD
|
|
62
|
+
ISO_DATE=$(date +%Y_%m_%d)
|
|
63
|
+
|
|
64
|
+
# trim trailing .behavior from TARGET_DIR if present
|
|
65
|
+
TARGET_DIR="${TARGET_DIR%/.behavior}"
|
|
66
|
+
TARGET_DIR="${TARGET_DIR%.behavior}"
|
|
67
|
+
|
|
68
|
+
# construct behavior directory path (absolute)
|
|
69
|
+
BEHAVIOR_DIR="$TARGET_DIR/.behavior/v${ISO_DATE}.${BEHAVIOR_NAME}"
|
|
70
|
+
|
|
71
|
+
# compute relative path from caller's $PWD for file contents
|
|
72
|
+
BEHAVIOR_DIR_REL="$(realpath --relative-to="$PWD" "$TARGET_DIR")/.behavior/v${ISO_DATE}.${BEHAVIOR_NAME}"
|
|
73
|
+
# normalize: remove leading ./ if present
|
|
74
|
+
BEHAVIOR_DIR_REL="${BEHAVIOR_DIR_REL#./}"
|
|
75
|
+
|
|
76
|
+
# create behavior directory (idempotent)
|
|
77
|
+
mkdir -p "$BEHAVIOR_DIR"
|
|
78
|
+
|
|
79
|
+
# helper: findsert file (create if missing, skip if exists)
|
|
80
|
+
findsert() {
|
|
81
|
+
local filepath="$1"
|
|
82
|
+
if [[ -f "$filepath" ]]; then
|
|
83
|
+
echo " [KEEP] $(basename "$filepath")"
|
|
84
|
+
return 0
|
|
85
|
+
fi
|
|
86
|
+
cat > "$filepath"
|
|
87
|
+
echo " [CREATE] $(basename "$filepath")"
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
# findsert 0.wish.md
|
|
91
|
+
findsert "$BEHAVIOR_DIR/0.wish.md" << 'EOF'
|
|
92
|
+
wish =
|
|
93
|
+
|
|
94
|
+
EOF
|
|
95
|
+
|
|
96
|
+
# findsert 1.vision.md
|
|
97
|
+
findsert "$BEHAVIOR_DIR/1.vision.md" << 'EOF'
|
|
98
|
+
|
|
99
|
+
EOF
|
|
100
|
+
|
|
101
|
+
# findsert 2.criteria.md
|
|
102
|
+
findsert "$BEHAVIOR_DIR/2.criteria.md" << 'EOF'
|
|
103
|
+
# usecase.1 = ...
|
|
104
|
+
given()
|
|
105
|
+
when()
|
|
106
|
+
then()
|
|
107
|
+
sothat()
|
|
108
|
+
then()
|
|
109
|
+
then()
|
|
110
|
+
sothat()
|
|
111
|
+
when()
|
|
112
|
+
then()
|
|
113
|
+
|
|
114
|
+
given()
|
|
115
|
+
...
|
|
116
|
+
|
|
117
|
+
# usecase.2 = ...
|
|
118
|
+
...
|
|
119
|
+
EOF
|
|
120
|
+
|
|
121
|
+
# findsert 3.1.research.domain._.v1.src
|
|
122
|
+
findsert "$BEHAVIOR_DIR/3.1.research.domain._.v1.src" << EOF
|
|
123
|
+
research the domain available in order to fulfill the wish declared
|
|
124
|
+
in $BEHAVIOR_DIR_REL/0.wish.md
|
|
125
|
+
|
|
126
|
+
specifically
|
|
127
|
+
- what are the domain objects that are involved with this wish
|
|
128
|
+
- entities
|
|
129
|
+
- events
|
|
130
|
+
- literals
|
|
131
|
+
- what are the domain operations
|
|
132
|
+
- getOne
|
|
133
|
+
- getAll
|
|
134
|
+
- setCreate
|
|
135
|
+
- setUpdate
|
|
136
|
+
- setDelete
|
|
137
|
+
- ...
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
use web search to discover and research
|
|
142
|
+
- cite every claim
|
|
143
|
+
- number each citation
|
|
144
|
+
- clone exact quotes from each citation
|
|
145
|
+
|
|
146
|
+
focus on these sdk's for reference, if provided
|
|
147
|
+
-
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
emit into $BEHAVIOR_DIR_REL/3.1.research.domain._.v1.i1.md
|
|
152
|
+
EOF
|
|
153
|
+
|
|
154
|
+
# findsert 3.2.distill.domain._.v1.src
|
|
155
|
+
findsert "$BEHAVIOR_DIR/3.2.distill.domain._.v1.src" << EOF
|
|
156
|
+
distill the declastruct domain.objects and domain.operations that would
|
|
157
|
+
- enable fulfillment of this wish $BEHAVIOR_DIR_REL/0.wish.md
|
|
158
|
+
- given the research declared here $BEHAVIOR_DIR_REL/3.1.research.domain._.v1.i1.md
|
|
159
|
+
|
|
160
|
+
procedure
|
|
161
|
+
1. declare the usecases and envision the contract that would be used to fulfill the usecases
|
|
162
|
+
2. declare the domain.objects, domain.operations, and access.daos that would fulfill this, via the declastruct pattern in this repo
|
|
163
|
+
|
|
164
|
+
emit into
|
|
165
|
+
- $BEHAVIOR_DIR_REL/3.2.distill.domain._.v1.i1.md
|
|
166
|
+
EOF
|
|
167
|
+
|
|
168
|
+
# findsert 3.3.blueprint.v1.src
|
|
169
|
+
findsert "$BEHAVIOR_DIR/3.3.blueprint.v1.src" << EOF
|
|
170
|
+
propose a blueprint for how we can implement the wish described
|
|
171
|
+
- in $BEHAVIOR_DIR_REL/0.wish.md
|
|
172
|
+
|
|
173
|
+
with the domain distillation declared
|
|
174
|
+
- in $BEHAVIOR_DIR_REL/3.2.distill.domain._.v1.i1.md
|
|
175
|
+
|
|
176
|
+
follow the patterns already present in this repo
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
reference the below for full context
|
|
181
|
+
- $BEHAVIOR_DIR_REL/0.wish.md
|
|
182
|
+
- $BEHAVIOR_DIR_REL/3.1.research.domain._.v1.i1.md
|
|
183
|
+
- $BEHAVIOR_DIR_REL/3.2.distill.domain._.v1.i1.md
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
emit to $BEHAVIOR_DIR_REL/3.3.blueprint.v1.i1.md
|
|
189
|
+
EOF
|
|
190
|
+
|
|
191
|
+
# findsert 4.1.roadmap.v1.src
|
|
192
|
+
findsert "$BEHAVIOR_DIR/4.1.roadmap.v1.src" << EOF
|
|
193
|
+
declare a roadmap,
|
|
194
|
+
|
|
195
|
+
- checklist style
|
|
196
|
+
- with ordered dependencies
|
|
197
|
+
- with behavioral acceptance criteria
|
|
198
|
+
- with behavioral acceptance verification at each step
|
|
199
|
+
|
|
200
|
+
for how to execute the blueprint specified in $BEHAVIOR_DIR_REL/3.3.blueprint.v1.i1.md
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
emit into $BEHAVIOR_DIR_REL/4.1.roadmap.v1.i1.md
|
|
205
|
+
EOF
|
|
206
|
+
|
|
207
|
+
# findsert 5.1.execution.phase0_to_phaseN.v1.src
|
|
208
|
+
findsert "$BEHAVIOR_DIR/5.1.execution.phase0_to_phaseN.v1.src" << EOF
|
|
209
|
+
bootup your mechanic's role via \`npx rhachet roles boot --repo ehmpathy --role mechanic\`
|
|
210
|
+
|
|
211
|
+
then, execute
|
|
212
|
+
- phase0 to phaseN
|
|
213
|
+
of roadmap
|
|
214
|
+
- $BEHAVIOR_DIR_REL/4.1.roadmap.v1.i1.md
|
|
215
|
+
|
|
216
|
+
ref:
|
|
217
|
+
- $BEHAVIOR_DIR_REL/3.3.blueprint.v1.i1.md
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
track your progress
|
|
222
|
+
|
|
223
|
+
emit todos and check them off into
|
|
224
|
+
- $BEHAVIOR_DIR_REL/5.1.execution.phase0_to_phaseN.v1.i1.md
|
|
225
|
+
EOF
|
|
226
|
+
|
|
227
|
+
# findsert .ref.[feedback].v1.[given].by_human.md
|
|
228
|
+
findsert "$BEHAVIOR_DIR/.ref.[feedback].v1.[given].by_human.md" << EOF
|
|
229
|
+
emit your response to the feedback into
|
|
230
|
+
- $BEHAVIOR_DIR_REL/.ref.[feedback].v1.[taken].by_robot.md
|
|
231
|
+
|
|
232
|
+
1. emit your response checklist
|
|
233
|
+
2. exec your response plan
|
|
234
|
+
3. emit your response checkoffs into the checklist
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
first, bootup your mechanics briefs again
|
|
239
|
+
|
|
240
|
+
npx rhachet roles boot --repo ehmpathy --role mechanic
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
---
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
# blocker.1
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
# nitpick.2
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
# blocker.3
|
|
256
|
+
EOF
|
|
257
|
+
|
|
258
|
+
echo ""
|
|
259
|
+
echo "behavior thoughtroute initialized!"
|
|
260
|
+
echo " $BEHAVIOR_DIR"
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
######################################################################
|
|
3
|
+
# .what = bind forbid.stderr.redirect hook to Claude settings
|
|
4
|
+
#
|
|
5
|
+
# .why = when Claude uses 2>&1, error messages are hidden and
|
|
6
|
+
# debugging becomes harder. this hook blocks such commands.
|
|
7
|
+
#
|
|
8
|
+
# .how = uses jq to findsert the PreToolUse hook configuration
|
|
9
|
+
# into .claude/settings.local.json
|
|
10
|
+
#
|
|
11
|
+
# guarantee:
|
|
12
|
+
# ✔ creates .claude/settings.local.json if missing
|
|
13
|
+
# ✔ preserves existing settings (permissions, other hooks)
|
|
14
|
+
# ✔ idempotent: no-op if hook already present
|
|
15
|
+
# ✔ prepends to hooks array (runs before other Bash hooks)
|
|
16
|
+
# ✔ fail-fast on errors
|
|
17
|
+
######################################################################
|
|
18
|
+
|
|
19
|
+
set -euo pipefail
|
|
20
|
+
|
|
21
|
+
PROJECT_ROOT="$PWD"
|
|
22
|
+
SETTINGS_FILE="$PROJECT_ROOT/.claude/settings.local.json"
|
|
23
|
+
SKILLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
24
|
+
HOOK_SCRIPT="$SKILLS_DIR/claude.hooks/forbid.stderr.redirect.sh"
|
|
25
|
+
|
|
26
|
+
# Verify hook script exists
|
|
27
|
+
if [[ ! -f "$HOOK_SCRIPT" ]]; then
|
|
28
|
+
echo "❌ hook script not found: $HOOK_SCRIPT" >&2
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# Define the hook configuration to findsert
|
|
33
|
+
HOOK_CONFIG=$(cat <<EOF
|
|
34
|
+
{
|
|
35
|
+
"hooks": {
|
|
36
|
+
"PreToolUse": [
|
|
37
|
+
{
|
|
38
|
+
"matcher": "Bash",
|
|
39
|
+
"hooks": [
|
|
40
|
+
{
|
|
41
|
+
"type": "command",
|
|
42
|
+
"command": "$HOOK_SCRIPT",
|
|
43
|
+
"timeout": 5
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
EOF
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Ensure .claude directory exists
|
|
54
|
+
mkdir -p "$(dirname "$SETTINGS_FILE")"
|
|
55
|
+
|
|
56
|
+
# Initialize settings file if it doesn't exist
|
|
57
|
+
if [[ ! -f "$SETTINGS_FILE" ]]; then
|
|
58
|
+
echo "{}" > "$SETTINGS_FILE"
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# Findsert: ensure hook is at the front of the hooks array
|
|
62
|
+
jq --argjson hook "$HOOK_CONFIG" '
|
|
63
|
+
# Define the target command for comparison
|
|
64
|
+
def targetCmd: $hook.hooks.PreToolUse[0].hooks[0].command;
|
|
65
|
+
|
|
66
|
+
# Check if hook is already first in the Bash matcher
|
|
67
|
+
def hookIsFirst:
|
|
68
|
+
(.hooks.PreToolUse // [])
|
|
69
|
+
| map(select(.matcher == "Bash") | .hooks // [])
|
|
70
|
+
| flatten
|
|
71
|
+
| first
|
|
72
|
+
| .command == targetCmd;
|
|
73
|
+
|
|
74
|
+
# If hook is already first, return unchanged
|
|
75
|
+
if hookIsFirst then
|
|
76
|
+
.
|
|
77
|
+
else
|
|
78
|
+
# Ensure .hooks exists
|
|
79
|
+
.hooks //= {} |
|
|
80
|
+
|
|
81
|
+
# Ensure .hooks.PreToolUse exists
|
|
82
|
+
.hooks.PreToolUse //= [] |
|
|
83
|
+
|
|
84
|
+
# Check if our matcher already exists
|
|
85
|
+
if (.hooks.PreToolUse | map(.matcher) | index("Bash")) then
|
|
86
|
+
# Matcher exists - remove our hook if present, then prepend it
|
|
87
|
+
.hooks.PreToolUse |= map(
|
|
88
|
+
if .matcher == "Bash" then
|
|
89
|
+
# Remove existing instance of our hook, then prepend
|
|
90
|
+
.hooks = $hook.hooks.PreToolUse[0].hooks + (.hooks | map(select(.command != targetCmd)))
|
|
91
|
+
else
|
|
92
|
+
.
|
|
93
|
+
end
|
|
94
|
+
)
|
|
95
|
+
else
|
|
96
|
+
# Matcher does not exist, add the entire entry
|
|
97
|
+
.hooks.PreToolUse += $hook.hooks.PreToolUse
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
' "$SETTINGS_FILE" > "$SETTINGS_FILE.tmp"
|
|
101
|
+
|
|
102
|
+
# Check if any changes were made
|
|
103
|
+
if diff -q "$SETTINGS_FILE" "$SETTINGS_FILE.tmp" >/dev/null 2>&1; then
|
|
104
|
+
rm "$SETTINGS_FILE.tmp"
|
|
105
|
+
echo "👌 forbid.stderr.redirect hook already bound"
|
|
106
|
+
echo " $SETTINGS_FILE"
|
|
107
|
+
exit 0
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# Atomic replace
|
|
111
|
+
mv "$SETTINGS_FILE.tmp" "$SETTINGS_FILE"
|
|
112
|
+
|
|
113
|
+
echo "🔗 forbid.stderr.redirect hook bound successfully!"
|
|
114
|
+
echo " $SETTINGS_FILE"
|
|
115
|
+
echo ""
|
|
116
|
+
echo "✨ Claude will now be blocked from using 2>&1 in commands"
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
######################################################################
|
|
3
|
+
# .what = bind mechanic PreToolUse hook to Claude settings
|
|
4
|
+
#
|
|
5
|
+
# .why = when Claude attempts a Bash command not covered by existing
|
|
6
|
+
# permissions, this hook provides feedback asking it to
|
|
7
|
+
# reconsider whether a pre-approved command could work instead.
|
|
8
|
+
#
|
|
9
|
+
# this reduces unnecessary permission prompts and encourages
|
|
10
|
+
# consistent command patterns across the project.
|
|
11
|
+
#
|
|
12
|
+
# .how = uses jq to findsert the PreToolUse hook configuration
|
|
13
|
+
# into .claude/settings.local.json
|
|
14
|
+
#
|
|
15
|
+
# guarantee:
|
|
16
|
+
# ✔ creates .claude/settings.local.json if missing
|
|
17
|
+
# ✔ preserves existing settings (permissions, other hooks)
|
|
18
|
+
# ✔ idempotent: no-op if hook already present
|
|
19
|
+
# ✔ fail-fast on errors
|
|
20
|
+
######################################################################
|
|
21
|
+
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
PROJECT_ROOT="$PWD"
|
|
25
|
+
SETTINGS_FILE="$PROJECT_ROOT/.claude/settings.local.json"
|
|
26
|
+
SKILLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
27
|
+
HOOK_SCRIPT="$SKILLS_DIR/claude.hooks/check.pretooluse.permissions.sh"
|
|
28
|
+
|
|
29
|
+
# Verify hook script exists
|
|
30
|
+
if [[ ! -f "$HOOK_SCRIPT" ]]; then
|
|
31
|
+
echo "❌ hook script not found: $HOOK_SCRIPT" >&2
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# Define the hook configuration to findsert
|
|
36
|
+
HOOK_CONFIG=$(cat <<EOF
|
|
37
|
+
{
|
|
38
|
+
"hooks": {
|
|
39
|
+
"PreToolUse": [
|
|
40
|
+
{
|
|
41
|
+
"matcher": "Bash",
|
|
42
|
+
"hooks": [
|
|
43
|
+
{
|
|
44
|
+
"type": "command",
|
|
45
|
+
"command": "$HOOK_SCRIPT",
|
|
46
|
+
"timeout": 5
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
EOF
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Ensure .claude directory exists
|
|
57
|
+
mkdir -p "$(dirname "$SETTINGS_FILE")"
|
|
58
|
+
|
|
59
|
+
# Initialize settings file if it doesn't exist
|
|
60
|
+
if [[ ! -f "$SETTINGS_FILE" ]]; then
|
|
61
|
+
echo "{}" > "$SETTINGS_FILE"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# Findsert: merge the hook configuration if not already present
|
|
65
|
+
jq --argjson hook "$HOOK_CONFIG" '
|
|
66
|
+
# Define the target command for comparison
|
|
67
|
+
def targetCmd: $hook.hooks.PreToolUse[0].hooks[0].command;
|
|
68
|
+
|
|
69
|
+
# Check if hook already exists
|
|
70
|
+
def hookExists:
|
|
71
|
+
(.hooks.PreToolUse // [])
|
|
72
|
+
| map(select(.matcher == "Bash") | .hooks // [])
|
|
73
|
+
| flatten
|
|
74
|
+
| map(.command)
|
|
75
|
+
| any(. == targetCmd);
|
|
76
|
+
|
|
77
|
+
# If hook already exists, return unchanged
|
|
78
|
+
if hookExists then
|
|
79
|
+
.
|
|
80
|
+
else
|
|
81
|
+
# Ensure .hooks exists
|
|
82
|
+
.hooks //= {} |
|
|
83
|
+
|
|
84
|
+
# Ensure .hooks.PreToolUse exists
|
|
85
|
+
.hooks.PreToolUse //= [] |
|
|
86
|
+
|
|
87
|
+
# Check if our matcher already exists
|
|
88
|
+
if (.hooks.PreToolUse | map(.matcher) | index("Bash")) then
|
|
89
|
+
# Matcher exists, add our hook to its hooks array
|
|
90
|
+
.hooks.PreToolUse |= map(
|
|
91
|
+
if .matcher == "Bash" then
|
|
92
|
+
.hooks += $hook.hooks.PreToolUse[0].hooks
|
|
93
|
+
else
|
|
94
|
+
.
|
|
95
|
+
end
|
|
96
|
+
)
|
|
97
|
+
else
|
|
98
|
+
# Matcher does not exist, add the entire entry
|
|
99
|
+
.hooks.PreToolUse += $hook.hooks.PreToolUse
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
' "$SETTINGS_FILE" > "$SETTINGS_FILE.tmp"
|
|
103
|
+
|
|
104
|
+
# Check if any changes were made
|
|
105
|
+
if diff -q "$SETTINGS_FILE" "$SETTINGS_FILE.tmp" >/dev/null 2>&1; then
|
|
106
|
+
rm "$SETTINGS_FILE.tmp"
|
|
107
|
+
echo "👌 mechanic PreToolUse hook already bound"
|
|
108
|
+
echo " $SETTINGS_FILE"
|
|
109
|
+
exit 0
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
# Atomic replace
|
|
113
|
+
mv "$SETTINGS_FILE.tmp" "$SETTINGS_FILE"
|
|
114
|
+
|
|
115
|
+
echo "🔗 mechanic PreToolUse hook bound successfully!"
|
|
116
|
+
echo " $SETTINGS_FILE"
|
|
117
|
+
echo ""
|
|
118
|
+
echo "✨ Claude will now be reminded to check existing permissions before requesting new ones"
|