@jetrabbits/agentic 0.2.0 → 0.3.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.md CHANGED
@@ -70,18 +70,9 @@ Cross-cutting practices that apply to every project regardless of area.
70
70
  - Create or update the relevant `docs/` artifact in the same change set; do not leave behavior changes documented only in workflow outputs, tickets, or PR comments.
71
71
  - Apply the `product-owner` role to confirm that docs describe the user-facing behavior, acceptance criteria, and operational constraints of the change.
72
72
 
73
- ### Context7 Knowledge Source
73
+ ### MCP Memory Providers
74
74
 
75
- - Use Context7 for framework, library, SDK, API, and setup documentation before relying on model memory.
76
- - Resolve the library or framework identity first, then request focused docs for the exact task and version when version matters.
77
- - If Context7 is unavailable, state that explicitly and fall back to local docs or official project documentation.
78
-
79
- ### MemPalace + Context Strategy
80
-
81
- - If MemPalace MCP is enabled and available, load project business/domain context from MemPalace first.
82
- - If Context7 MCP is enabled and available, use it specifically for framework/library/API documentation.
83
- - If both are available, combine them: MemPalace for project/business knowledge, Context7 for framework-level references.
84
- - If MCP providers are unavailable, continue with standard local-repo discovery and context-building as fallback.
75
+ See [MEMORY.md](MEMORY.md) for the full protocol: provider roles, Context7 usage, MemPalace session-start queries, fact-writing triggers, tool call examples, and fallback order.
85
76
 
86
77
  ### Code Style
87
78
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.3.0
4
+
5
+ - Added per-agent doctor timeouts with elapsed-time and exit-status logging while keeping install non-fatal.
6
+ - Replaced the OpenCode model checker with `agent-model-mapper` for explicit role-to-model mapping.
7
+ - Moved `agent-model-mapper` prompts to install time so OpenCode startup stays non-blocking.
8
+ - Removed the interactive Context7 API-key prompt and made OpenCode MemPalace project initialization optional/manual.
9
+ - Changed Telegram notifications to read credentials from environment variables only and avoid logging secrets.
10
+ - Added traced shell coverage tooling with a 90% `agentic` line coverage gate.
11
+ - Added deterministic OpenCode plugin, Telegram, and doctor timeout continuation tests.
12
+ - Added real Codex, OpenCode, and Telegram blackbox scenarios to normal `make test`.
13
+
3
14
  ## v0.2.0
4
15
 
5
16
  - Added `agentic --version` and version display in CLI/TUI output.
