burhan-mop 0.1.0 → 0.1.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 (40) hide show
  1. package/{.memoryofplanet → .MOP}/PROTOCOL.md +40 -37
  2. package/{.memoryofplanet → .MOP}/STATE.json +11 -11
  3. package/{.memoryofplanet → .MOP}/config/defaults.json +2 -2
  4. package/.MOP/scripts/burhan-mop.mjs +257 -0
  5. package/{.memoryofplanet → .MOP}/scripts/mop-auto-deploy.mjs +5 -6
  6. package/{.memoryofplanet → .MOP}/scripts/mop-autosycn.mjs +24 -24
  7. package/{.memoryofplanet → .MOP}/scripts/mop-core.mjs +24 -24
  8. package/{.memoryofplanet → .MOP}/scripts/mop-workflow.mjs +17 -17
  9. package/.agents/AGENTS.md +7 -6
  10. package/.agents/skills/auto-deploy/SKILL.md +2 -2
  11. package/.agents/skills/autosycn/SKILL.md +10 -10
  12. package/.agents/skills/mop-help/SKILL.md +4 -4
  13. package/.agents/skills/ruflo-core/SKILL.md +2 -3
  14. package/.claude/skills/auto-deploy/SKILL.md +2 -2
  15. package/.claude/skills/autosycn/SKILL.md +7 -7
  16. package/.claude/skills/mop-help/SKILL.md +4 -4
  17. package/.codex/config.toml +1 -1
  18. package/AGENTS.md +10 -9
  19. package/CLAUDE.md +10 -9
  20. package/GEMINI.md +3 -3
  21. package/README.bm.md +152 -0
  22. package/README.md +68 -1013
  23. package/bin/burhan-mop.mjs +1 -1
  24. package/bin/mop-core.mjs +1 -1
  25. package/bin/mop-workflow.mjs +1 -1
  26. package/package.json +8 -7
  27. package/.memoryofplanet/scripts/burhan-mop.mjs +0 -124
  28. /package/{.memoryofplanet → .MOP}/config/team.json +0 -0
  29. /package/{.memoryofplanet → .MOP}/templates/artifacts/adversarial-review.md +0 -0
  30. /package/{.memoryofplanet → .MOP}/templates/artifacts/architecture.md +0 -0
  31. /package/{.memoryofplanet → .MOP}/templates/artifacts/decision-log.md +0 -0
  32. /package/{.memoryofplanet → .MOP}/templates/artifacts/handoff.md +0 -0
  33. /package/{.memoryofplanet → .MOP}/templates/artifacts/implementation-notes.md +0 -0
  34. /package/{.memoryofplanet → .MOP}/templates/artifacts/prd.md +0 -0
  35. /package/{.memoryofplanet → .MOP}/templates/artifacts/product-brief.md +0 -0
  36. /package/{.memoryofplanet → .MOP}/templates/artifacts/readiness-report.md +0 -0
  37. /package/{.memoryofplanet → .MOP}/templates/artifacts/release-notes.md +0 -0
  38. /package/{.memoryofplanet → .MOP}/templates/artifacts/review.md +0 -0
  39. /package/{.memoryofplanet → .MOP}/templates/artifacts/story.md +0 -0
  40. /package/{.memoryofplanet → .MOP}/templates/artifacts/ux-spec.md +0 -0
@@ -97,7 +97,7 @@ function requireActiveAgent(state, actor, role = 'core', title = 'Core Agent') {
97
97
  throw new Error([
98
98
  `Agent diperlukan sebelum autosycn untuk ${actor}.`,
99
99
  `Task ini perlukan ${title}. Agent ini belum ada nama lagi atau belum dipilih.`,
100
- `Jalankan: node .memoryofplanet/scripts/mop-core.mjs agent activate --actor ${actor} --role ${role} --title "${title}" --name "<agent-name>"`
100
+ `Jalankan: node .MOP/scripts/mop-core.mjs agent activate --actor ${actor} --role ${role} --title "${title}" --name "<agent-name>"`
101
101
  ].join(' '));
102
102
  }
103
103
 
@@ -139,7 +139,7 @@ function identityFor(state, actor) {
139
139
  throw new Error([
140
140
  `Missing git email for ${actor}.`,
141
141
  'Set a GitHub-verified email or noreply email first:',
142
- `node .memoryofplanet/scripts/mop-core.mjs member git-identity --actor ${actor} --name "${name}" --email "<github-verified-email>" [--github-username "<username>"]`
142
+ `node .MOP/scripts/mop-core.mjs member git-identity --actor ${actor} --name "${name}" --email "<github-verified-email>" [--github-username "<username>"]`
143
143
  ].join(' '));
144
144
  }
