@mrpatronz/nexusflow 1.9.0 → 2.0.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/dist/agent/ProviderRegistry.d.ts +12 -1
- package/dist/agent/ProviderRegistry.d.ts.map +1 -1
- package/dist/agent/ProviderRegistry.js.map +1 -1
- package/dist/agent/ProviderRegistry.test.js +1 -0
- package/dist/agent/ProviderRegistry.test.js.map +1 -1
- package/dist/agent/adapters.d.ts +14 -0
- package/dist/agent/adapters.d.ts.map +1 -1
- package/dist/agent/adapters.js +39 -4
- package/dist/agent/adapters.js.map +1 -1
- package/dist/agent/adapters.test.d.ts +2 -0
- package/dist/agent/adapters.test.d.ts.map +1 -0
- package/dist/agent/adapters.test.js +49 -0
- package/dist/agent/adapters.test.js.map +1 -0
- package/dist/agent/cliAvailability.d.ts +48 -0
- package/dist/agent/cliAvailability.d.ts.map +1 -0
- package/dist/agent/cliAvailability.js +112 -0
- package/dist/agent/cliAvailability.js.map +1 -0
- package/dist/agent/cliAvailability.test.d.ts +2 -0
- package/dist/agent/cliAvailability.test.d.ts.map +1 -0
- package/dist/agent/cliAvailability.test.js +105 -0
- package/dist/agent/cliAvailability.test.js.map +1 -0
- package/dist/analyzers/detect-deps.d.ts.map +1 -1
- package/dist/analyzers/detect-deps.js +16 -19
- package/dist/analyzers/detect-deps.js.map +1 -1
- package/dist/analyzers/index.d.ts +0 -2
- package/dist/analyzers/index.d.ts.map +1 -1
- package/dist/analyzers/index.js +6 -9
- package/dist/analyzers/index.js.map +1 -1
- package/dist/commands/commands.test.js +4 -3
- package/dist/commands/commands.test.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/knowledge.d.ts +10 -0
- package/dist/commands/knowledge.d.ts.map +1 -1
- package/dist/commands/knowledge.js +27 -1
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/knowledge.test.d.ts +2 -0
- package/dist/commands/knowledge.test.d.ts.map +1 -0
- package/dist/commands/knowledge.test.js +77 -0
- package/dist/commands/knowledge.test.js.map +1 -0
- package/dist/commands/refresh.d.ts +2 -4
- package/dist/commands/refresh.d.ts.map +1 -1
- package/dist/commands/refresh.js +4 -20
- package/dist/commands/refresh.js.map +1 -1
- package/dist/core/adapters/registry.d.ts.map +1 -1
- package/dist/core/adapters/registry.js +8 -3
- package/dist/core/adapters/registry.js.map +1 -1
- package/dist/core/adapters/storage.test.js +5 -24
- package/dist/core/adapters/storage.test.js.map +1 -1
- package/dist/core/analysis-cache.d.ts +15 -8
- package/dist/core/analysis-cache.d.ts.map +1 -1
- package/dist/core/analysis-cache.js +61 -10
- package/dist/core/analysis-cache.js.map +1 -1
- package/dist/core/analysis-cache.test.js +17 -4
- package/dist/core/analysis-cache.test.js.map +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +5 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +9 -5
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/knowledge.d.ts +14 -4
- package/dist/core/knowledge.d.ts.map +1 -1
- package/dist/core/knowledge.js +64 -14
- package/dist/core/knowledge.js.map +1 -1
- package/dist/core/knowledge.test.js +54 -2
- package/dist/core/knowledge.test.js.map +1 -1
- package/dist/core/locks.d.ts +43 -0
- package/dist/core/locks.d.ts.map +1 -0
- package/dist/core/locks.js +102 -0
- package/dist/core/locks.js.map +1 -0
- package/dist/core/locks.test.d.ts +2 -0
- package/dist/core/locks.test.d.ts.map +1 -0
- package/dist/core/locks.test.js +95 -0
- package/dist/core/locks.test.js.map +1 -0
- package/dist/core/ports/storage.d.ts +3 -3
- package/dist/core/ports/storage.d.ts.map +1 -1
- package/dist/core/refresh.d.ts +12 -13
- package/dist/core/refresh.d.ts.map +1 -1
- package/dist/core/refresh.js +14 -11
- package/dist/core/refresh.js.map +1 -1
- package/dist/core/refresh.test.js +17 -11
- package/dist/core/refresh.test.js.map +1 -1
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +2 -65
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/sync.js +3 -3
- package/dist/core/sync.js.map +1 -1
- package/dist/core/worktree.js +2 -2
- package/dist/core/worktree.js.map +1 -1
- package/dist/core/worktree.test.js +2 -2
- package/dist/core/worktree.test.js.map +1 -1
- package/dist/generators/base.d.ts +31 -2
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +174 -238
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/base.test.js +231 -24
- package/dist/generators/base.test.js.map +1 -1
- package/dist/generators/claude.d.ts +19 -5
- package/dist/generators/claude.d.ts.map +1 -1
- package/dist/generators/claude.js +33 -11
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/index.d.ts +10 -9
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +103 -118
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/plan-generator.d.ts.map +1 -1
- package/dist/generators/plan-generator.js +217 -193
- package/dist/generators/plan-generator.js.map +1 -1
- package/dist/generators/plan-generator.test.d.ts +2 -0
- package/dist/generators/plan-generator.test.d.ts.map +1 -0
- package/dist/generators/plan-generator.test.js +217 -0
- package/dist/generators/plan-generator.test.js.map +1 -0
- package/dist/gui/assets/{DashboardPage-C3NH97y2.js → DashboardPage-HNC3-OP0.js} +1 -1
- package/dist/gui/assets/{GettingStartedPage-og-Kv7Sm.js → GettingStartedPage-Dguoya_Z.js} +1 -1
- package/dist/gui/assets/{ProjectsPage-COqqadEr.js → ProjectsPage-DVR4j4sw.js} +1 -1
- package/dist/gui/assets/{ScaffoldRepoInline-DRipQsos.js → ScaffoldRepoInline-D-2ZeuDK.js} +1 -1
- package/dist/gui/assets/{SettingsPage-CpU3V9oU.js → SettingsPage-Bauo77q3.js} +1 -1
- package/dist/gui/assets/{StartWorkPage-DIND0hJy.js → StartWorkPage-DvuFEa5Y.js} +1 -1
- package/dist/gui/assets/{StrategiesPage-6LWOnKdk.js → StrategiesPage-Cizm0GWk.js} +1 -1
- package/dist/gui/assets/{WorkspacesPage-BUqgOhuy.js → WorkspacesPage-DYOVfZqy.js} +1 -1
- package/dist/gui/assets/{index-CyYbQwRf.js → index-BqeoAIB1.js} +6 -6
- package/dist/gui/index.html +1 -1
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +11 -15
- package/dist/mcp/tools.js.map +1 -1
- package/dist/resources/workflows/plan-implement-review.md +8 -0
- package/dist/resources/workflows/research-verify.md +6 -0
- package/dist/resources/workflows/solo-developer.md +3 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -2
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +4 -2
- package/dist/server.test.js.map +1 -1
- package/dist/types.d.ts +0 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/prompts.js +2 -2
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/resources.d.ts +28 -0
- package/dist/utils/resources.d.ts.map +1 -0
- package/dist/utils/resources.js +54 -0
- package/dist/utils/resources.js.map +1 -0
- package/dist/utils/workflow-advisor.d.ts.map +1 -1
- package/dist/utils/workflow-advisor.js +17 -27
- package/dist/utils/workflow-advisor.js.map +1 -1
- package/dist/utils/workflows.d.ts.map +1 -1
- package/dist/utils/workflows.js +6 -2
- package/dist/utils/workflows.js.map +1 -1
- package/package.json +5 -3
- package/resources/workflows/plan-implement-review.md +8 -0
- package/resources/workflows/research-verify.md +6 -0
- package/resources/workflows/solo-developer.md +3 -0
- package/dist/analyzers/detect-apis.d.ts +0 -19
- package/dist/analyzers/detect-apis.d.ts.map +0 -1
- package/dist/analyzers/detect-apis.js +0 -250
- package/dist/analyzers/detect-apis.js.map +0 -1
- package/dist/analyzers/messaging-analyzer.d.ts +0 -17
- package/dist/analyzers/messaging-analyzer.d.ts.map +0 -1
- package/dist/analyzers/messaging-analyzer.js +0 -229
- package/dist/analyzers/messaging-analyzer.js.map +0 -1
- package/dist/core/adapters/vault-storage.d.ts +0 -16
- package/dist/core/adapters/vault-storage.d.ts.map +0 -1
- package/dist/core/adapters/vault-storage.js +0 -77
- package/dist/core/adapters/vault-storage.js.map +0 -1
- package/dist/core/graph.d.ts +0 -35
- package/dist/core/graph.d.ts.map +0 -1
- package/dist/core/graph.js +0 -281
- package/dist/core/graph.js.map +0 -1
- package/dist/generators/diff-context.d.ts +0 -6
- package/dist/generators/diff-context.d.ts.map +0 -1
- package/dist/generators/diff-context.js +0 -70
- package/dist/generators/diff-context.js.map +0 -1
- package/dist/generators/map-generator.d.ts +0 -15
- package/dist/generators/map-generator.d.ts.map +0 -1
- package/dist/generators/map-generator.js +0 -514
- package/dist/generators/map-generator.js.map +0 -1
- package/dist/generators/map-generator.test.d.ts +0 -2
- package/dist/generators/map-generator.test.d.ts.map +0 -1
- package/dist/generators/map-generator.test.js +0 -147
- package/dist/generators/map-generator.test.js.map +0 -1
package/dist/generators/index.js
CHANGED
|
@@ -7,8 +7,7 @@ import { generateCursorConfig } from './cursor.js';
|
|
|
7
7
|
import { buildContextContent } from './base.js';
|
|
8
8
|
import { generateImplementationPlan } from './plan-generator.js';
|
|
9
9
|
import { generateSkills } from './skills-generator.js';
|
|
10
|
-
import { writeWorkspaceFile, workspaceFileExists
|
|
11
|
-
import { generateDiffContext } from './diff-context.js';
|
|
10
|
+
import { writeWorkspaceFile, workspaceFileExists } from '../core/storage.js';
|
|
12
11
|
/** Maps each assistant to its generator function and the file it produces. */
|
|
13
12
|
const GENERATORS = {
|
|
14
13
|
claude: { generate: generateClaudeConfig, outputFile: 'CLAUDE.md' },
|
|
@@ -18,8 +17,46 @@ const GENERATORS = {
|
|
|
18
17
|
cursor: { generate: generateCursorConfig, outputFile: '.cursor/rules/nexusflow.mdc' },
|
|
19
18
|
};
|
|
20
19
|
/**
|
|
21
|
-
*
|
|
20
|
+
* A short human index of the workspace. Deliberately not the full assistant
|
|
21
|
+
* context: that lives in `AGENTS.md`, and a second copy would only be a file to
|
|
22
|
+
* keep in sync.
|
|
22
23
|
*/
|
|
24
|
+
function buildWorkspaceIndex(ctx) {
|
|
25
|
+
const { feature } = ctx;
|
|
26
|
+
const repos = ctx.repos.map((repo) => `- \`${repo.name}\` — ${repo.path}`).join('\n');
|
|
27
|
+
return `# Workspace: ${feature.id}
|
|
28
|
+
|
|
29
|
+
${feature.description}
|
|
30
|
+
|
|
31
|
+
> Assistant context lives in **AGENTS.md**. Most agent tools read that file
|
|
32
|
+
> directly; Claude Code reads \`CLAUDE.md\`, which imports it. This file is just
|
|
33
|
+
> an index for people.
|
|
34
|
+
|
|
35
|
+
## Repositories
|
|
36
|
+
|
|
37
|
+
${repos || '_None._'}
|
|
38
|
+
|
|
39
|
+
## Files in this workspace
|
|
40
|
+
|
|
41
|
+
| File | What it holds |
|
|
42
|
+
|---|---|
|
|
43
|
+
| \`AGENTS.md\` | The context your assistant loads: projects, relationships, verification commands |
|
|
44
|
+
| \`CLAUDE.md\` | A one-line \`@AGENTS.md\` import, plus anything Claude-specific |
|
|
45
|
+
| \`nexusflow-knowledge.md\` | Accumulated decisions and gotchas, one per \`###\` heading. Search it; do not read it whole |
|
|
46
|
+
| \`nexusflow-plan.md\` | Dependency-ordered implementation phases |
|
|
47
|
+
|
|
48
|
+
## Useful commands
|
|
49
|
+
|
|
50
|
+
\`\`\`
|
|
51
|
+
nexusflow status # what changed, across every repo
|
|
52
|
+
nexusflow diff # the actual changes
|
|
53
|
+
nexusflow refresh # regenerate these files
|
|
54
|
+
nexusflow doctor # check the workspace is healthy
|
|
55
|
+
\`\`\`
|
|
56
|
+
|
|
57
|
+
_Generated by NexusFlow. Run \`nexusflow refresh\` to update._
|
|
58
|
+
`;
|
|
59
|
+
}
|
|
23
60
|
function buildKnowledgeContent(ctx) {
|
|
24
61
|
const { feature, repos, analysis } = ctx;
|
|
25
62
|
// Build repo list with tech stack info if available
|
|
@@ -37,11 +74,19 @@ function buildKnowledgeContent(ctx) {
|
|
|
37
74
|
}).join('\n');
|
|
38
75
|
// Build initial progress checklist
|
|
39
76
|
const progressItems = repos.map((r) => `- [ ] ${r.name} — changes implemented and tested`).join('\n');
|
|
77
|
+
// The four accumulating sections — Project Assumptions, Clarifying Questions,
|
|
78
|
+
// Architecture Decisions, Known Gotchas — are deliberately absent from a fresh
|
|
79
|
+
// file. They used to ship as headings over `_(No X recorded yet.)_`, which two
|
|
80
|
+
// independent evaluating agents both reported as "100% unfilled template
|
|
81
|
+
// placeholders, zero actual content" while this file is linked from the
|
|
82
|
+
// generated context. `insertUnderHeading` appends a missing section at
|
|
83
|
+
// end-of-file (see core/knowledge.ts), so `nexusflow knowledge add` creates
|
|
84
|
+
// each one the moment it has something to put there.
|
|
40
85
|
return `# Workspace Knowledge — ${feature.id}
|
|
41
86
|
|
|
42
|
-
>
|
|
43
|
-
>
|
|
44
|
-
>
|
|
87
|
+
> Accumulated decisions and gotchas for this feature. Append with
|
|
88
|
+
> \`nexusflow knowledge add -t decision|gotcha -m "..."\`, which creates the
|
|
89
|
+
> section it needs.
|
|
45
90
|
|
|
46
91
|
## Feature Goal
|
|
47
92
|
|
|
@@ -54,39 +99,9 @@ ${feature.description}
|
|
|
54
99
|
|
|
55
100
|
${repoList}
|
|
56
101
|
|
|
57
|
-
## Project Assumptions (verify with user)
|
|
58
|
-
|
|
59
|
-
<!-- AI assistants: Fill this in during your first session. List each project and describe what you assume its main purpose, tech stack, and responsibilities are. -->
|
|
60
|
-
|
|
61
|
-
_(No assumptions recorded yet. AI assistant to populate.)_
|
|
62
|
-
|
|
63
|
-
## Clarifying Questions for the User
|
|
64
|
-
|
|
65
|
-
<!-- AI assistants: List any clarifying questions or ambiguities about requirements/architecture here. -->
|
|
66
|
-
|
|
67
|
-
_(No open questions recorded yet. AI assistant to populate.)_
|
|
68
|
-
|
|
69
|
-
## Architecture Decisions
|
|
70
|
-
|
|
71
|
-
<!-- AI assistants: append decisions here as they are made during development.
|
|
72
|
-
Format: ### YYYY-MM-DD — Decision Title
|
|
73
|
-
**Decision:** What was decided
|
|
74
|
-
**Alternatives considered:** What else was evaluated
|
|
75
|
-
**Reasoning:** Why this choice was made -->
|
|
76
|
-
|
|
77
|
-
_(No decisions recorded yet.)_
|
|
78
|
-
|
|
79
102
|
## Implementation Progress
|
|
80
103
|
|
|
81
104
|
${progressItems}
|
|
82
|
-
|
|
83
|
-
## Known Gotchas
|
|
84
|
-
|
|
85
|
-
<!-- AI assistants: append any gotchas, workarounds, or "watch out for" items
|
|
86
|
-
discovered during development. These help future sessions avoid repeating
|
|
87
|
-
the same debugging. -->
|
|
88
|
-
|
|
89
|
-
_(No gotchas recorded yet.)_
|
|
90
105
|
`;
|
|
91
106
|
}
|
|
92
107
|
/**
|
|
@@ -123,49 +138,41 @@ export function buildBaseKnowledgeContent(repoName) {
|
|
|
123
138
|
* Generates AI context files for each of the selected assistants.
|
|
124
139
|
*
|
|
125
140
|
* Also generates:
|
|
126
|
-
* - WORKSPACE.md —
|
|
127
|
-
* - nexusflow-knowledge.md —
|
|
141
|
+
* - WORKSPACE.md — a short index for people, not an assistant-facing file
|
|
142
|
+
* - nexusflow-knowledge.md — accumulated decisions and gotchas, if absent
|
|
128
143
|
* - nexusflow-plan.md — implementation order based on dependency analysis
|
|
129
144
|
*
|
|
145
|
+
* Every file it writes describes the whole workspace, so there is no per-repo or
|
|
146
|
+
* base-only subset to generate. The `onlyRepo` and `onlyBase` parameters are
|
|
147
|
+
* gone with the per-repo architecture maps that were the only thing they scoped:
|
|
148
|
+
* once the maps went, `onlyBase` made this function write nothing while its
|
|
149
|
+
* caller still reported success, and `onlyRepo` narrowed a logging loop while
|
|
150
|
+
* every generated file was rewritten in full.
|
|
151
|
+
*
|
|
130
152
|
* @param ctx - The workspace context (feature + repos).
|
|
131
153
|
* @param assistants - Which AI assistants to generate context files for.
|
|
132
154
|
* @param workspacePath - Absolute path to the workspace root directory.
|
|
133
|
-
* @param onlyRepo - Restrict per-repo output to a single repo by name.
|
|
134
|
-
* @param onlyBase - Only generate base-layer maps/knowledge.
|
|
135
|
-
* @param changedRepos - When provided, per-repo architecture maps are only
|
|
136
|
-
* rewritten for these repos (unchanged repos keep their
|
|
137
|
-
* existing map byte-identical, preserving AI prompt
|
|
138
|
-
* caches). A missing map file is generated regardless.
|
|
139
155
|
*/
|
|
140
|
-
export async function generateContextFiles(ctx, assistants, workspacePath
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
console.error(chalk.red(' ✖'), `Failed to generate universal WORKSPACE.md: ${message}`);
|
|
151
|
-
}
|
|
156
|
+
export async function generateContextFiles(ctx, assistants, workspacePath) {
|
|
157
|
+
// WORKSPACE.md is a human-facing index, not an auto-loaded context file: no
|
|
158
|
+
// assistant reads it by convention, so it used to be a byte-for-byte third
|
|
159
|
+
// copy of CLAUDE.md and AGENTS.md. A pointer costs nothing and removes two
|
|
160
|
+
// files that had to be kept in sync. The assistant-specific filenames still
|
|
161
|
+
// carry the full content, because those ARE auto-loaded — turning one of
|
|
162
|
+
// those into a pointer would trade free context for a tool call.
|
|
163
|
+
try {
|
|
164
|
+
await writeWorkspaceFile(workspacePath, ctx.feature.id, 'WORKSPACE.md', buildWorkspaceIndex(ctx));
|
|
165
|
+
console.log(chalk.green(' ✔'), `Generated ${chalk.bold('WORKSPACE.md')} (human index)`);
|
|
152
166
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
continue;
|
|
157
|
-
}
|
|
158
|
-
const baseExists = await baseFileExists(workspacePath, repo.name, 'nexusflow-knowledge.md');
|
|
159
|
-
if (!baseExists || onlyBase) {
|
|
160
|
-
const baseContent = buildBaseKnowledgeContent(repo.name);
|
|
161
|
-
await writeBaseFile(workspacePath, repo.name, 'nexusflow-knowledge.md', baseContent);
|
|
162
|
-
console.log(chalk.green(' ✔'), `Generated base knowledge for ${chalk.bold(repo.name)}`);
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
console.log(chalk.gray(' ○'), `Base knowledge for ${repo.name} already exists — preserving`);
|
|
166
|
-
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
169
|
+
console.error(chalk.red(' ✖'), `Failed to generate WORKSPACE.md: ${message}`);
|
|
167
170
|
}
|
|
168
|
-
|
|
171
|
+
// Base knowledge is never pre-created: the starter was four headings over four
|
|
172
|
+
// `- None recorded yet.` lines. `nexusflow knowledge add` bootstraps the file
|
|
173
|
+
// with that layout on first write (see `insertIntoBase` in core/knowledge.ts),
|
|
174
|
+
// so it appears once it has content, and an existing one is left untouched.
|
|
175
|
+
{
|
|
169
176
|
try {
|
|
170
177
|
// Generate nexusflow-knowledge.md if it does not exist
|
|
171
178
|
const knowledgeExists = await workspaceFileExists(workspacePath, ctx.feature.id, 'nexusflow-knowledge.md');
|
|
@@ -177,55 +184,26 @@ export async function generateContextFiles(ctx, assistants, workspacePath, onlyR
|
|
|
177
184
|
else {
|
|
178
185
|
console.log(chalk.gray(' ○'), `nexusflow-knowledge.md already exists — preserving existing content`);
|
|
179
186
|
}
|
|
180
|
-
//
|
|
181
|
-
|
|
182
|
-
|
|
187
|
+
// No branch-diff file. It was `git diff --name-only` rewritten as a
|
|
188
|
+
// bullet list, with every entry expanded to an absolute file:/// URL —
|
|
189
|
+
// which tripled its size for no added fact. An assistant gets the same
|
|
190
|
+
// answer, current rather than as-of-last-refresh, from one git call.
|
|
183
191
|
}
|
|
184
192
|
catch (error) {
|
|
185
193
|
const message = error instanceof Error ? error.message : String(error);
|
|
186
194
|
console.error(chalk.red(' ✖'), `Failed to generate workspace context files: ${message}`);
|
|
187
195
|
}
|
|
188
196
|
}
|
|
189
|
-
//
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
allProduced.add(a.name.toLowerCase());
|
|
200
|
-
}
|
|
201
|
-
for (const repo of ctx.repos) {
|
|
202
|
-
if (onlyRepo && repo.name !== onlyRepo) {
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
const a = ctx.analysis.get(repo.path);
|
|
206
|
-
if (a) {
|
|
207
|
-
if (changedRepos && !changedRepos.includes(repo.name)) {
|
|
208
|
-
const mapExists = await baseFileExists(workspacePath, repo.name, `nexusflow-map-${repo.name}.md`);
|
|
209
|
-
if (mapExists) {
|
|
210
|
-
console.log(chalk.gray(' ○'), `Architecture Map for ${repo.name} unchanged — skipped (cache hit)`);
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
try {
|
|
215
|
-
const { generateRepoMap } = await import('./map-generator.js');
|
|
216
|
-
await generateRepoMap(repo, a, workspacePath, allProduced);
|
|
217
|
-
console.log(chalk.green(' ✔'), `Generated Architecture Map for ${chalk.bold(repo.name)}`);
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
221
|
-
console.error(chalk.red(' ✖'), `Failed to generate Architecture Map for ${repo.name}: ${message}`);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
if (onlyBase) {
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
197
|
+
// No per-repo architecture map.
|
|
198
|
+
//
|
|
199
|
+
// Every line it emitted came from the repo's package.json — the manifest paths,
|
|
200
|
+
// the test frameworks, `npm test`, `npm run dev` — so an assistant that opens
|
|
201
|
+
// that file, which it does anyway, already knew all of it. Two independent
|
|
202
|
+
// evaluating agents said as much: the maps added nothing beyond the manifest.
|
|
203
|
+
// Worse, it was the first entry in the generated "Where to look" list, so the
|
|
204
|
+
// agent was sent to read derived facts before starting work.
|
|
205
|
+
//
|
|
206
|
+
// The rule this settles: generate only what an agent cannot grep.
|
|
229
207
|
// Generate configuration for each selected assistant
|
|
230
208
|
for (const assistant of assistants) {
|
|
231
209
|
const entry = GENERATORS[assistant];
|
|
@@ -238,13 +216,20 @@ export async function generateContextFiles(ctx, assistants, workspacePath, onlyR
|
|
|
238
216
|
console.error(chalk.red(' ✖'), `Failed to generate ${entry.outputFile} for ${assistant}: ${message}`);
|
|
239
217
|
}
|
|
240
218
|
}
|
|
241
|
-
//
|
|
242
|
-
//
|
|
219
|
+
// AGENTS.md is the canonical context file: it is the cross-tool convention, so
|
|
220
|
+
// Codex, Cursor, Devin and the rest read it directly. Claude Code is the
|
|
221
|
+
// exception — it reads CLAUDE.md — which is why `claude.ts` writes a CLAUDE.md
|
|
222
|
+
// that `@`-imports this one. That import is expanded at launch, so Claude gets
|
|
223
|
+
// the whole body without a second copy existing anywhere.
|
|
224
|
+
//
|
|
225
|
+
// Written unconditionally, because the file is the source of truth rather than
|
|
226
|
+
// a per-assistant artifact. When antigravity or codex is selected, its own
|
|
227
|
+
// generator has already written the same content here.
|
|
243
228
|
const hasAgentsGen = assistants.includes('antigravity') || assistants.includes('codex');
|
|
244
229
|
if (!hasAgentsGen) {
|
|
245
230
|
try {
|
|
246
|
-
await
|
|
247
|
-
console.log(chalk.green(' ✔'), `Generated
|
|
231
|
+
await writeWorkspaceFile(workspacePath, ctx.feature.id, 'AGENTS.md', await buildContextContent(ctx));
|
|
232
|
+
console.log(chalk.green(' ✔'), `Generated ${chalk.bold('AGENTS.md')} (canonical context)`);
|
|
248
233
|
}
|
|
249
234
|
catch (error) {
|
|
250
235
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-generator.d.ts","sourceRoot":"","sources":["../../src/generators/plan-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"plan-generator.d.ts","sourceRoot":"","sources":["../../src/generators/plan-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,QAAQ,EAER,eAAe,EAChB,MAAM,aAAa,CAAC;AAIrB;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EACtC,KAAK,EAAE,QAAQ,EAAE,GAChB,eAAe,CAsCjB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE,EAAE,CA4ClE;AAID;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,gBAAgB,EACrB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAgRf"}
|