burhan-mop 0.1.0 → 0.1.1

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 (38) hide show
  1. package/{.memoryofplanet → .MOP}/PROTOCOL.md +36 -36
  2. package/{.memoryofplanet → .MOP}/STATE.json +11 -11
  3. package/{.memoryofplanet → .MOP}/config/defaults.json +2 -2
  4. package/{.memoryofplanet → .MOP}/scripts/burhan-mop.mjs +6 -6
  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.md +136 -89
  22. package/bin/burhan-mop.mjs +1 -1
  23. package/bin/mop-core.mjs +1 -1
  24. package/bin/mop-workflow.mjs +1 -1
  25. package/package.json +7 -7
  26. /package/{.memoryofplanet → .MOP}/config/team.json +0 -0
  27. /package/{.memoryofplanet → .MOP}/templates/artifacts/adversarial-review.md +0 -0
  28. /package/{.memoryofplanet → .MOP}/templates/artifacts/architecture.md +0 -0
  29. /package/{.memoryofplanet → .MOP}/templates/artifacts/decision-log.md +0 -0
  30. /package/{.memoryofplanet → .MOP}/templates/artifacts/handoff.md +0 -0
  31. /package/{.memoryofplanet → .MOP}/templates/artifacts/implementation-notes.md +0 -0
  32. /package/{.memoryofplanet → .MOP}/templates/artifacts/prd.md +0 -0
  33. /package/{.memoryofplanet → .MOP}/templates/artifacts/product-brief.md +0 -0
  34. /package/{.memoryofplanet → .MOP}/templates/artifacts/readiness-report.md +0 -0
  35. /package/{.memoryofplanet → .MOP}/templates/artifacts/release-notes.md +0 -0
  36. /package/{.memoryofplanet → .MOP}/templates/artifacts/review.md +0 -0
  37. /package/{.memoryofplanet → .MOP}/templates/artifacts/story.md +0 -0
  38. /package/{.memoryofplanet → .MOP}/templates/artifacts/ux-spec.md +0 -0
@@ -1,15 +1,15 @@
1
- # MemoryOfPlanet Core Protocol
1
+ # MOP Core Protocol
2
2
 
3
3
  This is the source of truth for setup, authentication, member state, and agent
4
- naming in MemoryOfPlanet.
4
+ naming in MOP.
5
5
 
6
6
  ## First Action Gate
7
7
 
8
8
  Before any assistant answers questions or edits files in this core, read
9
- `.memoryofplanet/STATE.json`.
9
+ `.MOP/STATE.json`.
10
10
 
11
11
  - If `initialized` is `false`, output:
12
- `MemoryOfPlanet belum di-setup. Jalankan /mop-setup.`
12
+ `MOP belum di-setup. Jalankan /mop-setup.`
13
13
  Then run the setup wizard only.
14
14
  - If `initialized` is `true` and `activeMember` is empty, output:
15
15
  `Codename dan password.`
@@ -40,7 +40,7 @@ Use this order:
40
40
  After confirmation, run:
41
41
 
42
42
  ```bash
43
- node .memoryofplanet/scripts/mop-core.mjs setup --project-name "<name>" --name "<display>" --codename <codename> --password "<password>" --mode <solo|team> --conversation-language "<lang>" --coding-language "<lang>" --git-email "<github-verified-email>" [--git-name "<display>"] [--github-username "<github-login>"] [--github-url "<url>"] [--join-mode <mode>]
43
+ node .MOP/scripts/mop-core.mjs setup --project-name "<name>" --name "<display>" --codename <codename> --password "<password>" --mode <solo|team> --conversation-language "<lang>" --coding-language "<lang>" --git-email "<github-verified-email>" [--git-name "<display>"] [--github-username "<github-login>"] [--github-url "<url>"] [--join-mode <mode>]
44
44
  ```
45
45
 
46
46
  ## Agent Naming Ceremony
@@ -69,7 +69,7 @@ only when their expertise is genuinely needed, with no fixed maximum.
69
69
  Use:
70
70
 
71
71
  ```bash
72
- node .memoryofplanet/scripts/mop-core.mjs agent route --actor <codename> --task "<user task>"
72
+ node .MOP/scripts/mop-core.mjs agent route --actor <codename> --task "<user task>"
73
73
  ```
74
74
 
