@fiale-plus/repo-arch 0.1.0 → 0.3.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.
@@ -0,0 +1,209 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ import { inspectFlow } from './flow.js';
5
+ import { prepareTrain, findLatestAdapterCheckpoint } from './training.js';
6
+ import { loadRepoArchConfig } from './config.js';
7
+ function now() {
8
+ return new Date().toISOString();
9
+ }
10
+ function readJson(filePath) {
11
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
12
+ }
13
+ function writeJson(filePath, value) {
14
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
15
+ fs.writeFileSync(filePath, JSON.stringify(value, null, 2) + '\n', 'utf8');
16
+ }
17
+ function appendJsonl(filePath, value) {
18
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
19
+ fs.appendFileSync(filePath, JSON.stringify(value) + '\n', 'utf8');
20
+ }
21
+ function sessionPath(runDir) {
22
+ return path.join(runDir, 'training', 'session.json');
23
+ }
24
+ function cyclesPath(runDir) {
25
+ return path.join(runDir, 'training', 'cycles.jsonl');
26
+ }
27
+ function createSession(flow, plan, resumeAdapterFile) {
28
+ const sessionId = `${flow.manifest.run.id}-${plan.model.replace(/[^a-zA-Z0-9]+/g, '-').slice(0, 24)}`;
29
+ const startedAt = now();
30
+ return {
31
+ schemaVersion: 1,
32
+ sessionId,
33
+ runId: flow.manifest.run.id,
34
+ runDir: flow.runDir,
35
+ flowManifestPath: flow.manifestPath,
36
+ createdAt: startedAt,
37
+ updatedAt: startedAt,
38
+ status: 'idle',
39
+ model: plan.model,
40
+ iters: plan.iters,
41
+ learningRate: plan.learningRate,
42
+ adapterPath: plan.adapterPath,
43
+ resumeAdapterFile,
44
+ latestCheckpoint: resumeAdapterFile,
45
+ command: plan.command,
46
+ trainPlan: path.join(flow.runDir, 'training', 'train-plan.json'),
47
+ };
48
+ }
49
+ export function loadTrainSession(runDir) {
50
+ const filePath = sessionPath(runDir);
51
+ if (!fs.existsSync(filePath))
52
+ return null;
53
+ try {
54
+ return readJson(filePath);
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ export function listTrainSessions(repoPath, configPath) {
61
+ const config = loadRepoArchConfig({ repoPath, configPath });
62
+ const runsDir = config.flow.runsDir;
63
+ if (!fs.existsSync(runsDir))
64
+ return [];
65
+ const sessions = [];
66
+ for (const entry of fs.readdirSync(runsDir, { withFileTypes: true })) {
67
+ if (!entry.isDirectory())
68
+ continue;
69
+ const candidate = path.join(runsDir, entry.name, 'training', 'session.json');
70
+ if (!fs.existsSync(candidate))
71
+ continue;
72
+ const session = loadTrainSession(path.join(runsDir, entry.name));
73
+ if (session)
74
+ sessions.push(session);
75
+ }
76
+ return sessions.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
77
+ }
78
+ export function formatTrainCycleResult(result) {
79
+ const lines = [];
80
+ lines.push(`\n Training cycle for ${result.flow.manifest.run.id}`);
81
+ lines.push(` Session: ${result.session.sessionId}`);
82
+ lines.push(` Run dir: ${result.flow.runDir}`);
83
+ lines.push(` Model: ${result.session.model}`);
84
+ lines.push(` Resume: ${result.resumeAdapterFile ?? '(fresh)'}`);
85
+ lines.push(` Checkpoint: ${result.session.latestCheckpoint ?? '(none yet)'}`);
86
+ lines.push(` Command:`);
87
+ lines.push(` ${result.plan.command.replace(/\\n/g, '\n')}`);
88
+ lines.push('');
89
+ return lines.join('\n');
90
+ }
91
+ export function formatTrainStatus(session, flow) {
92
+ const lines = [];
93
+ if (!session) {
94
+ lines.push('\n No training session found.');
95
+ lines.push(' Use `repo-arch train cycle` first.\n');
96
+ return lines.join('\n');
97
+ }
98
+ lines.push(`\n Training session: ${session.sessionId}`);
99
+ lines.push(` Run: ${session.runId}`);
100
+ lines.push(` Status: ${session.status}`);
101
+ lines.push(` Model: ${session.model}`);
102
+ lines.push(` Resume: ${session.resumeAdapterFile ?? '(fresh)'}`);
103
+ lines.push(` Latest checkpoint: ${session.latestCheckpoint ?? '(none yet)'}`);
104
+ lines.push(` Updated: ${session.updatedAt}`);
105
+ if (flow) {
106
+ lines.push(` Flow run dir: ${flow.runDir}`);
107
+ }
108
+ lines.push('');
109
+ return lines.join('\n');
110
+ }
111
+ export function formatTrainList(sessions) {
112
+ const lines = [];
113
+ lines.push(`\n Training sessions (${sessions.length})\n`);
114
+ if (sessions.length === 0) {
115
+ lines.push(' No sessions found.');
116
+ lines.push('');
117
+ return lines.join('\n');
118
+ }
119
+ for (const session of sessions) {
120
+ lines.push(` ${session.status.padEnd(6)} ${session.sessionId} ${session.updatedAt.slice(0, 19)} ${session.runId}`);
121
+ }
122
+ lines.push('');
123
+ return lines.join('\n');
124
+ }
125
+ export function runTrainCycle(options = {}, mode = 'cycle') {
126
+ const flow = inspectFlow({ repoPath: options.repoPath, configPath: options.configPath, runId: options.runRef ?? 'latest' });
127
+ const adapterName = `repo-arch-${flow.manifest.run.headSha.slice(0, 7)}`;
128
+ const adapterPath = path.join(flow.manifest.run.repoRoot, '.repo-arch', 'adapters', adapterName);
129
+ const latestCheckpoint = findLatestAdapterCheckpoint(adapterPath);
130
+ if (mode === 'resume' && !latestCheckpoint) {
131
+ throw new Error(`No checkpoint found in ${adapterPath}. Run repo-arch train cycle first.`);
132
+ }
133
+ const plan = prepareTrain({
134
+ repoPath: flow.manifest.run.repoRoot,
135
+ outPath: path.join(flow.runDir, 'training'),
136
+ model: options.model ?? flow.manifest.config.training.model,
137
+ iters: options.iters ?? flow.manifest.config.training.iters,
138
+ learningRate: options.learningRate ?? flow.manifest.config.training.learningRate,
139
+ adapterName,
140
+ resumeAdapterFile: latestCheckpoint ?? undefined,
141
+ });
142
+ writeJson(path.join(flow.runDir, 'training', 'train-plan.json'), {
143
+ schemaVersion: 1,
144
+ ...plan,
145
+ note: 'Use repo-arch train cycle to continue training or train run for a one-shot run.',
146
+ });
147
+ const resumeAdapterFile = latestCheckpoint;
148
+ const sessionPathValue = sessionPath(flow.runDir);
149
+ const cyclesPathValue = cyclesPath(flow.runDir);
150
+ const session = createSession(flow, plan, resumeAdapterFile);
151
+ session.status = 'running';
152
+ writeJson(sessionPathValue, session);
153
+ appendJsonl(cyclesPathValue, {
154
+ schemaVersion: 1,
155
+ sessionId: session.sessionId,
156
+ runId: session.runId,
157
+ mode,
158
+ startedAt: now(),
159
+ command: plan.command,
160
+ resumeAdapterFile,
161
+ adapterPath: plan.adapterPath,
162
+ });
163
+ try {
164
+ execSync(plan.command.replace(/\\\n /g, ' '), {
165
+ stdio: 'inherit',
166
+ cwd: flow.manifest.run.repoRoot,
167
+ });
168
+ const afterCheckpoint = findLatestAdapterCheckpoint(plan.adapterPath);
169
+ session.status = 'ok';
170
+ session.updatedAt = now();
171
+ session.command = plan.command;
172
+ session.latestCheckpoint = afterCheckpoint;
173
+ writeJson(sessionPathValue, session);
174
+ appendJsonl(cyclesPathValue, {
175
+ schemaVersion: 1,
176
+ sessionId: session.sessionId,
177
+ runId: session.runId,
178
+ mode,
179
+ finishedAt: session.updatedAt,
180
+ status: 'ok',
181
+ latestCheckpoint: afterCheckpoint,
182
+ });
183
+ }
184
+ catch (error) {
185
+ session.status = 'failed';
186
+ session.updatedAt = now();
187
+ session.command = plan.command;
188
+ writeJson(sessionPathValue, session);
189
+ appendJsonl(cyclesPathValue, {
190
+ schemaVersion: 1,
191
+ sessionId: session.sessionId,
192
+ runId: session.runId,
193
+ mode,
194
+ finishedAt: session.updatedAt,
195
+ status: 'failed',
196
+ error: error instanceof Error ? error.message : String(error),
197
+ });
198
+ throw error;
199
+ }
200
+ return {
201
+ flow,
202
+ plan,
203
+ session,
204
+ sessionPath: sessionPathValue,
205
+ cyclesPath: cyclesPathValue,
206
+ resumeAdapterFile,
207
+ };
208
+ }
209
+ //# sourceMappingURL=train-cycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"train-cycle.js","sourceRoot":"","sources":["../src/train-cycle.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,8 @@ export type TrainOptions = {
37
37
  iters?: number;
38
38
  adapterName?: string;
39
39
  learningRate?: number;
40
+ resumeAdapterFile?: string;
41
+ saveEvery?: number;
40
42
  /** Whether to actually run training (vs just printing the command) */
41
43
  run?: boolean;
42
44
  };
@@ -45,9 +47,12 @@ export type TrainPlan = {
45
47
  trainFile: string;
46
48
  validFile: string;
47
49
  model: string;
50
+ iters: number;
51
+ learningRate: number;
48
52
  adapterPath: string;
49
53
  command: string;
50
54
  examples: number;
51
55
  };
52
56
  export declare function prepareTrain(options?: TrainOptions): TrainPlan;
57
+ export declare function findLatestAdapterCheckpoint(adapterPath: string): string | null;
53
58
  export declare function formatTrain(plan: TrainPlan): string;
package/dist/training.js CHANGED
@@ -9,19 +9,56 @@ import { cachedOrGenerate } from './cache.js';
9
9
  export function generateQa(card) {
10
10
  const examples = [];
11
11
  const fileStr = card.affectedFiles.join(', ');
12
- // General "why" question
12
+ const evidence = card.supportingCommits.map(c => c.subject).join('; ');
13
13
  if (card.type === 'rationale-cluster' || card.type === 'repeated-fix') {
14
14
  examples.push({
15
15
  messages: [
16
16
  { role: 'user', content: `Why should I be careful when changing ${fileStr}?` },
17
- { role: 'assistant', content: `${card.title}. ${card.suggestion} Evidence: ${card.supportingCommits.map(c => c.subject).join('; ')}.` },
17
+ { role: 'assistant', content: `${card.title}. ${card.suggestion} Evidence: ${evidence}.` },
18
+ ],
19
+ sourceCardId: card.id,
20
+ taskType: 'qa',
21
+ });
22
+ examples.push({
23
+ messages: [
24
+ { role: 'user', content: `What should I know before modifying ${fileStr}?` },
25
+ { role: 'assistant', content: `${card.title}. ${card.suggestion}` },
26
+ ],
27
+ sourceCardId: card.id,
28
+ taskType: 'qa',
29
+ });
30
+ examples.push({
31
+ messages: [
32
+ { role: 'user', content: `What keeps breaking in ${fileStr}?` },
33
+ { role: 'assistant', content: `${card.title}. ${card.suggestion}` },
34
+ ],
35
+ sourceCardId: card.id,
36
+ taskType: 'qa',
37
+ });
38
+ }
39
+ if (card.type === 'test-gap') {
40
+ examples.push({
41
+ messages: [
42
+ { role: 'user', content: `Is there test coverage for ${fileStr}?` },
43
+ { role: 'assistant', content: `${card.title}. ${card.suggestion}` },
44
+ ],
45
+ sourceCardId: card.id,
46
+ taskType: 'qa',
47
+ });
48
+ examples.push({
49
+ messages: [
50
+ { role: 'user', content: `What should I know before modifying ${fileStr}?` },
51
+ { role: 'assistant', content: `${card.title}. ${card.suggestion}` },
18
52
  ],
19
53
  sourceCardId: card.id,
20
54
  taskType: 'qa',
21
55
  });
22
56
  }
23
- // Direct question from card title
24
- const titleQuestion = card.title.replace(/^High-churn file:/, 'Why does').replace(/^Repeated fixes in:/, 'What keeps breaking in').replace(/^Possible test gap:/, 'Is there test coverage for').replace(/^Reversion pattern:?/, 'Has this been reverted before');
57
+ const titleQuestion = card.title
58
+ .replace(/^High-churn file:/, 'Why does')
59
+ .replace(/^Repeated fixes in:/, 'What keeps breaking in')
60
+ .replace(/^Possible test gap:/, 'Is there test coverage for')
61
+ .replace(/^Reversion pattern:?/, 'Has this been reverted before');
25
62
  if (titleQuestion !== card.title) {
26
63
  examples.push({
27
64
  messages: [
@@ -36,62 +73,139 @@ export function generateQa(card) {
36
73
  }
37
74
  export function generateReviewWarning(card) {
38
75
  const examples = [];
76
+ const fileStr = card.affectedFiles.join(', ');
39
77
  if (card.type === 'repeated-fix' || card.type === 'revert-pattern') {
40
78
  examples.push({
41
79
  messages: [
42
- { role: 'user', content: `Review this change touching ${card.affectedFiles.join(', ')}.\nWhat risks should I check?` },
80
+ { role: 'user', content: `Review this change touching ${fileStr}.\nWhat risks should I check?` },
43
81
  { role: 'assistant', content: `Warning: ${card.title}. ${card.suggestion} This area has ${card.supportingCommits.length} relevant commits in history.` },
44
82
  ],
45
83
  sourceCardId: card.id,
46
84
  taskType: 'review-warning',
47
85
  });
86
+ examples.push({
87
+ messages: [
88
+ { role: 'user', content: `What should I know before modifying ${fileStr}?` },
89
+ { role: 'assistant', content: `Warning: ${card.title}. ${card.suggestion}` },
90
+ ],
91
+ sourceCardId: card.id,
92
+ taskType: 'review-warning',
93
+ });
48
94
  }
49
95
  return examples;
50
96
  }
51
97
  export function generateRiskClassification(card) {
52
98
  const examples = [];
99
+ const fileStr = card.affectedFiles.join(', ');
53
100
  const riskLevel = card.confidence >= 0.7 ? 'high' : card.confidence >= 0.5 ? 'medium' : 'low';
101
+ const risk = card.type === 'revert-pattern' ? 'revert_instability' : card.type === 'repeated-fix' ? 'regression_risk' : card.type === 'test-gap' ? 'test_coverage_concern' : 'informational';
102
+ const payload = JSON.stringify({
103
+ risk,
104
+ severity: riskLevel,
105
+ confidence: card.confidence,
106
+ reason: card.suggestion,
107
+ });
54
108
  examples.push({
55
109
  messages: [
56
- { role: 'user', content: `Classify risk for changing ${card.affectedFiles.join(', ')}.` },
57
- { role: 'assistant', content: JSON.stringify({
58
- risk: card.type === 'revert-pattern' ? 'revert_instability' : card.type === 'repeated-fix' ? 'regression_risk' : card.type === 'test-gap' ? 'test_coverage_concern' : 'informational',
59
- severity: riskLevel,
60
- confidence: card.confidence,
61
- reason: card.suggestion,
62
- }) },
110
+ { role: 'user', content: `Classify risk for changing ${fileStr}.` },
111
+ { role: 'assistant', content: payload },
63
112
  ],
64
113
  sourceCardId: card.id,
65
114
  taskType: 'risk-classification',
66
115
  });
116
+ if (card.type === 'repeated-fix' || card.type === 'test-gap' || card.type === 'revert-pattern') {
117
+ examples.push({
118
+ messages: [
119
+ { role: 'user', content: `Would it be risky to edit ${fileStr}?` },
120
+ { role: 'assistant', content: payload },
121
+ ],
122
+ sourceCardId: card.id,
123
+ taskType: 'risk-classification',
124
+ });
125
+ examples.push({
126
+ messages: [
127
+ { role: 'user', content: `Could a change to ${fileStr} be risky, and why?` },
128
+ { role: 'assistant', content: payload },
129
+ ],
130
+ sourceCardId: card.id,
131
+ taskType: 'risk-classification',
132
+ });
133
+ }
67
134
  return examples;
68
135
  }
69
136
  function generateNegative(cards) {
70
- // Generate negative examples from low-confidence or churn-hotspot cards
71
137
  const negatives = [];
138
+ const unknownFiles = [
139
+ 'src/new-feature.ts',
140
+ 'src/unknown-file.ts',
141
+ 'packages/unknown/pkg.ts',
142
+ 'packages/missing/module.ts',
143
+ ];
144
+ const prompts = [
145
+ (file) => `Review this change touching ${file}.\nWhat risks should I check?`,
146
+ (file) => `Is there test coverage for ${file}?`,
147
+ (file) => `What should I know before modifying ${file}?`,
148
+ (file) => `What keeps breaking in ${file}?`,
149
+ (file) => `Can you review ${file} and tell me the risk?`,
150
+ ];
151
+ const answer = 'No historical warnings found. Standard review applies.';
152
+ const hardFiles = new Set(['src/new-feature.ts', 'packages/unknown/pkg.ts']);
153
+ const extraPrompts = [
154
+ (file) => `Review this change touching ${file}.\nWhat risks should I check?`,
155
+ (file) => `Is there test coverage for ${file}?`,
156
+ (file) => `What should I know before modifying ${file}?`,
157
+ ];
158
+ for (const file of unknownFiles) {
159
+ for (const makePrompt of prompts) {
160
+ negatives.push({
161
+ messages: [
162
+ { role: 'user', content: makePrompt(file) },
163
+ { role: 'assistant', content: answer },
164
+ ],
165
+ sourceCardId: `negative:${file}`,
166
+ taskType: 'negative',
167
+ });
168
+ }
169
+ if (hardFiles.has(file)) {
170
+ for (let i = 0; i < 2; i += 1) {
171
+ for (const makePrompt of extraPrompts) {
172
+ negatives.push({
173
+ messages: [
174
+ { role: 'user', content: makePrompt(file) },
175
+ { role: 'assistant', content: answer },
176
+ ],
177
+ sourceCardId: `negative:${file}:hard:${i}`,
178
+ taskType: 'negative',
179
+ });
180
+ }
181
+ }
182
+ }
183
+ if (file === 'packages/unknown/pkg.ts') {
184
+ for (let i = 0; i < 4; i += 1) {
185
+ negatives.push({
186
+ messages: [
187
+ { role: 'user', content: `Is there test coverage for ${file}?` },
188
+ { role: 'assistant', content: answer },
189
+ ],
190
+ sourceCardId: `negative:${file}:coverage:${i}`,
191
+ taskType: 'negative',
192
+ });
193
+ }
194
+ }
195
+ }
72
196
  for (const card of cards) {
73
197
  if (card.type === 'churn-hotspot' && card.confidence < 0.6) {
74
198
  negatives.push({
75
199
  messages: [
76
200
  { role: 'user', content: `Review this change touching ${card.affectedFiles.join(', ')}.\nWhat risks should I check?` },
77
- { role: 'assistant', content: `No specific historical warnings for this file. It changes frequently but has no repeated fix or revert patterns. Standard review applies.` },
201
+ { role: 'assistant', content: 'No specific historical warnings for this file. It changes frequently but has no repeated fix or revert patterns. Standard review applies.' },
78
202
  ],
79
203
  sourceCardId: card.id,
80
204
  taskType: 'negative',
81
205
  });
206
+ break;
82
207
  }
83
208
  }
84
- // Add a generic negative if few exist
85
- if (negatives.length === 0) {
86
- negatives.push({
87
- messages: [
88
- { role: 'user', content: 'Review this change touching src/new-feature.ts.\nWhat risks should I check?' },
89
- { role: 'assistant', content: 'No historical warnings found for this file. Standard review applies.' },
90
- ],
91
- sourceCardId: 'generic',
92
- taskType: 'negative',
93
- });
94
- }
95
209
  return negatives;
96
210
  }
97
211
  export function generateDataset(options = {}) {
@@ -143,7 +257,6 @@ export function formatDataset(result) {
143
257
  }
144
258
  }
145
259
  lines.push('');
146
- // Show a sample
147
260
  const first = result.examples[0];
148
261
  if (first) {
149
262
  lines.push(` Sample (${first.taskType}):`);
@@ -156,39 +269,37 @@ export function formatDataset(result) {
156
269
  export function prepareTrain(options = {}) {
157
270
  const repoRoot = resolveRepoRoot(options.repoPath);
158
271
  const headSha = getHeadSha(repoRoot);
159
- // Default output dir inside repo
160
272
  const outDir = options.outPath
161
273
  ? path.resolve(options.outPath)
162
274
  : path.join(repoRoot, '.repo-arch', 'training-data');
163
- // Generate dataset
164
275
  const dataset = generateDataset({ repoPath: options.repoPath });
165
276
  const examples = dataset.examples;
166
277
  if (examples.length === 0) {
167
278
  throw new Error('No training examples generated. Use repo-arch accept on some cards first.');
168
279
  }
169
- // Shuffle and split 90/10
170
280
  const shuffled = [...examples].sort(() => Math.random() - 0.5);
171
- const splitIdx = Math.max(1, Math.floor(shuffled.length * 0.9));
281
+ const minValid = Math.max(4, Math.ceil(shuffled.length * 0.1));
282
+ const splitIdx = Math.max(shuffled.length - minValid, 1);
172
283
  const train = shuffled.slice(0, splitIdx);
173
284
  const valid = shuffled.slice(splitIdx);
174
- // Write train.jsonl and valid.jsonl (OpenAI chat format)
175
285
  fs.mkdirSync(outDir, { recursive: true });
176
286
  const trainFile = path.join(outDir, 'train.jsonl');
177
287
  const validFile = path.join(outDir, 'valid.jsonl');
178
288
  fs.writeFileSync(trainFile, train.map(ex => JSON.stringify({ messages: ex.messages })).join('\n') + '\n');
179
289
  fs.writeFileSync(validFile, valid.map(ex => JSON.stringify({ messages: ex.messages })).join('\n') + '\n');
180
- // Build mlx_lm.lora command
181
290
  const model = options.model ?? 'Qwen/Qwen2.5-Coder-1.5B-Instruct';
182
291
  const adapterName = options.adapterName ?? `repo-arch-${headSha.slice(0, 7)}`;
183
292
  const adapterPath = path.join(repoRoot, '.repo-arch', 'adapters', adapterName);
184
293
  const iters = options.iters ?? 100;
185
294
  const learningRate = options.learningRate ?? 1e-5;
295
+ const saveEvery = options.saveEvery ?? 100;
186
296
  const command = [
187
297
  'mlx_lm.lora',
188
298
  '--train',
189
299
  `--model ${model}`,
190
300
  `--data ${outDir}`,
191
301
  `--adapter-path ${adapterPath}`,
302
+ ...(options.resumeAdapterFile ? [`--resume-adapter-file ${options.resumeAdapterFile}`] : []),
192
303
  `--num-layers 4`,
193
304
  `--batch-size 4`,
194
305
  `--iters ${iters}`,
@@ -196,17 +307,35 @@ export function prepareTrain(options = {}) {
196
307
  `--learning-rate ${learningRate}`,
197
308
  `--steps-per-report 10`,
198
309
  `--steps-per-eval 10`,
310
+ `--save-every ${saveEvery}`,
199
311
  ].join(' \\\n ');
200
312
  return {
201
313
  dataDir: outDir,
202
314
  trainFile,
203
315
  validFile,
204
316
  model,
317
+ iters,
318
+ learningRate,
205
319
  adapterPath,
206
320
  command,
207
321
  examples: examples.length,
208
322
  };
209
323
  }
324
+ export function findLatestAdapterCheckpoint(adapterPath) {
325
+ if (!fs.existsSync(adapterPath))
326
+ return null;
327
+ const files = fs.readdirSync(adapterPath)
328
+ .filter(file => /^\d+_adapters\.safetensors$/.test(file))
329
+ .sort((a, b) => {
330
+ const ai = parseInt(a, 10);
331
+ const bi = parseInt(b, 10);
332
+ return bi - ai;
333
+ });
334
+ if (files.length > 0)
335
+ return path.join(adapterPath, files[0]);
336
+ const final = path.join(adapterPath, 'adapters.safetensors');
337
+ return fs.existsSync(final) ? final : null;
338
+ }
210
339
  export function formatTrain(plan) {
211
340
  const lines = [];
212
341
  lines.push(`\n Training data prepared at ${plan.dataDir}`);
@@ -1 +1 @@
1
- {"version":3,"file":"training.js","sourceRoot":"","sources":["../src/training.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"training.js","sourceRoot":"","sources":["../src/training.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiale-plus/repo-arch",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Project archaeology and repo memory tooling — CLI-first project-memory engine",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,6 +8,7 @@
8
8
  },
9
9
  "files": [
10
10
  "dist/",
11
+ "pi/",
11
12
  "README.md",
12
13
  "LICENSE"
13
14
  ],
@@ -28,6 +29,22 @@
28
29
  },
29
30
  "author": "fiale-plus",
30
31
  "license": "MIT",
32
+ "keywords": [
33
+ "project-memory",
34
+ "git-history",
35
+ "cards",
36
+ "retrieval",
37
+ "training",
38
+ "pi-package"
39
+ ],
40
+ "pi": {
41
+ "extensions": [
42
+ "./pi/extensions"
43
+ ],
44
+ "skills": [
45
+ "./pi/skills"
46
+ ]
47
+ },
31
48
  "devDependencies": {
32
49
  "@types/node": "^22.15.3",
33
50
  "tsx": "^4.19.4",