arkaos 2.60.0 → 2.62.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.
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.62.0
|
|
Binary file
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
id: community-model
|
|
2
|
+
name: Community Business Model
|
|
3
|
+
description: Community business model design — purpose + ideal member + value prop + SPACES role + platform fit + monetisation + growth loop
|
|
4
|
+
department: community
|
|
5
|
+
tier: enterprise
|
|
6
|
+
command: "/community model"
|
|
7
|
+
requires_branch: false
|
|
8
|
+
requires_spec: false
|
|
9
|
+
quality_gate_required: true
|
|
10
|
+
|
|
11
|
+
phases:
|
|
12
|
+
- id: brief
|
|
13
|
+
name: Community Brief
|
|
14
|
+
description: Define niche, founder context, current audience size, success metric, runway
|
|
15
|
+
agents:
|
|
16
|
+
- agent_id: community-strategist-beatriz
|
|
17
|
+
role: Frame niche, founder context, current audience, runway, success metric
|
|
18
|
+
gate:
|
|
19
|
+
type: user_approval
|
|
20
|
+
description: User confirms niche and context
|
|
21
|
+
|
|
22
|
+
- id: purpose-definition
|
|
23
|
+
name: Purpose & Identity
|
|
24
|
+
description: Define the community's purpose using the Onlyness frame — only community where X for Y who want Z
|
|
25
|
+
agents:
|
|
26
|
+
- agent_id: community-strategist-beatriz
|
|
27
|
+
role: Onlyness frame + community identity statement
|
|
28
|
+
- agent_id: brand-strategist-mateus
|
|
29
|
+
role: Differentiation from adjacent communities
|
|
30
|
+
parallel: true
|
|
31
|
+
gate:
|
|
32
|
+
type: user_approval
|
|
33
|
+
description: User approves purpose and identity
|
|
34
|
+
|
|
35
|
+
- id: ideal-member-profile
|
|
36
|
+
name: Ideal Member Profile
|
|
37
|
+
description: Define the IMP (Ideal Member Profile) with firmographics + practitioner level + transformation context
|
|
38
|
+
agents:
|
|
39
|
+
- agent_id: community-strategist-beatriz
|
|
40
|
+
role: IMP definition with belonging triggers + dropout triggers
|
|
41
|
+
gate:
|
|
42
|
+
type: user_approval
|
|
43
|
+
description: User approves IMP
|
|
44
|
+
outputs:
|
|
45
|
+
- type: document
|
|
46
|
+
format: markdown
|
|
47
|
+
obsidian_path: "WizardingCode/Communities/IMP/"
|
|
48
|
+
description: Ideal Member Profile with belonging + dropout triggers
|
|
49
|
+
|
|
50
|
+
- id: spaces-classification
|
|
51
|
+
name: SPACES Classification
|
|
52
|
+
description: Classify the community across the SPACES framework — Support / Product / Action / Content / Engagement / Success
|
|
53
|
+
agents:
|
|
54
|
+
- agent_id: community-strategist-beatriz
|
|
55
|
+
role: SPACES classification with primary + secondary purpose
|
|
56
|
+
gate:
|
|
57
|
+
type: user_approval
|
|
58
|
+
description: User approves SPACES role
|
|
59
|
+
|
|
60
|
+
- id: value-prop
|
|
61
|
+
name: Value Proposition (Member-Side + Operator-Side)
|
|
62
|
+
description: Two value props — what the member gets, what the operator gets, why both compound
|
|
63
|
+
agents:
|
|
64
|
+
- agent_id: community-strategist-beatriz
|
|
65
|
+
role: Two-sided value prop with compounding logic
|
|
66
|
+
- agent_id: copy-director-eduardo
|
|
67
|
+
role: Value prop copy for both audiences
|
|
68
|
+
parallel: true
|
|
69
|
+
gate:
|
|
70
|
+
type: user_approval
|
|
71
|
+
description: User approves value props
|
|
72
|
+
|
|
73
|
+
- id: platform-fit
|
|
74
|
+
name: Platform Fit
|
|
75
|
+
description: Pick platform based on IMP × SPACES × moderation needs — Discord / Slack / Circle / Mighty / native / open-source
|
|
76
|
+
agents:
|
|
77
|
+
- agent_id: community-strategist-beatriz
|
|
78
|
+
role: Platform selection matrix with fit per dimension
|
|
79
|
+
gate:
|
|
80
|
+
type: user_approval
|
|
81
|
+
description: User approves platform choice
|
|
82
|
+
|
|
83
|
+
- id: monetisation
|
|
84
|
+
name: Monetisation Model
|
|
85
|
+
description: Free / freemium / paid / cohort / sponsorship — with unit economics check
|
|
86
|
+
agents:
|
|
87
|
+
- agent_id: community-strategist-beatriz
|
|
88
|
+
role: Monetisation model with conversion + LTV math
|
|
89
|
+
- agent_id: cfo-helena
|
|
90
|
+
role: Unit economics validation
|
|
91
|
+
parallel: true
|
|
92
|
+
gate:
|
|
93
|
+
type: user_approval
|
|
94
|
+
description: User approves monetisation model
|
|
95
|
+
|
|
96
|
+
- id: growth-loop
|
|
97
|
+
name: Community Growth Loop
|
|
98
|
+
description: Define the loop — member contributes → status / reach → outsiders notice → join → contribute. Plus K-factor / NRG target.
|
|
99
|
+
agents:
|
|
100
|
+
- agent_id: community-strategist-beatriz
|
|
101
|
+
role: Growth loop spec with mechanism + metric per step
|
|
102
|
+
- agent_id: marketing-director-luna
|
|
103
|
+
role: Loop compounding factor + coordination with other depts (content, paid)
|
|
104
|
+
parallel: true
|
|
105
|
+
gate:
|
|
106
|
+
type: user_approval
|
|
107
|
+
description: User approves growth loop
|
|
108
|
+
|
|
109
|
+
- id: self-critique
|
|
110
|
+
name: Self-Critique
|
|
111
|
+
description: Stress-test — does IMP × SPACES × platform align? Does monetisation match member value? Is the loop compounding-positive?
|
|
112
|
+
agents:
|
|
113
|
+
- agent_id: community-strategist-beatriz
|
|
114
|
+
role: Coherence check across all blocks
|
|
115
|
+
gate:
|
|
116
|
+
type: auto
|
|
117
|
+
|
|
118
|
+
- id: quality-gate
|
|
119
|
+
name: Quality Gate
|
|
120
|
+
model_override: opus
|
|
121
|
+
description: Mandatory quality review
|
|
122
|
+
agents:
|
|
123
|
+
- agent_id: cqo-marta
|
|
124
|
+
role: Orchestrate quality review
|
|
125
|
+
- agent_id: copy-director-eduardo
|
|
126
|
+
role: Value prop prose, member-side / operator-side language, no clichés
|
|
127
|
+
parallel: true
|
|
128
|
+
- agent_id: tech-director-francisca
|
|
129
|
+
role: Platform technical feasibility, monetisation tech stack, instrumentation
|
|
130
|
+
parallel: true
|
|
131
|
+
gate:
|
|
132
|
+
type: quality_gate
|
|
133
|
+
required_verdict: APPROVED
|
|
134
|
+
|
|
135
|
+
- id: delivery
|
|
136
|
+
name: Community Model Package Delivery
|
|
137
|
+
description: Compile the community model package — purpose + IMP + SPACES + value props + platform + monetisation + growth loop
|
|
138
|
+
agents:
|
|
139
|
+
- agent_id: community-strategist-beatriz
|
|
140
|
+
role: Full community model package + 1-page executive summary
|
|
141
|
+
gate:
|
|
142
|
+
type: auto
|
|
143
|
+
outputs:
|
|
144
|
+
- type: document
|
|
145
|
+
format: markdown
|
|
146
|
+
obsidian_path: "WizardingCode/Communities/Models/"
|
|
147
|
+
description: Complete community model — purpose + IMP + SPACES + two-sided value prop + platform + monetisation + growth loop + exec summary
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Auto-install official Claude Code plugins on `npx arkaos install` and
|
|
2
|
+
// `npx arkaos@latest update` (PR43 v2.62.0).
|
|
3
|
+
//
|
|
4
|
+
// Behaviour:
|
|
5
|
+
// - No-op when runtime is not Claude Code
|
|
6
|
+
// - Idempotent: skips plugins already in
|
|
7
|
+
// ~/.claude/plugins/installed_plugins.json
|
|
8
|
+
// - Surfaces a one-line status per plugin (installed | already-present | failed)
|
|
9
|
+
// - Never raises — install failures are logged but don't break the installer
|
|
10
|
+
//
|
|
11
|
+
// Plugin list is intentionally short. Add new defaults here when the
|
|
12
|
+
// operator decides a plugin should ship as a standard ArkaOS dependency.
|
|
13
|
+
|
|
14
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
+
import { execSync, spawnSync } from "node:child_process";
|
|
16
|
+
import { homedir } from "node:os";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
|
|
19
|
+
// Each entry is "name@marketplace" matching the `claude plugin install`
|
|
20
|
+
// CLI argument format.
|
|
21
|
+
export const DEFAULT_CLAUDE_PLUGINS = [
|
|
22
|
+
"frontend-design@claude-plugins-official",
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const _INSTALLED_REGISTRY = join(
|
|
26
|
+
homedir(), ".claude", "plugins", "installed_plugins.json",
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
export function installDefaultClaudePlugins({
|
|
30
|
+
runtime = "claude-code",
|
|
31
|
+
plugins = DEFAULT_CLAUDE_PLUGINS,
|
|
32
|
+
home = homedir(),
|
|
33
|
+
} = {}) {
|
|
34
|
+
if (runtime !== "claude-code") {
|
|
35
|
+
return { skipped: "runtime-not-claude-code", results: [] };
|
|
36
|
+
}
|
|
37
|
+
if (!isClaudeCliAvailable()) {
|
|
38
|
+
return { skipped: "claude-cli-not-found", results: [] };
|
|
39
|
+
}
|
|
40
|
+
const alreadyInstalled = readInstalledRegistry(home);
|
|
41
|
+
const results = plugins.map((p) =>
|
|
42
|
+
installOne(p, alreadyInstalled),
|
|
43
|
+
);
|
|
44
|
+
return { skipped: null, results };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function isClaudeCliAvailable() {
|
|
48
|
+
try {
|
|
49
|
+
execSync("claude --version", { stdio: "pipe", timeout: 5000 });
|
|
50
|
+
return true;
|
|
51
|
+
} catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function readInstalledRegistry(home) {
|
|
57
|
+
const path = join(home, ".claude", "plugins", "installed_plugins.json");
|
|
58
|
+
if (!existsSync(path)) {
|
|
59
|
+
return new Set();
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const data = JSON.parse(readFileSync(path, "utf-8"));
|
|
63
|
+
return new Set(Object.keys(data.plugins || {}));
|
|
64
|
+
} catch {
|
|
65
|
+
return new Set();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function installOne(plugin, alreadyInstalled) {
|
|
70
|
+
if (alreadyInstalled.has(plugin)) {
|
|
71
|
+
return { plugin, action: "already-present" };
|
|
72
|
+
}
|
|
73
|
+
// Use spawnSync so we can capture exit code without throwing on non-zero.
|
|
74
|
+
// Pass --silent equivalents if available; otherwise default verbosity is OK
|
|
75
|
+
// — the installer is interactive at install time.
|
|
76
|
+
const out = spawnSync("claude", ["plugin", "install", plugin], {
|
|
77
|
+
timeout: 60_000,
|
|
78
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
79
|
+
encoding: "utf-8",
|
|
80
|
+
});
|
|
81
|
+
if (out.error || out.status !== 0) {
|
|
82
|
+
const msg = (out.stderr || out.error?.message || "unknown").trim().slice(0, 200);
|
|
83
|
+
return { plugin, action: "failed", reason: msg };
|
|
84
|
+
}
|
|
85
|
+
return { plugin, action: "installed" };
|
|
86
|
+
}
|
package/installer/index.js
CHANGED
|
@@ -311,6 +311,27 @@ export async function install({ runtime, path, force, skipSystem, withOllama })
|
|
|
311
311
|
console.log(` Warning: could not scaffold user-data (${err.message})`);
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
+
// PR43 v2.62.0 — auto-install default Claude Code plugins. Only runs
|
|
315
|
+
// when runtime is Claude Code AND the `claude` CLI is available.
|
|
316
|
+
// Idempotent: skips plugins already in installed_plugins.json.
|
|
317
|
+
try {
|
|
318
|
+
const { installDefaultClaudePlugins } = await import("./claude-plugins.js");
|
|
319
|
+
const pluginResult = installDefaultClaudePlugins({ runtime });
|
|
320
|
+
if (!pluginResult.skipped) {
|
|
321
|
+
for (const r of pluginResult.results) {
|
|
322
|
+
if (r.action === "installed") {
|
|
323
|
+
console.log(` ${r.plugin} installed.`);
|
|
324
|
+
} else if (r.action === "already-present") {
|
|
325
|
+
console.log(` ${r.plugin} already installed (skipped).`);
|
|
326
|
+
} else if (r.action === "failed") {
|
|
327
|
+
console.log(` ${r.plugin} install failed (${r.reason}).`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
} catch (err) {
|
|
332
|
+
console.log(` Warning: could not install default Claude plugins (${err.message})`);
|
|
333
|
+
}
|
|
334
|
+
|
|
314
335
|
const manifest = {
|
|
315
336
|
version: VERSION,
|
|
316
337
|
runtime,
|
package/package.json
CHANGED