75
75
  Routing rules:
@@ -152,7 +152,7 @@ agent: <from-name> (<from-role>)
152
152
 
153
153
  ## MOP Workflow
154
154
 
155
- MOP Workflow is BMAD-inspired but MemoryOfPlanet-native. It is the default
155
+ MOP Workflow is BMAD-inspired and MOP-native. It is the default
156
156
  structure for complex work:
157
157
 
158
158
  `idea -> brief -> prd -> ux-spec -> architecture -> story -> readiness -> implementation -> review -> release`
@@ -161,9 +161,9 @@ Use the workflow helper when the user asks what to do next, asks for a plan, or
161
161
  requests implementation:
162
162
 
163
163
  ```bash
164
- node .memoryofplanet/scripts/mop-workflow.mjs help --actor <codename> --task "<user task>"
165
- node .memoryofplanet/scripts/mop-workflow.mjs next --actor <codename> --task "<user task>"
166
- node .memoryofplanet/scripts/mop-workflow.mjs status --actor <codename>
164
+ node .MOP/scripts/mop-workflow.mjs help --actor <codename> --task "<user task>"
165
+ node .MOP/scripts/mop-workflow.mjs next --actor <codename> --task "<user task>"
166
+ node .MOP/scripts/mop-workflow.mjs status --actor <codename>
167
167
  ```
168
168
 
169
169
  The workflow helper returns the suggested phase, lead agent role, party roles,
@@ -171,12 +171,12 @@ next artifact, and gate status. The primary agent still owns the answer.
171
171
 
172
172
  ## Artifacts
173
173
 
174
- Complex work should create durable artifacts under `.memoryofplanet/artifacts/`.
174
+ Complex work should create durable artifacts under `.MOP/artifacts/`.
175
175
  Artifacts are grouped by category so planning, reviews, releases, and decisions
176
176
  do not mix together:
177
177
 
178
178
  ```text
179
- .memoryofplanet/artifacts/<category>/<artifact-slug>/<type>.md
179
+ .MOP/artifacts/<category>/<artifact-slug>/<type>.md
180
180
  ```
181
181
 
182
182
  Default categories:
@@ -208,7 +208,7 @@ Available artifact types:
208
208
  Create artifacts with:
209
209
 
210
210
  ```bash
211
- node .memoryofplanet/scripts/mop-workflow.mjs artifact create --actor <codename> --type <type> --title "<title>"
211
+ node .MOP/scripts/mop-workflow.mjs artifact create --actor <codename> --type <type> --title "<title>"
212
212
  ```
213
213
 
214
214
  Use `--category <name>` only when the default type category is not suitable.
@@ -232,14 +232,14 @@ for a monorepo or multiple apps.
232
232
 
233
233
  Customization is layered and non-bypassing:
234
234
 
235
- 1. defaults: `.memoryofplanet/config/defaults.json`
236
- 2. team: `.memoryofplanet/config/team.json`
237
- 3. member: `.memoryofplanet/config/members/<codename>.json`
235
+ 1. defaults: `.MOP/config/defaults.json`
236
+ 2. team: `.MOP/config/team.json`
237
+ 3. member: `.MOP/config/members/<codename>.json`
238
238
 
239
239
  Show merged config with:
240
240
 
241
241
  ```bash
242
- node .memoryofplanet/scripts/mop-workflow.mjs config show --actor <codename>
242
+ node .MOP/scripts/mop-workflow.mjs config show --actor <codename>
243
243
  ```
244
244
 
245
245
  Customization may tune workflow preferences, party mode verbosity, and preferred
@@ -251,7 +251,7 @@ BURHAN-MOP review.
251
251
  Before coding or making implementation changes, run:
252
252
 
253
253
  ```bash
254
- node .memoryofplanet/scripts/mop-workflow.mjs gate readiness --actor <codename> --task "<user task>" [--artifact <path>]
254
+ node .MOP/scripts/mop-workflow.mjs gate readiness --actor <codename> --task "<user task>" [--artifact <path>]
255
255
  ```
256
256
 
257
257
  If status is not `ready`, ask clarification or update the required artifact
@@ -263,7 +263,7 @@ Use adversarial review before implementation for risky work, before merge, or
263
263
  when the user asks for review:
264
264
 
