groove-dev 0.27.186 → 0.27.187

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/cli",
3
- "version": "0.27.186",
3
+ "version": "0.27.187",
4
4
  "description": "GROOVE CLI — manage AI coding agents from your terminal",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/daemon",
3
- "version": "0.27.186",
3
+ "version": "0.27.187",
4
4
  "description": "GROOVE daemon — agent orchestration engine",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -94,3 +94,19 @@ export function watchInstructions(port = 31415, agentName = 'YOUR_NAME') {
94
94
  '- Do not poll or sleep-loop waiting yourself — set the watch and end the turn. That is the whole point.',
95
95
  ];
96
96
  }
97
+
98
+ // Log-path convention. The GUI turns log paths in a message into a one-click
99
+ // "tail" button; a bare or relative filename can't be located reliably (there
100
+ // may be several with the same name in different directories), so agents must
101
+ // give the absolute path.
102
+ export function logFileInstructions() {
103
+ return [
104
+ '## Mentioning Log Files',
105
+ '',
106
+ 'When you start a process that writes to a log the user may want to watch, state the',
107
+ "log's ABSOLUTE path — e.g. `Logging to /home/you/project/runs/train.log` — not a bare",
108
+ 'or relative filename. The GUI turns that path into a one-click "tail" button for the',
109
+ 'user; a bare name like `train.log` cannot be located reliably (several files may share',
110
+ 'it), so always resolve it to a full path first (`realpath` / `readlink -f` if unsure).',
111
+ ];
112
+ }
@@ -4,7 +4,7 @@
4
4
  import { writeFileSync, readFileSync, existsSync, readdirSync, statSync } from 'fs';
5
5
  import { resolve, dirname, basename } from 'path';
6
6
  import { escapeMd } from './validate.js';
7
- import { innerChatInstructions, watchInstructions } from './innerchat-docs.js';
7
+ import { innerChatInstructions, watchInstructions, logFileInstructions } from './innerchat-docs.js';
8
8
 
9
9
  const GROOVE_SECTION_START = '<!-- GROOVE:START -->';
10
10
  const GROOVE_SECTION_END = '<!-- GROOVE:END -->';
@@ -561,7 +561,7 @@ export class Introducer {
561
561
  // compaction — the spawn prompt alone can scroll out of a long session.
562
562
  _innerChatSection() {
563
563
  const port = this.daemon.port || 31415;
564
- return [...innerChatInstructions(port), '', ...watchInstructions(port)];
564
+ return [...innerChatInstructions(port), '', ...watchInstructions(port), '', ...logFileInstructions()];
565
565
  }
566
566
 
567
567
  writeRegistryFile(projectDir) {
@@ -10,7 +10,7 @@ import { LocalProvider } from './providers/local.js';
10
10
  import { OllamaProvider } from './providers/ollama.js';
11
11
  import { AgentLoop } from './agent-loop.js';
12
12
  import { validateAgentConfig } from './validate.js';
13
- import { innerChatInstructions, watchInstructions } from './innerchat-docs.js';
13
+ import { innerChatInstructions, watchInstructions, logFileInstructions } from './innerchat-docs.js';
14
14
 
15
15
  const __dirname = dirname(fileURLToPath(import.meta.url));
16
16
  const SLIDES_ENGINE_SRC = resolve(__dirname, '../templates/groove-slides.cjs');
@@ -1174,6 +1174,8 @@ For normal file edits within your scope, proceed without review.
1174
1174
  ...innerChatInstructions(port, agent.name),
1175
1175
  '',
1176
1176
  ...watchInstructions(port, agent.name),
1177
+ '',
1178
+ ...logFileInstructions(),
1177
1179
  ].join('\n') + '\n\n';
1178
1180
  if (spawnConfig.prompt.startsWith('# Handoff Brief')) {
1179
1181
  spawnConfig.prompt += '\n\n' + capabilities.trim();