@technomoron/agent-run 0.99.34 → 0.99.35

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/CHANGES CHANGED
@@ -1,6 +1,12 @@
1
1
  CHANGES
2
2
  =======
3
3
 
4
+ Version 0.99.35 (2026-09-07)
5
+ ----------------------------
6
+ * Recognize standing user authorization for project memory updates.
7
+ * Simplify command dispatch, instruction rendering and skill handling without
8
+ changing their behavior.
9
+
4
10
  Version 0.99.34 (2026-09-07)
5
11
  ----------------------------
6
12
  * Keep the agent-brain socket under the configured root so the service and
package/README.md CHANGED
@@ -302,8 +302,9 @@ new ChatGPT login.
302
302
 
303
303
  Each profile has a durable `notes/memory/` directory outside the source repo.
304
304
  `README.md` is a short index; agents read only the linked files relevant to the
305
- current task. Agents may update project memory only when the user explicitly
306
- asks them to remember or update something for that project.
305
+ current task. Agents may update project memory when the user explicitly requests it or
306
+ authorizes a standing workflow, such as saving durable corrections and updating
307
+ affected specs. This authorization does not permit Git or external-service writes.
307
308
 
308
309
  Codex's native `$CODEX_HOME/memories/` remains under ignored `live/` state. It
309
310
  is generated, machine-local recall data and is not copied into the tracked
@@ -36,9 +36,10 @@ function getSkills(store) {
36
36
  throw new Error(`Missing global parent for skill ${parsed.name}`);
37
37
  content = `${parent.content}\n\n${content}`;
38
38
  }
39
- skills.set(parsed.name, { ...parsed, scope, content, source: path.relative(store.configRoot, file) });
39
+ const skill = { ...parsed, scope, content, source: path.relative(store.configRoot, file) };
40
+ skills.set(parsed.name, skill);
40
41
  if (scope === 'global')
41
- globalSkills.set(parsed.name, skills.get(parsed.name));
42
+ globalSkills.set(parsed.name, skill);
42
43
  }
43
44
  }
44
45
  return [...skills.values()];
package/dist/cli.js CHANGED
@@ -57,13 +57,11 @@ function parseCommand(command, args) {
57
57
  case 'status':
58
58
  return parseStatusCommand(args);
59
59
  case 'init':
60
- return parseInitCommand(args);
61
60
  case 'generate':
62
- return parseGenerateCommand(args);
61
+ case 'edit':
62
+ return { command, targetPath: parseSinglePath(args, command) };
63
63
  case 'setup':
64
64
  return parseSetupCommand(args);
65
- case 'edit':
66
- return parseEditCommand(args);
67
65
  case 'update':
68
66
  return parseUpdateCommand(args);
69
67
  case 'migrate-config':
@@ -216,12 +214,6 @@ function parseCheckCommand(inputArgs) {
216
214
  }
217
215
  return { all, command: 'check', targetPath: path.resolve(targetPath) };
218
216
  }