package/MEMORY.md ADDED
@@ -0,0 +1,113 @@
1
+ # MEMORY — MCP context providers
2
+
3
+ Guidance for using MemPalace and Context7 MCP servers across all agent sessions.
4
+
5
+ ---
6
+
7
+ ## Provider roles
8
+
9
+ | Provider | Purpose |
10
+ |---|---|
11
+ | **MemPalace** | Project-specific knowledge: architecture decisions, domain rules, conventions, known issues, integration contracts |
12
+ | **Context7** | Framework, library, SDK, and API reference documentation |
13
+
14
+ Use both when available. They are complementary, not interchangeable.
15
+
16
+ ---
17
+
18
+ ## Context7
19
+
20
+ - Use Context7 for framework, library, SDK, API, and setup documentation before relying on model memory.
21
+ - Resolve the library or framework identity first, then request focused docs for the exact task and version when version matters.
22
+ - If Context7 is unavailable, state that explicitly and fall back to local docs or official project documentation.
23
+
24
+ ---
25
+
26
+ ## MemPalace
27
+
28
+ ### Loading context — session start
29
+
30
+ Query MemPalace **before** reading any source files. Orientation queries to run at the start of every session:
31
+
32
+ ```
33
+ mempalace_search({ "query": "project architecture decisions" })
34
+ mempalace_search({ "query": "domain entities and relationships" })
35
+ mempalace_search({ "query": "known constraints and non-negotiables" })
36
+ ```
37
+
38
+ Before touching any subsystem, query for accumulated knowledge about it:
39
+
40
+ ```
41
+ mempalace_search({ "query": "<module or service name> design decisions" })
42
+ mempalace_search({ "query": "<module or service name> known issues" })
43
+ ```
44
+
45
+ ### Writing facts — when to store
46
+
47
+ Store a fact **immediately** when you discover or confirm any of the following. Do not wait until the end of the session — subsequent steps in the same session benefit from facts stored earlier.
48
+
49
+ | Trigger | What to store |
50
+ |---|---|
51
+ | Architecture decision made or confirmed | Decision, alternatives considered, rationale |
52
+ | Non-obvious module dependency or integration point | What connects to what and why |
53
+ | Business rule or domain constraint clarified | The rule in plain language, where it is enforced |
54
+ | Recurring bug pattern or root cause identified | Pattern description, affected area, mitigation |
55
+ | API contract or data shape locked down | Shape, version, owning service |
56
+ | Performance characteristic or known bottleneck noted | Where, measured or estimated, relevant thresholds |
57
+ | Convention or team agreement not captured in docs | The agreement and its scope |
58
+ | Environment or deployment constraint discovered | What the constraint is and which target it affects |
59
+
60
+ ### Writing facts — examples
61
+
62
+ ```
63
+ mempalace_store({
64
+ "type": "architecture_decision",
65
+ "title": "Auth uses JWT with 15-min expiry, refresh via Redis",
66
+ "body": "Decided in task TASK-88. Rationale: stateless verification at API gateway; Redis holds refresh token allowlist for revocation support.",
67
+ "tags": ["auth", "jwt", "redis", "architecture"]
68
+ })
69
+ ```
70
+
71
+ ```
72
+ mempalace_store({
73
+ "type": "domain_rule",
74
+ "title": "Orders cannot transition from CANCELLED back to any active state",
75
+ "body": "Enforced in OrderStateMachine.apply(). No UI path or API endpoint bypasses this; confirmed with product owner in TASK-102.",
76
+ "tags": ["orders", "state-machine", "domain-rule"]
77
+ })
78
+ ```
79
+
80
+ ```
81
+ mempalace_store({
82
+ "type": "known_issue",
83
+ "title": "ReportService N+1 on invoice line items — not yet fixed",
84
+ "body": "Affects reports with >50 invoices. Tracked in TASK-119. Workaround: batch fetch via InvoiceRepository.findByReportId().",
85
+ "tags": ["reporting", "performance", "n+1"]
86
+ })
87
+ ```
88
+
89
+ ```
90
+ mempalace_store({
91
+ "type": "convention",
92
+ "title": "Feature flags go through FeatureToggleService — no direct env checks in domain code",
93
+ "body": "Established to keep domain layer portable. All flag reads must go through FeatureToggleService.isEnabled(flag, context).",
94
+ "tags": ["conventions", "feature-flags"]
95
+ })
96
+ ```
97
+
98
+ ### Quality bar for stored facts
99
+
100
+ - **Concrete, not vague.** "Auth uses JWT" is a fact. "Auth is secure" is not.
101
+ - **Self-contained.** The fact must make sense without the surrounding chat context.
102
+ - **Tagged for retrieval.** Include module names, domain nouns, and problem-type tags.
103
+ - **One fact per store call.** Do not bundle multiple unrelated facts into one entry.
104
+
105
+ ---
106
+
107
+ ## Fallback order
108
+
109
+ When MCP providers are unavailable, fall back in this order:
110
+
111
+ 1. Local `docs/**` in the project repository
112
+ 2. Official upstream documentation
113
+ 3. Model knowledge (least preferred — state explicitly when used)
package/Makefile CHANGED
@@ -1,4 +1,4 @@
1
- .PHONY: help install dev test test-cli test-tui test-cross test-doctor test-markers test-real-agent-doctor lint fmt clean build assess-areas
1
+ .PHONY: help install dev test test-cli test-tui test-cross test-doctor test-markers test-opencode-plugins test-telegram-plugin test-real-agent-doctor test-real-blackbox test-real-opencode-mapper test-coverage lint fmt clean build assess-areas
2
2
 
3
3
  help:
4
4
  @printf '%s\n' \
@@ -11,7 +11,12 @@ help:
11
11
  " test-cross Run cross-mode end-to-end tests" \
12
12
  " test-doctor Run deterministic doctor end-to-end tests" \
13
13
  " test-markers Run generated marker and idempotency tests" \
