archik 0.12.37 → 0.12.38
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/.claude-plugin/marketplace.json +17 -0
- package/.claude-plugin/plugin.json +21 -0
- package/README.md +23 -1
- package/dist/cli/archik.mjs +1 -1
- package/package.json +4 -3
- /package/{.claude/commands/archik → commands}/accept.md +0 -0
- /package/{.claude/commands/archik → commands}/actor.md +0 -0
- /package/{.claude/commands/archik → commands}/alpha.md +0 -0
- /package/{.claude/commands/archik → commands}/describe.md +0 -0
- /package/{.claude/commands/archik → commands}/dev.md +0 -0
- /package/{.claude/commands/archik → commands}/evolve.md +0 -0
- /package/{.claude/commands/archik → commands}/reject.md +0 -0
- /package/{.claude/commands/archik → commands}/spawn.md +0 -0
- /package/{.claude/commands/archik → commands}/suggest.md +0 -0
- /package/{.claude/commands/archik → commands}/trace.md +0 -0
- /package/{.claude/commands/archik → commands}/usecase.md +0 -0
- /package/{.claude/skills → skills}/archik/SKILL.md +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "archik",
|
|
3
|
+
"owner": {
|
|
4
|
+
"name": "Bashar",
|
|
5
|
+
"email": "welcomebachar@gmail.com"
|
|
6
|
+
},
|
|
7
|
+
"plugins": [
|
|
8
|
+
{
|
|
9
|
+
"name": "archik",
|
|
10
|
+
"source": ".",
|
|
11
|
+
"description": "Plain-YAML architecture diagrams + Jacobson use cases / actors / sequence diagrams / alphas, all CLI-mediated and validated. The skill enforces CLI-only access; the slash commands wrap the loop.",
|
|
12
|
+
"homepage": "https://github.com/bacharSalleh/archik#readme",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"keywords": ["architecture", "diagram", "yaml", "jacobson", "ecb"]
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "archik",
|
|
3
|
+
"description": "The shared vocabulary between you and Claude Code, at the engineering level. Plain-YAML architecture diagrams + Jacobson use cases / actors / sequence diagrams / alphas, all CLI-mediated and validated.",
|
|
4
|
+
"author": {
|
|
5
|
+
"name": "Bashar",
|
|
6
|
+
"email": "welcomebachar@gmail.com"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/bacharSalleh/archik#readme",
|
|
9
|
+
"repository": "https://github.com/bacharSalleh/archik",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"architecture",
|
|
13
|
+
"diagram",
|
|
14
|
+
"yaml",
|
|
15
|
+
"jacobson",
|
|
16
|
+
"use-case",
|
|
17
|
+
"ecb",
|
|
18
|
+
"essence",
|
|
19
|
+
"documentation"
|
|
20
|
+
]
|
|
21
|
+
}
|
package/README.md
CHANGED
|
@@ -65,6 +65,17 @@ Done with the canvas? `npx archik stop`.
|
|
|
65
65
|
</video>
|
|
66
66
|
</p>
|
|
67
67
|
|
|
68
|
+
### Install as a Claude Code plugin
|
|
69
|
+
|
|
70
|
+
If you're on Claude Code and prefer the plugin marketplace flow, archik also ships as a plugin (skill + 11 slash commands bundled together):
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
/plugin marketplace add bacharSalleh/archik
|
|
74
|
+
/plugin install archik@archik
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The plugin still shells out to the `archik` CLI for the actual diagram work, so you also need the npm binary on your PATH (`npm i -g archik` or keep using `npx archik`). The skill enforces CLI-only access either way — same contract as the npm install.
|
|
78
|
+
|
|
68
79
|
## What you write
|
|
69
80
|
|
|
70
81
|
```yaml
|
|
@@ -177,7 +188,9 @@ Each command stages a sidecar via `npx archik suggest set`. The canvas shows a g
|
|
|
177
188
|
|
|
178
189
|
### Manual install (existing projects without `archik init`)
|
|
179
190
|
|
|
180
|
-
If you already have an archik file and just want to add the Claude integration:
|
|
191
|
+
If you already have an archik file and just want to add the Claude integration, pick the path that suits you:
|
|
192
|
+
|
|
193
|
+
**Via the npm CLI:**
|
|
181
194
|
|
|
182
195
|
```bash
|
|
183
196
|
npx archik@latest skill --user # install skill into ~/.claude/skills (all projects)
|
|
@@ -186,6 +199,15 @@ npx archik@latest commands --user # install /archik:* into ~/.claude/command
|
|
|
186
199
|
|
|
187
200
|
Drop the `--user` flag to scope to the current project only.
|
|
188
201
|
|
|
202
|
+
**Via Claude Code's plugin marketplace:**
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
/plugin marketplace add bacharSalleh/archik
|
|
206
|
+
/plugin install archik@archik
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Either path leaves the same skill + the same 11 slash commands in the same target directories.
|
|
210
|
+
|
|
189
211
|
## Commands
|
|
190
212
|
|
|
191
213
|
```
|
package/dist/cli/archik.mjs
CHANGED
|
@@ -371,7 +371,7 @@ Consider installing the package or pass your own 'workerFactory' to ELK's constr
|
|
|
371
371
|
React keys must be passed directly to JSX without using spread:
|
|
372
372
|
let props = %s;
|
|
373
373
|
<%s key={someKey} {...props} />`,Yo,Wr,Oa,Wr),_a[Wr+Yo]=!0)}if(Wr=null,yi!==void 0&&(d(yi),Wr=""+yi),v(Zn)&&(d(Zn.key),Wr=""+Zn.key),"key"in Zn){yi={};for(var Wl in Zn)Wl!=="key"&&(yi[Wl]=Zn[Wl])}else yi=Zn;return Wr&&k(yi,typeof nn=="function"?nn.displayName||nn.name||"Unknown":nn),P(nn,Wr,yi,f(),Hs,Lo)}function B(nn){G(nn)?nn._store&&(nn._store.validated=1):typeof nn=="object"&&nn!==null&&nn.$$typeof===jn&&(nn._payload.status==="fulfilled"?G(nn._payload.value)&&nn._payload.value._store&&(nn._payload.value._store.validated=1):nn._store&&(nn._store.validated=1))}function G(nn){return typeof nn=="object"&&nn!==null&&nn.$$typeof===de}var K=y3(),de=Symbol.for("react.transitional.element"),ce=Symbol.for("react.portal"),we=Symbol.for("react.fragment"),De=Symbol.for("react.strict_mode"),at=Symbol.for("react.profiler"),kt=Symbol.for("react.consumer"),_e=Symbol.for("react.context"),ht=Symbol.for("react.forward_ref"),Te=Symbol.for("react.suspense"),Wt=Symbol.for("react.suspense_list"),tn=Symbol.for("react.memo"),jn=Symbol.for("react.lazy"),rr=Symbol.for("react.activity"),_r=Symbol.for("react.client.reference"),fn=K.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ii=Object.prototype.hasOwnProperty,Si=Array.isArray,No=console.createTask?console.createTask:function(){return null};K={react_stack_bottom_frame:function(nn){return nn()}};var bs,Ki={},se=K.react_stack_bottom_frame.bind(K,b)(),Bs=No(g(b)),_a={};DDe.Fragment=we,DDe.jsx=function(nn,Zn,yi){var Yo=1e4>fn.recentlyCreatedOwnerStacks++;return j(nn,Zn,yi,!1,Yo?Error("react-stack-top-frame"):se,Yo?No(g(nn)):Bs)},DDe.jsxs=function(nn,Zn,yi){var Yo=1e4>fn.recentlyCreatedOwnerStacks++;return j(nn,Zn,yi,!0,Yo?Error("react-stack-top-frame"):se,Yo?No(g(nn)):Bs)}})()});var sc=mr((uri,Dft)=>{"use strict";process.env.NODE_ENV==="production"?Dft.exports=tan():Dft.exports=nan()});import{readFileSync as s8r}from"node:fs";import u8r from"node:path";import{access as RRn,mkdir as DRn,readFile as ORn,writeFile as EKt}from"node:fs/promises";import pct from"node:path";var kRn=process.env.FORCE_COLOR==="0"?!1:process.env.FORCE_COLOR!==void 0?!0:process.env.NO_COLOR!==void 0?!1:!!process.stdout.isTTY,Hx=(o,c)=>d=>kRn?`\x1B[${o}m${d}\x1B[${c}m`:d,Mr=Hx("1","22"),tr=Hx("2","22"),MRn=Hx("31","39"),act=Hx("32","39"),Uf=Hx("33","39"),eKr=Hx("34","39"),mKt=Hx("35","39"),ys=Hx("36","39"),V1=Hx("90","39"),Hl=()=>Mr(act("\u2713")),Yr=()=>Mr(MRn("\u2717")),k9=()=>ys("\u25B8");function vKt(o){let c={_:[]};for(let d=0;d<o.length;d++){let g=o[d];if(g.startsWith("--")){let f=g.indexOf("=");if(f!==-1)c[g.slice(2,f)]=g.slice(f+1);else{let b=o[d+1];b===void 0||b.startsWith("--")?c[g.slice(2)]="true":(c[g.slice(2)]=b,d++)}}else c._.push(g)}return c}function Zr(o,c){let d=o[c];return Array.isArray(d)?d[0]:d}import{existsSync as SRn,mkdirSync as _Rn}from"node:fs";import{readFile as CRn,rename as IRn,unlink as LRn,writeFile as ERn}from"node:fs/promises";import MKt from"node:path";import{access as xRn}from"node:fs/promises";import $x from"node:path";var sct=".archik/main.archik.yaml",uct="architecture.archik.yaml";async function lct(o){try{return await xRn(o),!0}catch{return!1}}async function Lu(o,c=process.cwd()){if(o!==void 0&&o!=="")return $x.resolve(c,o);let d=$x.resolve(c,uct),g=$x.resolve(c,sct),[f,b]=await Promise.all([lct(d),lct(g)]);if(f&&b)throw new Error(`Found both ${uct} and ${sct}. Pick one \u2014 keep the file under .archik/ (preferred) and delete the root copy, or vice versa.`);return f?d:g}async function kKt(o,c=process.cwd()){if(o!==void 0&&o!=="")return $x.resolve(c,o);let d=$x.resolve(c,uct);return await lct(d)?d:$x.resolve(c,sct)}function W1(o){let c=$x.dirname(o);return $x.basename(c)===".archik"?$x.dirname(c):c}var hct="runtime.json";function zU(o){return MKt.join(W1(o),".archik",hct)}async function kfe(o,c){let d=zU(o),g=MKt.dirname(d);SRn(g)||_Rn(g,{recursive:!0});let f=`${d}.tmp`;await ERn(f,JSON.stringify(c,null,2)+`
|
|
374
|
-
`,"utf-8"),await IRn(f,d)}async function xKt(o){let c=zU(o);try{let d=await CRn(c,"utf-8"),g=JSON.parse(d);return typeof g.pid!="number"||typeof g.port!="number"||typeof g.host!="string"||typeof g.url!="string"||typeof g.startedAt!="string"?null:g}catch{return null}}function SKt(o){let c=o.urls?.local?.[0];if(c===void 0)return null;let d;try{d=new URL(c)}catch{return null}if(d.port==="")return null;let g=Number.parseInt(d.port,10);return Number.isFinite(g)?{pid:o.pid,port:g,host:d.hostname,url:c,startedAt:o.startedAt}:null}async function GI(o){let c=zU(o);try{await LRn(c)}catch{}}import{copyFile as _Kt,mkdir as CKt,readdir as NRn,stat as dct}from"node:fs/promises";import h3 from"node:path";import IKt from"node:os";import{existsSync as TRn,realpathSync as ARn}from"node:fs";import Mfe from"node:path";import{fileURLToPath as PRn}from"node:url";function U5(){let o=process.env.ARCHIK_PKG_ROOT;if(o)return Mfe.resolve(o);let c=Mfe.dirname(ARn(PRn(import.meta.url))),d=c;for(let g=0;g<10;g++){if(TRn(Mfe.join(d,"package.json")))return d;let f=Mfe.dirname(d);if(f===d)break;d=f}throw new Error(`archik: could not locate package root (start: ${c})`)}async function fct(o){let c=h3.join(U5(),"
|
|
374
|
+
`,"utf-8"),await IRn(f,d)}async function xKt(o){let c=zU(o);try{let d=await CRn(c,"utf-8"),g=JSON.parse(d);return typeof g.pid!="number"||typeof g.port!="number"||typeof g.host!="string"||typeof g.url!="string"||typeof g.startedAt!="string"?null:g}catch{return null}}function SKt(o){let c=o.urls?.local?.[0];if(c===void 0)return null;let d;try{d=new URL(c)}catch{return null}if(d.port==="")return null;let g=Number.parseInt(d.port,10);return Number.isFinite(g)?{pid:o.pid,port:g,host:d.hostname,url:c,startedAt:o.startedAt}:null}async function GI(o){let c=zU(o);try{await LRn(c)}catch{}}import{copyFile as _Kt,mkdir as CKt,readdir as NRn,stat as dct}from"node:fs/promises";import h3 from"node:path";import IKt from"node:os";import{existsSync as TRn,realpathSync as ARn}from"node:fs";import Mfe from"node:path";import{fileURLToPath as PRn}from"node:url";function U5(){let o=process.env.ARCHIK_PKG_ROOT;if(o)return Mfe.resolve(o);let c=Mfe.dirname(ARn(PRn(import.meta.url))),d=c;for(let g=0;g<10;g++){if(TRn(Mfe.join(d,"package.json")))return d;let f=Mfe.dirname(d);if(f===d)break;d=f}throw new Error(`archik: could not locate package root (start: ${c})`)}async function fct(o){let c=h3.join(U5(),"skills","archik","SKILL.md");try{await dct(c)}catch{return{ok:!1,reason:"missing-source",source:c}}let d=o.scope==="user"?h3.join(IKt.homedir(),".claude","skills"):h3.resolve(".claude","skills"),g=h3.join(d,"archik"),f=h3.join(g,"SKILL.md");if(!o.force)try{return await dct(f),{ok:!1,reason:"exists",target:f}}catch{}return await CKt(g,{recursive:!0}),await _Kt(c,f),{ok:!0,target:f,scope:o.scope}}async function xfe(o){let c=h3.join(U5(),"commands"),d;try{d=(await NRn(c)).filter(v=>v.endsWith(".md"))}catch{return{ok:!1,reason:"missing-source",source:c}}if(d.length===0)return{ok:!1,reason:"missing-source",source:c};let g=o.scope==="user"?h3.join(IKt.homedir(),".claude","commands"):h3.resolve(".claude","commands"),f=h3.join(g,"archik");if(!o.force){let v=[];for(let k of d)try{await dct(h3.join(f,k)),v.push(k)}catch{}if(v.length>0)return{ok:!1,reason:"exists",existing:v,targetDir:f}}await CKt(f,{recursive:!0});let b=[];for(let v of d)await _Kt(h3.join(c,v),h3.join(f,v)),b.push(v);return{ok:!0,targetDir:f,copied:b,scope:o.scope}}async function LKt(o){let c=Zr(o,"user")==="true"?"user":"project",d=Zr(o,"force")==="true",g=await fct({scope:c,force:d});if(!g.ok)return g.reason==="missing-source"?console.error(`\u2717 Source skill not found at ${g.source}`):console.error(`\u2717 ${g.target} already exists. Pass --force to overwrite.`),1;let f=g.scope==="user"?"user-wide":"this project";return console.log(`\u2713 Installed archik skill (${f}) \u2192 ${g.target}`),0}var FRn=`version: "1.0"
|
|
375
375
|
name: My Architecture
|
|
376
376
|
description: Initial scaffold \u2014 edit this file to grow your diagram.
|
|
377
377
|
nodes:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "archik",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.38",
|
|
4
4
|
"description": "The shared vocabulary between you and Claude Code, at the engineering level. Plain-YAML architecture diagrams with a live browser canvas, headless SVG render in CI, and an installable Claude skill so the model treats the diagram as the spec.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"architecture",
|
|
@@ -33,8 +33,9 @@
|
|
|
33
33
|
"docs/hero.svg",
|
|
34
34
|
"docs/logo.svg",
|
|
35
35
|
"docs/wordmark.svg",
|
|
36
|
-
"
|
|
37
|
-
"
|
|
36
|
+
"skills",
|
|
37
|
+
"commands",
|
|
38
|
+
".claude-plugin",
|
|
38
39
|
"README.md",
|
|
39
40
|
"LICENSE"
|
|
40
41
|
],
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|