create-principles-disciple 1.124.0 → 1.124.2

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 (39) hide show
  1. package/console/dist/server/models/OwnerDecisionConsoleModel.js +13 -2
  2. package/console/dist/ui/api.js +1 -1
  3. package/console/dist/ui/i18n/en.json +6 -2
  4. package/console/dist/ui/i18n/zh-CN.json +6 -2
  5. package/console/dist/ui/pages/settings/SettingsPage.js +40 -4
  6. package/console/dist/web/assets/app.js +45 -10
  7. package/core/dist/index.d.ts +7 -12
  8. package/core/dist/index.d.ts.map +1 -1
  9. package/core/dist/index.js +7 -12
  10. package/core/dist/index.js.map +1 -1
  11. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +1 -1
  12. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  13. package/core/dist/runtime-v2/__tests__/status-contract.test.js +0 -29
  14. package/core/dist/runtime-v2/__tests__/status-contract.test.js.map +1 -1
  15. package/core/dist/runtime-v2/index.d.ts +0 -1
  16. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  17. package/core/dist/runtime-v2/index.js +0 -2
  18. package/core/dist/runtime-v2/index.js.map +1 -1
  19. package/core/package.json +0 -36
  20. package/package.json +1 -1
  21. package/plugin/dist/bundle.js +343 -343
  22. package/plugin/dist/governance-audit.js +5 -5
  23. package/plugin/dist/rulehost-evidence.js +4 -4
  24. package/core/dist/principle-injector.d.ts +0 -67
  25. package/core/dist/principle-injector.d.ts.map +0 -1
  26. package/core/dist/principle-injector.js +0 -89
  27. package/core/dist/principle-injector.js.map +0 -1
  28. package/core/dist/principle-injector.test.d.ts +0 -2
  29. package/core/dist/principle-injector.test.d.ts.map +0 -1
  30. package/core/dist/principle-injector.test.js +0 -158
  31. package/core/dist/principle-injector.test.js.map +0 -1
  32. package/core/dist/runtime-v2/store/task-migration.d.ts +0 -89
  33. package/core/dist/runtime-v2/store/task-migration.d.ts.map +0 -1
  34. package/core/dist/runtime-v2/store/task-migration.js +0 -79
  35. package/core/dist/runtime-v2/store/task-migration.js.map +0 -1
  36. package/dist/updater.d.ts +0 -39
  37. package/dist/updater.d.ts.map +0 -1
  38. package/dist/updater.js +0 -347
  39. package/dist/updater.js.map +0 -1
