fivocell 5.1.0 → 5.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.
@@ -88,6 +88,12 @@ function parseArgs(argv) {
88
88
  }
89
89
  const args = parseArgs(process.argv.slice(2));
90
90
  const cmd = args[0] || '';
91
+ function getArg(name) {
92
+ const idx = args.indexOf(name);
93
+ if (idx === -1)
94
+ return null;
95
+ return args[idx + 1] || null;
96
+ }
91
97
  // Module-level state for watch-editor (must be declared before switch)
92
98
  let activeMonitor = null;
93
99
  let monitorStateFile = null;
@@ -195,6 +201,12 @@ switch (cmd) {
195
201
  case 'memory':
196
202
  doMemory();
197
203
  break;
204
+ case 'ci':
205
+ doCI();
206
+ break;
207
+ case 'sync':
208
+ doSync();
209
+ break;
198
210
  case 'cross-project':
199
211
  doCrossProject();
200
212
  break;
@@ -4095,6 +4107,45 @@ function doMemory() {
4095
4107
  console.log();
4096
4108
  return;
4097
4109
  }
4110
+ if (sub === 'export') {
4111
+ console.log(C.bold(' ── Memory Export ──\n'));
4112
+ try {
4113
+ const { exportMemory } = require('../../06-memory/stores/sync-engine');
4114
+ const { detectProject } = require('../setup/setup');
4115
+ const project = detectProject(cwd).name;
4116
+ const payload = exportMemory(project);
4117
+ const outPath = args[2] || `fivo-memory-${project}-${Date.now()}.json`;
4118
+ require('fs').writeFileSync(outPath, JSON.stringify(payload, null, 2));
4119
+ console.log(C.success(` Exported ${payload.eventCount} events → ${outPath}`));
4120
+ }
4121
+ catch (e) {
4122
+ console.log(C.warn(` Export failed: ${e?.message || String(e)}`));
4123
+ }
4124
+ console.log();
4125
+ return;
4126
+ }
4127
+ if (sub === 'import') {
4128
+ console.log(C.bold(' ── Memory Import ──\n'));
4129
+ try {
4130
+ const srcPath = args[2] || '';
4131
+ if (!srcPath) {
4132
+ console.log(C.warn(' Usage: cell memory import <file.json>'));
4133
+ console.log();
4134
+ return;
4135
+ }
4136
+ const payload = JSON.parse(require('fs').readFileSync(srcPath, 'utf-8'));
4137
+ const { importMemory } = require('../../06-memory/stores/sync-engine');
4138
+ const { detectProject } = require('../setup/setup');
4139
+ const project = detectProject(cwd).name;
4140
+ const result = importMemory(payload, project);
4141
+ console.log(C.success(` Added: ${result.added}, Skipped: ${result.skipped}, Errors: ${result.errors.length}`));
4142
+ }
4143
+ catch (e) {
4144
+ console.log(C.warn(` Import failed: ${e?.message || String(e)}`));
4145
+ }
4146
+ console.log();
4147
+ return;
4148
+ }
4098
4149
  console.log(C.bold(' Cell Memory'));
4099
4150
  console.log(C.dim(' ──────────'));
4100
4151
  console.log(C.dim(' cell memory search <query> Search memory events'));
@@ -4121,6 +4172,244 @@ function doMemory() {
4121
4172
  console.log(C.dim(' cell memory compress [mode] Compress context'));
4122
4173
  console.log(C.dim(' cell memory export Export to JSON'));
4123
4174
  console.log(C.dim(' cell memory stats Show memory stats'));
4175
+ console.log(C.dim(' cell memory export Export memory archive'));
4176
+ console.log(C.dim(' cell memory import Import memory archive'));
4177
+ console.log();
4178
+ }
4179
+ function doCI() {
4180
+ const sub = args[1] || '';
4181
+ const cwd = process.cwd();
4182
+ if (sub === 'report' || sub === 'r') {
4183
+ const buildId = getArg('--build-id') || `local-${Date.now()}`;
4184
+ const status = getArg('--status') || 'success';
4185
+ const stage = getArg('--stage') || 'build';
4186
+ const commit = getArg('--commit') || '';
4187
+ const message = getArg('--message') || '';
4188
+ const author = getArg('--author') || '';
4189
+ const platform = getArg('--platform') || 'local';
4190
+ const branch = getArg('--branch') || '';
4191
+ const duration = parseInt(getArg('--duration') || '0', 10);
4192
+ const logSnippet = getArg('--log') || '';
4193
+ console.log(C.bold(` ── CI Report Build ──\n`));
4194
+ try {
4195
+ const { reportCIBuild } = require('../../06-memory/stores/ci-reporter');
4196
+ const { detectProject } = require('../setup/setup');
4197
+ const project = detectProject(cwd).name;
4198
+ const id = reportCIBuild({
4199
+ project,
4200
+ branch,
4201
+ buildId,
4202
+ status: status,
4203
+ duration,
4204
+ stage,
4205
+ commitHash: commit,
4206
+ commitMessage: message,
4207
+ author,
4208
+ timestamp: new Date().toISOString(),
4209
+ logSnippet,
4210
+ ciPlatform: platform,
4211
+ });
4212
+ console.log(C.success(` Build reported (event #${id}): ${status} [${stage}]`));
4213
+ }
4214
+ catch (e) {
4215
+ console.log(C.warn(` Report failed: ${e?.message || String(e)}`));
4216
+ }
4217
+ console.log();
4218
+ return;
4219
+ }
4220
+ if (sub === 'report-test' || sub === 'rt') {
4221
+ const buildId = getArg('--build-id') || `local-${Date.now()}`;
4222
+ const total = parseInt(getArg('--total') || '0', 10);
4223
+ const passed = parseInt(getArg('--passed') || '0', 10);
4224
+ const failed = parseInt(getArg('--failed') || '0', 10);
4225
+ const skipped = parseInt(getArg('--skipped') || '0', 10);
4226
+ const duration = parseInt(getArg('--duration') || '0', 10);
4227
+ const coverage = getArg('--coverage') ? parseFloat(getArg('--coverage')) : undefined;
4228
+ const branch = getArg('--branch') || '';
4229
+ console.log(C.bold(` ── CI Report Tests ──\n`));
4230
+ try {
4231
+ const { reportCITest } = require('../../06-memory/stores/ci-reporter');
4232
+ const { detectProject } = require('../setup/setup');
4233
+ const project = detectProject(cwd).name;
4234
+ const failedTests = [];
4235
+ const id = reportCITest({
4236
+ project,
4237
+ branch,
4238
+ buildId,
4239
+ totalTests: total,
4240
+ passed,
4241
+ failed,
4242
+ skipped,
4243
+ duration,
4244
+ failedTests,
4245
+ coverage,
4246
+ timestamp: new Date().toISOString(),
4247
+ });
4248
+ const color = failed > 0 ? C.warn : C.success;
4249
+ console.log(color(` Tests reported (event #${id}): ${passed}/${total} passed`));
4250
+ }
4251
+ catch (e) {
4252
+ console.log(C.warn(` Report failed: ${e?.message || String(e)}`));
4253
+ }
4254
+ console.log();
4255
+ return;
4256
+ }
4257
+ if (sub === 'report-deploy' || sub === 'rd') {
4258
+ const env = getArg('--env') || 'local';
4259
+ const status = getArg('--status') || 'success';
4260
+ const version = getArg('--version') || '0.0.0';
4261
+ const duration = parseInt(getArg('--duration') || '0', 10);
4262
+ console.log(C.bold(` ── CI Report Deploy ──\n`));
4263
+ try {
4264
+ const { reportCIDeploy } = require('../../06-memory/stores/ci-reporter');
4265
+ const { detectProject } = require('../setup/setup');
4266
+ const project = detectProject(cwd).name;
4267
+ const id = reportCIDeploy({
4268
+ project,
4269
+ environment: env,
4270
+ status: status,
4271
+ version,
4272
+ duration,
4273
+ timestamp: new Date().toISOString(),
4274
+ });
4275
+ const color = status === 'success' ? C.success : C.warn;
4276
+ console.log(color(` Deploy reported (event #${id}): ${status} ${version} → ${env}`));
4277
+ }
4278
+ catch (e) {
4279
+ console.log(C.warn(` Report failed: ${e?.message || String(e)}`));
4280
+ }
4281
+ console.log();
4282
+ return;
4283
+ }
4284
+ if (sub === 'summary' || sub === 's') {
4285
+ const days = parseInt(args[2] || '30', 10);
4286
+ console.log(C.bold(` ── CI/CD Summary (${days} days) ──\n`));
4287
+ try {
4288
+ const { getCISummary, formatCISummary } = require('../../06-memory/stores/ci-reporter');
4289
+ const { detectProject } = require('../setup/setup');
4290
+ const project = detectProject(cwd).name;
4291
+ const summary = getCISummary(project, days);
4292
+ console.log(formatCISummary(summary));
4293
+ }
4294
+ catch (e) {
4295
+ console.log(C.warn(` CI summary failed: ${e?.message || String(e)}`));
4296
+ }
4297
+ console.log();
4298
+ return;
4299
+ }
4300
+ if (sub === 'failures' || sub === 'f') {
4301
+ const days = parseInt(args[2] || '30', 10);
4302
+ console.log(C.bold(` ── CI Failure Patterns (${days} days) ──\n`));
4303
+ try {
4304
+ const { detectCIFailurePatterns } = require('../../06-memory/stores/ci-reporter');
4305
+ const { detectProject } = require('../setup/setup');
4306
+ const project = detectProject(cwd).name;
4307
+ const patterns = detectCIFailurePatterns(project, days);
4308
+ if (patterns.length === 0) {
4309
+ console.log(C.dim(' No failure patterns detected.'));
4310
+ }
4311
+ else {
4312
+ for (const p of patterns) {
4313
+ const sevColor = p.severity === 'critical' ? C.warn : p.severity === 'warning' ? C.primary : C.dim;
4314
+ console.log(` ${sevColor(`[${p.severity}]`)} ${p.pattern}`);
4315
+ console.log(C.dim(` Count: ${p.count} | Branches: ${p.affectedBranches.join(', ')}`));
4316
+ console.log(C.dim(` Suggestion: ${p.suggestion}`));
4317
+ }
4318
+ }
4319
+ }
4320
+ catch (e) {
4321
+ console.log(C.warn(` CI failures failed: ${e?.message || String(e)}`));
4322
+ }
4323
+ console.log();
4324
+ return;
4325
+ }
4326
+ console.log(C.bold(' Cell CI/CD'));
4327
+ console.log(C.dim(' ──────────'));
4328
+ console.log(C.dim(' cell ci report Report build result'));
4329
+ console.log(C.dim(' cell ci report-test Report test results'));
4330
+ console.log(C.dim(' cell ci report-deploy Report deployment'));
4331
+ console.log(C.dim(' cell ci summary [days] CI/CD summary'));
4332
+ console.log(C.dim(' cell ci failures [days] Failure patterns'));
4333
+ console.log(C.dim(''));
4334
+ console.log(C.dim(' Options:'));
4335
+ console.log(C.dim(' --build-id ID Build identifier'));
4336
+ console.log(C.dim(' --status STATUS success|failure|cancelled'));
4337
+ console.log(C.dim(' --stage STAGE build|test|lint|deploy'));
4338
+ console.log(C.dim(' --commit HASH Commit hash'));
4339
+ console.log(C.dim(' --branch NAME Branch name'));
4340
+ console.log(C.dim(' --platform NAME github-actions|gitlab-ci|jenkins|local'));
4341
+ console.log(C.dim(' --duration MS Build duration in ms'));
4342
+ console.log(C.dim(' --env ENV staging|production|preview'));
4343
+ console.log(C.dim(' --version VER Version string'));
4344
+ console.log(C.dim(' --total N Total tests'));
4345
+ console.log(C.dim(' --passed N Passed tests'));
4346
+ console.log(C.dim(' --failed N Failed tests'));
4347
+ console.log(C.dim(' --coverage N Coverage percentage'));
4348
+ console.log();
4349
+ }
4350
+ function doSync() {
4351
+ const sub = args[1] || '';
4352
+ const cwd = process.cwd();
4353
+ if (sub === 'status' || sub === 'st') {
4354
+ console.log(C.bold(' ── Sync Status ──\n'));
4355
+ try {
4356
+ const { getSyncStatus } = require('../../06-memory/stores/sync-engine');
4357
+ const { detectProject } = require('../setup/setup');
4358
+ const project = detectProject(cwd).name;
4359
+ const status = getSyncStatus(project);
4360
+ console.log(` Last sync: ${status.lastSyncAt ? C.dim(status.lastSyncAt) : C.warn('never')}`);
4361
+ console.log(` Pending up: ${status.pendingUpload > 0 ? C.warn(status.pendingUpload) : C.success(status.pendingUpload)}`);
4362
+ console.log(` Conflicts: ${status.conflicts > 0 ? C.warn(status.conflicts) : C.success(status.conflicts)}`);
4363
+ }
4364
+ catch (e) {
4365
+ console.log(C.warn(` Sync status failed: ${e?.message || String(e)}`));
4366
+ }
4367
+ console.log();
4368
+ return;
4369
+ }
4370
+ if (sub === 'diff') {
4371
+ console.log(C.bold(' ── Sync Diff ──\n'));
4372
+ try {
4373
+ const { getSyncStatus } = require('../../06-memory/stores/sync-engine');
4374
+ const { detectProject } = require('../setup/setup');
4375
+ const project = detectProject(cwd).name;
4376
+ const status = getSyncStatus(project);
4377
+ const localOnly = status.pendingUpload;
4378
+ console.log(` Local-only events: ${localOnly > 0 ? C.warn(localOnly) : C.success(localOnly)}`);
4379
+ console.log(C.dim(' To diff against a remote file, use:'));
4380
+ console.log(C.dim(' cell memory export → creates export file'));
4381
+ console.log(C.dim(' then compare manually or use API.'));
4382
+ }
4383
+ catch (e) {
4384
+ console.log(C.warn(` Diff failed: ${e?.message || String(e)}`));
4385
+ }
4386
+ console.log();
4387
+ return;
4388
+ }
4389
+ if (sub === 'snapshot') {
4390
+ console.log(C.bold(' ── Sync Snapshot ──\n'));
4391
+ try {
4392
+ const { saveSyncSnapshot } = require('../../06-memory/stores/sync-engine');
4393
+ const { detectProject } = require('../setup/setup');
4394
+ const project = detectProject(cwd).name;
4395
+ saveSyncSnapshot(project);
4396
+ console.log(C.success(' Snapshot saved'));
4397
+ }
4398
+ catch (e) {
4399
+ console.log(C.warn(` Snapshot failed: ${e?.message || String(e)}`));
4400
+ }
4401
+ console.log();
4402
+ return;
4403
+ }
4404
+ console.log(C.bold(' Cell Sync'));
4405
+ console.log(C.dim(' ─────────'));
4406
+ console.log(C.dim(' cell sync status Show sync status'));
4407
+ console.log(C.dim(' cell sync diff Show pending changes'));
4408
+ console.log(C.dim(' cell sync snapshot Save a sync snapshot'));
4409
+ console.log(C.dim(''));
4410
+ console.log(C.dim(' Also available via memory subcommands:'));
4411
+ console.log(C.dim(' cell memory export Export memory archive'));
4412
+ console.log(C.dim(' cell memory import Import memory archive'));
4124
4413
  console.log();
4125
4414
  }
4126
4415
  //# sourceMappingURL=cli.js.map