@mrpatronz/nexusflow 1.5.0 → 1.7.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.
Files changed (79) hide show
  1. package/README.md +6 -7
  2. package/dist/commands/create.d.ts.map +1 -1
  3. package/dist/commands/create.js +62 -10
  4. package/dist/commands/create.js.map +1 -1
  5. package/dist/commands/finish.d.ts.map +1 -1
  6. package/dist/commands/finish.js +3 -2
  7. package/dist/commands/finish.js.map +1 -1
  8. package/dist/commands/handoff.d.ts.map +1 -1
  9. package/dist/commands/handoff.js +3 -2
  10. package/dist/commands/handoff.js.map +1 -1
  11. package/dist/commands/refresh.d.ts +2 -1
  12. package/dist/commands/refresh.d.ts.map +1 -1
  13. package/dist/commands/refresh.js +35 -2
  14. package/dist/commands/refresh.js.map +1 -1
  15. package/dist/commands/strategy.d.ts +37 -0
  16. package/dist/commands/strategy.d.ts.map +1 -0
  17. package/dist/commands/strategy.js +198 -0
  18. package/dist/commands/strategy.js.map +1 -0
  19. package/dist/core/adapters/registry.d.ts.map +1 -1
  20. package/dist/core/adapters/registry.js +0 -2
  21. package/dist/core/adapters/registry.js.map +1 -1
  22. package/dist/core/adapters/storage.test.js +0 -40
  23. package/dist/core/adapters/storage.test.js.map +1 -1
  24. package/dist/core/config.js +1 -1
  25. package/dist/core/knowledge.d.ts +5 -4
  26. package/dist/core/knowledge.d.ts.map +1 -1
  27. package/dist/core/knowledge.js +5 -4
  28. package/dist/core/knowledge.js.map +1 -1
  29. package/dist/core/new-repo.d.ts +27 -0
  30. package/dist/core/new-repo.d.ts.map +1 -0
  31. package/dist/core/new-repo.js +89 -0
  32. package/dist/core/new-repo.js.map +1 -0
  33. package/dist/core/new-repo.test.d.ts +2 -0
  34. package/dist/core/new-repo.test.d.ts.map +1 -0
  35. package/dist/core/new-repo.test.js +78 -0
  36. package/dist/core/new-repo.test.js.map +1 -0
  37. package/dist/core/workspace.create.test.js +19 -0
  38. package/dist/core/workspace.create.test.js.map +1 -1
  39. package/dist/core/workspace.d.ts +5 -3
  40. package/dist/core/workspace.d.ts.map +1 -1
  41. package/dist/core/workspace.js +13 -8
  42. package/dist/core/workspace.js.map +1 -1
  43. package/dist/core/worktree.d.ts +20 -7
  44. package/dist/core/worktree.d.ts.map +1 -1
  45. package/dist/core/worktree.js +31 -8
  46. package/dist/core/worktree.js.map +1 -1
  47. package/dist/core/worktree.test.js +42 -0
  48. package/dist/core/worktree.test.js.map +1 -1
  49. package/dist/gui/assets/index-CB-Ekvrs.css +1 -0
  50. package/dist/gui/assets/index-CixLsYSa.js +26 -0
  51. package/dist/gui/index.html +2 -2
  52. package/dist/index.js +95 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/server.d.ts.map +1 -1
  55. package/dist/server.js +43 -1
  56. package/dist/server.js.map +1 -1
  57. package/dist/server.test.js +50 -5
  58. package/dist/server.test.js.map +1 -1
  59. package/dist/types.d.ts +13 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/utils/git.d.ts +16 -0
  62. package/dist/utils/git.d.ts.map +1 -1
  63. package/dist/utils/git.js +33 -0
  64. package/dist/utils/git.js.map +1 -1
  65. package/dist/utils/prompts.d.ts +35 -1
  66. package/dist/utils/prompts.d.ts.map +1 -1
  67. package/dist/utils/prompts.js +208 -29
  68. package/dist/utils/prompts.js.map +1 -1
  69. package/dist/utils/workflow-advisor.d.ts +2 -0
  70. package/dist/utils/workflow-advisor.d.ts.map +1 -1
  71. package/dist/utils/workflow-advisor.js +27 -4
  72. package/dist/utils/workflow-advisor.js.map +1 -1
  73. package/package.json +1 -1
  74. package/dist/core/adapters/obsidian-storage.d.ts +0 -28
  75. package/dist/core/adapters/obsidian-storage.d.ts.map +0 -1
  76. package/dist/core/adapters/obsidian-storage.js +0 -135
  77. package/dist/core/adapters/obsidian-storage.js.map +0 -1
  78. package/dist/gui/assets/index-Bdbld6yY.css +0 -1
  79. package/dist/gui/assets/index-ElroPpSP.js +0 -26