265
265
  ```bash
266
- node .memoryofplanet/scripts/mop-workflow.mjs review adversarial --actor <codename> --target "<plan, artifact, file, or task>"
266
+ node .MOP/scripts/mop-workflow.mjs review adversarial --actor <codename> --target "<plan, artifact, file, or task>"
267
267
  ```
268
268
 
269
269
  Adversarial review must challenge assumptions, find failure modes, surface
@@ -300,10 +300,10 @@ npx --yes github:BURHANDEV-ENTERPRISE/BURHAN-MOP install
300
300
  Local equivalent:
301
301
 
302
302
  ```bash
303
- node .memoryofplanet/scripts/burhan-mop.mjs install --target <project-folder>
303
+ node .MOP/scripts/burhan-mop.mjs install --target <project-folder>
304
304
  ```
305
305
 
306
- Installer copies provider entrypoints, MemoryOfPlanet state, skills, workflow
306
+ Installer copies provider entrypoints, MOP state, skills, workflow
307
307
  config, and artifact templates. Existing files are skipped unless `--force` is
308
308
  used.
309
309
 
@@ -319,19 +319,19 @@ Then ask:
319
319
  Save the answer with:
320
320
 
321
321
  ```bash
322
- node .memoryofplanet/scripts/mop-core.mjs agent activate --actor <codename> --role <role> --title "<title>" --name "<agent-name>"
322
+ node .MOP/scripts/mop-core.mjs agent activate --actor <codename> --role <role> --title "<title>" --name "<agent-name>"
323
323
  ```
324
324
 
325
325
  Check the current active agent with:
326
326
 
327
327
  ```bash
328
- node .memoryofplanet/scripts/mop-core.mjs agent current --actor <codename>
328
+ node .MOP/scripts/mop-core.mjs agent current --actor <codename>
329
329
  ```
330
330
 
331
331
  Switch to an existing owned agent with:
332
332
 
333
333
  ```bash
334
- node .memoryofplanet/scripts/mop-core.mjs agent use --actor <codename> --name "<agent-name>"
334
+ node .MOP/scripts/mop-core.mjs agent use --actor <codename> --name "<agent-name>"
335
335
  ```
336
336
 
337
337
  All durable memory and ledger entries must include the active agent when one is
@@ -346,7 +346,7 @@ available to the active member:
346
346
  3. Save the name with:
347
347
 
348
348
  ```bash
349
- node .memoryofplanet/scripts/mop-core.mjs agent activate --actor <codename> --role <role> --title "<title>" --name "<agent-name>"
349
+ node .MOP/scripts/mop-core.mjs agent activate --actor <codename> --role <role> --title "<title>" --name "<agent-name>"
350
350
  ```
351
351
 
352
352
  ## Shared Agent Rule
@@ -366,15 +366,15 @@ changes. It is intentionally identity-safe.
366
366
  Before first push for a member, configure the real Git identity:
367
367
 
368
368
  ```bash
369
- node .memoryofplanet/scripts/mop-core.mjs member git-identity --actor <codename> --name "<display name>" --email "<github-verified-email>" --github-username "<github-login>"
369
+ node .MOP/scripts/mop-core.mjs member git-identity --actor <codename> --name "<display name>" --email "<github-verified-email>" --github-username "<github-login>"
370
370
  ```
371
371
 
372
372
  Then run:
373
373
 
374
374
  ```bash
375
- node .memoryofplanet/scripts/mop-autosycn.mjs init --actor <owner-codename> --url "<github-url>"
376
- node .memoryofplanet/scripts/mop-autosycn.mjs preflight --actor <codename>
377
- node .memoryofplanet/scripts/mop-autosycn.mjs run --actor <codename> --reason "<what changed>"
375
+ node .MOP/scripts/mop-autosycn.mjs init --actor <owner-codename> --url "<github-url>"
376
+ node .MOP/scripts/mop-autosycn.mjs preflight --actor <codename>
377
+ node .MOP/scripts/mop-autosycn.mjs run --actor <codename> --reason "<what changed>"
378
378
  ```
379
379
 
380
380
  Autosycn must:
@@ -423,13 +423,13 @@ Only activate deployment after explicit confirmation.
423
423
 
424
424
  ## File Layout
425
425
 
