buildlog 0.7.0__py3-none-any.whl → 0.8.0__py3-none-any.whl
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.
- buildlog/__init__.py +1 -1
- buildlog/cli.py +436 -44
- buildlog/confidence.py +27 -0
- buildlog/core/__init__.py +2 -0
- buildlog/core/bandit.py +699 -0
- buildlog/core/operations.py +265 -11
- buildlog/distill.py +80 -1
- buildlog/engine/__init__.py +61 -0
- buildlog/engine/bandit.py +23 -0
- buildlog/engine/confidence.py +28 -0
- buildlog/engine/embeddings.py +28 -0
- buildlog/engine/experiments.py +619 -0
- buildlog/engine/types.py +31 -0
- buildlog/llm.py +461 -0
- buildlog/mcp/server.py +6 -6
- buildlog/mcp/tools.py +61 -13
- buildlog/render/__init__.py +19 -2
- buildlog/render/claude_md.py +67 -32
- buildlog/render/continue_dev.py +102 -0
- buildlog/render/copilot.py +100 -0
- buildlog/render/cursor.py +105 -0
- buildlog/render/windsurf.py +95 -0
- buildlog/skills.py +69 -6
- {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/copier.yml +0 -4
- buildlog-0.8.0.data/data/share/buildlog/template/buildlog/_TEMPLATE_QUICK.md +21 -0
- buildlog-0.8.0.dist-info/METADATA +151 -0
- buildlog-0.8.0.dist-info/RECORD +54 -0
- buildlog-0.7.0.dist-info/METADATA +0 -544
- buildlog-0.7.0.dist-info/RECORD +0 -41
- {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/post_gen.py +0 -0
- {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/.gitkeep +0 -0
- {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/2026-01-01-example.md +0 -0
- {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/BUILDLOG_SYSTEM.md +0 -0
- {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/_TEMPLATE.md +0 -0
- {buildlog-0.7.0.data → buildlog-0.8.0.data}/data/share/buildlog/template/buildlog/assets/.gitkeep +0 -0
- {buildlog-0.7.0.dist-info → buildlog-0.8.0.dist-info}/WHEEL +0 -0
- {buildlog-0.7.0.dist-info → buildlog-0.8.0.dist-info}/entry_points.txt +0 -0
- {buildlog-0.7.0.dist-info → buildlog-0.8.0.dist-info}/licenses/LICENSE +0 -0
buildlog/skills.py
CHANGED
|
@@ -23,7 +23,10 @@ import re
|
|
|
23
23
|
from dataclasses import dataclass, field
|
|
24
24
|
from datetime import date, datetime, timezone
|
|
25
25
|
from pathlib import Path
|
|
26
|
-
from typing import Final, Literal, TypedDict
|
|
26
|
+
from typing import TYPE_CHECKING, Final, Literal, TypedDict
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from buildlog.llm import LLMBackend
|
|
27
30
|
|
|
28
31
|
from buildlog.confidence import ConfidenceConfig, ConfidenceMetrics
|
|
29
32
|
from buildlog.confidence import calculate_confidence as calculate_continuous_confidence
|
|
@@ -83,6 +86,10 @@ class SkillDict(_SkillDictRequired, total=False):
|
|
|
83
86
|
antipattern: str # What does violation look like?
|
|
84
87
|
rationale: str # Why does this matter?
|
|
85
88
|
persona_tags: list[str] # Which reviewers use this rule?
|
|
89
|
+
# LLM-extracted scoring fields
|
|
90
|
+
severity: str # critical/major/minor/info
|
|
91
|
+
scope: str # global/module/function
|
|
92
|
+
applicability: list[str] # contexts where relevant
|
|
86
93
|
|
|
87
94
|
|
|
88
95
|
class SkillSetDict(TypedDict):
|
|
@@ -115,6 +122,9 @@ class Skill:
|
|
|
115
122
|
antipattern: What does violation look like? (defensibility)
|
|
116
123
|
rationale: Why does this rule matter? (defensibility)
|
|
117
124
|
persona_tags: Which reviewer personas use this rule?
|
|
125
|
+
severity: How bad is ignoring this rule? (critical/major/minor/info)
|
|
126
|
+
scope: How broadly does this rule apply? (global/module/function)
|
|
127
|
+
applicability: Contexts where this rule is relevant.
|
|
118
128
|
"""
|
|
119
129
|
|
|
120
130
|
id: str
|
|
@@ -131,6 +141,10 @@ class Skill:
|
|
|
131
141
|
antipattern: str | None = None
|
|
132
142
|
rationale: str | None = None
|
|
133
143
|
persona_tags: list[str] = field(default_factory=list)
|
|
144
|
+
# LLM-extracted scoring
|
|
145
|
+
severity: str | None = None
|
|
146
|
+
scope: str | None = None
|
|
147
|
+
applicability: list[str] = field(default_factory=list)
|
|
134
148
|
|
|
135
149
|
def to_dict(self) -> SkillDict:
|
|
136
150
|
"""Convert to dictionary for serialization.
|
|
@@ -159,6 +173,12 @@ class Skill:
|
|
|
159
173
|
result["rationale"] = self.rationale
|
|
160
174
|
if self.persona_tags:
|
|
161
175
|
result["persona_tags"] = self.persona_tags
|
|
176
|
+
if self.severity is not None:
|
|
177
|
+
result["severity"] = self.severity
|
|
178
|
+
if self.scope is not None:
|
|
179
|
+
result["scope"] = self.scope
|
|
180
|
+
if self.applicability:
|
|
181
|
+
result["applicability"] = self.applicability
|
|
162
182
|
return result
|
|
163
183
|
|
|
164
184
|
|
|
@@ -326,6 +346,7 @@ def _deduplicate_insights(
|
|
|
326
346
|
patterns: list[PatternDict],
|
|
327
347
|
threshold: float = MIN_SIMILARITY_THRESHOLD,
|
|
328
348
|
backend: EmbeddingBackend | None = None,
|
|
349
|
+
llm_backend: LLMBackend | None = None,
|
|
329
350
|
) -> list[tuple[str, int, list[str], date | None, date | None]]:
|
|
330
351
|
"""Deduplicate similar insights into merged rules.
|
|
331
352
|
|
|
@@ -366,9 +387,17 @@ def _deduplicate_insights(
|
|
|
366
387
|
results: list[tuple[str, int, list[str], date | None, date | None]] = []
|
|
367
388
|
|
|
368
389
|
for group in groups:
|
|
369
|
-
# Use
|
|
370
|
-
|
|
371
|
-
|
|
390
|
+
# Use LLM to select canonical form if available and group has >1 member
|
|
391
|
+
if llm_backend is not None and len(group) > 1:
|
|
392
|
+
try:
|
|
393
|
+
candidates = [p["insight"] for p in group]
|
|
394
|
+
rule = llm_backend.select_canonical(candidates)
|
|
395
|
+
except Exception:
|
|
396
|
+
canonical = min(group, key=lambda p: len(p["insight"]))
|
|
397
|
+
rule = canonical["insight"]
|
|
398
|
+
else:
|
|
399
|
+
canonical = min(group, key=lambda p: len(p["insight"]))
|
|
400
|
+
rule = canonical["insight"]
|
|
372
401
|
frequency = len(group)
|
|
373
402
|
sources = sorted(set(p["source"] for p in group))
|
|
374
403
|
|
|
@@ -434,6 +463,7 @@ def generate_skills(
|
|
|
434
463
|
embedding_backend: str | None = None,
|
|
435
464
|
confidence_config: ConfidenceConfig | None = None,
|
|
436
465
|
include_review_learnings: bool = True,
|
|
466
|
+
llm: bool = False,
|
|
437
467
|
) -> SkillSet:
|
|
438
468
|
"""Generate skills from buildlog patterns and review learnings.
|
|
439
469
|
|
|
@@ -449,12 +479,21 @@ def generate_skills(
|
|
|
449
479
|
include_review_learnings: Whether to include learnings from code reviews.
|
|
450
480
|
When True, loads .buildlog/review_learnings.json and merges
|
|
451
481
|
review learnings into the skill set.
|
|
482
|
+
llm: If True and an LLM backend is available, use LLM for extraction,
|
|
483
|
+
canonical selection, and scoring. Falls back gracefully.
|
|
452
484
|
|
|
453
485
|
Returns:
|
|
454
486
|
SkillSet with generated skills.
|
|
455
487
|
"""
|
|
488
|
+
# Resolve LLM backend if requested
|
|
489
|
+
llm_backend = None
|
|
490
|
+
if llm:
|
|
491
|
+
from buildlog.llm import get_llm_backend
|
|
492
|
+
|
|
493
|
+
llm_backend = get_llm_backend(buildlog_dir=buildlog_dir)
|
|
494
|
+
|
|
456
495
|
# Get distilled patterns
|
|
457
|
-
result = distill_all(buildlog_dir, since=since_date)
|
|
496
|
+
result = distill_all(buildlog_dir, since=since_date, llm=llm)
|
|
458
497
|
|
|
459
498
|
# Get embedding backend
|
|
460
499
|
backend = (
|
|
@@ -471,7 +510,9 @@ def generate_skills(
|
|
|
471
510
|
|
|
472
511
|
for category in CATEGORIES:
|
|
473
512
|
patterns = result.patterns.get(category, [])
|
|
474
|
-
deduplicated = _deduplicate_insights(
|
|
513
|
+
deduplicated = _deduplicate_insights(
|
|
514
|
+
patterns, backend=backend, llm_backend=llm_backend
|
|
515
|
+
)
|
|
475
516
|
|
|
476
517
|
skills: list[Skill] = []
|
|
477
518
|
for rule, frequency, sources, most_recent, earliest in deduplicated:
|
|
@@ -490,6 +531,25 @@ def generate_skills(
|
|
|
490
531
|
confidence_score, confidence_config
|
|
491
532
|
).value
|
|
492
533
|
|
|
534
|
+
# LLM scoring for severity/scope/applicability
|
|
535
|
+
severity: str | None = None
|
|
536
|
+
scope: str | None = None
|
|
537
|
+
applicability_tags: list[str] = []
|
|
538
|
+
if llm_backend is not None:
|
|
539
|
+
try:
|
|
540
|
+
scoring = llm_backend.score_rule(rule, category)
|
|
541
|
+
severity = scoring.severity
|
|
542
|
+
scope = scoring.scope
|
|
543
|
+
applicability_tags = scoring.applicability
|
|
544
|
+
except Exception:
|
|
545
|
+
pass # Keep defaults (None/empty)
|
|
546
|
+
|
|
547
|
+
# Apply severity weighting to confidence score
|
|
548
|
+
if confidence_score is not None and severity is not None:
|
|
549
|
+
from buildlog.confidence import apply_severity_weight
|
|
550
|
+
|
|
551
|
+
confidence_score = apply_severity_weight(confidence_score, severity)
|
|
552
|
+
|
|
493
553
|
skill = Skill(
|
|
494
554
|
id=_generate_skill_id(category, rule),
|
|
495
555
|
category=category,
|
|
@@ -500,6 +560,9 @@ def generate_skills(
|
|
|
500
560
|
tags=_extract_tags(rule),
|
|
501
561
|
confidence_score=confidence_score,
|
|
502
562
|
confidence_tier=confidence_tier,
|
|
563
|
+
severity=severity,
|
|
564
|
+
scope=scope,
|
|
565
|
+
applicability=applicability_tags,
|
|
503
566
|
)
|
|
504
567
|
skills.append(skill)
|
|
505
568
|
|
|
@@ -20,10 +20,6 @@ update_claude_md:
|
|
|
20
20
|
help: Add buildlog instructions to CLAUDE.md if it exists?
|
|
21
21
|
default: true
|
|
22
22
|
|
|
23
|
-
# Post-generation tasks
|
|
24
|
-
_tasks:
|
|
25
|
-
- "{{ 'python3 post_gen.py' if update_claude_md else 'echo Skipping CLAUDE.md update' }}"
|
|
26
|
-
|
|
27
23
|
_message_after_copy: |
|
|
28
24
|
Build journal installed!
|
|
29
25
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Build Journal: [TITLE]
|
|
2
|
+
|
|
3
|
+
**Date:** [YYYY-MM-DD]
|
|
4
|
+
**Duration:** [X hours]
|
|
5
|
+
|
|
6
|
+
## What I Did
|
|
7
|
+
|
|
8
|
+
[What you built, fixed, or changed. 2-3 sentences.]
|
|
9
|
+
|
|
10
|
+
## What Went Wrong
|
|
11
|
+
|
|
12
|
+
[Mistakes, surprises, dead ends. Be specific — these become rules.]
|
|
13
|
+
|
|
14
|
+
## What I Learned
|
|
15
|
+
|
|
16
|
+
### Improvements
|
|
17
|
+
|
|
18
|
+
- [One thing to do differently next time]
|
|
19
|
+
- [One thing that worked well to repeat]
|
|
20
|
+
|
|
21
|
+
*More sections: see _TEMPLATE.md for the full format.*
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: buildlog
|
|
3
|
+
Version: 0.8.0
|
|
4
|
+
Summary: Engineering notebook for AI-assisted development
|
|
5
|
+
Project-URL: Homepage, https://github.com/Peleke/buildlog-template
|
|
6
|
+
Project-URL: Repository, https://github.com/Peleke/buildlog-template
|
|
7
|
+
Author: Peleke Sengstacke
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: ai,buildlog,development,documentation,journal
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Documentation
|
|
21
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Requires-Dist: click>=8.0.0
|
|
24
|
+
Requires-Dist: copier>=9.0.0
|
|
25
|
+
Requires-Dist: numpy>=1.21.0
|
|
26
|
+
Requires-Dist: pymupdf>=1.26.7
|
|
27
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
28
|
+
Provides-Extra: all
|
|
29
|
+
Requires-Dist: anthropic>=0.40.0; extra == 'all'
|
|
30
|
+
Requires-Dist: mcp>=1.0.0; extra == 'all'
|
|
31
|
+
Requires-Dist: ollama>=0.4.0; extra == 'all'
|
|
32
|
+
Requires-Dist: openai>=1.0.0; extra == 'all'
|
|
33
|
+
Requires-Dist: sentence-transformers>=2.2.0; extra == 'all'
|
|
34
|
+
Provides-Extra: anthropic
|
|
35
|
+
Requires-Dist: anthropic>=0.40.0; extra == 'anthropic'
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: black>=24.0.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: flake8>=7.0.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: isort>=5.13.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: mkdocs-material>=9.5.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: mypy>=1.8.0; extra == 'dev'
|
|
42
|
+
Requires-Dist: pre-commit>=3.6.0; extra == 'dev'
|
|
43
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
|
|
44
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
45
|
+
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: types-pyyaml>=6.0.0; extra == 'dev'
|
|
47
|
+
Provides-Extra: embeddings
|
|
48
|
+
Requires-Dist: sentence-transformers>=2.2.0; extra == 'embeddings'
|
|
49
|
+
Provides-Extra: engine
|
|
50
|
+
Provides-Extra: llm
|
|
51
|
+
Requires-Dist: anthropic>=0.40.0; extra == 'llm'
|
|
52
|
+
Requires-Dist: ollama>=0.4.0; extra == 'llm'
|
|
53
|
+
Provides-Extra: mcp
|
|
54
|
+
Requires-Dist: mcp>=1.0.0; extra == 'mcp'
|
|
55
|
+
Provides-Extra: ollama
|
|
56
|
+
Requires-Dist: ollama>=0.4.0; extra == 'ollama'
|
|
57
|
+
Provides-Extra: openai
|
|
58
|
+
Requires-Dist: openai>=1.0.0; extra == 'openai'
|
|
59
|
+
Description-Content-Type: text/markdown
|
|
60
|
+
|
|
61
|
+
<div align="center">
|
|
62
|
+
|
|
63
|
+
# buildlog
|
|
64
|
+
|
|
65
|
+
### The Only Agent Learning System You Can Prove Works
|
|
66
|
+
|
|
67
|
+
[](https://pypi.org/project/buildlog/)
|
|
68
|
+
[](https://python.org/)
|
|
69
|
+
[](https://github.com/Peleke/buildlog-template/actions/workflows/ci.yml)
|
|
70
|
+
[](https://opensource.org/licenses/MIT)
|
|
71
|
+
[](https://peleke.github.io/buildlog-template/)
|
|
72
|
+
|
|
73
|
+
**Falsifiable claims. Measurable outcomes. No vibes.**
|
|
74
|
+
|
|
75
|
+
<img src="assets/hero-banner-perfectdeliberate.png" alt="buildlog - The Only Agent Learning System You Can Prove Works" width="800"/>
|
|
76
|
+
|
|
77
|
+
> **RE: The art** — Yes, it's AI-generated. Yes, that's hypocritical for a project about rigor over vibes. Looking for an actual artist to pay for a real logo. If you know someone good, [open an issue](https://github.com/Peleke/buildlog-template/issues) or DM me. Budget exists.
|
|
78
|
+
|
|
79
|
+
**[Read the full documentation](https://peleke.github.io/buildlog-template/)**
|
|
80
|
+
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
Everyone's building "agent memory." Blog posts announce breakthroughs. Products ship with "learning" in the tagline. Ask them one question: **How do you know it works?**
|
|
86
|
+
|
|
87
|
+
buildlog gives you the infrastructure to answer with data. It captures engineering knowledge from work sessions, extracts rules, selects which rules to surface using a Thompson Sampling bandit, and measures impact via Repeated Mistake Rate (RMR) across tracked experiments.
|
|
88
|
+
|
|
89
|
+
## Features
|
|
90
|
+
|
|
91
|
+
- **Structured capture** — Document work sessions as entries with mistakes, decisions, and outcomes
|
|
92
|
+
- **Rule extraction** — Distill and deduplicate patterns into actionable rules
|
|
93
|
+
- **Thompson Sampling bandit** — Automatic rule selection that balances exploration and exploitation
|
|
94
|
+
- **Experiment tracking** — Sessions, mistakes, RMR calculation with statistical rigor
|
|
95
|
+
- **Review gauntlet** — Curated reviewer personas (Security Karen, Test Terrorist) with HITL checkpoints
|
|
96
|
+
- **Multi-agent support** — Render rules to Claude Code, Cursor, GitHub Copilot, Windsurf, Continue.dev
|
|
97
|
+
- **MCP server** — Full Claude Code integration via `buildlog-mcp`
|
|
98
|
+
|
|
99
|
+
## Quick Start
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
uv pip install buildlog # or: pip install buildlog (inside a venv)
|
|
103
|
+
buildlog init
|
|
104
|
+
buildlog new my-feature
|
|
105
|
+
buildlog distill && buildlog skills
|
|
106
|
+
buildlog experiment start
|
|
107
|
+
# ... work ...
|
|
108
|
+
buildlog experiment end
|
|
109
|
+
buildlog experiment report
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Documentation
|
|
113
|
+
|
|
114
|
+
| Section | Description |
|
|
115
|
+
|---------|------------|
|
|
116
|
+
| [Installation](https://peleke.github.io/buildlog-template/getting-started/installation/) | Setup, extras, and initialization |
|
|
117
|
+
| [Quick Start](https://peleke.github.io/buildlog-template/getting-started/quick-start/) | Full pipeline walkthrough |
|
|
118
|
+
| [Core Concepts](https://peleke.github.io/buildlog-template/getting-started/concepts/) | The problem, the claim, and the metric |
|
|
119
|
+
| [CLI Reference](https://peleke.github.io/buildlog-template/guides/cli-reference/) | Every command documented |
|
|
120
|
+
| [MCP Integration](https://peleke.github.io/buildlog-template/guides/mcp-integration/) | Claude Code setup and available tools |
|
|
121
|
+
| [Experiments](https://peleke.github.io/buildlog-template/guides/experiments/) | Running and measuring experiments |
|
|
122
|
+
| [Review Gauntlet](https://peleke.github.io/buildlog-template/guides/review-gauntlet/) | Reviewer personas and the gauntlet loop |
|
|
123
|
+
| [Multi-Agent Setup](https://peleke.github.io/buildlog-template/guides/multi-agent/) | Render rules to any AI coding agent |
|
|
124
|
+
| [Theory](https://peleke.github.io/buildlog-template/theory/00-background/) | The math behind Thompson Sampling |
|
|
125
|
+
| [Philosophy](https://peleke.github.io/buildlog-template/philosophy/) | Principles and honest limitations |
|
|
126
|
+
|
|
127
|
+
## Contributing
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
git clone https://github.com/Peleke/buildlog-template
|
|
131
|
+
cd buildlog-template
|
|
132
|
+
uv venv && source .venv/bin/activate
|
|
133
|
+
uv pip install -e ".[dev]"
|
|
134
|
+
pytest
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
We're especially interested in better context representations, credit assignment approaches, statistical methodology improvements, and real-world experiment results (positive or negative).
|
|
138
|
+
|
|
139
|
+
## License
|
|
140
|
+
|
|
141
|
+
MIT License — see [LICENSE](./LICENSE)
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
<div align="center">
|
|
146
|
+
|
|
147
|
+
**"Agent learning" without measurement is just prompt engineering with extra steps.**
|
|
148
|
+
|
|
149
|
+
**buildlog is measurement.**
|
|
150
|
+
|
|
151
|
+
</div>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
buildlog/__init__.py,sha256=wxluyg3fDOiaKUAOJa0cav39hwtNJS5Y_0X20uL_yi4,90
|
|
2
|
+
buildlog/cli.py,sha256=G2d2N2cmC3HEiYc6_mQhRyW8PLHzrHr2Kx38ooQsMlU,59456
|
|
3
|
+
buildlog/confidence.py,sha256=jPvN0_3drGHQG1C7iUxUtYjKC62nNKsHHxu6WXMfJFg,10137
|
|
4
|
+
buildlog/distill.py,sha256=PL7UBToBb27BrCOTWGBTDIXGggtrUumHHBs0_MfG6vY,14166
|
|
5
|
+
buildlog/embeddings.py,sha256=vPydWjJVkYp172zFou-lJ737qsu6vRMQAMs143RGIpA,12364
|
|
6
|
+
buildlog/llm.py,sha256=vXFT03BZVI8GMX-ybSK18SoeABaZbr_B2KXm8WsNews,15278
|
|
7
|
+
buildlog/seeds.py,sha256=L-lzO7rrDjMdVHcYKvEBm6scVDfCmFD0koiyafMZDLo,8596
|
|
8
|
+
buildlog/skills.py,sha256=3CihyyAFfJh0w0VNXQauNhGm_RM8m_GIO1iiNLNPmsQ,33789
|
|
9
|
+
buildlog/stats.py,sha256=2WdHdmzUNGobtWngmm9nA_UmqM7DQeAnZL8_rLQN8aw,13256
|
|
10
|
+
buildlog/core/__init__.py,sha256=gPd6ava_sei0sYIS4NdeHgCVwJ2wEjyLt-Rxz_11IWU,1626
|
|
11
|
+
buildlog/core/bandit.py,sha256=0z58s42jpQiBgXdjb465apenWdBVTvoc7bDOcnAcPLo,24565
|
|
12
|
+
buildlog/core/operations.py,sha256=4gElPJBG9zlXoXO6CPTolwoRrd45DOIV6X1SAQbF3zE,70205
|
|
13
|
+
buildlog/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
buildlog/data/seeds/security_karen.yaml,sha256=Hjwp4j6FB-e0vCXp6AkyhAEkwASR4H1owdhPBID740E,8775
|
|
15
|
+
buildlog/data/seeds/test_terrorist.yaml,sha256=-QY2x6d0LrlM6msMYaYwR43Wny9ZybQmU7pH_E7gSB0,11113
|
|
16
|
+
buildlog/engine/__init__.py,sha256=KNTSUZTUHK6r2abAA-2PIb0wUcRgbE4juvBmoywaXHI,1750
|
|
17
|
+
buildlog/engine/bandit.py,sha256=rfwfQjULakzm-H5bMa5R-iqtI7iibgR4y2JoRhD4zRk,485
|
|
18
|
+
buildlog/engine/confidence.py,sha256=7Zhw8bwT_S-qeVaGXT6dHOyjDTvwyhetLKCWhJH9jMc,656
|
|
19
|
+
buildlog/engine/embeddings.py,sha256=78InITcBbaPZ29tUlb4hJNNVZ1fhxstvVa2fYvOh6QA,597
|
|
20
|
+
buildlog/engine/experiments.py,sha256=38f_UsbY4TP3LTGM9yUsZxoXqxUGOxmLCoYrfZqjVks,20041
|
|
21
|
+
buildlog/engine/types.py,sha256=W7U2B4TE79xACV0cuaidKevmTEskxqXfltH5hjIxV5k,734
|
|
22
|
+
buildlog/mcp/__init__.py,sha256=jCLNUkYFrDcPd5dY9xbaaVANl-ZzdPim1BykgGY7f7U,334
|
|
23
|
+
buildlog/mcp/server.py,sha256=vzgT_-SUWNNx9bvABJBgT7rHNGPx_nB7pVo-04WbwjI,1249
|
|
24
|
+
buildlog/mcp/tools.py,sha256=k1f6R7Dgcx0VIKzTNezkcRc0UVkWXWkk-uGkRq1sIiw,17578
|
|
25
|
+
buildlog/render/__init__.py,sha256=jj-o-vPdqpivdFKK85xskCOT8Zn_2tb3Q5Jb0gWLjAg,2567
|
|
26
|
+
buildlog/render/base.py,sha256=gQfvOsH1zttAo10xtEyNsAbqZ4NRSPiDihO-aiGgTsw,533
|
|
27
|
+
buildlog/render/claude_md.py,sha256=R5z4dHh-3YwclbW3MAzHxgYQHtd5lXS3McJJ1isLGqE,4901
|
|
28
|
+
buildlog/render/continue_dev.py,sha256=S76pGkHssTOEqisiRjKZTfNBRwgiChYeYBR9RKZSgME,3253
|
|
29
|
+
buildlog/render/copilot.py,sha256=8pvXdBWUYnenYIQ5I6L0ukk2JC-NxmNDZrbWQ0kTaqY,3268
|
|
30
|
+
buildlog/render/cursor.py,sha256=tAc0oWJmSXmYzofEzpe1QnkRM-KITTUzHkdSbZXxv4k,3424
|
|
31
|
+
buildlog/render/settings_json.py,sha256=4DS5OWksPrFCa7MIgWIu0t4rxYmItpMdGfTqMX3aMNs,2495
|
|
32
|
+
buildlog/render/skill.py,sha256=_7umIS1Ms1oQ2_PopYueFjX41nMq1p28yJp6DhXFdgU,5981
|
|
33
|
+
buildlog/render/tracking.py,sha256=1y_Mf1s3KblV8TC0W9x2a_ynSJHLwkVZJcW1gs1a6q4,1786
|
|
34
|
+
buildlog/render/windsurf.py,sha256=jfJLb-luQLjdBM38_KKp0mZ08bUSDTBPxSLOIFWxawQ,3047
|
|
35
|
+
buildlog/seed_engine/__init__.py,sha256=f2LYSAs_D1bK4CW_pt54UEmy_SB1u1MOEJlKqM7_R7E,1869
|
|
36
|
+
buildlog/seed_engine/categorizers.py,sha256=uzatJQPG4Vf7z7ZAeyQbL-bVJ8cUKBHG-3U93-BFIRQ,4649
|
|
37
|
+
buildlog/seed_engine/extractors.py,sha256=rkztg62LzFH018ob5Tl1eFp_yfPo8syn3Ib4h6bAyK4,4824
|
|
38
|
+
buildlog/seed_engine/generators.py,sha256=T3N3uHg359xSBypIGmvVWYI0Qh8WLlGIFQWX0_gs0I4,4358
|
|
39
|
+
buildlog/seed_engine/models.py,sha256=qESSuoF3CJy8pp96E3Vmb38V-snzeaW0Xg0RfbH8v1U,3418
|
|
40
|
+
buildlog/seed_engine/pipeline.py,sha256=wLdcjyA_B4wFEb2iKwRCUGkX-oaVu9OXIcmLcEsJN6s,6527
|
|
41
|
+
buildlog/seed_engine/sources.py,sha256=8j9oUFZCSKMr5VpIuAxTPY3wTzfTEmw6M_41_aismiE,11184
|
|
42
|
+
buildlog-0.8.0.data/data/share/buildlog/copier.yml,sha256=hD_UcLGB9eDxTGkWjHAvUoiqQKhLC0w3G-kPKX_p43I,802
|
|
43
|
+
buildlog-0.8.0.data/data/share/buildlog/post_gen.py,sha256=XFlo40LuPpAsBhIRRRtHqvU3_5POss4L401hp35ijhw,1744
|
|
44
|
+
buildlog-0.8.0.data/data/share/buildlog/template/buildlog/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
+
buildlog-0.8.0.data/data/share/buildlog/template/buildlog/2026-01-01-example.md,sha256=7x9sKmydfmfKyNz9hV7MtYnQJuBwbxNanbPOcpQDDZQ,7040
|
|
46
|
+
buildlog-0.8.0.data/data/share/buildlog/template/buildlog/BUILDLOG_SYSTEM.md,sha256=osclytWwl5jUiTgSpuT4cT3h3oPvCkZ5GPCnFuJZNcY,3802
|
|
47
|
+
buildlog-0.8.0.data/data/share/buildlog/template/buildlog/_TEMPLATE.md,sha256=CUvxgcx1-9XT_EdQ8e_vnuPq_h-u1uhXJgForJU2Pso,2932
|
|
48
|
+
buildlog-0.8.0.data/data/share/buildlog/template/buildlog/_TEMPLATE_QUICK.md,sha256=eUr5MiqLsM6drV7rAq53R1SLkK8G7LkMAUjWKXx81IA,409
|
|
49
|
+
buildlog-0.8.0.data/data/share/buildlog/template/buildlog/assets/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
buildlog-0.8.0.dist-info/METADATA,sha256=JNxWkxamVUmEeEQ9vz56j4lzZwex35sJyUngqytW6c4,7032
|
|
51
|
+
buildlog-0.8.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
52
|
+
buildlog-0.8.0.dist-info/entry_points.txt,sha256=BMFclPOomp_sgaa0OqBg6LfqCMlqzjZV88ww5TrPPoo,87
|
|
53
|
+
buildlog-0.8.0.dist-info/licenses/LICENSE,sha256=fAgt-akug9nAwIj6M-SIf8u3ck-T7pJTwfmy9vWYASk,1074
|
|
54
|
+
buildlog-0.8.0.dist-info/RECORD,,
|