@memnexus-ai/mx-agent-cli 0.1.165 → 0.1.167
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/__tests__/claude-md-compose.test.d.ts +16 -0
- package/dist/__tests__/claude-md-compose.test.d.ts.map +1 -0
- package/dist/__tests__/claude-md-compose.test.js +116 -0
- package/dist/__tests__/claude-md-compose.test.js.map +1 -0
- package/dist/__tests__/claude-sync.test.js +15 -0
- package/dist/__tests__/claude-sync.test.js.map +1 -1
- package/dist/__tests__/config-generation.test.d.ts +7 -0
- package/dist/__tests__/config-generation.test.d.ts.map +1 -0
- package/dist/__tests__/config-generation.test.js +141 -0
- package/dist/__tests__/config-generation.test.js.map +1 -0
- package/dist/__tests__/config-sync.test.d.ts +10 -0
- package/dist/__tests__/config-sync.test.d.ts.map +1 -0
- package/dist/__tests__/config-sync.test.js +180 -0
- package/dist/__tests__/config-sync.test.js.map +1 -0
- package/dist/__tests__/project-config.test.js +1 -0
- package/dist/__tests__/project-config.test.js.map +1 -1
- package/dist/agent-config/.mx-config-generation.json +4 -0
- package/dist/agent-config/CLAUDE.md.template +140 -0
- package/dist/agent-config/OWNERS.md +51 -0
- package/dist/agent-config/agents/bar-raiser.md +205 -0
- package/dist/agent-config/agents/dogfood-auditor.md +243 -0
- package/dist/agent-config/agents/git-expert.md +380 -0
- package/dist/agent-config/agents/implementation-engineer.md +387 -0
- package/dist/agent-config/agents/memory-creator.md +330 -0
- package/dist/agent-config/agents/prd-writer.md +478 -0
- package/dist/agent-config/agents/prfaq-writer.md +344 -0
- package/dist/agent-config/agents/prior-art-researcher.md +264 -0
- package/dist/agent-config/agents/qa-tester.md +406 -0
- package/dist/agent-config/agents/red-team.md +330 -0
- package/dist/agent-config/agents/security-reviewer.md +300 -0
- package/dist/agent-config/agents/status-reporter.md +297 -0
- package/dist/agent-config/claude-md/CLAUDE.core.md +105 -0
- package/dist/agent-config/claude-md/CLAUDE.overlay.memnexus.md +68 -0
- package/dist/agent-config/claude-md/compose.mjs +179 -0
- package/dist/agent-config/claude-md/vars.memnexus.json +4 -0
- package/dist/agent-config/hooks/auto-capture-precompact.sh +176 -0
- package/dist/agent-config/hooks/auto-capture-session-end.sh +178 -0
- package/dist/agent-config/hooks/auto-checkpoint.sh +102 -0
- package/dist/agent-config/hooks/ci-validate-hook.sh +499 -0
- package/dist/agent-config/hooks/ci-validate-routes.conf +16 -0
- package/dist/agent-config/hooks/delegation-audit.sh +61 -0
- package/dist/agent-config/hooks/deploy-verification-reminder.sh +179 -0
- package/dist/agent-config/hooks/git-mutation-guard.sh +219 -0
- package/dist/agent-config/hooks/iteration-log-check.sh +212 -0
- package/dist/agent-config/hooks/memory-checkpoint-reminder.sh +103 -0
- package/dist/agent-config/hooks/mx-guard-hook.sh +77 -0
- package/dist/agent-config/hooks/named-memory-write-guard.sh +237 -0
- package/dist/agent-config/hooks/reload-checkpoint.sh +68 -0
- package/dist/agent-config/hooks/set-terminal-appearance.sh +34 -0
- package/dist/agent-config/hooks/workflow-dispatch-guard.sh +184 -0
- package/dist/agent-config/hooks/worktree-guard.sh +258 -0
- package/dist/agent-config/rules/eval-harness.md +33 -0
- package/dist/agent-config/rules/frontend.md +17 -0
- package/dist/agent-config/rules/mcp-protocol.md +15 -0
- package/dist/agent-config/rules/retrieval.md +17 -0
- package/dist/agent-config/settings.json +196 -0
- package/dist/agent-config/shared/eval-tiered-rigor.md +15 -0
- package/dist/agent-config/shared/team-operating-rules.md +37 -0
- package/dist/agent-config/skills/eval-claim-impact/SKILL.md +20 -0
- package/dist/agent-config/skills/eval-harness-review/SKILL.md +21 -0
- package/dist/agent-config/skills/mx-checkpoint/SKILL.md +111 -0
- package/dist/agent-config/skills/mx-fix-pr/SKILL.md +90 -0
- package/dist/agent-config/skills/mx-gap-assessment/SKILL.md +90 -0
- package/dist/agent-config/skills/mx-iteration-close/SKILL.md +81 -0
- package/dist/agent-config/skills/mx-post-merge-sync/SKILL.md +83 -0
- package/dist/agent-config/skills/mx-pre-pr-check/SKILL.md +85 -0
- package/dist/agent-config/skills/mx-save/SKILL.md +102 -0
- package/dist/agent-config/skills/mx-session-start/SKILL.md +85 -0
- package/dist/agent-config/skills/team-gate-checklist/SKILL.md +19 -0
- package/dist/commands/config-sync.d.ts +39 -0
- package/dist/commands/config-sync.d.ts.map +1 -0
- package/dist/commands/config-sync.js +212 -0
- package/dist/commands/config-sync.js.map +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +3 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +12 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +6 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/bundled-config.d.ts +44 -0
- package/dist/lib/bundled-config.d.ts.map +1 -0
- package/dist/lib/bundled-config.js +164 -0
- package/dist/lib/bundled-config.js.map +1 -0
- package/dist/lib/claude.d.ts.map +1 -1
- package/dist/lib/claude.js +9 -3
- package/dist/lib/claude.js.map +1 -1
- package/dist/lib/config-generation.d.ts +36 -0
- package/dist/lib/config-generation.d.ts.map +1 -0
- package/dist/lib/config-generation.js +73 -0
- package/dist/lib/config-generation.js.map +1 -0
- package/dist/lib/project-config.d.ts +7 -0
- package/dist/lib/project-config.d.ts.map +1 -1
- package/dist/lib/project-config.js +4 -0
- package/dist/lib/project-config.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mx-post-merge-sync
|
|
3
|
+
description: Sync worktree branch after a PR is squash-merged to main. Use immediately after every PR merge — do not start new work before running this.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
After a squash merge, ALL branch commits are on main as a single squash commit. The branch's original commits are redundant. Use `reset --hard` (not rebase) to sync — it's idempotent and safe to repeat.
|
|
7
|
+
|
|
8
|
+
## Step 1: Sync Branch
|
|
9
|
+
|
|
10
|
+
> **WARNING: the stash stack is shared across ALL worktrees** (`refs/stash` is
|
|
11
|
+
> repository-global). Never operate positionally (`git stash pop` /
|
|
12
|
+
> `git stash pop stash@{0}` / `git stash drop stash@{n}`) — the index you
|
|
13
|
+
> resolve can point at another worktree's entry after a concurrent stash op
|
|
14
|
+
> (a time-of-check/time-of-use race). Address your own entry by its commit SHA.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# GIT_EXPERT=1 prefixes below are DELIBERATE: git-mutation-guard blocks
|
|
18
|
+
# `git stash push/apply/drop` and `git reset --hard` to prevent accidental
|
|
19
|
+
# work loss in this shared worktree. This is the one sanctioned, SHA-addressed
|
|
20
|
+
# flow that genuinely needs them, so each mutating call overrides the guard
|
|
21
|
+
# explicitly. Read-only calls (stash list, rev-parse, status, fetch) are not
|
|
22
|
+
# prefixed — the guard already lets them through.
|
|
23
|
+
#
|
|
24
|
+
# Only stash if the worktree is actually dirty. In the normal (clean) case,
|
|
25
|
+
# skip stashing entirely: a positional pop would restore a FOREIGN stash from
|
|
26
|
+
# another worktree, silently injecting its changes here.
|
|
27
|
+
WT="$(basename "$(git rev-parse --show-toplevel)")"
|
|
28
|
+
STASH_TOKEN="post-merge-sync-${WT}-$$-${RANDOM}${RANDOM}" # nonce guards against PID/name collisions
|
|
29
|
+
|
|
30
|
+
STASH_SHA=""
|
|
31
|
+
if [ -n "$(git status --porcelain)" ]; then
|
|
32
|
+
GIT_EXPERT=1 git stash push -m "$STASH_TOKEN"
|
|
33
|
+
# Capture the stash's immutable commit SHA now — restore by SHA, not by index.
|
|
34
|
+
STASH_SHA="$(git rev-parse 'stash@{0}')"
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# Reset to main (idempotent — safe to repeat). GIT_EXPERT=1: sanctioned
|
|
38
|
+
# post-merge-sync reset, deliberate override of git-mutation-guard.
|
|
39
|
+
git fetch origin main
|
|
40
|
+
GIT_EXPERT=1 git reset --hard origin/main
|
|
41
|
+
|
|
42
|
+
# Restore ONLY our own stash, addressed by SHA — never a positional pop.
|
|
43
|
+
if [ -n "$STASH_SHA" ]; then
|
|
44
|
+
if GIT_EXPERT=1 git stash apply "$STASH_SHA"; then
|
|
45
|
+
# Drop our entry by re-locating the SHA immediately before dropping, so the
|
|
46
|
+
# index we drop is the one holding our SHA right now — never stash@{n}.
|
|
47
|
+
REF="$(git stash list --format='%gd %H' | awk -v sha="$STASH_SHA" '$2==sha{print $1; exit}')"
|
|
48
|
+
if [ -n "$REF" ]; then
|
|
49
|
+
GIT_EXPERT=1 git stash drop "$REF"
|
|
50
|
+
else
|
|
51
|
+
echo "WARN: applied stash $STASH_SHA but its ref vanished before drop — skipping drop."
|
|
52
|
+
fi
|
|
53
|
+
else
|
|
54
|
+
echo "WARN: could not restore own stash $STASH_SHA — another process may have dropped it."
|
|
55
|
+
echo " Recover manually: git stash list --format='%gd %H'"
|
|
56
|
+
fi
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# Verify: must return 0
|
|
60
|
+
git rev-list --count HEAD..origin/main
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
If verification returns non-zero, run `git fetch origin main && GIT_EXPERT=1 git reset --hard origin/main` again (GIT_EXPERT=1: sanctioned override of git-mutation-guard, as above).
|
|
64
|
+
|
|
65
|
+
## Step 2: Verify Deployment
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
gh pr view <PR-number> --json mergeCommit --jq '.mergeCommit.oid'
|
|
69
|
+
gh run list --commit <sha> --json status,conclusion,name --jq '.[]'
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- If pipeline is running, wait for it
|
|
73
|
+
- If pipeline failed, read logs with `gh run view <run-id> --log-failed` and fix
|
|
74
|
+
- For CLI changes: `npm view @memnexus-ai/mx-agent-cli version` to confirm publish
|
|
75
|
+
- For service changes: confirm deploy workflow conclusion is `success`
|
|
76
|
+
|
|
77
|
+
**Do not start new work until deploy is verified.**
|
|
78
|
+
|
|
79
|
+
## Step 3: Save Checkpoint
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
mx memories create --conversation-id "<conv_id>" --content "PR #NNN merged + deployed. [result]. Next: [next step]." --topics "<component>,completed"
|
|
83
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mx-pre-pr-check
|
|
3
|
+
description: Verify the branch is clean and ready before creating a PR. Use before every gh pr create.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
A PR created from a dirty branch wastes CI resources and blocks the queue. 2 minutes of pre-PR checks saves 20 minutes of debugging later.
|
|
7
|
+
|
|
8
|
+
Run this checklist before every `gh pr create`.
|
|
9
|
+
|
|
10
|
+
## Step 1: Rebase on Main
|
|
11
|
+
|
|
12
|
+
Delegate to Git Expert (`.claude/agents/git-expert.md`) to ensure the branch is rebased on latest main:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
git fetch origin main && git rebase origin/main
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
If there are conflicts, the Git Expert resolves them. Wait for completion.
|
|
19
|
+
|
|
20
|
+
## Step 2: Check for Uncommitted Changes
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
git status
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- **Changes that should be committed:** Stage and commit them now.
|
|
27
|
+
- **Unrelated changes:** Stash them — `git stash --include-untracked`.
|
|
28
|
+
- **Clean working tree:** Proceed.
|
|
29
|
+
|
|
30
|
+
## Step 3: Verify Commits Ahead of Main
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
git log --oneline origin/main..HEAD
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
If this is empty, there are no commits to PR. Something went wrong — check if you're on the right branch or if the commits were already merged.
|
|
37
|
+
|
|
38
|
+
## Step 4: Run Local Validation
|
|
39
|
+
|
|
40
|
+
Run the team-specific validation checks. Common ones:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# TypeScript projects
|
|
44
|
+
npm run typecheck
|
|
45
|
+
npm run lint
|
|
46
|
+
|
|
47
|
+
# If tests exist for changed files
|
|
48
|
+
npm test -- --relevant
|
|
49
|
+
|
|
50
|
+
# OpenAPI projects
|
|
51
|
+
npm run validate:openapi:local
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
All checks must pass locally before creating the PR. Fix any failures.
|
|
55
|
+
|
|
56
|
+
## Step 5: Review Commit History
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git log --oneline origin/main..HEAD
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Check for:
|
|
63
|
+
- **WIP commits** — squash or amend them into meaningful commits
|
|
64
|
+
- **Merge commits** — should not exist on a rebased branch; if present, re-rebase
|
|
65
|
+
- **Clear commit messages** — each commit should describe what and why
|
|
66
|
+
|
|
67
|
+
## Step 6: Confirm Readiness
|
|
68
|
+
|
|
69
|
+
All of the following must be true:
|
|
70
|
+
|
|
71
|
+
- [ ] Branch is rebased on latest `origin/main`
|
|
72
|
+
- [ ] No uncommitted changes (clean `git status`)
|
|
73
|
+
- [ ] At least one commit ahead of main
|
|
74
|
+
- [ ] Local validation passes (typecheck, lint, tests)
|
|
75
|
+
- [ ] Commit history is clean (no WIP, no merge commits)
|
|
76
|
+
|
|
77
|
+
If all checks pass, proceed to create the PR.
|
|
78
|
+
|
|
79
|
+
## Step 7: Create the PR
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
gh pr create --title "<title>" --body "<description>"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
After creation, monitor the first CI run: `gh pr checks <number>`. If it fails, use `/fix-pr` to diagnose.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mx-save
|
|
3
|
+
description: "Quick memory snapshot — auto-detects current work context and saves a concise memory with conversation tracking. Use after completing tasks, fixing bugs, or making decisions."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
version: "1.7.158"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Quick Save Memory
|
|
9
|
+
|
|
10
|
+
You are helping quickly save a progress memory. Be fast and direct — this is NOT the interactive `/mx-checkpoint` command.
|
|
11
|
+
|
|
12
|
+
## Steps
|
|
13
|
+
|
|
14
|
+
1. Gather minimal context from the user (what they just did)
|
|
15
|
+
2. Generate the memory content
|
|
16
|
+
3. Save the memory immediately
|
|
17
|
+
|
|
18
|
+
## What to Ask
|
|
19
|
+
|
|
20
|
+
Ask ONE question: **"What did you just complete or accomplish?"**
|
|
21
|
+
|
|
22
|
+
If the user already described the work in their message, skip asking and go straight to generating the memory.
|
|
23
|
+
|
|
24
|
+
## Auto-Detect Context
|
|
25
|
+
|
|
26
|
+
From the conversation context, automatically determine:
|
|
27
|
+
- **Component(s) touched** — which project area
|
|
28
|
+
- **Type of work** — implementation, bug fix, refactor, configuration, etc.
|
|
29
|
+
- **Files modified** — from recent tool calls
|
|
30
|
+
- **Issue numbers** — from conversation context
|
|
31
|
+
- **Commit hashes** — from recent git operations
|
|
32
|
+
|
|
33
|
+
## Memory Content Format
|
|
34
|
+
|
|
35
|
+
Keep it concise but complete:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
[Brief summary of what was done]
|
|
39
|
+
|
|
40
|
+
Details:
|
|
41
|
+
- [Specific change 1]
|
|
42
|
+
- [Specific change 2]
|
|
43
|
+
- [Specific change 3]
|
|
44
|
+
|
|
45
|
+
Files: [list key files modified]
|
|
46
|
+
Issue: #[number if applicable]
|
|
47
|
+
Commit: [hash if available]
|
|
48
|
+
|
|
49
|
+
Key decision: [if a notable decision was made]
|
|
50
|
+
Next: [obvious next step if any]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Topic Selection
|
|
54
|
+
|
|
55
|
+
Auto-select 4-6 topics. Only add manual topics for:
|
|
56
|
+
- **Status**: `completed`, `in-progress`, `blocked`
|
|
57
|
+
- **Component**: project-specific component names
|
|
58
|
+
|
|
59
|
+
Other topics (technologies, activities) are auto-extracted from well-written content.
|
|
60
|
+
|
|
61
|
+
## Conversation Tracking
|
|
62
|
+
|
|
63
|
+
1. **Check if you already have a conversation ID** from earlier in this session
|
|
64
|
+
2. **If yes** → reuse it
|
|
65
|
+
3. **If no (first memory)** → use conversationId: "NEW"
|
|
66
|
+
4. **Parse the response** → capture the conv_xxx ID for follow-up memories
|
|
67
|
+
5. **New topic?** → use "NEW" again
|
|
68
|
+
|
|
69
|
+
## How to Save
|
|
70
|
+
|
|
71
|
+
**Prefer MCP tools** (available when MemNexus MCP server is connected):
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
create_memory({
|
|
75
|
+
content: "YOUR GENERATED CONTENT",
|
|
76
|
+
conversationId: "<ID or NEW>",
|
|
77
|
+
topics: ["topic1", "topic2"]
|
|
78
|
+
})
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Fallback to CLI** (if MCP tools are not available):
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
mx memories create \
|
|
85
|
+
--conversation-id "<ID or NEW>" \
|
|
86
|
+
--content "YOUR GENERATED CONTENT" \
|
|
87
|
+
--topics "topic1,topic2"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## After Saving
|
|
91
|
+
|
|
92
|
+
Report back:
|
|
93
|
+
- Memory ID created
|
|
94
|
+
- Brief confirmation of what was saved
|
|
95
|
+
- The conversation ID (so it can be reused)
|
|
96
|
+
|
|
97
|
+
## Important Rules
|
|
98
|
+
|
|
99
|
+
1. **Be fast** — don't ask unnecessary questions
|
|
100
|
+
2. **Auto-detect** — use conversation context to fill in details
|
|
101
|
+
3. **Save immediately** — execute the save, don't just show the command
|
|
102
|
+
4. **Track conversations** — reuse conversation IDs within a session
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mx-session-start
|
|
3
|
+
description: Initialize a new session with the full startup checklist. Use at the beginning of every session — first start, restart, or after context compaction.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Run this checklist at the start of every session. Do not skip steps. Do not reorder.
|
|
7
|
+
|
|
8
|
+
## Step 1: Rebase Worktree onto Main
|
|
9
|
+
|
|
10
|
+
Delegate to Git Expert (`.claude/agents/git-expert.md`) to rebase the worktree branch onto `origin/main` and force-push.
|
|
11
|
+
|
|
12
|
+
**Wait for the Git Expert to complete before proceeding.**
|
|
13
|
+
|
|
14
|
+
> The Git Expert delegation in step 1 is mandatory. Do NOT run git rebase/push commands directly.
|
|
15
|
+
|
|
16
|
+
## Step 2: Build Context
|
|
17
|
+
|
|
18
|
+
Run `build_context` with your team's focus area and key files from your roleguide. Read the full briefing before continuing.
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
build_context({ context: "<team focus area>", files: ["<key file paths from roleguide>"] })
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Step 3: Load Named Memories
|
|
25
|
+
|
|
26
|
+
Load the three core state memories. Named-memory keys are `<product-slug>-<team>-<type>`:
|
|
27
|
+
replace `<team>` with your actual team slug (e.g., `extraction`) and `<product-slug>` with the
|
|
28
|
+
`projectSlug` from `mx-agent.config.json` — **in this repository it is `memnexus`** (so
|
|
29
|
+
`<product-slug>-<team>-leader-state` resolves to e.g. `memnexus-extraction-leader-state`).
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
get_memory({ name: "<product-slug>-<team>-leader-state" })
|
|
33
|
+
get_memory({ name: "<product-slug>-<team>-iteration-log" })
|
|
34
|
+
get_memory({ name: "<product-slug>-<team>-known-issues" })
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Step 4: Load Team Metrics
|
|
38
|
+
|
|
39
|
+
Load team-specific metrics memory if it exists:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
get_memory({ name: "<product-slug>-<team>-metrics" })
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If it returns 404, skip — not all teams track metrics in a named memory.
|
|
46
|
+
|
|
47
|
+
## Step 5: Search Recent Work
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
search_memories({ query: "<team focus area>", recent: "7d" })
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Review recent activity for anything that affects the current session.
|
|
54
|
+
|
|
55
|
+
## Step 6: Check GitHub Issues
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
gh issue list --search "<team keywords>" --state open --limit 20
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Note any P1/P2 issues that may override planned work.
|
|
62
|
+
|
|
63
|
+
## Step 7: Check Cross-Team Escalations
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
get_memory({ name: "memnexus-cross-team-escalations" })
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
If there are escalations routed to your team, they take priority over planned iteration work.
|
|
70
|
+
|
|
71
|
+
## Step 8: Resume or Start
|
|
72
|
+
|
|
73
|
+
- **If resuming:** Continue from the position recorded in `leader-state`. Pick up where you left off.
|
|
74
|
+
- **If first session:** Start at Step 1 of your team's improvement loop as defined in the roleguide.
|
|
75
|
+
|
|
76
|
+
## Step 9: Update Leader State
|
|
77
|
+
|
|
78
|
+
Update `leader-state` immediately with the current session context:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
# <product-slug> = memnexus in this repo, e.g. memnexus-<team>-leader-state
|
|
82
|
+
manage_memory({ name: "<product-slug>-<team>-leader-state", action: "update", content: "Session started <date>. Resuming iteration N, step M. Context: ..." })
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
This ensures the next session (or restart) can pick up cleanly.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Team Gate Checklist
|
|
2
|
+
|
|
3
|
+
Use this skill before closing an iteration, opening a PR, merging a PR, or handing off a substantial task.
|
|
4
|
+
|
|
5
|
+
## Checklist
|
|
6
|
+
|
|
7
|
+
1. Confirm the assigned role guide was followed.
|
|
8
|
+
2. Confirm relevant specialists were activated or explain why they were not needed.
|
|
9
|
+
3. Confirm implementation and review happened in the assigned worktree, with no nested implementation worktree workflow.
|
|
10
|
+
4. Confirm tests, fixtures, replays, screenshots, or manual checks appropriate to the risk were completed.
|
|
11
|
+
5. Confirm hook output and command failures were interpreted from exit status and logs, not from noisy reminder text alone.
|
|
12
|
+
6. Confirm state memories, issue comments, or claim ledgers were updated when the work changed project knowledge.
|
|
13
|
+
7. List any unresolved risks before declaring the iteration complete.
|
|
14
|
+
|
|
15
|
+
## Required Output
|
|
16
|
+
|
|
17
|
+
- Gate status: pass, blocked, or pass with caveats.
|
|
18
|
+
- Evidence checked.
|
|
19
|
+
- Unresolved risks.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mx-agent config-sync
|
|
3
|
+
*
|
|
4
|
+
* Update a project's committed agent-config from the config bundle the CLI ships
|
|
5
|
+
* with (Platform v2.35 Phase 3, #4017). Distribution channel for the portable
|
|
6
|
+
* agent-config: an external project that installed a newer CLI runs this to pull
|
|
7
|
+
* hook/agent/skill/template updates into its own configSource dir.
|
|
8
|
+
*
|
|
9
|
+
* Safety model (never silently overwrite local work):
|
|
10
|
+
* - Default is a DRY RUN — prints the plan, writes nothing. `--apply` writes.
|
|
11
|
+
* - File-level three-way: a per-file baseline (the bundle hash we last wrote,
|
|
12
|
+
* recorded in <configSource>/.mx-config-sync-state.json) is the common
|
|
13
|
+
* ancestor. A project file unchanged since the last sync updates cleanly; a
|
|
14
|
+
* locally-modified file is listed and SKIPPED unless --force.
|
|
15
|
+
* - Refuses to run on a dirty git tree unless --allow-dirty.
|
|
16
|
+
* - Writes go to the repo's configSource dir (respects mx-agent.config.json).
|
|
17
|
+
*
|
|
18
|
+
* For the MemNexus repo the bundle resolves to our own agent-config tree, so
|
|
19
|
+
* once this work is on main every file matches and the command reports
|
|
20
|
+
* everything in sync. (On a pre-merge branch, findProjectRoot resolves to the
|
|
21
|
+
* lagging /workspace main worktree, so a dry-run can legitimately show
|
|
22
|
+
* adds/edits until this merges.)
|
|
23
|
+
*/
|
|
24
|
+
export interface ConfigSyncOptions {
|
|
25
|
+
apply?: boolean;
|
|
26
|
+
force?: boolean;
|
|
27
|
+
allowDirty?: boolean;
|
|
28
|
+
}
|
|
29
|
+
type Action = 'add' | 'update' | 'unchanged' | 'skip-local';
|
|
30
|
+
/**
|
|
31
|
+
* Classify one bundle file against the project copy using the recorded baseline.
|
|
32
|
+
* ours = hash of the project's current file (null if absent)
|
|
33
|
+
* base = hash config-sync last wrote for this file (null if never/unknown)
|
|
34
|
+
* theirs = hash of the bundle file
|
|
35
|
+
*/
|
|
36
|
+
export declare function classifyFile(ours: string | null, base: string | null, theirs: string): Action;
|
|
37
|
+
export declare function runConfigSync(options?: ConfigSyncOptions): void;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=config-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-sync.d.ts","sourceRoot":"","sources":["../../src/commands/config-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAmBH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,KAAK,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AA0B5D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK7F;AAkBD,wBAAgB,aAAa,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI,CA8InE"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mx-agent config-sync
|
|
3
|
+
*
|
|
4
|
+
* Update a project's committed agent-config from the config bundle the CLI ships
|
|
5
|
+
* with (Platform v2.35 Phase 3, #4017). Distribution channel for the portable
|
|
6
|
+
* agent-config: an external project that installed a newer CLI runs this to pull
|
|
7
|
+
* hook/agent/skill/template updates into its own configSource dir.
|
|
8
|
+
*
|
|
9
|
+
* Safety model (never silently overwrite local work):
|
|
10
|
+
* - Default is a DRY RUN — prints the plan, writes nothing. `--apply` writes.
|
|
11
|
+
* - File-level three-way: a per-file baseline (the bundle hash we last wrote,
|
|
12
|
+
* recorded in <configSource>/.mx-config-sync-state.json) is the common
|
|
13
|
+
* ancestor. A project file unchanged since the last sync updates cleanly; a
|
|
14
|
+
* locally-modified file is listed and SKIPPED unless --force.
|
|
15
|
+
* - Refuses to run on a dirty git tree unless --allow-dirty.
|
|
16
|
+
* - Writes go to the repo's configSource dir (respects mx-agent.config.json).
|
|
17
|
+
*
|
|
18
|
+
* For the MemNexus repo the bundle resolves to our own agent-config tree, so
|
|
19
|
+
* once this work is on main every file matches and the command reports
|
|
20
|
+
* everything in sync. (On a pre-merge branch, findProjectRoot resolves to the
|
|
21
|
+
* lagging /workspace main worktree, so a dry-run can legitimately show
|
|
22
|
+
* adds/edits until this merges.)
|
|
23
|
+
*/
|
|
24
|
+
import { spawnSync } from 'child_process';
|
|
25
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
26
|
+
import { dirname, join } from 'path';
|
|
27
|
+
import chalk from 'chalk';
|
|
28
|
+
import { findProjectRoot } from '../lib/worktree.js';
|
|
29
|
+
import { loadProjectConfig, resolveProjectConfig } from '../lib/project-config.js';
|
|
30
|
+
import { getConfigValue, setConfigValue } from '../lib/config.js';
|
|
31
|
+
import { GENERATION_FILE, SYNC_STATE_FILE, getBundledConfigDir, hashConfigTree, hashFile, listConfigFiles, readGeneration, } from '../lib/bundled-config.js';
|
|
32
|
+
function loadSyncState(projectConfigDir) {
|
|
33
|
+
const p = join(projectConfigDir, SYNC_STATE_FILE);
|
|
34
|
+
if (!existsSync(p))
|
|
35
|
+
return { generation: null, files: {} };
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(readFileSync(p, 'utf-8'));
|
|
38
|
+
return {
|
|
39
|
+
generation: typeof parsed.generation === 'number' ? parsed.generation : null,
|
|
40
|
+
files: parsed.files && typeof parsed.files === 'object' ? parsed.files : {},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return { generation: null, files: {} };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Classify one bundle file against the project copy using the recorded baseline.
|
|
49
|
+
* ours = hash of the project's current file (null if absent)
|
|
50
|
+
* base = hash config-sync last wrote for this file (null if never/unknown)
|
|
51
|
+
* theirs = hash of the bundle file
|
|
52
|
+
*/
|
|
53
|
+
export function classifyFile(ours, base, theirs) {
|
|
54
|
+
if (ours === null)
|
|
55
|
+
return 'add';
|
|
56
|
+
if (ours === theirs)
|
|
57
|
+
return 'unchanged';
|
|
58
|
+
if (base !== null && ours === base)
|
|
59
|
+
return 'update'; // unchanged since last sync → clean update
|
|
60
|
+
return 'skip-local'; // differs from bundle and from baseline (or no baseline) → local edit
|
|
61
|
+
}
|
|
62
|
+
/** Is the whole working tree clean? Returns true when `git status` shows nothing. */
|
|
63
|
+
function isGitTreeClean(projectRoot) {
|
|
64
|
+
const r = spawnSync('git', ['status', '--porcelain'], {
|
|
65
|
+
cwd: projectRoot, encoding: 'utf-8', stdio: 'pipe',
|
|
66
|
+
});
|
|
67
|
+
if (r.status !== 0)
|
|
68
|
+
return true; // not a git repo / git error → don't block
|
|
69
|
+
return r.stdout.trim() === '';
|
|
70
|
+
}
|
|
71
|
+
const ACTION_LABEL = {
|
|
72
|
+
'add': chalk.green('+ add '),
|
|
73
|
+
'update': chalk.cyan('↑ update '),
|
|
74
|
+
'unchanged': chalk.dim('= unchanged '),
|
|
75
|
+
'skip-local': chalk.yellow('~ skip local'),
|
|
76
|
+
};
|
|
77
|
+
export function runConfigSync(options = {}) {
|
|
78
|
+
const apply = options.apply === true;
|
|
79
|
+
const force = options.force === true;
|
|
80
|
+
const allowDirty = options.allowDirty === true;
|
|
81
|
+
let projectRoot;
|
|
82
|
+
try {
|
|
83
|
+
projectRoot = findProjectRoot();
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
const cfg = resolveProjectConfig(loadProjectConfig(projectRoot));
|
|
90
|
+
const projectConfigDir = join(projectRoot, cfg.configSource);
|
|
91
|
+
const bundleDir = getBundledConfigDir();
|
|
92
|
+
if (!bundleDir) {
|
|
93
|
+
console.error(chalk.red('config-sync: no bundled agent-config found in this CLI build.'));
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
if (!existsSync(projectConfigDir)) {
|
|
97
|
+
console.error(chalk.red(`config-sync: project config dir not found: ${projectConfigDir}`));
|
|
98
|
+
console.error(chalk.dim(' Run `mx-agent init` first, or check mx-agent.config.json configSource.'));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
// Refuse on a dirty tree unless overridden — mixing sync writes with
|
|
102
|
+
// uncommitted work makes the change set unreviewable.
|
|
103
|
+
if (apply && !allowDirty && !isGitTreeClean(projectRoot)) {
|
|
104
|
+
console.error(chalk.red('config-sync: refusing to write — the working tree has uncommitted changes.'));
|
|
105
|
+
console.error(chalk.dim(' Commit or stash first, or pass --allow-dirty to proceed anyway.'));
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
const bundleGen = readGeneration(bundleDir);
|
|
109
|
+
const projectGen = readGeneration(projectConfigDir);
|
|
110
|
+
const state = loadSyncState(projectConfigDir);
|
|
111
|
+
const bundleHashes = hashConfigTree(bundleDir);
|
|
112
|
+
const bundleFiles = listConfigFiles(bundleDir);
|
|
113
|
+
const plans = [];
|
|
114
|
+
for (const rel of bundleFiles) {
|
|
115
|
+
const theirs = bundleHashes[rel];
|
|
116
|
+
const ours = existsSync(join(projectConfigDir, rel)) ? hashFile(join(projectConfigDir, rel)) : null;
|
|
117
|
+
const base = state.files[rel] ?? null;
|
|
118
|
+
plans.push({ rel, action: classifyFile(ours, base, theirs) });
|
|
119
|
+
}
|
|
120
|
+
const counts = { add: 0, update: 0, unchanged: 0, 'skip-local': 0 };
|
|
121
|
+
for (const p of plans)
|
|
122
|
+
counts[p.action]++;
|
|
123
|
+
// ── Report ──────────────────────────────────────────────────────────────
|
|
124
|
+
console.log();
|
|
125
|
+
console.log(chalk.cyan.bold(apply ? 'Config sync' : 'Config sync (dry run)'));
|
|
126
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
127
|
+
console.log(` ${chalk.bold('Project config:')} ${projectConfigDir}`);
|
|
128
|
+
console.log(` ${chalk.bold('Bundle:')} ${bundleDir}`);
|
|
129
|
+
console.log(` ${chalk.bold('Generation:')} project ${projectGen ?? '—'} → bundle ${bundleGen ?? '—'}`);
|
|
130
|
+
console.log();
|
|
131
|
+
// List everything except the (usually large) unchanged set.
|
|
132
|
+
const toShow = plans.filter(p => p.action !== 'unchanged');
|
|
133
|
+
if (toShow.length === 0) {
|
|
134
|
+
console.log(chalk.green(' ✓ Everything is in sync — no changes.'));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
for (const p of toShow) {
|
|
138
|
+
const forcedNote = p.action === 'skip-local' && !force ? chalk.dim(' (use --force to overwrite)') : '';
|
|
139
|
+
const willWrite = p.action !== 'skip-local' || force;
|
|
140
|
+
const doneMark = apply && willWrite ? chalk.green(' ✓') : '';
|
|
141
|
+
console.log(` ${ACTION_LABEL[p.action]} ${p.rel}${forcedNote}${doneMark}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
console.log();
|
|
145
|
+
console.log(chalk.dim(` Summary: ${counts.add} add, ${counts.update} update, ${counts.unchanged} unchanged, ` +
|
|
146
|
+
`${counts['skip-local']} local-edit${counts['skip-local'] === 1 ? '' : 's'} ${force ? 'forced' : 'skipped'}`));
|
|
147
|
+
// ── Apply ───────────────────────────────────────────────────────────────
|
|
148
|
+
if (!apply) {
|
|
149
|
+
if (counts.add + counts.update + counts['skip-local'] > 0) {
|
|
150
|
+
console.log(chalk.dim(' Dry run — no files written. Re-run with --apply to write changes.'));
|
|
151
|
+
if (counts['skip-local'] > 0 && !force) {
|
|
152
|
+
console.log(chalk.dim(' Locally-modified files are skipped; add --force to overwrite them.'));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
console.log();
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
let written = 0;
|
|
159
|
+
const newState = { generation: bundleGen, files: { ...state.files } };
|
|
160
|
+
for (const p of plans) {
|
|
161
|
+
const theirs = bundleHashes[p.rel];
|
|
162
|
+
const write = p.action === 'add' || p.action === 'update' || (p.action === 'skip-local' && force);
|
|
163
|
+
if (write) {
|
|
164
|
+
const src = join(bundleDir, p.rel);
|
|
165
|
+
const dest = join(projectConfigDir, p.rel);
|
|
166
|
+
try {
|
|
167
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
168
|
+
writeFileSync(dest, readFileSync(src));
|
|
169
|
+
if (p.rel.endsWith('.sh')) {
|
|
170
|
+
try {
|
|
171
|
+
chmodSync(dest, 0o755);
|
|
172
|
+
}
|
|
173
|
+
catch { /* non-fatal */ }
|
|
174
|
+
}
|
|
175
|
+
newState.files[p.rel] = theirs;
|
|
176
|
+
written++;
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
console.log(chalk.yellow(` ⚠ could not write ${p.rel}: ${err instanceof Error ? err.message : String(err)}`));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (p.action === 'unchanged') {
|
|
183
|
+
newState.files[p.rel] = theirs; // keep baseline current
|
|
184
|
+
}
|
|
185
|
+
// skip-local without force: leave baseline as-is so it stays flagged.
|
|
186
|
+
}
|
|
187
|
+
// Advance the project's generation stamp and write the sync-state baseline.
|
|
188
|
+
try {
|
|
189
|
+
const genSrc = join(bundleDir, GENERATION_FILE);
|
|
190
|
+
if (existsSync(genSrc)) {
|
|
191
|
+
writeFileSync(join(projectConfigDir, GENERATION_FILE), readFileSync(genSrc));
|
|
192
|
+
}
|
|
193
|
+
writeFileSync(join(projectConfigDir, SYNC_STATE_FILE), JSON.stringify(newState, null, 2) + '\n');
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
console.log(chalk.yellow(` ⚠ could not write generation/sync-state: ${err instanceof Error ? err.message : String(err)}`));
|
|
197
|
+
}
|
|
198
|
+
// Seed a project-appropriate observability endpoint into operator config when
|
|
199
|
+
// the project declares one and the operator has not set it yet (#4017 Phase 3,
|
|
200
|
+
// Phase-1 deferral 4a). Never overwrites an existing value.
|
|
201
|
+
if (cfg.observabilityApiUrl && !getConfigValue('observability-api-url')) {
|
|
202
|
+
setConfigValue('observability-api-url', cfg.observabilityApiUrl);
|
|
203
|
+
console.log(chalk.green(` ✓ Set observability-api-url = ${cfg.observabilityApiUrl} (from mx-agent.config.json)`));
|
|
204
|
+
}
|
|
205
|
+
console.log();
|
|
206
|
+
console.log(chalk.green(` ✓ Wrote ${written} file${written === 1 ? '' : 's'}; project now at generation ${bundleGen ?? '—'}.`));
|
|
207
|
+
if (counts['skip-local'] > 0 && !force) {
|
|
208
|
+
console.log(chalk.yellow(` ${counts['skip-local']} locally-modified file(s) left untouched — re-run with --force to overwrite.`));
|
|
209
|
+
}
|
|
210
|
+
console.log();
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=config-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-sync.js","sourceRoot":"","sources":["../../src/commands/config-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkCH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiMrE"}
|