219
- function parseInitCommand(inputArgs) {
220
- return { command: 'init', targetPath: parseSinglePath(inputArgs, 'init') };
221
- }
222
- function parseGenerateCommand(inputArgs) {
223
- return { command: 'generate', targetPath: parseSinglePath(inputArgs, 'generate') };
224
- }
225
217
  function parseSetupCommand(inputArgs) {
226
218
  let profile = null;
227
219
  for (const arg of inputArgs) {
@@ -238,11 +230,8 @@ function parseSetupCommand(inputArgs) {
238
230
  }
239
231
  return { command: 'setup', profile };
240
232
  }
241
- function parseEditCommand(inputArgs) {
242
- return { command: 'edit', targetPath: parseSinglePath(inputArgs, 'edit') };
243
- }
244
- function parseSinglePath(inputArgs, command, defaultPath = process.cwd()) {
245
- let targetPath = defaultPath;
233
+ function parseSinglePath(inputArgs, command) {
234
+ let targetPath = process.cwd();
246
235
  for (const arg of inputArgs) {
247
236
  if (isHelpFlag(arg)) {
248
237
  printHelp(command);
package/dist/commands.js CHANGED
@@ -29,11 +29,9 @@ function dispatch(command) {
29
29
  runCheck(command);
30
30
  return;
31
31
  case 'status':
32
- runStatus(command);
32
+ runStatus();
33
33
  return;
34
34
  case 'init':
35
- runGenerate(command);
36
- return;
37
35
  case 'generate':
38
36
  runGenerate(command);
39
37
  return;
@@ -104,7 +102,7 @@ function runTool(parsed) {
104
102
  }
105
103
  (0, spawn_agent_1.spawnAgent)(adapter.spawn(runtime, { binary: realBinary, passthroughArgs: args, wrapperArgs }));
106
104
  }
107
- function runStatus(_parsed) {
105
+ function runStatus() {
108
106
  const adapters = (0, registry_1.listAgentAdapters)();
109
107
  const columns = adapters.map((adapter) => adapter.displayName);
110
108
  const capabilityRows = [
@@ -29,16 +29,16 @@ function buildCanonicalInstructions(env, configRoot, manifest, context, trace) {
29
29
  return { sections: renderedSections };
30
30
  }
31
31
  function writeAgentsMd(env, configRoot, context, trace) {
32
- return renderInstructionFile('AGENTS.md', env, configRoot, context, false, trace);
32
+ return renderInstructionFile('AGENTS.md', env, configRoot, context, trace);
33
33
  }
34
34
  function writeClaudeMd(env, configRoot, context, trace) {
35
- return renderInstructionFile('CLAUDE.md', env, configRoot, context, true, trace);
35
+ return renderInstructionFile('CLAUDE.md', env, configRoot, context, trace);
36
36
  }
37
- function renderInstructionFile(templateName, env, configRoot, context, isClaude, trace) {
37
+ function renderInstructionFile(templateName, env, configRoot, context, trace) {
38
38
  const templatePath = `global/tool-templates/${templateName}.njk`;
39
39
  const content = fs.existsSync(path.join(configRoot, templatePath))
40
40
  ? (0, templates_1.renderTemplateFile)(env, configRoot, templatePath, context, trace)
41
- : env.renderString((0, defaults_1.defaultToolInstructionsTemplate)(isClaude), context);
41
+ : env.renderString((0, defaults_1.defaultToolInstructionsTemplate)(templateName === 'CLAUDE.md'), context);
42
42
  (0, templates_1.assertNoUnexpandedTemplateVars)(templateName, content);
43
43
  return content.replace(/\n*$/, '\n');
44
44
  }
@@ -49,6 +49,6 @@ function projectMemoryInstructions(context) {
49
49
  `Project memory is stored in ${context.paths.projectMemoryDir}.`,
50
50
  'Read README.md there before starting work when prior project context may matter, then read only the linked files relevant to the task.',
51
51
  'Do not store secrets, raw chat transcripts, or temporary task state there.',
52
- 'Update project memory only when the user explicitly asks you to remember or update something for this project.'
52
+ 'Update project memory when the user explicitly requests it or has authorized a standing workflow that records it.'
53
53
  ].join('\n');
54
54
  }
package/dist/renderer.js CHANGED
@@ -164,7 +164,7 @@ function removeStaleGeneratedEntries(rendered) {
164
164
  }
165
165
  }
166
166
  }
167
- function removeStaleGeneratedSkills(dir, expectedNames, preservedNames = new Set()) {
167
+ function removeStaleGeneratedSkills(dir, expectedNames, preservedNames) {
168
168
  if (!fs.existsSync(dir)) {
169
169
  return;
170
170
  }
@@ -292,7 +292,7 @@ function migrateLiveReviewFiles(context) {
292
292
  const sourcePath = path.join(legacyReviewDir, entry.name);
293
293
  let targetPath = path.join(context.paths.reviewDir, entry.name);
294
294
  if (fs.existsSync(targetPath)) {
295
- if (filesHaveSameContent(sourcePath, targetPath)) {
295
+ if (fs.readFileSync(sourcePath).equals(fs.readFileSync(targetPath))) {
296
296
  fs.rmSync(sourcePath);
297
297
  continue;
298
298
  }
@@ -301,11 +301,6 @@ function migrateLiveReviewFiles(context) {
301
301
  moveFile(sourcePath, targetPath);
302
302
  }
303
303
  }
304
- function filesHaveSameContent(leftPath, rightPath) {
305
- const left = fs.readFileSync(leftPath);
306
- const right = fs.readFileSync(rightPath);
307
- return left.length === right.length && left.equals(right);
308
- }
309
304
  function nextAvailablePath(dir, filename) {
310
305
  const parsed = path.parse(filename);
311
306
  for (let sequence = 1;; sequence += 1) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@technomoron/agent-run",
3
- "version": "0.99.34",
3
+ "version": "0.99.35",
4
4
  "packageManager": "pnpm@10.34.5",
5
5
  "bin": {
6
6
  "agent-run": "dist/agent-run.js",