14
- " test-real-agent-doctor Run opt-in real agent doctor checks" \
14
+ " test-opencode-plugins Run OpenCode plugin deterministic tests" \
15
+ " test-telegram-plugin Run Telegram plugin deterministic tests" \
16
+ " test-real-agent-doctor Run real agent doctor checks" \
17
+ " test-real-blackbox Run real Codex/OpenCode/Telegram blackbox tests" \
18
+ " test-real-opencode-mapper Run real OpenCode mapper input blackbox" \
19
+ " test-coverage Run traced e2e coverage for agentic" \
15
20
  " lint Run prompt and catalog validation" \
16
21
  " fmt Check formatting hooks placeholder" \
17
22
  " clean Remove generated reports" \
@@ -30,6 +35,10 @@ test:
30
35
  bash tests/e2e/cross.e2e.sh
31
36
  bash tests/e2e/doctor.e2e.sh
32
37
  bash tests/e2e/markers.e2e.sh
38
+ bash tests/e2e/opencode_plugins.e2e.sh
39
+ bash tests/e2e/telegram_plugin.e2e.sh
40
+ bash tests/e2e/real_agent_blackbox.e2e.sh
41
+ $(MAKE) test-coverage
33
42
 
34
43
  test-cli:
35
44
  bash tests/e2e/cli.e2e.sh
@@ -46,9 +55,24 @@ test-doctor:
46
55
  test-markers:
47
56
  bash tests/e2e/markers.e2e.sh
48
57
 
58
+ test-opencode-plugins:
59
+ bash tests/e2e/opencode_plugins.e2e.sh
60
+
61
+ test-telegram-plugin:
62
+ bash tests/e2e/telegram_plugin.e2e.sh
63
+
49
64
  test-real-agent-doctor:
50
65
  bash tests/e2e/real_agent_doctor.e2e.sh
51
66
 
67
+ test-real-blackbox:
68
+ bash tests/e2e/real_agent_blackbox.e2e.sh
69
+
70
+ test-real-opencode-mapper:
71
+ AGENTIC_REAL_BLACKBOX_ONLY=opencode-mapper bash tests/e2e/real_agent_blackbox.e2e.sh
72
+
73
+ test-coverage:
74
+ AGENTIC_COVERAGE_TRACE_FILE=$$(mktemp /tmp/agentic-coverage.XXXXXX) bash -c 'AGENTIC_TEST_CLI="$(CURDIR)/tests/e2e/coverage_shim.sh" bash tests/e2e/agentic.e2e.sh >/tmp/agentic-coverage-agentic.log 2>&1 && AGENTIC_TEST_CLI="$(CURDIR)/tests/e2e/coverage_shim.sh" bash tests/e2e/tui.e2e.sh >/tmp/agentic-coverage-tui.log 2>&1 && AGENTIC_TEST_CLI="$(CURDIR)/tests/e2e/coverage_shim.sh" bash tests/e2e/cross.e2e.sh >/tmp/agentic-coverage-cross.log 2>&1 && AGENTIC_TEST_CLI="$(CURDIR)/tests/e2e/coverage_shim.sh" bash tests/e2e/markers.e2e.sh >/tmp/agentic-coverage-markers.log 2>&1 && AGENTIC_TEST_CLI="$(CURDIR)/tests/e2e/coverage_shim.sh" bash tests/e2e/cli.e2e.sh >/tmp/agentic-coverage-cli.log 2>&1 && AGENTIC_TEST_CLI="$(CURDIR)/tests/e2e/coverage_shim.sh" bash tests/e2e/doctor.e2e.sh >/tmp/agentic-coverage-doctor.log 2>&1 && bash tests/e2e/coverage_parse.sh "$$AGENTIC_COVERAGE_TRACE_FILE"'
75
+
52
76
  lint:
53
77
  bash -n agentic
54
78
  python3 -m py_compile scripts/build_docs_catalog.py scripts/lint_prompts.py scripts/assess_area_quality.py
package/README.md CHANGED
@@ -191,8 +191,8 @@ project/.agent/
191
191
 
192
192
  - `telegram-opencode-notifier`: sends Telegram notifications when an OpenCode session becomes idle, including the final
193
193
  response or an attachment for long output.
194
- - `llm-quota-checker`: probes configured OpenCode models, reports available/failed models, and updates subagent model
195
- settings to a working model.
194
+ - `agent-model-mapper`: maps `.opencode/agents/*.md` roles to main and fallback OpenCode models during interactive
195
+ `agentic install`/`agentic tui`. OpenCode startup never prompts or writes project files.
196
196
 
197
197
  ---
198
198