145
145
  return {
@@ -248,8 +248,8 @@ function runProjectCommand(command, env) {
248
248
  }
249
249
 
250
250
  function validateStateIfPresent() {
251
- if (!existsSync(join(rootDir, '.memoryofplanet', 'STATE.json'))) return 'skipped';
252
- const result = spawnSync('node', ['.memoryofplanet/scripts/mop-core.mjs', 'validate'], {
251
+ if (!existsSync(join(rootDir, '.MOP', 'STATE.json'))) return 'skipped';
252
+ const result = spawnSync('node', ['.MOP/scripts/mop-core.mjs', 'validate'], {
253
253
  cwd: rootDir,
254
254
  encoding: 'utf8'
255
255
  });
@@ -353,7 +353,7 @@ function syncMainFromOrigin(state, env) {
353
353
  function preflight(args) {
354
354
  ensureGitRepo();
355
355
  const state = readState();
356
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
356
+ if (!state.initialized) throw new Error('MOP is not initialized.');
357
357
  const actor = requireArg(args, 'actor');
358
358
  const agent = requireActiveAgent(state, actor);
359
359
  const identity = identityFor(state, actor);
@@ -406,10 +406,10 @@ function saveMemory(actor, summary) {
406
406
  function push(args) {
407
407
  ensureGitRepo();
408
408
  const state = readState();
409
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
409
+ if (!state.initialized) throw new Error('MOP is not initialized.');
410
410
  const actor = requireArg(args, 'actor');
411
411
  const agent = requireActiveAgent(state, actor);
412
- const reason = String(args.reason || 'MemoryOfPlanet autosycn');
412
+ const reason = String(args.reason || 'MOP autosycn');
413
413
  const identity = identityFor(state, actor);
414
414
  const env = identityEnv(identity);
415
415
  const ghStatus = verifyGhUser(identity, state);
@@ -419,7 +419,7 @@ function push(args) {
419
419
  const before = currentBranch();
420
420
  const dirty = runGit(['status', '--porcelain']);
421
421
  if (state.mode === 'team' && before !== target && dirty) {
422
- throw new Error(`Team autosycn must commit from ${target}. Run preflight before starting work: node .memoryofplanet/scripts/mop-autosycn.mjs preflight --actor ${actor}`);
422
+ throw new Error(`Team autosycn must commit from ${target}. Run preflight before starting work: node .MOP/scripts/mop-autosycn.mjs preflight --actor ${actor}`);
423
423
  }
424
424
  ensureBranch(target);
425
425
  const commit = commitIfNeeded(reason, env);
@@ -439,7 +439,7 @@ function push(args) {
439
439
 
440
440
  function init(args) {
441
441
  const state = readState();
442
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
442
+ if (!state.initialized) throw new Error('MOP is not initialized.');
443
443
  const actor = requireArg(args, 'actor');
444
444
  const agent = requireActiveAgent(state, actor);
445
445
  if (actor !== state.ownerCodename) throw new Error('Only the owner can initialize autosycn.');
@@ -456,7 +456,7 @@ function init(args) {
456
456
  appendLedger(state, actor, 'autosycn-init', `Initialized autosycn remote ${remote}.`, agent);
457
457
  if (url) state.githubUrl = url;
458
458
  writeState(state);
459
- const commit = commitIfNeeded('Initialize MemoryOfPlanet autosycn baseline', env);
459
+ const commit = commitIfNeeded('Initialize MOP autosycn baseline', env);
460
460
  runGit(['push', '-u', 'origin', state.autosync?.targetMainBranch || 'main'], { env });
461
461
 
462
462
  console.log(JSON.stringify({
@@ -474,7 +474,7 @@ function init(args) {
474
474
  function mergeMain(args) {
475
475
  ensureGitRepo();
476
476
  const state = readState();
477
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
477
+ if (!state.initialized) throw new Error('MOP is not initialized.');
478
478
  const actor = requireArg(args, 'actor');
479
479
  const agent = requireActiveAgent(state, actor);
480
480
  if (state.autosync?.requireOwnerForMerge === true && actor !== state.ownerCodename) {
@@ -500,9 +500,9 @@ function mergeMain(args) {
500
500
  if (merge.status !== 0) {
501
501
  const conflicted = runOptional('git', ['diff', '--name-only', '--diff-filter=U']);
502
502
  const files = conflicted.stdout.split(/\r?\n/).filter(Boolean);
503
- if (files.length === 1 && files[0].replaceAll('\\', '/') === '.memoryofplanet/STATE.json') {
504
- runGit(['checkout', '--ours', '--', '.memoryofplanet/STATE.json']);
505
- runGit(['add', '.memoryofplanet/STATE.json']);
503
+ if (files.length === 1 && files[0].replaceAll('\\', '/') === '.MOP/STATE.json') {
504
+ runGit(['checkout', '--ours', '--', '.MOP/STATE.json']);
505
+ runGit(['add', '.MOP/STATE.json']);
506
506
  } else {
507
507
  runOptional('git', ['merge', '--abort']);
508
508
  const detail = `${merge.stderr || merge.stdout}`.trim();
@@ -518,7 +518,7 @@ function mergeMain(args) {
518
518
  const mergedState = readState();
519
519
  appendLedger(mergedState, guardian.name || 'BURHAN-MOP', 'merge-approved', `${source} approved and merged to ${mainBranch}.`);
520
520
  writeState(mergedState);
521
- runGit(['add', '.memoryofplanet/STATE.json']);
521
+ runGit(['add', '.MOP/STATE.json']);
522
522
  }
523
523
  runGit(['commit', '-m', reason], { env });
524
524
  } catch (error) {
@@ -543,7 +543,7 @@ function mergeMain(args) {
543
543
 
544
544
  function runAll(args) {
545
545
  const actor = requireArg(args, 'actor');
546
- const reason = String(args.reason || 'MemoryOfPlanet autosycn');
546
+ const reason = String(args.reason || 'MOP autosycn');
547
547
  saveMemory(actor, reason);
548
548
  push({ ...args, actor, reason });
549
549
  const state = readState();
@@ -590,7 +590,7 @@ function main() {
590
590
  if (command === 'init') return init(args);
591
591
  if (command === 'memory') {
592
592
  const actor = requireArg(args, 'actor');
593
- const summary = String(args.summary || args.reason || 'MemoryOfPlanet conversation');
593
+ const summary = String(args.summary || args.reason || 'MOP conversation');
594
594
  saveMemory(actor, summary);
595
595
  console.log(`Memory saved for ${actor}.`);
596
596
  return;
@@ -600,13 +600,13 @@ function main() {
600
600
  if (command === 'run') return runAll(args);
601
601
 
602
602
  console.log(`Usage:
603
- node .memoryofplanet/scripts/mop-autosycn.mjs status
604
- node .memoryofplanet/scripts/mop-autosycn.mjs preflight --actor <codename>
605
- node .memoryofplanet/scripts/mop-autosycn.mjs init --actor <owner-codename> --url <github-url>
606
- node .memoryofplanet/scripts/mop-autosycn.mjs memory --actor <codename> --summary "what happened"
607
- node .memoryofplanet/scripts/mop-autosycn.mjs push --actor <codename> --reason "what changed"
608
- node .memoryofplanet/scripts/mop-autosycn.mjs merge --actor <owner> --from <codename> --reason "merge reason"
609
- node .memoryofplanet/scripts/mop-autosycn.mjs run --actor <codename> --reason "what changed"`);
603
+ node .MOP/scripts/mop-autosycn.mjs status
604
+ node .MOP/scripts/mop-autosycn.mjs preflight --actor <codename>
605
+ node .MOP/scripts/mop-autosycn.mjs init --actor <owner-codename> --url <github-url>
606
+ node .MOP/scripts/mop-autosycn.mjs memory --actor <codename> --summary "what happened"
607
+ node .MOP/scripts/mop-autosycn.mjs push --actor <codename> --reason "what changed"
608
+ node .MOP/scripts/mop-autosycn.mjs merge --actor <owner> --from <codename> --reason "merge reason"
609
+ node .MOP/scripts/mop-autosycn.mjs run --actor <codename> --reason "what changed"`);
610
610
  }
611
611
 
612
612
  try {
@@ -93,7 +93,7 @@ function requireActiveAgent(state, actor, role = 'core', title = 'Core Agent') {
93
93
  throw new Error([
94
94
  `Agent diperlukan sebelum sambung kerja untuk ${actor}.`,
95
95
  `Task ini perlukan ${title}. Agent ini belum ada nama lagi atau belum dipilih.`,
96
- `Jalankan: node .memoryofplanet/scripts/mop-core.mjs agent activate --actor ${actor} --role ${role} --title "${title}" --name "<agent-name>"`
96
+ `Jalankan: node .MOP/scripts/mop-core.mjs agent activate --actor ${actor} --role ${role} --title "${title}" --name "<agent-name>"`
97
97
  ].join(' '));
98
98
  }
99
99
 
@@ -345,10 +345,10 @@ function inferAgentRoute(state, taskText) {
345
345
  function setup(args) {
346
346
  const state = readState();
347
347
  if (state.initialized) {
348
- throw new Error('MemoryOfPlanet already initialized.');
348
+ throw new Error('MOP already initialized.');
349
349
  }
350
350
 
351
- const folderDefault = rootDir.split(/[\\/]/).filter(Boolean).pop() || 'MemoryOfPlanet';
351
+ const folderDefault = rootDir.split(/[\\/]/).filter(Boolean).pop() || 'MOP';
352
352
  const projectName = String(args['project-name'] || folderDefault);
353
353
  const displayName = requireArg(args, 'name');
354
354
  const codename = slug(requireArg(args, 'codename'));
@@ -411,7 +411,7 @@ function setup(args) {
411
411
  };
412
412
  appendLedger(state, codename, 'setup', `Initialized ${projectName} in ${mode} mode.`);
413
413
  writeState(state);
414
- console.log(`MemoryOfPlanet initialized. Owner ${displayName} (${codename}) is active.`);
414
+ console.log(`MOP initialized. Owner ${displayName} (${codename}) is active.`);
415
415
  }
416
416
 
417
417
  function login(args) {
@@ -429,13 +429,13 @@ function login(args) {
429
429
  writeState(state);
430
430
  console.log(`Active member: ${codename}`);
431
431
  if (!activeAgentFor(state, codename) && state.agentPolicy?.requiredAfterAuth !== false) {
432
- console.log(`Agent diperlukan. Jalankan: node .memoryofplanet/scripts/mop-core.mjs agent activate --actor ${codename} --role ${state.agentPolicy?.defaultRole || 'core'} --title "${state.agentPolicy?.defaultTitle || 'Core Agent'}" --name "<agent-name>"`);
432
+ console.log(`Agent diperlukan. Jalankan: node .MOP/scripts/mop-core.mjs agent activate --actor ${codename} --role ${state.agentPolicy?.defaultRole || 'core'} --title "${state.agentPolicy?.defaultTitle || 'Core Agent'}" --name "<agent-name>"`);
433
433
  }
434
434
  }
435
435
 
436
436
  function agentActivate(args) {
437
437
  const state = readState();
438
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
438
+ if (!state.initialized) throw new Error('MOP is not initialized.');
439
439
  const actor = slug(requireArg(args, 'actor'));
440
440
  if (!state.members?.[actor]) throw new Error('Unknown actor.');
441
441
 
@@ -472,7 +472,7 @@ function agentActivate(args) {
472
472
 
473
473
  function agentUse(args) {
474
474
  const state = readState();
475
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
475
+ if (!state.initialized) throw new Error('MOP is not initialized.');
476
476
  const actor = slug(requireArg(args, 'actor'));
477
477
  if (!state.members?.[actor]) throw new Error('Unknown actor.');
478
478
  const name = requireArg(args, 'name').trim();
@@ -521,7 +521,7 @@ function agentRequire(args) {
521
521
 
522
522
  function agentRoute(args) {
523
523
  const state = readState();
524
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
524
+ if (!state.initialized) throw new Error('MOP is not initialized.');
525
525
  if (state.agentRouter?.enabled === false) throw new Error('Agent Router is disabled.');
526
526
  const actor = slug(requireArg(args, 'actor'));
527
527
  if (!state.members?.[actor]) throw new Error('Unknown actor.');
@@ -567,7 +567,7 @@ function agentRoute(args) {
567
567
  response.nextAction = 'name-required-party-agents';
568
568
  response.message = 'Party mode diperlukan, tetapi ada agent terlibat yang belum dinamakan.';
569
569
  response.missingAgentCommands = missingPartyAgents.map((item) => (
570
- `node .memoryofplanet/scripts/mop-core.mjs agent activate --actor ${actor} --role ${item.role} --title "${item.title}" --name "<agent-name>"`
570
+ `node .MOP/scripts/mop-core.mjs agent activate --actor ${actor} --role ${item.role} --title "${item.title}" --name "<agent-name>"`
571
571
  ));
572
572
  } else {
573
573
  response.nextAction = route.needsClarification ? 'ask-clarifying-questions' : 'proceed-with-agent';
@@ -576,7 +576,7 @@ function agentRoute(args) {
576
576
  response.nextAction = 'name-required-agent';
577
577
  response.message = `Task ini perlukan ${route.primaryTitle}. Agent ini belum ada nama lagi atau belum dipilih.`;
578
578
  response.ask = `Beri nama untuk ${route.primaryTitle} kamu:`;
579
- response.command = `node .memoryofplanet/scripts/mop-core.mjs agent activate --actor ${actor} --role ${route.primaryRole} --title "${route.primaryTitle}" --name "<agent-name>"`;
579
+ response.command = `node .MOP/scripts/mop-core.mjs agent activate --actor ${actor} --role ${route.primaryRole} --title "${route.primaryTitle}" --name "<agent-name>"`;
580
580
  if (route.needsClarification) response.afterNaming = route.questions;
581
581
  }
582
582
 
@@ -593,7 +593,7 @@ function agentList() {
593
593
 
594
594
  function memberGitIdentity(args) {
595
595
  const state = readState();
596
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
596
+ if (!state.initialized) throw new Error('MOP is not initialized.');
597
597
  const actor = slug(requireArg(args, 'actor'));
598
598
  const member = state.members?.[actor];
599
599
  if (!member) throw new Error('Unknown actor.');
@@ -651,7 +651,7 @@ function validate() {
651
651
  }
652
652
  }
653
653
  for (const type of state.artifacts?.types || []) {
654
- const templatePath = join(rootDir, state.artifacts?.templateDirectory || '.memoryofplanet/templates/artifacts', `${type}.md`);
654
+ const templatePath = join(rootDir, state.artifacts?.templateDirectory || '.MOP/templates/artifacts', `${type}.md`);
655
655
  if (!existsSync(templatePath)) errors.push(`artifact template missing: ${templatePath}`);
656
656
  const folder = state.artifacts?.folderByType?.[type];
657
657
  if (state.artifacts?.folderByType && (!folder || typeof folder !== 'string')) {
@@ -684,7 +684,7 @@ function validate() {
684
684
  process.exitCode = 1;
685
685
  return;
686
686
  }
687
- console.log('MemoryOfPlanet state OK.');
687
+ console.log('MOP state OK.');
688
688
  }
689
689
 
690
690
  function status() {
@@ -753,17 +753,17 @@ function main() {
753
753
  if (command === 'agent' && subcommand === 'list') return agentList();
754
754
 
755
755
  console.log(`Usage:
756
- node .memoryofplanet/scripts/mop-core.mjs status
757
- node .memoryofplanet/scripts/mop-core.mjs validate
758
- node .memoryofplanet/scripts/mop-core.mjs setup --project-name NAME --name DISPLAY --codename CODE --password PASS --mode solo|team --conversation-language LANG --coding-language LANG --git-email EMAIL [--git-name NAME] [--github-username USER] [--github-url URL]
759
- node .memoryofplanet/scripts/mop-core.mjs login --codename CODE --password PASS
760
- node .memoryofplanet/scripts/mop-core.mjs member git-identity --actor CODE --name NAME --email EMAIL [--github-username USER]
761
- node .memoryofplanet/scripts/mop-core.mjs agent activate --actor CODE --role ROLE --title TITLE --name NAME
762
- node .memoryofplanet/scripts/mop-core.mjs agent use --actor CODE --name NAME
763
- node .memoryofplanet/scripts/mop-core.mjs agent current --actor CODE
764
- node .memoryofplanet/scripts/mop-core.mjs agent require --actor CODE [--role ROLE] [--title TITLE]
765
- node .memoryofplanet/scripts/mop-core.mjs agent route --actor CODE --task "task text"
766
- node .memoryofplanet/scripts/mop-core.mjs agent list`);
756
+ node .MOP/scripts/mop-core.mjs status
757
+ node .MOP/scripts/mop-core.mjs validate
758
+ node .MOP/scripts/mop-core.mjs setup --project-name NAME --name DISPLAY --codename CODE --password PASS --mode solo|team --conversation-language LANG --coding-language LANG --git-email EMAIL [--git-name NAME] [--github-username USER] [--github-url URL]
759
+ node .MOP/scripts/mop-core.mjs login --codename CODE --password PASS
760
+ node .MOP/scripts/mop-core.mjs member git-identity --actor CODE --name NAME --email EMAIL [--github-username USER]
761
+ node .MOP/scripts/mop-core.mjs agent activate --actor CODE --role ROLE --title TITLE --name NAME
762
+ node .MOP/scripts/mop-core.mjs agent use --actor CODE --name NAME
763
+ node .MOP/scripts/mop-core.mjs agent current --actor CODE
764
+ node .MOP/scripts/mop-core.mjs agent require --actor CODE [--role ROLE] [--title TITLE]
765
+ node .MOP/scripts/mop-core.mjs agent route --actor CODE --task "task text"
766
+ node .MOP/scripts/mop-core.mjs agent list`);
767
767
  }
768
768
 
769
769
  try {
@@ -76,9 +76,9 @@ function deepMerge(base, override) {
76
76
 
77
77
  function mergedConfig(state, actor = '') {
78
78
  const files = state.customization?.files || {};
79
- const defaults = readJson(join(rootDir, files.defaults || '.memoryofplanet/config/defaults.json'));
80
- const team = readJson(join(rootDir, files.team || '.memoryofplanet/config/team.json'));
81
- const memberPattern = files.memberPattern || '.memoryofplanet/config/members/<codename>.json';
79
+ const defaults = readJson(join(rootDir, files.defaults || '.MOP/config/defaults.json'));
80
+ const team = readJson(join(rootDir, files.team || '.MOP/config/team.json'));
81
+ const memberPattern = files.memberPattern || '.MOP/config/members/<codename>.json';
82
82
  const memberPath = actor ? join(rootDir, memberPattern.replace('<codename>', slug(actor))) : '';
83
83
  const member = memberPath ? readJson(memberPath) : {};
84
84
  return deepMerge(deepMerge(defaults, team), member);
@@ -129,7 +129,7 @@ function status(args) {
129
129
  nextPhase,
130
130
  customization: config.workflow || {},
131
131
  artifacts: {
132
- directory: state.artifacts?.directory || '.memoryofplanet/artifacts',
132
+ directory: state.artifacts?.directory || '.MOP/artifacts',
133
133
  layout: state.artifacts?.layout || 'category/artifact-slug/type.md',
134
134
  folderByType: state.artifacts?.folderByType || {}
135
135
  },
@@ -156,10 +156,10 @@ function help(args) {
156
156
  partyRoles: phase?.partyRoles || [],
157
157
  nextArtifact,
158
158
  nextArtifactCategory: nextCategory,
159
- nextArtifactPathPattern: `${state.artifacts?.directory || '.memoryofplanet/artifacts'}/${nextCategory}/<artifact-slug>/${nextArtifact}.md`,
160
- nextCommand: `node .memoryofplanet/scripts/mop-workflow.mjs artifact create --actor ${actor || '<codename>'} --type ${nextArtifact} --title "<title>"`,
159
+ nextArtifactPathPattern: `${state.artifacts?.directory || '.MOP/artifacts'}/${nextCategory}/<artifact-slug>/${nextArtifact}.md`,
160
+ nextCommand: `node .MOP/scripts/mop-workflow.mjs artifact create --actor ${actor || '<codename>'} --type ${nextArtifact} --title "<title>"`,
161
161
  readinessRequired,
162
- readinessCommand: `node .memoryofplanet/scripts/mop-workflow.mjs gate readiness --actor ${actor || '<codename>'} --task "<task>"`,
162
+ readinessCommand: `node .MOP/scripts/mop-workflow.mjs gate readiness --actor ${actor || '<codename>'} --task "<task>"`,
163
163
  nextPhase: nextPhase?.id || null
164
164
  }, null, 2));
165
165
  }
@@ -196,8 +196,8 @@ function artifactCreate(args) {
196
196
  const title = String(args.title || type);
197
197
  const artifactSlug = slug(args.slug || title || type);
198
198
  const category = artifactCategoryFor(state, args, type);
199
- const artifactRoot = join(rootDir, state.artifacts?.directory || '.memoryofplanet/artifacts', category, artifactSlug);
200
- const templatePath = join(rootDir, state.artifacts?.templateDirectory || '.memoryofplanet/templates/artifacts', `${type}.md`);
199
+ const artifactRoot = join(rootDir, state.artifacts?.directory || '.MOP/artifacts', category, artifactSlug);
200
+ const templatePath = join(rootDir, state.artifacts?.templateDirectory || '.MOP/templates/artifacts', `${type}.md`);
201
201
  const template = existsSync(templatePath)
202
202
  ? readFileSync(templatePath, 'utf8')
203
203
  : `# {{title}}\n\n## Notes\n\n`;
@@ -330,14 +330,14 @@ function main() {
330
330
  if (command === 'config' && subcommand === 'show') return configShow(args);
331
331
 
332
332
  console.log(`Usage:
333
- node .memoryofplanet/scripts/mop-workflow.mjs status [--actor CODE] [--task TEXT]
334
- node .memoryofplanet/scripts/mop-workflow.mjs help --actor CODE --task "what user asked"
335
- node .memoryofplanet/scripts/mop-workflow.mjs next --actor CODE --task "what user asked"
336
- node .memoryofplanet/scripts/mop-workflow.mjs phase set --actor CODE --phase prd
337
- node .memoryofplanet/scripts/mop-workflow.mjs artifact create --actor CODE --type prd --title "Title" [--category plan] [--dry-run]
338
- node .memoryofplanet/scripts/mop-workflow.mjs gate readiness --actor CODE --task "task" [--artifact path]
339
- node .memoryofplanet/scripts/mop-workflow.mjs review adversarial --actor CODE --target "plan or file" [--write]
340
- node .memoryofplanet/scripts/mop-workflow.mjs config show [--actor CODE]`);
333
+ node .MOP/scripts/mop-workflow.mjs status [--actor CODE] [--task TEXT]
334
+ node .MOP/scripts/mop-workflow.mjs help --actor CODE --task "what user asked"
335
+ node .MOP/scripts/mop-workflow.mjs next --actor CODE --task "what user asked"
336
+ node .MOP/scripts/mop-workflow.mjs phase set --actor CODE --phase prd
337
+ node .MOP/scripts/mop-workflow.mjs artifact create --actor CODE --type prd --title "Title" [--category plan] [--dry-run]
338
+ node .MOP/scripts/mop-workflow.mjs gate readiness --actor CODE --task "task" [--artifact path]
339
+ node .MOP/scripts/mop-workflow.mjs review adversarial --actor CODE --target "plan or file" [--write]
340
+ node .MOP/scripts/mop-workflow.mjs config show [--actor CODE]`);
341
341
  }
342
342
 
343
343
  try {
package/.agents/AGENTS.md CHANGED
@@ -1,4 +1,4 @@
1
- # MemoryOfPlanet Core - Antigravity Instructions
1
+ # MOP Core - Antigravity Instructions
2
2
 
3
3
  This is the Antigravity managed-agent entry point. The provider-neutral project
4
4
  rules are in the root `AGENTS.md`; apply those rules first when the root is
@@ -6,8 +6,8 @@ available in the environment.
6
6
 
7
7
  ## Authentication Gate
8
8
 
9
- Before doing anything, read `.memoryofplanet/STATE.json` and follow
10
- `.memoryofplanet/PROTOCOL.md`.
9
+ Before doing anything, read `.MOP/STATE.json` and follow
10
+ `.MOP/PROTOCOL.md`.
11
11
 
12
12
  - If setup is pending, run only the setup wizard.
13
13
  - If login is required, ask only for codename and password.
@@ -17,7 +17,7 @@ Before doing anything, read `.memoryofplanet/STATE.json` and follow
17
17
  - If the router says clarification is needed, ask the clarifying questions
18
18
  before implementation.
19
19
  - If the router activates Party Mode, show visible agent-to-agent dialogue using
20
- the exact format in `.memoryofplanet/PROTOCOL.md`, with `PARTY MODE` shown in
20
+ the exact format in `.MOP/PROTOCOL.md`, with `PARTY MODE` shown in
21
21
  large uppercase before the dialogue. Party Mode normally uses at least 3
22
22
  agents and prefers 4 when relevant roles exist.
23
23
  - For complex work or "what next?" questions, use MOP Workflow:
@@ -50,5 +50,6 @@ Before doing anything, read `.memoryofplanet/STATE.json` and follow
50
50
  - Ruflo runtime config: `.claude-flow/config.yaml`
51
51
  - Antigravity skills: `.agents/skills/`
52
52
 
53
- Installer command after npm publish: `npx burhan-mop install`.
54
- Before npm publish, use: `npx --yes github:BURHANDEV-ENTERPRISE/BURHAN-MOP install`.
53
+ Installer command: `npx burhan-mop install`.
54
+ GitHub source fallback for development builds:
55
+ `npx --yes github:BURHANDEV-ENTERPRISE/BURHAN-MOP install`.
@@ -26,7 +26,7 @@ Okey, nanti kalau nak deploy beri tahu saya. Saya setup auto deploy.
26
26
  Then record the defer action:
27
27
 
28
28
  ```bash
29
- node .memoryofplanet/scripts/mop-auto-deploy.mjs defer --actor <codename> --answer nanti
29
+ node .MOP/scripts/mop-auto-deploy.mjs defer --actor <codename> --answer nanti
30
30
  ```
31
31
 
32
32
  ## Activation
@@ -34,7 +34,7 @@ node .memoryofplanet/scripts/mop-auto-deploy.mjs defer --actor <codename> --answ
34
34
  Only after explicit confirmation:
35
35
 
36
36
  ```bash
37
- node .memoryofplanet/scripts/mop-auto-deploy.mjs enable --actor <codename> --provider github|docker|vercel|all --confirm yes
37
+ node .MOP/scripts/mop-auto-deploy.mjs enable --actor <codename> --provider github|docker|vercel|all --confirm yes
38
38
  ```
39
39
 
40
40
  ## Provider Intent
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: autosycn
3
- description: Use this after every meaningful MemoryOfPlanet state or file change to save memory, commit as the real active user, push to the correct branch, and merge to main when allowed.
3
+ description: Use this after every meaningful MOP state or file change to save memory, commit as the real active user, push to the correct branch, and merge to main when allowed.
4
4
  ---
5
5
 
6
6
  # Autosycn
7
7
 
8
- Autosycn is MemoryOfPlanet's identity-safe autosync skill. The name keeps the
8
+ Autosycn is MOP's identity-safe autosync skill. The name keeps the
9
9
  project spelling `autosycn`, but the behavior is autosync.
10
10
 
11
11
  ## Required Identity Rule
@@ -14,7 +14,7 @@ Never let commits fall back to the AI tool identity. Before pushing, the helper
14
14
  must have a user Git identity:
15
15
 
16
16
  ```bash
17
- node .memoryofplanet/scripts/mop-core.mjs member git-identity --actor <codename> --name "<display name>" --email "<github-verified-email>" --github-username "<github-login>"
17
+ node .MOP/scripts/mop-core.mjs member git-identity --actor <codename> --name "<display name>" --email "<github-verified-email>" --github-username "<github-login>"
18
18
  ```
19
19
 
20
20
  Use a GitHub-verified email or the user's GitHub noreply email. The branch name
@@ -27,27 +27,27 @@ key used for `git push`.
27
27
  First-time git setup:
28
28
 
29
29
  ```bash
30
- node .memoryofplanet/scripts/mop-autosycn.mjs init --actor <owner-codename> --url "<github-url>"
30
+ node .MOP/scripts/mop-autosycn.mjs init --actor <owner-codename> --url "<github-url>"
31
31
  ```
32
32
 
33
33
  Before starting new work, after login, or after a long break:
34
34
 
35
35
  ```bash
36
- node .memoryofplanet/scripts/mop-autosycn.mjs preflight --actor <codename>
36
+ node .MOP/scripts/mop-autosycn.mjs preflight --actor <codename>
37
37
  ```
38
38
 
39
39
  After a state or file change:
40
40
 
41
41
  ```bash
42
- node .memoryofplanet/scripts/mop-autosycn.mjs run --actor <codename> --reason "<what changed>"
42
+ node .MOP/scripts/mop-autosycn.mjs run --actor <codename> --reason "<what changed>"
43
43
  ```
44
44
 
45
45
  Manual steps:
46
46
 
47
47
  ```bash
48
- node .memoryofplanet/scripts/mop-autosycn.mjs memory --actor <codename> --summary "<what changed>"
49
- node .memoryofplanet/scripts/mop-autosycn.mjs push --actor <codename> --reason "<what changed>"
50
- node .memoryofplanet/scripts/mop-autosycn.mjs merge --actor <codename> --from <codename> --reason "Merge dev/<codename>: <what changed>"
48
+ node .MOP/scripts/mop-autosycn.mjs memory --actor <codename> --summary "<what changed>"
49
+ node .MOP/scripts/mop-autosycn.mjs push --actor <codename> --reason "<what changed>"
50
+ node .MOP/scripts/mop-autosycn.mjs merge --actor <codename> --from <codename> --reason "Merge dev/<codename>: <what changed>"
51
51
  ```
52
52
 
53
53
  ## Guarantees
@@ -61,7 +61,7 @@ node .memoryofplanet/scripts/mop-autosycn.mjs merge --actor <codename> --from <c
61
61
  - BURHAN-MOP reviews the pushed branch and merges to `main` only when checks
62
62
  pass.
63
63
  - Sets `GIT_AUTHOR_NAME`, `GIT_AUTHOR_EMAIL`, `GIT_COMMITTER_NAME`, and
64
- `GIT_COMMITTER_EMAIL` from MemoryOfPlanet member state.
64
+ `GIT_COMMITTER_EMAIL` from MOP member state.
65
65
  - Sets local `git config user.name` and `user.email` before commit/merge.
66
66
  - Refuses to push when the user's Git email is missing.
67
67
  - If a GitHub username is configured, refuses to push unless `gh api user`
@@ -5,12 +5,12 @@ or asks which agent/workflow/artifact should be used.
5
5
 
6
6
  ## Behavior
7
7
 
8
- 1. Read `.memoryofplanet/STATE.json`.
9
- 2. Respect auth and Agent Router gates from `.memoryofplanet/PROTOCOL.md`.
8
+ 1. Read `.MOP/STATE.json`.
9
+ 2. Respect auth and Agent Router gates from `.MOP/PROTOCOL.md`.
10
10
  3. Run:
11
11
 
12
12
  ```bash
13
- node .memoryofplanet/scripts/mop-workflow.mjs help --actor <codename> --task "<user task>"
13
+ node .MOP/scripts/mop-workflow.mjs help --actor <codename> --task "<user task>"
14
14
  ```
15
15
 
16
16
  4. Explain the next step in the user's language.
@@ -25,7 +25,7 @@ node .memoryofplanet/scripts/mop-workflow.mjs help --actor <codename> --task "<u
25
25
  ## Rules
26
26
 
27
27
  - Do not invent a workflow phase if the helper returns one.
28
- - Keep artifacts under `.memoryofplanet/artifacts/<category>/<artifact-slug>/<type>.md`.
28
+ - Keep artifacts under `.MOP/artifacts/<category>/<artifact-slug>/<type>.md`.
29
29
  - Treat the current workspace root as the project root. Do not suggest a nested
30
30
  project wrapper folder unless the user explicitly asks for a monorepo or
31
31
  multiple apps.
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: ruflo-core
3
- description: Use this when working with the MemoryOfPlanet Ruflo core, Claude Flow configuration, MCP server setup, swarm routing, hooks, or cross-provider agent instructions.
3
+ description: Use this when working with the MOP Ruflo core, Claude Flow configuration, MCP server setup, swarm routing, hooks, or cross-provider agent instructions.
4
4
  ---
5
5
 
6
6
  # Ruflo Core Skill
7
7
 
8
8
  ## Goal
9
9
 
10
- Keep the MemoryOfPlanet Ruflo core portable across Claude Code, Codex,
10
+ Keep the MOP Ruflo core portable across Claude Code, Codex,
11
11
  ChatGPT coding surfaces, Gemini CLI, and Antigravity.
12
12
 
13
13
  ## Instructions
@@ -32,4 +32,3 @@ ChatGPT coding surfaces, Gemini CLI, and Antigravity.
32
32
  - Do not assume MCP is available; degrade to filesystem and shell inspection.
33
33
  - Do not modify runtime state, logs, sessions, or memory data unless the user
34
34
  specifically asks.
35
-
@@ -20,12 +20,12 @@ Okey, nanti kalau nak deploy beri tahu saya. Saya setup auto deploy.
20
20
  Record defer:
21
21
 
22
22
  ```bash
23
- node .memoryofplanet/scripts/mop-auto-deploy.mjs defer --actor <codename> --answer nanti
23
+ node .MOP/scripts/mop-auto-deploy.mjs defer --actor <codename> --answer nanti
24
24
  ```
25
25
 
26
26
  Activate only with confirmation:
27
27
 
28
28
  ```bash
29
- node .memoryofplanet/scripts/mop-auto-deploy.mjs enable --actor <codename> --provider github|docker|vercel|all --confirm yes
29
+ node .MOP/scripts/mop-auto-deploy.mjs enable --actor <codename> --provider github|docker|vercel|all --confirm yes
30
30
  ```
31
31
 
@@ -1,26 +1,26 @@
1
1
  ---
2
2
  name: autosycn
3
- description: Use this after every meaningful MemoryOfPlanet state or file change to save memory, commit as the real active user, push to the correct branch, and merge to main when allowed.
3
+ description: Use this after every meaningful MOP state or file change to save memory, commit as the real active user, push to the correct branch, and merge to main when allowed.
4
4
  ---
5
5
 
6
6
  # Autosycn
7
7
 
8
- Autosycn is MemoryOfPlanet's identity-safe autosync skill. Use:
8
+ Autosycn is MOP's identity-safe autosync skill. Use:
9
9
 
10
10
  ```bash
11
- node .memoryofplanet/scripts/mop-autosycn.mjs init --actor <owner-codename> --url "<github-url>"
12
- node .memoryofplanet/scripts/mop-autosycn.mjs preflight --actor <codename>
13
- node .memoryofplanet/scripts/mop-autosycn.mjs run --actor <codename> --reason "<what changed>"
11
+ node .MOP/scripts/mop-autosycn.mjs init --actor <owner-codename> --url "<github-url>"
12
+ node .MOP/scripts/mop-autosycn.mjs preflight --actor <codename>
13
+ node .MOP/scripts/mop-autosycn.mjs run --actor <codename> --reason "<what changed>"
14
14
  ```
15
15
 
16
16
  Before first use, configure the user's real Git identity:
17
17
 
18
18
  ```bash
19
- node .memoryofplanet/scripts/mop-core.mjs member git-identity --actor <codename> --name "<display name>" --email "<github-verified-email>" --github-username "<github-login>"
19
+ node .MOP/scripts/mop-core.mjs member git-identity --actor <codename> --name "<display name>" --email "<github-verified-email>" --github-username "<github-login>"
20
20
  ```
21
21
 
22
22
  The helper sets Git author and committer environment variables and local git
23
- config from MemoryOfPlanet state. It refuses to push without a configured email.
23
+ config from MOP state. It refuses to push without a configured email.
24
24
  If a GitHub username is configured, it also refuses to push unless `gh api user`
25
25
  matches that username. The branch name does not control GitHub attribution;
26
26
  commit email and push credentials do.
@@ -5,12 +5,12 @@ or asks which agent/workflow/artifact should be used.
5
5
 
6
6
  ## Behavior
7
7
 
8
- 1. Read `.memoryofplanet/STATE.json`.
9
- 2. Respect auth and Agent Router gates from `.memoryofplanet/PROTOCOL.md`.
8
+ 1. Read `.MOP/STATE.json`.
9
+ 2. Respect auth and Agent Router gates from `.MOP/PROTOCOL.md`.
10
10
  3. Run:
11
11
 
12
12
  ```bash
13
- node .memoryofplanet/scripts/mop-workflow.mjs help --actor <codename> --task "<user task>"
13
+ node .MOP/scripts/mop-workflow.mjs help --actor <codename> --task "<user task>"
14
14
  ```
15
15
 
16
16
  4. Explain the next step in the user's language.
@@ -25,7 +25,7 @@ node .memoryofplanet/scripts/mop-workflow.mjs help --actor <codename> --task "<u
25
25
  ## Rules
26
26
 
27
27
  - Do not invent a workflow phase if the helper returns one.
28
- - Keep artifacts under `.memoryofplanet/artifacts/<category>/<artifact-slug>/<type>.md`.
28
+ - Keep artifacts under `.MOP/artifacts/<category>/<artifact-slug>/<type>.md`.
29
29
  - Treat the current workspace root as the project root. Do not suggest a nested
30
30
  project wrapper folder unless the user explicitly asks for a monorepo or
31
31
  multiple apps.
@@ -1,4 +1,4 @@
1
- # Project-local Codex defaults for MemoryOfPlanet Core.
1
+ # Project-local Codex defaults for MOP Core.
2
2
 
3
3
  project_doc_fallback_filenames = ["GEMINI.md", "CLAUDE.md"]
4
4
  project_doc_max_bytes = 65536