package/dist/updater.js DELETED
@@ -1,347 +0,0 @@
1
- import semver from 'semver';
2
- import * as fs from 'fs';
3
- import * as path from 'path';
4
- import * as os from 'os';
5
- import * as tar from 'tar';
6
- import { getPdBackupsDir } from './mvp-config.js';
7
- const NPM_REGISTRY_URL = 'https://registry.npmjs.org/create-principles-disciple';
8
- const NPM_LATEST_URL = `${NPM_REGISTRY_URL}/latest`;
9
- export async function checkForUpdates(currentVersion) {
10
- try {
11
- const controller = new AbortController();
12
- const timeoutId = setTimeout(() => controller.abort(), 5000);
13
- let latestVersion = '';
14
- try {
15
- const response = await fetch(NPM_LATEST_URL, {
16
- signal: controller.signal,
17
- });
18
- if (!response.ok) {
19
- throw new Error(`HTTP ${response.status}`);
20
- }
21
- const rawData = await response.json();
22
- if (typeof rawData !== 'object' || rawData === null) {
23
- throw new Error('Invalid registry response: not an object');
24
- }
25
- const data = rawData;
26
- if (typeof data.version !== 'string') {
27
- throw new Error('Invalid registry response: missing version');
28
- }
29
- latestVersion = data.version;
30
- }
31
- finally {
32
- clearTimeout(timeoutId);
33
- }
34
- const hasUpdate = semver.gt(latestVersion, currentVersion);
35
- return {
36
- hasUpdate,
37
- currentVersion,
38
- latestVersion,
39
- };
40
- }
41
- catch (error) {
42
- return {
43
- hasUpdate: false,
44
- currentVersion,
45
- error: error instanceof Error ? error.message : 'Unknown error',
46
- };
47
- }
48
- }
49
- /** Fetch the version description from npm registry. Note: this is the package description, not a full changelog. */
50
- export async function fetchVersionDescription(version) {
51
- try {
52
- const response = await fetch(NPM_REGISTRY_URL);
53
- if (!response.ok) {
54
- return undefined;
55
- }
56
- const rawData = await response.json();
57
- if (typeof rawData !== 'object' || rawData === null) {
58
- return undefined;
59
- }
60
- const data = rawData;
61
- if (typeof data.versions !== 'object' || data.versions === null) {
62
- return undefined;
63
- }
64
- const versions = data.versions;
65
- const versionEntry = versions[version];
66
- if (typeof versionEntry !== 'object' || versionEntry === null) {
67
- return undefined;
68
- }
69
- const entry = versionEntry;
70
- if (typeof entry.description !== 'string') {
71
- return undefined;
72
- }
73
- return entry.description;
74
- }
75
- catch {
76
- return undefined;
77
- }
78
- }
79
- async function getAllFiles(dir) {
80
- const result = [];
81
- try {
82
- const entries = fs.readdirSync(dir, { withFileTypes: true });
83
- for (const entry of entries) {
84
- const fullPath = path.join(dir, entry.name);
85
- if (entry.isDirectory()) {
86
- const subFiles = await getAllFiles(fullPath);
87
- result.push(...subFiles.map(f => path.join(entry.name, f)));
88
- }
89
- else {
90
- result.push(entry.name);
91
- }
92
- }
93
- }
94
- catch {
95
- // Directory does not exist or cannot be read
96
- }
97
- return result;
98
- }
99
- export async function computeDiff(currentDir, newDir) {
100
- const modified = [];
101
- const added = [];
102
- const deleted = [];
103
- const currentFiles = await getAllFiles(currentDir);
104
- const newFiles = await getAllFiles(newDir);
105
- const currentSet = new Set(currentFiles);
106
- const newSet = new Set(newFiles);
107
- for (const file of currentFiles) {
108
- if (newSet.has(file)) {
109
- try {
110
- const currentContent = fs.readFileSync(path.join(currentDir, file), 'utf-8');
111
- const newContent = fs.readFileSync(path.join(newDir, file), 'utf-8');
112
- if (currentContent !== newContent) {
113
- modified.push(file);
114
- }
115
- }
116
- catch {
117
- modified.push(file);
118
- }
119
- }
120
- else {
121
- deleted.push(file);
122
- }
123
- }
124
- for (const file of newFiles) {
125
- if (!currentSet.has(file)) {
126
- added.push(file);
127
- }
128
- }
129
- return { modified, added, deleted };
130
- }
131
- function getCurrentVersion(targetDir) {
132
- const packageJsonPath = path.join(targetDir, 'package.json');
133
- const raw = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
134
- if (typeof raw === 'object' && raw !== null && Object.hasOwn(raw, 'version')) {
135
- const v = raw.version;
136
- if (typeof v === 'string')
137
- return v;
138
- }
139
- throw new Error('Invalid package.json: missing or invalid version field');
140
- }
141
- async function fetchLatestPackageInfo() {
142
- try {
143
- const response = await fetch(NPM_LATEST_URL);
144
- if (!response.ok)
145
- return null;
146
- const rawData = await response.json();
147
- if (typeof rawData !== 'object' || rawData === null)
148
- return null;
149
- const data = rawData;
150
- if (typeof data.version !== 'string')
151
- return null;
152
- if (typeof data.dist !== 'object' || data.dist === null)
153
- return null;
154
- const dist = data.dist;
155
- if (typeof dist.tarball !== 'string')
156
- return null;
157
- return { version: data.version, tarball: dist.tarball };
158
- }
159
- catch {
160
- return null;
161
- }
162
- }
163
- async function downloadPackage(tarballUrl) {
164
- const tempDir = path.join(os.tmpdir(), `pd-update-${Date.now()}`);
165
- fs.mkdirSync(tempDir, { recursive: true });
166
- const response = await fetch(tarballUrl);
167
- if (!response.ok)
168
- throw new Error(`Failed to download package: HTTP ${response.status}`);
169
- const buffer = Buffer.from(await response.arrayBuffer());
170
- const tarballPath = path.join(tempDir, 'package.tgz');
171
- fs.writeFileSync(tarballPath, buffer);
172
- await tar.extract({ file: tarballPath, cwd: tempDir, strip: 1, preservePaths: false });
173
- fs.unlinkSync(tarballPath);
174
- return tempDir;
175
- }
176
- function isWorkspaceFile(filePath) {
177
- const workspaceFiles = ['AGENTS.md', 'SOUL.md', 'USER.md', 'CLAUDE.md'];
178
- return workspaceFiles.some(f => filePath.endsWith(f));
179
- }
180
- async function generateUpdateFile(file, tempDir, targetDir) {
181
- const content = fs.readFileSync(path.join(tempDir, file), 'utf-8');
182
- const updatePath = path.join(targetDir, `${file}.update`);
183
- fs.writeFileSync(updatePath, content);
184
- }
185
- async function copyFile(src, dest) {
186
- const dir = path.dirname(dest);
187
- if (!fs.existsSync(dir)) {
188
- fs.mkdirSync(dir, { recursive: true });
189
- }
190
- fs.copyFileSync(src, dest);
191
- }
192
- async function deleteFile(filePath) {
193
- if (fs.existsSync(filePath)) {
194
- fs.unlinkSync(filePath);
195
- }
196
- }
197
- async function updatePackageJson(targetDir, latestInfo) {
198
- const packageJsonPath = path.join(targetDir, 'package.json');
199
- const raw = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
200
- if (typeof raw !== 'object' || raw === null) {
201
- throw new Error('Invalid package.json: not an object');
202
- }
203
- const packageJson = { ...raw, version: latestInfo.version };
204
- fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
205
- }
206
- async function installDependencies(targetDir) {
207
- const { execSync } = await import('child_process');
208
- execSync('npm install --production', { cwd: targetDir });
209
- }
210
- async function cleanupTempDir(tempDir) {
211
- if (fs.existsSync(tempDir)) {
212
- fs.rmSync(tempDir, { recursive: true, force: true });
213
- }
214
- }
215
- async function backupDirectory(source, destination) {
216
- fs.mkdirSync(destination, { recursive: true });
217
- const entries = fs.readdirSync(source, { withFileTypes: true });
218
- for (const entry of entries) {
219
- const srcPath = path.join(source, entry.name);
220
- const destPath = path.join(destination, entry.name);
221
- if (entry.isDirectory()) {
222
- await backupDirectory(srcPath, destPath);
223
- }
224
- else {
225
- fs.copyFileSync(srcPath, destPath);
226
- }
227
- }
228
- }
229
- async function createBackup(targetDir) {
230
- // Backups live OUTSIDE the extensions dir (see getPdBackupsDir): OpenClaw
231
- // plugin discovery scans every extensions/ child directory and would
232
- // discover the backup as a duplicate principles-disciple plugin.
233
- const backupsRoot = getPdBackupsDir();
234
- fs.mkdirSync(backupsRoot, { recursive: true });
235
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
236
- const targetName = path.basename(targetDir);
237
- // Atomic reservation: plain (non-recursive) mkdirSync fails with EEXIST
238
- // when the name is taken; retry with a bounded numeric suffix. Never poll
239
- // existsSync in a loop — a stale/mocked always-true predicate makes it
240
- // unbounded.
241
- for (let attempt = 0; attempt < 100; attempt++) {
242
- const suffix = attempt === 0 ? '' : `-${attempt}`;
243
- const candidate = path.join(backupsRoot, `${targetName}-${timestamp}${suffix}`);
244
- try {
245
- fs.mkdirSync(candidate);
246
- await backupDirectory(targetDir, candidate);
247
- return candidate;
248
- }
249
- catch (err) {
250
- const code = err !== null && typeof err === 'object' && Object.hasOwn(err, 'code')
251
- ? err.code
252
- : undefined;
253
- if (code === 'EEXIST')
254
- continue;
255
- throw err;
256
- }
257
- }
258
- throw new Error(`Could not reserve a unique backup directory under ${backupsRoot}`);
259
- }
260
- export async function applyUpdate(options) {
261
- const { targetDir, backupDir, mergeStrategy } = options;
262
- try {
263
- getCurrentVersion(targetDir);
264
- const latestInfo = await fetchLatestPackageInfo();
265
- if (!latestInfo) {
266
- return { success: false, message: 'Failed to fetch latest package info' };
267
- }
268
- let backupPath = undefined;
269
- if (backupDir) {
270
- backupPath = await createBackup(targetDir);
271
- }
272
- const tempDir = await downloadPackage(latestInfo.tarball);
273
- const diff = await computeDiff(targetDir, tempDir);
274
- const updatedFiles = [];
275
- for (const file of diff.modified) {
276
- if (isWorkspaceFile(file)) {
277
- switch (mergeStrategy) {
278
- case 'smart':
279
- await generateUpdateFile(file, tempDir, targetDir);
280
- break;
281
- case 'overwrite':
282
- await copyFile(path.join(tempDir, file), path.join(targetDir, file));
283
- updatedFiles.push(file);
284
- break;
285
- case 'keep':
286
- break;
287
- }
288
- }
289
- else {
290
- await copyFile(path.join(tempDir, file), path.join(targetDir, file));
291
- updatedFiles.push(file);
292
- }
293
- }
294
- for (const file of diff.added) {
295
- await copyFile(path.join(tempDir, file), path.join(targetDir, file));
296
- updatedFiles.push(file);
297
- }
298
- for (const file of diff.deleted) {
299
- await deleteFile(path.join(targetDir, file));
300
- updatedFiles.push(file);
301
- }
302
- await updatePackageJson(targetDir, latestInfo);
303
- await installDependencies(targetDir);
304
- await cleanupTempDir(tempDir);
305
- return {
306
- success: true,
307
- message: 'Update applied successfully',
308
- updatedFiles,
309
- backupPath,
310
- };
311
- }
312
- catch (error) {
313
- return {
314
- success: false,
315
- message: error instanceof Error ? error.message : 'Unknown error',
316
- };
317
- }
318
- }
319
- export async function rollbackUpdate(options) {
320
- const { targetDir, backupDir } = options;
321
- try {
322
- // Check if backup exists
323
- if (!fs.existsSync(backupDir)) {
324
- return {
325
- success: false,
326
- message: 'Backup not found',
327
- };
328
- }
329
- // Remove current target directory
330
- if (fs.existsSync(targetDir)) {
331
- fs.rmSync(targetDir, { recursive: true, force: true });
332
- }
333
- // Restore from backup
334
- await backupDirectory(backupDir, targetDir);
335
- return {
336
- success: true,
337
- message: 'Rollback completed successfully',
338
- };
339
- }
340
- catch (error) {
341
- return {
342
- success: false,
343
- message: error instanceof Error ? error.message : 'Unknown error',
344
- };
345
- }
346
- }
347
- //# sourceMappingURL=updater.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}