426
- - `.memoryofplanet/STATE.json` - durable project/member/agent state.
427
- - `.memoryofplanet/PROTOCOL.md` - this protocol.
428
- - `.memoryofplanet/scripts/mop-core.mjs` - setup/login/agent helper.
429
- - `.memoryofplanet/scripts/mop-workflow.mjs` - workflow/help/artifact/readiness/review helper.
430
- - `.memoryofplanet/scripts/burhan-mop.mjs` - installer CLI for `npx burhan-mop install`.
431
- - `.memoryofplanet/scripts/mop-autosycn.mjs` - identity-safe autosycn helper.
432
- - `.memoryofplanet/scripts/mop-auto-deploy.mjs` - opt-in deployment helper.
426
+ - `.MOP/STATE.json` - durable project/member/agent state.
427
+ - `.MOP/PROTOCOL.md` - this protocol.
428
+ - `.MOP/scripts/mop-core.mjs` - setup/login/agent helper.
429
+ - `.MOP/scripts/mop-workflow.mjs` - workflow/help/artifact/readiness/review helper.
430
+ - `.MOP/scripts/burhan-mop.mjs` - installer CLI for `npx burhan-mop install`.
431
+ - `.MOP/scripts/mop-autosycn.mjs` - identity-safe autosycn helper.
432
+ - `.MOP/scripts/mop-auto-deploy.mjs` - opt-in deployment helper.
433
433
  - `AGENTS.md` - Codex and provider-neutral entrypoint.
434
434
  - `CLAUDE.md` - Claude Code entrypoint.
435
435
  - `GEMINI.md` - Gemini CLI entrypoint.
@@ -58,7 +58,7 @@
58
58
  "workflow": {
59
59
  "enabled": true,
60
60
  "name": "MOP Workflow",
61
- "style": "BMAD-inspired, MemoryOfPlanet-native",
61
+ "style": "BMAD-inspired, MOP-native",
62
62
  "currentPhase": null,
63
63
  "phaseOrder": [
64
64
  "idea",
@@ -202,8 +202,8 @@
202
202
  },
203
203
  "artifacts": {
204
204
  "enabled": true,
205
- "directory": ".memoryofplanet/artifacts",
206
- "templateDirectory": ".memoryofplanet/templates/artifacts",
205
+ "directory": ".MOP/artifacts",
206
+ "templateDirectory": ".MOP/templates/artifacts",
207
207
  "layout": "category/artifact-slug/type.md",
208
208
  "defaultCategory": "general",
209
209
  "folderByType": {
@@ -243,9 +243,9 @@
243
243
  "member"
244
244
  ],
245
245
  "files": {
246
- "defaults": ".memoryofplanet/config/defaults.json",
247
- "team": ".memoryofplanet/config/team.json",
248
- "memberPattern": ".memoryofplanet/config/members/<codename>.json"
246
+ "defaults": ".MOP/config/defaults.json",
247
+ "team": ".MOP/config/team.json",
248
+ "memberPattern": ".MOP/config/members/<codename>.json"
249
249
  },
250
250
  "rules": [
251
251
  "Defaults define safe project behavior.",
@@ -276,7 +276,7 @@
276
276
  "config",
277
277
  "scripts",
278
278
  ".github",
279
- ".memoryofplanet",
279
+ ".MOP",
280
280
  ".agents",
281
281
  ".claude",
282
282
  ".codex",
@@ -335,10 +335,10 @@
335
335
  "enabled": true,
336
336
  "packageName": "burhan-mop",
337
337
  "command": "npx burhan-mop install",
338
- "entrypoint": ".memoryofplanet/scripts/burhan-mop.mjs",
338
+ "entrypoint": ".MOP/scripts/burhan-mop.mjs",
339
339
  "installTargets": [
340
340
  "provider entrypoints",
341
- "MemoryOfPlanet state",
341
+ "MOP state",
342
342
  "skills",
343
343
  "workflow config",
344
344
  "artifact templates"
@@ -511,7 +511,7 @@
511
511
  "role": "memory",
512
512
  "title": "Memory Keeper",
513
513
  "kind": "memory",
514
- "purpose": "Save, recall, summarize, search, and clean long-term MemoryOfPlanet records."
514
+ "purpose": "Save, recall, summarize, search, and clean long-term MOP records."
515
515
  },
516
516
  {
517
517
  "role": "ux",
@@ -555,7 +555,7 @@
555
555
  "at": "2026-06-11T00:00:00.000Z",
556
556
  "actor": "system",
557
557
  "kind": "state-created",
558
- "summary": "MemoryOfPlanet state scaffold created; setup pending."
558
+ "summary": "MOP state scaffold created; setup pending."
559
559
  }
560
560
  ]
561
561
  }
@@ -14,8 +14,8 @@
14
14
  "includeGateStatus": true
15
15
  },