@@ -2,9 +2,10 @@
2
2
  * @module utils/prompts
3
3
  * Interactive CLI prompts for NexusFlow using @inquirer/prompts.
4
4
  */
5
- import { input, checkbox, confirm, search } from '@inquirer/prompts';
5
+ import { input, checkbox, confirm, select, search, editor } from '@inquirer/prompts';
6
6
  import chalk from 'chalk';
7
- import { isValidBranchName } from './git.js';
7
+ import { isValidBranchName, listBranches } from './git.js';
8
+ import { isValidProjectName } from '../core/new-repo.js';
8
9
  /**
9
10
  * Prompts the user for a feature branch name.
10
11
  */
@@ -27,33 +28,66 @@ export async function promptBranchName() {
27
28
  return branchName.trim();
28
29
  }
29
30
  /**
30
- * Prompts the user for a feature description.
31
- * Accepts plain text or a path to a file.
31
+ * Generic prompt for multi-line text input.
32
+ * Offers short inline typing, multi-line editor (safe for pasting), or loading from file.
33
+ *
34
+ * @param entityName e.g., 'feature description', 'commit message'
35
+ * @param emptyFallback Default text to return if left empty in editor mode
32
36
  */
33
- export async function promptDescription() {
37
+ export async function promptMultiLineInput(entityName, emptyFallback = '') {
38
+ const mode = await select({
39
+ message: `How do you want to provide the ${entityName}?`,
40
+ choices: [
41
+ { name: `✍️ Type short ${entityName}`, value: 'short', description: `Type a single-line ${entityName} directly in the terminal` },
42
+ { name: `📝 Write in editor`, value: 'editor', description: 'Opens your $EDITOR (safest for copy-pasting multi-line text)' },
43
+ { name: `📂 Load from file`, value: 'file', description: 'Paste a path to a .md or .txt file' },
44
+ ],
45
+ });
46
+ if (mode === 'short') {
47
+ const text = await input({
48
+ message: `${entityName.charAt(0).toUpperCase() + entityName.slice(1)}:`,
49
+ validate: (value) => {
50
+ if (!value.trim() && !emptyFallback)
51
+ return `${entityName} cannot be empty`;
52
+ return true;
53
+ },
54
+ });
55
+ return text.trim() || emptyFallback;
56
+ }
57
+ if (mode === 'editor') {
58
+ const text = await editor({
59
+ message: `Write or paste your ${entityName} (save and close the editor when done):`,
60
+ default: '',
61
+ waitForUserInput: false,
62
+ });
63
+ if (!text.trim()) {
64
+ console.log(chalk.yellow(` ⚠ Empty ${entityName} provided.`));
65
+ return emptyFallback;
66
+ }
67
+ return text.trim();
68
+ }
69
+ // File mode
34
70
  const { readFile } = await import('node:fs/promises');
35
71
  const { existsSync } = await import('node:fs');
36
- const descInput = await input({
37
- message: 'Describe the feature (or paste a path to a .md/.txt file):',
72
+ const filePath = await input({
73
+ message: `Path to ${entityName} file (.md or .txt):`,
38
74
  validate: (value) => {
39
75
  if (!value.trim())
40
- return 'Description cannot be empty';
76
+ return 'Path cannot be empty';
77
+ if (!existsSync(value.trim()))
78
+ return 'File not found';
41
79
  return true;
42
80
  },
43
81
  });
44
- const trimmed = descInput.trim();
45
- // Check if it's a file path
46
- if (existsSync(trimmed)) {
47
- try {
48
- const content = await readFile(trimmed, 'utf-8');
49
- console.log(chalk.dim(` Read description from ${trimmed}`));
50
- return content;
51
- }
52
- catch {
53
- // Fall through to use as plain text
54
- }
55
- }
56
- return trimmed;
82
+ const content = await readFile(filePath.trim(), 'utf-8');
83
+ console.log(chalk.dim(` Read ${entityName} from ${filePath.trim()}`));
84
+ return content.trim() || emptyFallback;
85
+ }
86
+ /**
87
+ * Prompts the user for a feature description.
88
+ */
89
+ export async function promptDescription() {
90
+ return promptMultiLineInput('feature description', 'No description provided.');
57
91
  }
58
92
  /**
59
93
  * Prompts the user to select repos from a list of discovered repos.
@@ -119,10 +153,8 @@ export async function promptSelectRepos(repos) {
119
153
  },
120
154
  });
121
155
  if (result === 'done') {
122
- if (selectedPaths.size === 0) {
123
- console.log(chalk.red(' Please select at least one repository.'));
124
- continue;
125
- }
156
+ // An empty selection is allowed — the create flow can still scaffold a
157
+ // brand-new project afterwards, and exits if nothing ends up selected.
126
158
  break;
127
159
  }
128
160
  if (result === 'clear') {
@@ -139,6 +171,65 @@ export async function promptSelectRepos(repos) {
139
171
  }
140
172
  return repos.filter((r) => selectedPaths.has(r.path));
141
173
  }
174
+ /**
175
+ * Prompts for the name of a brand-new project to scaffold in `devDir`.
176
+ */
177
+ export async function promptNewProjectName(devDir) {
178
+ const name = await input({
179
+ message: `New project name (created in ${devDir}):`,
180
+ validate: (value) => {
181
+ const trimmed = value.trim();
182
+ if (!trimmed)
183
+ return 'Project name cannot be empty';
184
+ if (!isValidProjectName(trimmed))
185
+ return 'Not a valid directory name';
186
+ return true;
187
+ },
188
+ });
189
+ return name.trim();
190
+ }
191
+ /**
192
+ * Optionally lets the user pick an existing branch per repo instead of
193
+ * creating the feature branch.
194
+ *
195
+ * @param repos - The repos selected for the workspace.
196
+ * @param featureBranch - The feature branch that would be created by default.
197
+ * @returns Map of repo name → existing branch, for overridden repos only.
198
+ */
199
+ export async function promptRepoBranches(repos, featureBranch) {
200
+ const overrides = new Map();
201
+ const useExisting = await confirm({
202
+ message: 'Check out an existing branch for any repo (instead of creating the feature branch)?',
203
+ default: false,
204
+ });
205
+ if (!useExisting)
206
+ return overrides;
207
+ for (const repo of repos) {
208
+ const { local, remote } = await listBranches(repo.path);
209
+ const branchNames = Array.from(new Set([...local, ...remote]));
210
+ if (branchNames.length === 0) {
211
+ console.log(chalk.dim(` ${repo.name}: no branches found — will create "${featureBranch}".`));
212
+ continue;
213
+ }
214
+ const picked = await select({
215
+ message: `Branch for ${repo.name}:`,
216
+ choices: [
217
+ {
218
+ name: `➕ Create new branch "${featureBranch}" (default)`,
219
+ value: '',
220
+ },
221
+ ...branchNames.map((b) => ({
222
+ name: local.includes(b) ? b : `${b} ${chalk.dim('(remote only)')}`,
223
+ value: b,
224
+ })),
225
+ ],
226
+ });
227
+ if (picked) {
228
+ overrides.set(repo.name, picked);
229
+ }
230
+ }
231
+ return overrides;
232
+ }
142
233
  /**
143
234
  * Prompts the user to select AI assistants to generate context for.
144
235
  */
@@ -173,15 +264,103 @@ export async function promptSelectEditor(detected) {
173
264
  console.log(chalk.yellow(' No editors detected in PATH.'));
174
265
  return null;
175
266
  }
176
- const selected = await checkbox({
267
+ const selectedCommand = await select({
177
268
  message: 'Select editor:',
178
269
  choices: available.map((editor) => ({
179
270
  name: editor.name,
180
271
  value: editor.command,
181
272
  })),
182
273
  });
183
- if (selected.length === 0)
184
- return null;
185
- return available.find((e) => e.command === selected[0]) ?? null;
274
+ return available.find((e) => e.command === selectedCommand) ?? null;
275
+ }
276
+ /**
277
+ * Prompts the user to select a teamwork collaboration strategy.
278
+ * Shows a preview of the selected template before confirming.
279
+ */
280
+ export async function promptSelectStrategy(templates) {
281
+ const choices = [
282
+ { name: '✨ Auto-suggest using AI', value: 'auto', description: 'Dynamically analyzes the task to recommend a strategy' },
283
+ { name: '✏️ Create new custom strategy', value: 'create_new', description: 'Write a new strategy or load from a file' },
284
+ ...templates.map((t) => ({
285
+ name: `${t.name}${t.custom ? ' (Custom)' : ''}`,
286
+ value: t.id,
287
+ description: t.description,
288
+ })),
289
+ ];
290
+ while (true) {
291
+ const selectedId = await select({
292
+ message: 'Select a teamwork collaboration strategy:',
293
+ choices,
294
+ });
295
+ // Auto and create_new don't need a preview
296
+ if (selectedId === 'auto' || selectedId === 'create_new') {
297
+ return selectedId;
298
+ }
299
+ // Show preview for template-based strategies
300
+ const template = templates.find((t) => t.id === selectedId);
301
+ if (template) {
302
+ console.log(chalk.bold(`\n📄 Preview: ${template.name}\n`));
303
+ console.log(chalk.dim('─'.repeat(60)));
304
+ console.log(template.content);
305
+ console.log(chalk.dim('─'.repeat(60)));
306
+ const confirmed = await confirm({
307
+ message: 'Use this strategy?',
308
+ default: true,
309
+ });
310
+ if (confirmed) {
311
+ return selectedId;
312
+ }
313
+ // Loop back to selection if not confirmed
314
+ console.log();
315
+ }
316
+ else {
317
+ return selectedId;
318
+ }
319
+ }
320
+ }
321
+ /**
322
+ * Prompts the user for a new strategy name and content.
323
+ * Offers two input modes: open $EDITOR for multi-line authoring, or load from a file.
324
+ */
325
+ export async function promptNewStrategy() {
326
+ const name = await input({
327
+ message: 'New Strategy Name:',
328
+ validate: (value) => value.trim().length > 0 || 'Name cannot be empty',
329
+ });
330
+ const mode = await select({
331
+ message: 'How do you want to provide the strategy content?',
332
+ choices: [
333
+ { name: '📝 Write in editor', value: 'editor', description: 'Opens your $EDITOR for multi-line content' },
334
+ { name: '📂 Load from file', value: 'file', description: 'Paste a path to a .md or .txt file' },
335
+ ],
336
+ });
337
+ let content;
338
+ if (mode === 'file') {
339
+ const { readFile } = await import('node:fs/promises');
340
+ const { existsSync } = await import('node:fs');
341
+ const filePath = await input({
342
+ message: 'Path to strategy file (.md or .txt):',
343
+ validate: (value) => {
344
+ if (!value.trim())
345
+ return 'Path cannot be empty';
346
+ if (!existsSync(value.trim()))
347
+ return 'File not found';
348
+ return true;
349
+ },
350
+ });
351
+ content = await readFile(filePath.trim(), 'utf-8');
352
+ console.log(chalk.dim(` Read strategy from ${filePath.trim()}`));
353
+ }
354
+ else {
355
+ content = await editor({
356
+ message: 'Write your strategy content (save and close the editor when done):',
357
+ default: `# ${name.trim()}\n\nDescribe your teamwork cooperation guidelines here.\n\n## Guidelines\n\n- \n`,
358
+ waitForUserInput: false,
359
+ });
360
+ }
361
+ if (!content.trim()) {
362
+ content = `# ${name.trim()}\n\nCustom strategy template.`;
363
+ }
364
+ return { name: name.trim(), content: content.trim() };
186
365
  }
187
366
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * @module utils/workflow-advisor
3
3
  * Dynamically suggests task difficulty and teamwork strategy guidelines.
4
+ * Uses the canonical template files from resources/workflows/ as the source
5
+ * of truth, falling back to inline defaults only when templates are unavailable.
4
6
  */
5
7
  import type { LocalLlmConfig, RepoInfo } from '../types.js';
6
8
  export interface WorkflowSuggestion {
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-advisor.d.ts","sourceRoot":"","sources":["../../src/utils/workflow-advisor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,uBAAuB,CAAC;IACpF,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,EAAE,EACjB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA+F7B"}
1
+ {"version":3,"file":"workflow-advisor.d.ts","sourceRoot":"","sources":["../../src/utils/workflow-advisor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,uBAAuB,CAAC;IACpF,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAmBD;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,EAAE,EACjB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA2G7B"}
@@ -1,14 +1,34 @@
1
1
  /**
2
2
  * @module utils/workflow-advisor
3
3
  * Dynamically suggests task difficulty and teamwork strategy guidelines.
4
+ * Uses the canonical template files from resources/workflows/ as the source
5
+ * of truth, falling back to inline defaults only when templates are unavailable.
4
6
  */
5
7
  import { callLocalLlm } from './local-ai.js';
8
+ import { getWorkflowTemplates } from './workflows.js';
9
+ /**
10
+ * Loads the content of a workflow template by ID. Falls back to a default
11
+ * string if the template file cannot be found.
12
+ */
13
+ async function loadTemplateContent(templateId, fallback) {
14
+ try {
15
+ const templates = await getWorkflowTemplates();
16
+ const template = templates.find((t) => t.id === templateId);
17
+ if (template) {
18
+ return template.content;
19
+ }
20
+ }
21
+ catch {
22
+ // Silently fall back to inline default
23
+ }
24
+ return fallback;
25
+ }
6
26
  /**
7
27
  * Analyzes feature description and repositories to recommend strategy guidelines.
8
28
  */
9
29
  export async function suggestWorkflow(description, repos, localLlmConfig) {
10
30
  const repoNames = repos.map((r) => r.name);
11
- const runHeuristic = () => {
31
+ const runHeuristic = async () => {
12
32
  const descLower = (description || '').toLowerCase();
13
33
  const isComplexWord = descLower.includes('refactor') ||
14
34
  descLower.includes('migrate') ||
@@ -33,27 +53,30 @@ export async function suggestWorkflow(description, repos, localLlmConfig) {
33
53
  descLower.includes('test') ||
34
54
  descLower.includes('doc');
35
55
  if (repos.length > 2 || isComplexWord) {
56
+ const content = await loadTemplateContent('plan-implement-review', `# Team Strategy: Plan, Implement, Review\n\nThis workspace involves complex changes across multiple projects: ${repoNames.join(', ')}.\n\n## Roles & Coordination\n1. **Lead Planner**: Analyzes requirements and details a step-by-step design plan in \`implementation_plan.md\`.\n2. **Code Implementer**: Executes modifications project-by-project following the approved design.\n3. **Code Reviewer**: Runs testing/verification and approves before completion.\n\nPlease follow these roles strictly.`);
36
57
  return {
37
58
  difficulty: 'complex',
38
59
  suggestedWorkflowId: 'plan-implement-review',
39
60
  rationale: `This task spans multiple repositories or involves architectural components (${repoNames.join(', ')}). A structured Plan-Implement-Review strategy is recommended to coordinate changes carefully.`,
40
- customInstructions: `# Team Strategy: Plan, Implement, Review\n\nThis workspace involves complex changes across multiple projects: ${repoNames.join(', ')}.\n\n## Roles & Coordination\n1. **Lead Planner**: Analyzes requirements and details a step-by-step design plan in \`implementation_plan.md\`.\n2. **Code Implementer**: Executes modifications project-by-project following the approved design.\n3. **Code Reviewer**: Runs testing/verification and approves before completion.\n\nPlease follow these roles strictly.`
61
+ customInstructions: content,
41
62
  };
42
63
  }
43
64
  else if (repos.length === 1 && isSimpleWord && !isComplexWord) {
65
+ const content = await loadTemplateContent('solo-developer', `# Team Strategy: Solo Developer\n\nThis task is a localized fix in ${repoNames[0] || 'the project'}.\n\n## Guidelines\n- Direct implementation by the main agent.\n- Run tests and compile code immediately.\n- Avoid spawning subagents to reduce overhead.`);
44
66
  return {
45
67
  difficulty: 'simple',
46
68
  suggestedWorkflowId: 'solo-developer',
47
69
  rationale: `This is a localized fix/tweak within a single repository (${repoNames.join(', ')}). A Solo Developer pattern minimizes overhead and speeds up the modification.`,
48
- customInstructions: `# Team Strategy: Solo Developer\n\nThis task is a localized fix in ${repoNames[0] || 'the project'}.\n\n## Guidelines\n- Direct implementation by the main agent.\n- Run tests and compile code immediately.\n- Avoid spawning subagents to reduce overhead.`
70
+ customInstructions: content,
49
71
  };
50
72
  }
51
73
  else {
74
+ const content = await loadTemplateContent('research-verify', `# Team Strategy: Research & Verify\n\nThis task involves moderate changes in ${repoNames.join(', ')}.\n\n## Guidelines\n1. **Research Phase**: Inspect existing components and API interfaces first.\n2. **Implementation Phase**: Write modular code changes.\n3. **Verification Phase**: Confirm build and runs correctly.`);
52
75
  return {
53
76
  difficulty: 'moderate',
54
77
  suggestedWorkflowId: 'research-verify',
55
78
  rationale: `This is a feature of moderate scope affecting ${repoNames.join(', ')}. We recommend first researching the codebase and dependencies, followed by targeted implementation.`,
56
- customInstructions: `# Team Strategy: Research & Verify\n\nThis task involves moderate changes in ${repoNames.join(', ')}.\n\n## Guidelines\n1. **Research Phase**: Inspect existing components and API interfaces first.\n2. **Implementation Phase**: Write modular code changes.\n3. **Verification Phase**: Confirm build and runs correctly.`
79
+ customInstructions: content,
57
80
  };
58
81
  }
59
82
  };
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-advisor.js","sourceRoot":"","sources":["../../src/utils/workflow-advisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-advisor.js","sourceRoot":"","sources":["../../src/utils/workflow-advisor.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrpatronz/nexusflow",
3
- "version": "1.5.0",
3
+ "version": "1.7.0",
4
4
  "description": "Combine multiple repos into a workspace with rich AI assistant context",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1,28 +0,0 @@
1
- import type { StoragePort, StorageAdapterMeta } from '../ports/storage.js';
2
- /**
3
- * Obsidian-native storage adapter.
4
- *
5
- * Writes markdown files to a configurable Obsidian vault path with optional
6
- * YAML frontmatter (tags, dates, type). Uses the same two-layer structure
7
- * as CentralVaultAdapter (_base/<repo>/ + <workspace>/).
8
- */
9
- export declare class ObsidianStorageAdapter implements StoragePort {
10
- readonly meta: StorageAdapterMeta;
11
- private vaultPath;
12
- private addFrontmatter;
13
- constructor();
14
- configure(settings: Record<string, unknown>): void;
15
- private wrapWithFrontmatter;
16
- private getFeaturePath;
17
- writeWorkspaceFile(workspacePath: string, featureId: string, filename: string, content: string): Promise<void>;
18
- readWorkspaceFile(workspacePath: string, featureId: string, filename: string): Promise<string>;
19
- workspaceFileExists(workspacePath: string, featureId: string, filename: string): Promise<boolean>;
20
- resolveWorkspaceFileUrl(workspacePath: string, featureId: string, filename: string): string;
21
- private getBasePath;
22
- writeBaseFile(workspacePath: string, repoName: string, filename: string, content: string): Promise<void>;
23
- readBaseFile(workspacePath: string, repoName: string, filename: string): Promise<string>;
24
- baseFileExists(workspacePath: string, repoName: string, filename: string): Promise<boolean>;
25
- resolveBaseFileUrl(workspacePath: string, repoName: string, filename: string): string;
26
- deleteWorkspace(workspacePath: string, featureId: string): Promise<void>;
27
- }
28
- //# sourceMappingURL=obsidian-storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obsidian-storage.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/obsidian-storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE3E;;;;;;GAMG;AACH,qBAAa,sBAAuB,YAAW,WAAW;IACxD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAoB/B;IAEF,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,cAAc,CAAiB;;IAWvC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAalD,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,cAAc;IAIhB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9G,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9F,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASvG,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAM3F,OAAO,CAAC,WAAW;IAIb,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxG,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxF,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASjG,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI/E,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM/E"}
@@ -1,135 +0,0 @@
1
- import * as fs from 'node:fs/promises';
2
- import * as path from 'node:path';
3
- import * as os from 'node:os';
4
- /**
5
- * Obsidian-native storage adapter.
6
- *
7
- * Writes markdown files to a configurable Obsidian vault path with optional
8
- * YAML frontmatter (tags, dates, type). Uses the same two-layer structure
9
- * as CentralVaultAdapter (_base/<repo>/ + <workspace>/).
10
- */
11
- export class ObsidianStorageAdapter {
12
- meta = {
13
- name: 'obsidian',
14
- displayName: 'Obsidian Vault',
15
- description: 'Store context in an Obsidian vault with YAML frontmatter and wikilinks.',
16
- configFields: [
17
- {
18
- key: 'vaultPath',
19
- label: 'Obsidian Vault Path',
20
- type: 'path',
21
- required: true,
22
- description: 'Absolute path to your Obsidian vault folder (e.g. ~/Obsidian/Dev)',
23
- },
24
- {
25
- key: 'addFrontmatter',
26
- label: 'Add YAML Frontmatter',
27
- type: 'boolean',
28
- default: true,
29
- description: 'Add tags, created date, and type metadata to each file',
30
- },
31
- ],
32
- };
33
- vaultPath = '';
34
- addFrontmatter = true;
35
- constructor() {
36
- try {
37
- const home = os.homedir();
38
- if (home) {
39
- this.vaultPath = path.join(home, 'Obsidian', 'NexusFlow');
40
- }
41
- }
42
- catch { }
43
- }
44
- configure(settings) {
45
- if (settings.vaultPath && typeof settings.vaultPath === 'string') {
46
- this.vaultPath = settings.vaultPath.startsWith('~')
47
- ? path.join(os.homedir(), settings.vaultPath.slice(1))
48
- : settings.vaultPath;
49
- }
50
- if (typeof settings.addFrontmatter === 'boolean') {
51
- this.addFrontmatter = settings.addFrontmatter;
52
- }
53
- }
54
- // ── Frontmatter helpers ──────────────────────────────────
55
- wrapWithFrontmatter(content, tags, type) {
56
- if (!this.addFrontmatter)
57
- return content;
58
- const now = new Date().toISOString();
59
- const fm = [
60
- '---',
61
- `tags: [${tags.map(t => `"${t}"`).join(', ')}]`,
62
- `type: ${type}`,
63
- `created: ${now}`,
64
- `modified: ${now}`,
65
- `generator: nexusflow`,
66
- '---',
67
- '',
68
- ].join('\n');
69
- // Strip existing frontmatter if present
70
- const stripped = content.replace(/^---\n[\s\S]*?\n---\n*/, '');
71
- return fm + stripped;
72
- }
73
- // ── Workspace (feature) layer ────────────────────────────
74
- getFeaturePath(featureId) {
75
- return path.join(this.vaultPath, 'nexusflow', 'workspaces', featureId);
76
- }
77
- async writeWorkspaceFile(workspacePath, featureId, filename, content) {
78
- const dir = this.getFeaturePath(featureId);
79
- const filePath = path.join(dir, filename);
80
- await fs.mkdir(path.dirname(filePath), { recursive: true });
81
- const wrapped = this.wrapWithFrontmatter(content, [featureId, 'workspace'], 'workspace-context');
82
- await fs.writeFile(filePath, wrapped, 'utf8');
83
- }
84
- async readWorkspaceFile(workspacePath, featureId, filename) {
85
- const dir = this.getFeaturePath(featureId);
86
- return await fs.readFile(path.join(dir, filename), 'utf8');
87
- }
88
- async workspaceFileExists(workspacePath, featureId, filename) {
89
- try {
90
- await fs.access(path.join(this.getFeaturePath(featureId), filename));
91
- return true;
92
- }
93
- catch {
94
- return false;
95
- }
96
- }
97
- resolveWorkspaceFileUrl(workspacePath, featureId, filename) {
98
- return path.join(this.getFeaturePath(featureId), filename).replace(/\\/g, '/');
99
- }
100
- // ── Base (repo) layer ────────────────────────────────────
101
- getBasePath(repoName) {
102
- return path.join(this.vaultPath, 'nexusflow', '_base', repoName);
103
- }
104
- async writeBaseFile(workspacePath, repoName, filename, content) {
105
- const dir = this.getBasePath(repoName);
106
- const filePath = path.join(dir, filename);
107
- await fs.mkdir(path.dirname(filePath), { recursive: true });
108
- const wrapped = this.wrapWithFrontmatter(content, [repoName, 'base'], 'base-knowledge');
109
- await fs.writeFile(filePath, wrapped, 'utf8');
110
- }
111
- async readBaseFile(workspacePath, repoName, filename) {
112
- const dir = this.getBasePath(repoName);
113
- return await fs.readFile(path.join(dir, filename), 'utf8');
114
- }
115
- async baseFileExists(workspacePath, repoName, filename) {
116
- try {
117
- await fs.access(path.join(this.getBasePath(repoName), filename));
118
- return true;
119
- }
120
- catch {
121
- return false;
122
- }
123
- }
124
- resolveBaseFileUrl(workspacePath, repoName, filename) {
125
- return path.join(this.getBasePath(repoName), filename).replace(/\\/g, '/');
126
- }
127
- async deleteWorkspace(workspacePath, featureId) {
128
- const dir = this.getFeaturePath(featureId);
129
- try {
130
- await fs.rm(dir, { recursive: true, force: true });
131
- }
132
- catch { }
133
- }
134
- }
135
- //# sourceMappingURL=obsidian-storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obsidian-storage.js","sourceRoot":"","sources":["../../../src/core/adapters/obsidian-storage.ts"],"names":[],"mappings":"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"}