16
16
  "artifacts": {
17
- "directory": ".memoryofplanet/artifacts",
18
- "templateDirectory": ".memoryofplanet/templates/artifacts",
17
+ "directory": ".MOP/artifacts",
18
+ "templateDirectory": ".MOP/templates/artifacts",
19
19
  "layout": "category/artifact-slug/type.md",
20
20
  "defaultCategory": "general",
21
21
  "folderByType": {
@@ -41,7 +41,7 @@ function install(args) {
41
41
  'AGENTS.md',
42
42
  'CLAUDE.md',
43
43
  'GEMINI.md',
44
- '.memoryofplanet',
44
+ '.MOP',
45
45
  '.agents',
46
46
  '.claude',
47
47
  '.claude-flow',
@@ -63,7 +63,7 @@ function install(args) {
63
63
  next: [
64
64
  'Run /mop-setup in the target project.',
65
65
  'For team mode, initialize autosycn after setup.',
66
- 'Use: node .memoryofplanet/scripts/mop-workflow.mjs help --actor <codename> --task "lepas ni buat apa?"'
66
+ 'Use: node .MOP/scripts/mop-workflow.mjs help --actor <codename> --task "lepas ni buat apa?"'
67
67
  ]
68
68
  }, null, 2));
69
69
  }
@@ -73,10 +73,10 @@ function doctor() {
73
73
  'AGENTS.md',
74
74
  'CLAUDE.md',
75
75
  'GEMINI.md',
76
- '.memoryofplanet/STATE.json',
77
- '.memoryofplanet/PROTOCOL.md',
78
- '.memoryofplanet/scripts/mop-core.mjs',
79
- '.memoryofplanet/scripts/mop-workflow.mjs',
76
+ '.MOP/STATE.json',
77
+ '.MOP/PROTOCOL.md',
78
+ '.MOP/scripts/mop-core.mjs',
79
+ '.MOP/scripts/mop-workflow.mjs',
80
80
  '.agents/skills/mop-help/SKILL.md'
81
81
  ];
82
82
  const results = required.map((entry) => {
@@ -102,7 +102,7 @@ function defer(args) {
102
102
 
103
103
  function enable(args) {
104
104
  const state = readState();
105
- if (!state.initialized) throw new Error('MemoryOfPlanet is not initialized.');
105
+ if (!state.initialized) throw new Error('MOP is not initialized.');
106
106
  const actor = requireArg(args, 'actor');
107
107
  if (!state.members?.[actor]) throw new Error(`Unknown actor: ${actor}`);
108
108
  const confirm = String(args.confirm || '').toLowerCase();
@@ -138,10 +138,10 @@ function main() {
138
138
  if (command === 'enable') return enable(args);
139
139
 
140
140
  console.log(`Usage:
141
- node .memoryofplanet/scripts/mop-auto-deploy.mjs status
142
- node .memoryofplanet/scripts/mop-auto-deploy.mjs ask
143
- node .memoryofplanet/scripts/mop-auto-deploy.mjs defer --actor <codename> --answer nanti
144
- node .memoryofplanet/scripts/mop-auto-deploy.mjs enable --actor <codename> --provider github|docker|vercel|all --confirm yes`);
141
+ node .MOP/scripts/mop-auto-deploy.mjs status
142
+ node .MOP/scripts/mop-auto-deploy.mjs ask
143
+ node .MOP/scripts/mop-auto-deploy.mjs defer --actor <codename> --answer nanti
144
+ node .MOP/scripts/mop-auto-deploy.mjs enable --actor <codename> --provider github|docker|vercel|all --confirm yes`);
145
145
  }
146
146
 
147
147
  try {
@@ -150,4 +150,3 @@ try {
150
150
  console.error(error.message);
151
151
  process.exitCode = 1;
152
152
  }
153
-
@@ -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 {