@akanjs/cli 3.0.0-beta.30 → 3.0.0-beta.32
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/.build-stamp +1 -1
- package/{CodeAgent-xnfyyz8h.js → CodeAgent-2vmp9qe0.js} +2 -2
- package/{CodeTui-h66xb1fh.js → CodeTui-5ed6bg2a.js} +1 -1
- package/{agent.command-c4v7kjff.js → agent.command-gn73rhe7.js} +5 -5
- package/akanCode.js +2 -2
- package/{application.command-yzsswrz6.js → application.command-e968t0hw.js} +14 -9
- package/{applicationBuildRunner-qkt6spd5.js → applicationBuildRunner-64taxseg.js} +3 -3
- package/buildBatch.proc.js +3 -3
- package/{cloud.command-v8h688jc.js → cloud.command-0jm301rr.js} +9 -9
- package/cloud.script-nemnzjpv.js +20 -0
- package/{code.command-jff3tw7y.js → code.command-18kcm7hq.js} +6 -6
- package/{context.command-y5sevk3c.js → context.command-trd9bn18.js} +13 -13
- package/context.runner-y5hwh673.js +21 -0
- package/{guideline.command-11cndccb.js → guideline.command-bdmdn2de.js} +2 -2
- package/guidelines/conventions/conventions.instruction.md +7 -4
- package/guidelines/runtimeRule/runtimeRule.instruction.md +29 -6
- package/incrementalBuilder.proc.js +2 -2
- package/{index-mk3b9rk1.js → index-0wpybxtr.js} +3 -3
- package/{index-n3jk2501.js → index-3w94e7n3.js} +27 -4
- package/{index-wfwgcnyc.js → index-4npz05nm.js} +4 -4
- package/{index-6x9p8dpb.js → index-6he6gvfg.js} +1 -1
- package/{index-0ncc0mbk.js → index-93j60em0.js} +3 -3
- package/{index-tzc1gtrg.js → index-9z771ptz.js} +2 -2
- package/{index-hqd0h1pb.js → index-abxpehf8.js} +7 -7
- package/{index-a4s954kq.js → index-by9pxkr0.js} +2 -2
- package/{index-5rp0h6na.js → index-drehwpdt.js} +2 -2
- package/{index-rtwhw4aq.js → index-f3c78nd6.js} +7 -7
- package/{index-kb16nzyt.js → index-gbggbqcp.js} +96 -35
- package/{index-tsb0f8ya.js → index-hsmtysz4.js} +2 -2
- package/{index-35mmm9ca.js → index-jmrn54tt.js} +1 -1
- package/{index-376gpdds.js → index-kcdj1z5v.js} +2 -2
- package/{index-hf6f4xnb.js → index-kqabytj7.js} +4 -4
- package/{index-se643zvp.js → index-mbxbhay5.js} +1 -1
- package/{index-gxamdf18.js → index-mgxpx3f2.js} +2 -2
- package/{index-3rh7thcx.js → index-p993efkq.js} +33 -18
- package/{index-qcejqgts.js → index-pmhqttv3.js} +5 -5
- package/{index-8tv7356t.js → index-tqm7jjcn.js} +1 -1
- package/{index-xb7qhxa8.js → index-vpj42xwt.js} +1 -1
- package/{index-bxmejydw.js → index-wprnsjms.js} +3 -3
- package/{index-hmdq5pqm.js → index-y3mphr1m.js} +1 -1
- package/{index-167c77aq.js → index-yg7jhz8x.js} +4 -4
- package/index.js +21 -21
- package/{library.command-n9kp7yms.js → library.command-9h749a1x.js} +3 -3
- package/{localRegistry.command-jx6kxt2x.js → localRegistry.command-2bqqhxyz.js} +8 -8
- package/{module.command-q2xjf6cx.js → module.command-nv8nzgft.js} +5 -5
- package/{package.command-q5a3nsw5.js → package.command-mq4bggp6.js} +3 -3
- package/package.json +2 -2
- package/{page.command-ppenrxjn.js → page.command-j639n707.js} +3 -3
- package/{primitive.command-dvgg8nem.js → primitive.command-kz6849th.js} +6 -6
- package/{quality.command-pz7kg3pc.js → quality.command-4hyabwkb.js} +2 -2
- package/{repair.command-a6py9xvz.js → repair.command-a9awpbqr.js} +5 -5
- package/{scalar.command-7f3xfpen.js → scalar.command-ma4fpm9m.js} +4 -4
- package/{subspace.command-z7nqs508.js → subspace.command-3k2pmrs4.js} +4 -4
- package/templates/app/page/_index.tsx +257 -258
- package/templates/app/page/_layout.tsx +5 -1
- package/templates/app/page/_overrides.tsx +12 -0
- package/templates/app/page/styles.css.template +316 -14
- package/templates/app/public/apple-touch-icon.png +0 -0
- package/templates/app/public/favicon.ico +0 -0
- package/templates/app/public/jelly/cloud.webp +0 -0
- package/templates/app/public/jelly/comet.webp +0 -0
- package/templates/app/public/jelly/moon.webp +0 -0
- package/templates/app/public/jelly/planet.webp +0 -0
- package/templates/app/public/jelly/rocket.webp +0 -0
- package/templates/app/public/jelly/star.webp +0 -0
- package/templates/app/public/jelly/sugar.webp +0 -0
- package/templates/app/public/logo.png +0 -0
- package/templates/app/ui/Recipe/index.ts +9 -0
- package/templates/app/ui/Recipe/jellyButton.ts +63 -0
- package/templates/appSample/lib/task/Task.Unit.tsx +1 -1
- package/templates/appSample/lib/task/Task.Util.tsx +10 -13
- package/templates/appSample/lib/task/Task.View.tsx +2 -2
- package/templates/appSample/lib/task/Task.Zone.tsx +5 -2
- package/templates/appSample/page/task/[taskId]/_index.tsx +6 -6
- package/templates/appSample/page/task/[taskId]/edit.tsx +5 -4
- package/templates/appSample/page/task/_index.tsx +4 -3
- package/templates/appSample/page/task/_layout.tsx +1 -1
- package/templates/appSample/page/task/new.tsx +5 -4
- package/templates/appSample/ui/GlobalLoading.tsx +2 -1
- package/templates/appSample/ui/QuantityControl.tsx +3 -3
- package/{tunnel.command-zy4wbcgt.js → tunnel.command-xwr46b66.js} +2 -2
- package/{workflow.command-f142t17s.js → workflow.command-t7wqe4h7.js} +10 -10
- package/{workspace.command-gpk1149x.js → workspace.command-4derhzrh.js} +24 -21
- package/cloud.script-yct1sk4k.js +0 -20
- package/context.runner-90hsmacr.js +0 -21
package/.build-stamp
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
77b0a64e9eb50e1874e7999dae93ff4b583b816ed3d996834a3ee44fd9ec81ad
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
import {
|
|
3
3
|
Workspace,
|
|
4
4
|
command
|
|
5
|
-
} from "./index-
|
|
5
|
+
} from "./index-vpj42xwt.js";
|
|
6
6
|
import"./index-52w0fvh8.js";
|
|
7
|
-
import"./index-
|
|
7
|
+
import"./index-3w94e7n3.js";
|
|
8
8
|
import"./index-hj6w4ka1.js";
|
|
9
|
-
import"./index-
|
|
10
|
-
import"./index-
|
|
9
|
+
import"./index-y3mphr1m.js";
|
|
10
|
+
import"./index-9z771ptz.js";
|
|
11
11
|
import"./index-zzvvc845.js";
|
|
12
12
|
import {
|
|
13
13
|
AgentScript
|
|
14
|
-
} from "./index-
|
|
14
|
+
} from "./index-wprnsjms.js";
|
|
15
15
|
|
|
16
16
|
// pkgs/@akanjs/cli/agent/agent.command.ts
|
|
17
17
|
class AgentCommand extends command("agent", [AgentScript], ({ public: target }) => ({
|
package/akanCode.js
CHANGED
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
CodeMailbox2,
|
|
29
29
|
CodeSessionFork2,
|
|
30
30
|
CodeAgent2
|
|
31
|
-
} from "./index-
|
|
31
|
+
} from "./index-0wpybxtr.js";
|
|
32
32
|
import {
|
|
33
33
|
akanCodeDefaultModel2,
|
|
34
34
|
akanCodeModel2,
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
import {
|
|
40
40
|
SubagentPool2,
|
|
41
41
|
akanCodePaths2
|
|
42
|
-
} from "./index-
|
|
42
|
+
} from "./index-tqm7jjcn.js";
|
|
43
43
|
import"./index-7md2g9vw.js";
|
|
44
44
|
import {
|
|
45
45
|
CodeAgentRpcHost2
|
|
@@ -6,19 +6,19 @@ import {
|
|
|
6
6
|
Exec,
|
|
7
7
|
Workspace,
|
|
8
8
|
command
|
|
9
|
-
} from "./index-
|
|
9
|
+
} from "./index-vpj42xwt.js";
|
|
10
10
|
import"./index-52w0fvh8.js";
|
|
11
|
-
import"./index-
|
|
11
|
+
import"./index-3w94e7n3.js";
|
|
12
12
|
import {
|
|
13
13
|
getMobileTargetChoices
|
|
14
|
-
} from "./index-
|
|
14
|
+
} from "./index-gbggbqcp.js";
|
|
15
15
|
import"./index-48k96p55.js";
|
|
16
|
-
import"./index-
|
|
16
|
+
import"./index-mgxpx3f2.js";
|
|
17
17
|
import {
|
|
18
18
|
ApplicationScript
|
|
19
|
-
} from "./index-
|
|
19
|
+
} from "./index-p993efkq.js";
|
|
20
20
|
import"./index-7md2g9vw.js";
|
|
21
|
-
import"./index-
|
|
21
|
+
import"./index-jmrn54tt.js";
|
|
22
22
|
|
|
23
23
|
// pkgs/@akanjs/cli/application/application.command.ts
|
|
24
24
|
var mobileTargetOption = {
|
|
@@ -109,15 +109,20 @@ class ApplicationCommand extends command("application", [ApplicationScript], ({
|
|
|
109
109
|
await this.applicationScript.buildAndroid(app, { target, env, profile: debug ? "debug" : "release", write });
|
|
110
110
|
}),
|
|
111
111
|
buildDesktop: target({ short: true, desc: "Build the desktop app for this computer (macOS, Windows or Linux)" }).with(App).option("target", String, mobileTargetOption).option("env", String, buildEnvOption).option("debug", Boolean, { desc: "debug build instead of release", default: false }).option("installer", Boolean, {
|
|
112
|
-
desc: "
|
|
112
|
+
desc: "also what a person downloads: a Windows setup program (NSIS, /S for silent), a macOS dmg, a Linux AppImage",
|
|
113
113
|
default: false
|
|
114
|
-
}).option("
|
|
114
|
+
}).option("arch", String, {
|
|
115
|
+
desc: "the CPU the app runs on, arm64 or x64 of this OS (default this computer's); a macOS app is arm64 only",
|
|
116
|
+
enum: ["arm64", "x64"],
|
|
117
|
+
nullable: true
|
|
118
|
+
}).option("write", Boolean, { desc: "write code generation", default: true }).exec(async function(app, target, env, debug, installer, arch, write) {
|
|
115
119
|
await this.applicationScript.buildDesktop(app, {
|
|
116
120
|
target,
|
|
117
121
|
env,
|
|
118
122
|
profile: debug ? "debug" : "release",
|
|
119
123
|
installer,
|
|
120
|
-
write
|
|
124
|
+
write,
|
|
125
|
+
...arch ? { arch } : {}
|
|
121
126
|
});
|
|
122
127
|
}),
|
|
123
128
|
start: target({ short: true, desc: "Start development server(s) (frontend SSR + backend)" }).with(Apps).option("plain", Boolean, { desc: "print prefixed lines instead of the full-screen view", default: false }).option("kill", Boolean, { flag: "k", desc: "free the dev ports first, whoever is holding them", default: false }).option("concurrency", Number, {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
Spinner
|
|
4
|
-
} from "./index-
|
|
5
|
-
import"./index-
|
|
4
|
+
} from "./index-3w94e7n3.js";
|
|
5
|
+
import"./index-6he6gvfg.js";
|
|
6
6
|
import {
|
|
7
7
|
AllRoutesBuilder,
|
|
8
8
|
CsrArtifactBuilder,
|
|
9
9
|
FontPruner,
|
|
10
10
|
precompressArtifacts,
|
|
11
11
|
SsrBaseArtifactBuilder
|
|
12
|
-
} from "./index-
|
|
12
|
+
} from "./index-kcdj1z5v.js";
|
|
13
13
|
import"./index-52w0fvh8.js";
|
|
14
14
|
import"./index-n68jx79w.js";
|
|
15
15
|
|
package/buildBatch.proc.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
resolveSsrPageEntriesForApp,
|
|
7
7
|
WorkspaceExecutor,
|
|
8
8
|
AppExecutor
|
|
9
|
-
} from "./index-
|
|
9
|
+
} from "./index-3w94e7n3.js";
|
|
10
10
|
import {
|
|
11
11
|
computeRouteSeedIndex,
|
|
12
12
|
saveRouteSeedIndex,
|
|
@@ -14,14 +14,14 @@ import {
|
|
|
14
14
|
PagesBundleBuilder,
|
|
15
15
|
CsrDevBundler,
|
|
16
16
|
SsrDevBundler
|
|
17
|
-
} from "./index-
|
|
17
|
+
} from "./index-6he6gvfg.js";
|
|
18
18
|
import"./index-52w0fvh8.js";
|
|
19
19
|
import {
|
|
20
20
|
CsrArtifactBuilder,
|
|
21
21
|
CssCompiler,
|
|
22
22
|
FontOptimizer,
|
|
23
23
|
SsrBaseArtifactBuilder
|
|
24
|
-
} from "./index-
|
|
24
|
+
} from "./index-kcdj1z5v.js";
|
|
25
25
|
import"./index-n68jx79w.js";
|
|
26
26
|
|
|
27
27
|
// pkgs/@akanjs/devkit/incrementalBuilder/buildBatch.proc.ts
|
|
@@ -6,22 +6,22 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
Workspace,
|
|
8
8
|
command
|
|
9
|
-
} from "./index-
|
|
10
|
-
import"./index-
|
|
9
|
+
} from "./index-vpj42xwt.js";
|
|
10
|
+
import"./index-3w94e7n3.js";
|
|
11
11
|
import {
|
|
12
12
|
PlatformTestRun
|
|
13
|
-
} from "./index-
|
|
13
|
+
} from "./index-drehwpdt.js";
|
|
14
14
|
import"./index-48k96p55.js";
|
|
15
|
-
import"./index-
|
|
16
|
-
import"./index-
|
|
17
|
-
import"./index-
|
|
15
|
+
import"./index-gbggbqcp.js";
|
|
16
|
+
import"./index-mgxpx3f2.js";
|
|
17
|
+
import"./index-p993efkq.js";
|
|
18
18
|
import"./index-7md2g9vw.js";
|
|
19
19
|
import"./index-2ahj896a.js";
|
|
20
|
-
import"./index-
|
|
20
|
+
import"./index-by9pxkr0.js";
|
|
21
21
|
import {
|
|
22
22
|
CloudScript2
|
|
23
|
-
} from "./index-
|
|
24
|
-
import"./index-
|
|
23
|
+
} from "./index-pmhqttv3.js";
|
|
24
|
+
import"./index-jmrn54tt.js";
|
|
25
25
|
|
|
26
26
|
// pkgs/@akanjs/cli/cloud/cloud.command.ts
|
|
27
27
|
var localRegistryUrl = () => process.env.AKAN_NPM_REGISTRY ?? "http://127.0.0.1:4873";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
CloudScript2
|
|
4
|
+
} from "./index-pmhqttv3.js";
|
|
5
|
+
import"./index-drehwpdt.js";
|
|
6
|
+
import"./index-by9pxkr0.js";
|
|
7
|
+
import"./index-p993efkq.js";
|
|
8
|
+
import"./index-jmrn54tt.js";
|
|
9
|
+
import"./index-mgxpx3f2.js";
|
|
10
|
+
import"./index-gbggbqcp.js";
|
|
11
|
+
import"./index-94s080qm.js";
|
|
12
|
+
import"./index-vpj42xwt.js";
|
|
13
|
+
import"./index-7md2g9vw.js";
|
|
14
|
+
import"./index-48k96p55.js";
|
|
15
|
+
import"./index-3w94e7n3.js";
|
|
16
|
+
import"./index-2ahj896a.js";
|
|
17
|
+
import"./index-52w0fvh8.js";
|
|
18
|
+
export {
|
|
19
|
+
CloudScript2 as CloudScript
|
|
20
|
+
};
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
runner,
|
|
5
5
|
script,
|
|
6
6
|
command
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-vpj42xwt.js";
|
|
8
8
|
import"./index-52w0fvh8.js";
|
|
9
|
-
import"./index-
|
|
9
|
+
import"./index-3w94e7n3.js";
|
|
10
10
|
import {
|
|
11
11
|
akanCodeDefaultModel2,
|
|
12
12
|
CodeAgentStreamPrinter2
|
|
@@ -19,7 +19,7 @@ class CodeRunner extends runner("code") {
|
|
|
19
19
|
async serve(options, listen) {
|
|
20
20
|
await import("./consoleToStderr-h5bryj94.js");
|
|
21
21
|
const [{ CodeAgent }, { CodeAgentRpcHost }, { CodeAgentRpcListener }] = await Promise.all([
|
|
22
|
-
import("./CodeAgent-
|
|
22
|
+
import("./CodeAgent-2vmp9qe0.js"),
|
|
23
23
|
import("./CodeAgentRpcHost-p7h6n2hp.js"),
|
|
24
24
|
import("./CodeAgentRpcListener-7p7z5dd7.js")
|
|
25
25
|
]);
|
|
@@ -34,8 +34,8 @@ class CodeRunner extends runner("code") {
|
|
|
34
34
|
}
|
|
35
35
|
async tui(options, seed) {
|
|
36
36
|
const [{ CodeAgent }, { CodeTui }] = await Promise.all([
|
|
37
|
-
import("./CodeAgent-
|
|
38
|
-
import("./CodeTui-
|
|
37
|
+
import("./CodeAgent-2vmp9qe0.js"),
|
|
38
|
+
import("./CodeTui-5ed6bg2a.js")
|
|
39
39
|
]);
|
|
40
40
|
const agentOptions = await CodeRunner.#agentOptions(options, false);
|
|
41
41
|
let resume = options.resume;
|
|
@@ -60,7 +60,7 @@ class CodeRunner extends runner("code") {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
async run(prompt, options) {
|
|
63
|
-
const { CodeAgent } = await import("./CodeAgent-
|
|
63
|
+
const { CodeAgent } = await import("./CodeAgent-2vmp9qe0.js");
|
|
64
64
|
const agent = await CodeAgent.create(await CodeRunner.#agentOptions(options, false));
|
|
65
65
|
const printer = new CodeAgentStreamPrinter2({ json: options.json, thinking: options.thinking });
|
|
66
66
|
agent.on((event) => printer.print(event));
|
|
@@ -2,24 +2,24 @@
|
|
|
2
2
|
import {
|
|
3
3
|
Workspace,
|
|
4
4
|
command
|
|
5
|
-
} from "./index-
|
|
5
|
+
} from "./index-vpj42xwt.js";
|
|
6
6
|
import"./index-52w0fvh8.js";
|
|
7
|
-
import"./index-
|
|
7
|
+
import"./index-3w94e7n3.js";
|
|
8
8
|
import"./index-hj6w4ka1.js";
|
|
9
|
-
import"./index-
|
|
10
|
-
import"./index-
|
|
11
|
-
import"./index-
|
|
12
|
-
import"./index-
|
|
9
|
+
import"./index-y3mphr1m.js";
|
|
10
|
+
import"./index-9z771ptz.js";
|
|
11
|
+
import"./index-abxpehf8.js";
|
|
12
|
+
import"./index-gbggbqcp.js";
|
|
13
13
|
import"./index-zzvvc845.js";
|
|
14
|
-
import"./index-
|
|
15
|
-
import"./index-
|
|
16
|
-
import"./index-
|
|
17
|
-
import"./index-
|
|
18
|
-
import"./index-
|
|
19
|
-
import"./index-
|
|
14
|
+
import"./index-93j60em0.js";
|
|
15
|
+
import"./index-mbxbhay5.js";
|
|
16
|
+
import"./index-4npz05nm.js";
|
|
17
|
+
import"./index-kqabytj7.js";
|
|
18
|
+
import"./index-hsmtysz4.js";
|
|
19
|
+
import"./index-f3c78nd6.js";
|
|
20
20
|
import {
|
|
21
21
|
ContextScript
|
|
22
|
-
} from "./index-
|
|
22
|
+
} from "./index-yg7jhz8x.js";
|
|
23
23
|
|
|
24
24
|
// pkgs/@akanjs/cli/context/context.command.ts
|
|
25
25
|
class ContextCommand extends command("context", [ContextScript], ({ public: target }) => ({
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
ContextRunner2
|
|
4
|
+
} from "./index-abxpehf8.js";
|
|
5
|
+
import"./index-f3c78nd6.js";
|
|
6
|
+
import"./index-hsmtysz4.js";
|
|
7
|
+
import"./index-kqabytj7.js";
|
|
8
|
+
import"./index-93j60em0.js";
|
|
9
|
+
import"./index-4npz05nm.js";
|
|
10
|
+
import"./index-mbxbhay5.js";
|
|
11
|
+
import"./index-gbggbqcp.js";
|
|
12
|
+
import"./index-9z771ptz.js";
|
|
13
|
+
import"./index-y3mphr1m.js";
|
|
14
|
+
import"./index-zzvvc845.js";
|
|
15
|
+
import"./index-vpj42xwt.js";
|
|
16
|
+
import"./index-3w94e7n3.js";
|
|
17
|
+
import"./index-hj6w4ka1.js";
|
|
18
|
+
import"./index-52w0fvh8.js";
|
|
19
|
+
export {
|
|
20
|
+
ContextRunner2 as ContextRunner
|
|
21
|
+
};
|
|
@@ -352,16 +352,19 @@ Full contract: `get_guideline` with `runtimeRule`, or `akan guideline show runti
|
|
|
352
352
|
declares the steps its own runtime needs and every mounting app inherits them.
|
|
353
353
|
- **Native apps are the `native` section** — iOS, Android and a desktop app (macOS, Windows, Linux), each shipping
|
|
354
354
|
the CSR bundle on the native runtime. Shared fields (`appName`, `appId`, `version`, `indexPath`, `permissions`,
|
|
355
|
-
`plugins`, `deepLinks`, `updates`, …) sit beside one section per platform: `ios`, `android`, `desktop
|
|
355
|
+
`plugins`, `deepLinks`, `updates`, …) sit beside one section per platform: `ios`, `android`, `desktop`, and a
|
|
356
|
+
platform section's own `indexPath` wins on that platform (`desktop: { indexPath: "/" }`). Without
|
|
356
357
|
`targets` the app has one target, `default`, and an app with no basePaths leaves `basePath` out; a target takes
|
|
357
358
|
the same shape and overrides the section field by field — objects merge key by key, a list or any other value
|
|
358
359
|
replaces the section's. `akan start-ios` / `start-android` / `start-desktop` run a dev build that loads its pages
|
|
359
360
|
from `akan start`; `build-ios` / `build-android` / `build-desktop` write
|
|
360
|
-
`apps/<app>/.akan/native/<target>/build/<platform>`, a desktop app only for the
|
|
361
|
-
|
|
361
|
+
`apps/<app>/.akan/native/<target>/build/<platform>`, a desktop app only for the OS that builds it — `--arch` picks
|
|
362
|
+
a Windows or Linux app's CPU, and a macOS app is Apple silicon only. `--installer true` adds a Windows setup, a
|
|
363
|
+
macOS dmg or a Linux AppImage; `AKAN_NATIVE_MACOS_*` signs with a Developer ID and notarizes,
|
|
364
|
+
`AKAN_NATIVE_WINDOWS_*` signs with Authenticode. With `updates: { url, publicKey }` an installed app takes the signed
|
|
362
365
|
releases `akan publish-update` makes; `akan update-keygen` makes the key and prints its `publicKey`.
|
|
363
366
|
- **A desktop app that carries its server (`desktop: { server: true }` in `native`, or in one target) gets nothing
|
|
364
|
-
from `docker
|
|
367
|
+
from `docker`** — and `server: { omit: [...] }` leaves out packages only the image needs. That server is API-only, runs in database mode `single`, and listens on a loopback port any
|
|
365
368
|
program on the computer can call, so guard its endpoints as a network server's. An executable the app spawns
|
|
366
369
|
goes in `bin` — per platform, a download checked against its `sha256` or a file beside the config, put first on
|
|
367
370
|
the app's PATH so the server's `spawn("ffmpeg")` finds it, and in `ctx.binDir` for a native plugin — and a package
|
|
@@ -228,6 +228,9 @@ const config: AppConfig = {
|
|
|
228
228
|
},
|
|
229
229
|
```
|
|
230
230
|
|
|
231
|
+
- **A platform section may name its own `indexPath`**, which wins on that platform: `indexPath: "/mobile"` with
|
|
232
|
+
`desktop: { indexPath: "/" }` opens the phones on `/mobile` and the desktop app on `/`, from one target, so no
|
|
233
|
+
command needs `--target`. It moves the dev build's first page and the `indexPath` its bundle carries alike.
|
|
231
234
|
- **`basePath` is the client a target opens.** An app with no basePaths leaves it out. Without `targets`, the one
|
|
232
235
|
target opens the basePath named like the app when there is one; in an app with basePaths, a target that names
|
|
233
236
|
none is a template, and `--target <basePath>` builds that client from it.
|
|
@@ -240,10 +243,27 @@ const config: AppConfig = {
|
|
|
240
243
|
- **`start-ios` / `start-android` / `start-desktop` run a dev build that loads its pages from `akan start`.** It has
|
|
241
244
|
to be running — except for a desktop app that carries its server, which starts it when none of this checkout
|
|
242
245
|
answers. `--release true` runs a release build of the app's own bundle instead.
|
|
243
|
-
- **A desktop app builds only for the computer that builds it** — a `.app` on macOS,
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
246
|
+
- **A desktop app builds only for the computer that builds it** — a `.app` on macOS, and an unsigned folder on
|
|
247
|
+
Windows and Linux. `build-desktop --installer true` adds what a person downloads: a per-user NSIS setup on Windows
|
|
248
|
+
(`/S` installs silently), a dmg on macOS, an AppImage on Linux (it needs `mksquashfs`; an AppImage cannot update
|
|
249
|
+
itself, so a release with `updates` ships a new one). `--arch arm64|x64` builds a Windows or Linux app for the
|
|
250
|
+
other CPU of that OS: the Rust library, Bun's executable, the server's `bun install --cpu` and each `bin` file
|
|
251
|
+
follow it, and a server addon with no binary for that CPU stops the build. A macOS app is Apple silicon only —
|
|
252
|
+
Intel Macs are not a target, so `--arch x64` on macOS is refused.
|
|
253
|
+
- **A macOS release for download is signed with a Developer ID and notarized, from the environment.**
|
|
254
|
+
`AKAN_NATIVE_MACOS_IDENTITY` names a keychain identity, or `AKAN_NATIVE_MACOS_CERTIFICATE` +
|
|
255
|
+
`_CERTIFICATE_PASSWORD` a `.p12` the build imports into a keychain of its own (a CI runner);
|
|
256
|
+
`AKAN_NATIVE_MACOS_NOTARY_KEY` + `_KEY_ID` + `_ISSUER` (an App Store Connect API key) or `_NOTARY_PROFILE` turn on
|
|
257
|
+
notarization and stapling of the app and the dmg. Every Mach-O file — the server's addons and `bin` included — is
|
|
258
|
+
signed inside out with the hardened runtime and a timestamp; the executable gets Bun's JIT entitlements and the
|
|
259
|
+
camera's or microphone's when a usage text asks for them, and `desktop.entitlements` adds the app's own.
|
|
260
|
+
`publish-update` signs with the same identity, since the updater checks the installed app's signature. Without a
|
|
261
|
+
Developer ID the build warns, because Gatekeeper blocks a downloaded copy.
|
|
262
|
+
- **A Windows release is signed with Authenticode, from the environment.** `AKAN_NATIVE_WINDOWS_CERTIFICATE` +
|
|
263
|
+
`_CERTIFICATE_PASSWORD` (a `.pfx`), `AKAN_NATIVE_WINDOWS_THUMBPRINT` (a certificate in the store, a token's or an
|
|
264
|
+
HSM's), or `AKAN_NATIVE_WINDOWS_SIGN_COMMAND` (a JSON array run per file with `{file}`, e.g. signtool with Azure
|
|
265
|
+
Trusted Signing's dlib) signs every PE file of the app — the server's `.node` and `bin` included — the setup program
|
|
266
|
+
and the uninstaller it writes, SHA-256 with a timestamp (`AKAN_NATIVE_WINDOWS_TIMESTAMP_URL`).
|
|
247
267
|
- **`updates: { url, publicKey }` lets an installed app update itself** — the whole app on a desktop, the web
|
|
248
268
|
bundle on a phone. `akan update-keygen <app>` makes the signing key once
|
|
249
269
|
(`~/.akan/native/keys/<app id>.update.key`, or the path `AKAN_NATIVE_UPDATE_KEY` names) and prints the
|
|
@@ -266,8 +286,11 @@ packages first with `bun install --production --prefer-offline`, before `akan bu
|
|
|
266
286
|
`--release` starts `akan start` beside the app when no dev server of this checkout answers. The setting is the
|
|
267
287
|
app's backend, so it does not change under an installed app: an update whose release carries a server when the app
|
|
268
288
|
has none, or none when it has one, is refused, and switching means a reinstall.
|
|
269
|
-
|
|
270
|
-
|
|
289
|
+
`desktop: { server: { omit: ["rclnodejs"] } }` carries the server without packages only the image needs — an addon
|
|
290
|
+
tied to the image's system, code only a process the app never starts loads — and whatever only they pull in; the
|
|
291
|
+
image keeps them, and the server's own bundle must not import them. A package another dependency still installs
|
|
292
|
+
stops the build, naming who needs it. So does a native addon that would not load on a user's computer: no binary
|
|
293
|
+
for the app's OS and CPU, a link outside the system, or a `binding.gyp` its install never compiled. It runs as an API-only edge server on SQLite, on a loopback port the launcher picks — the last session's when
|
|
271
294
|
it is free, which is not a guarantee, so a provider that needs an exact redirect URI signs in through a cloud
|
|
272
295
|
server's adapter. It refuses a `Host` other than its own, but any program on the computer can still call that port:
|
|
273
296
|
guard its endpoints as a network server's. It runs in one process, so a `main.ts` or an env asking for replicas (`replica`,
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
CodegenLock,
|
|
9
9
|
WorkspaceExecutor,
|
|
10
10
|
AppExecutor
|
|
11
|
-
} from "./index-
|
|
11
|
+
} from "./index-3w94e7n3.js";
|
|
12
12
|
import"./index-52w0fvh8.js";
|
|
13
13
|
import {
|
|
14
14
|
GraphClientEntryDiscovery,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
DevChangePlanner,
|
|
21
21
|
DevGeneratedIndexSync,
|
|
22
22
|
SsrDevBundler
|
|
23
|
-
} from "./index-
|
|
23
|
+
} from "./index-6he6gvfg.js";
|
|
24
24
|
import {
|
|
25
25
|
prepareDevWatchBatch
|
|
26
26
|
} from "./index-a5vmm6x4.js";
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
akanCodePaths2,
|
|
5
5
|
McpServerConfig,
|
|
6
6
|
McpSignIn
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-tqm7jjcn.js";
|
|
8
8
|
import {
|
|
9
9
|
stripAnsi
|
|
10
10
|
} from "./index-7md2g9vw.js";
|
|
@@ -511,7 +511,7 @@ class AkanToolPack2 {
|
|
|
511
511
|
return { name: "akan-tools", factory: async (pi) => await this.#register(pi) };
|
|
512
512
|
}
|
|
513
513
|
async names() {
|
|
514
|
-
const { ContextRunner } = await import("./context.runner-
|
|
514
|
+
const { ContextRunner } = await import("./context.runner-y5hwh673.js");
|
|
515
515
|
return [
|
|
516
516
|
...new ContextRunner().listMcpTools(this.#options.mode).map((tool) => tool.name),
|
|
517
517
|
AkanToolPack2.verifyToolName
|
|
@@ -519,7 +519,7 @@ class AkanToolPack2 {
|
|
|
519
519
|
}
|
|
520
520
|
static verifyToolName = "akan_verify";
|
|
521
521
|
async#register(pi) {
|
|
522
|
-
const { ContextRunner } = await import("./context.runner-
|
|
522
|
+
const { ContextRunner } = await import("./context.runner-y5hwh673.js");
|
|
523
523
|
const runner = new ContextRunner;
|
|
524
524
|
const guidelineNames = await AkanToolPack2.#guidelineNames();
|
|
525
525
|
for (const tool of runner.listMcpTools(this.#options.mode, { guidelineNames })) {
|
|
@@ -949,9 +949,9 @@ class AkanAppConfig {
|
|
|
949
949
|
} = merged;
|
|
950
950
|
const indexPath = normalizeIndexPath(rawIndexPath);
|
|
951
951
|
const deepLinks = normalizeDeepLinks(rawDeepLinks);
|
|
952
|
-
const { teamId: rawTeamId, ...iosRest } = merged.ios ?? {};
|
|
952
|
+
const { teamId: rawTeamId, ...iosRest } = AkanAppConfig.#platformIndexPath(merged.ios ?? {});
|
|
953
953
|
const teamId = rawTeamId?.trim();
|
|
954
|
-
const { sha256CertFingerprints: rawFingerprints, ...androidRest } = merged.android ?? {};
|
|
954
|
+
const { sha256CertFingerprints: rawFingerprints, ...androidRest } = AkanAppConfig.#platformIndexPath(merged.android ?? {});
|
|
955
955
|
const fingerprints = normalizeStringList(rawFingerprints);
|
|
956
956
|
const target = {
|
|
957
957
|
...rest,
|
|
@@ -961,6 +961,9 @@ class AkanAppConfig {
|
|
|
961
961
|
...deepLinks ? { deepLinks } : {},
|
|
962
962
|
...merged.ios ? { ios: { ...iosRest, ...teamId ? { teamId } : {} } } : {},
|
|
963
963
|
...merged.android ? { android: { ...androidRest, ...fingerprints ? { sha256CertFingerprints: fingerprints } : {} } } : {},
|
|
964
|
+
...merged.desktop ? {
|
|
965
|
+
desktop: AkanAppConfig.#desktopServer(AkanAppConfig.#platformIndexPath(merged.desktop), `${where}.desktop.server`, configPath)
|
|
966
|
+
} : {},
|
|
964
967
|
appName: merged.appName ?? this.app.name,
|
|
965
968
|
appId: merged.appId ?? appId,
|
|
966
969
|
version: merged.version ?? version,
|
|
@@ -971,6 +974,23 @@ class AkanAppConfig {
|
|
|
971
974
|
}));
|
|
972
975
|
return { appName, appId, ...root.fileName ? { fileName: root.fileName } : {}, version, buildNum, targets };
|
|
973
976
|
}
|
|
977
|
+
static #desktopServer(desktop, where, configPath) {
|
|
978
|
+
const { server } = desktop;
|
|
979
|
+
if (server === undefined || typeof server === "boolean")
|
|
980
|
+
return desktop;
|
|
981
|
+
if (!AkanAppConfig.#isPlainObject(server))
|
|
982
|
+
throw new Error(`${where} in ${configPath} must be true or { omit: string[] }.`);
|
|
983
|
+
const omit = server.omit;
|
|
984
|
+
if (omit !== undefined && (!Array.isArray(omit) || omit.some((name) => typeof name !== "string" || !name.trim())))
|
|
985
|
+
throw new Error(`${where}.omit in ${configPath} must be a list of package names.`);
|
|
986
|
+
const names = [...new Set((omit ?? []).map((name) => name.trim()))].sort();
|
|
987
|
+
return { ...desktop, server: { omit: names } };
|
|
988
|
+
}
|
|
989
|
+
static #platformIndexPath(section) {
|
|
990
|
+
const { indexPath: rawIndexPath, ...rest } = section;
|
|
991
|
+
const indexPath = normalizeIndexPath(rawIndexPath);
|
|
992
|
+
return { ...rest, ...indexPath ? { indexPath } : {} };
|
|
993
|
+
}
|
|
974
994
|
static #overlay(base, own) {
|
|
975
995
|
const merge = (kept, value, top, key) => {
|
|
976
996
|
if (!AkanAppConfig.#isPlainObject(kept) || !AkanAppConfig.#isPlainObject(value))
|
|
@@ -1011,8 +1031,9 @@ class AkanAppConfig {
|
|
|
1011
1031
|
"android",
|
|
1012
1032
|
"desktop"
|
|
1013
1033
|
],
|
|
1014
|
-
ios: ["teamId", "infoPlist", "entitlements", "privacy", "files"],
|
|
1034
|
+
ios: ["indexPath", "teamId", "infoPlist", "entitlements", "privacy", "files"],
|
|
1015
1035
|
android: [
|
|
1036
|
+
"indexPath",
|
|
1016
1037
|
"sha256CertFingerprints",
|
|
1017
1038
|
"googleServices",
|
|
1018
1039
|
"push",
|
|
@@ -1022,7 +1043,8 @@ class AkanAppConfig {
|
|
|
1022
1043
|
"activity",
|
|
1023
1044
|
"files"
|
|
1024
1045
|
],
|
|
1025
|
-
desktop: ["server", "recovery", "window", "screenCapture"],
|
|
1046
|
+
desktop: ["indexPath", "server", "recovery", "window", "screenCapture", "entitlements"],
|
|
1047
|
+
desktopServer: ["omit"],
|
|
1026
1048
|
deepLinks: ["schemes", "domains"]
|
|
1027
1049
|
};
|
|
1028
1050
|
static #movedKeys = {
|
|
@@ -1050,6 +1072,7 @@ class AkanAppConfig {
|
|
|
1050
1072
|
check(settings.ios, AkanAppConfig.#nativeKeys.ios, `${where}.ios`, "ios");
|
|
1051
1073
|
check(settings.android, AkanAppConfig.#nativeKeys.android, `${where}.android`, "android");
|
|
1052
1074
|
check(settings.desktop, AkanAppConfig.#nativeKeys.desktop, `${where}.desktop`, "desktop");
|
|
1075
|
+
check(settings.desktop?.server, AkanAppConfig.#nativeKeys.desktopServer, `${where}.desktop.server`, "desktopServer");
|
|
1053
1076
|
check(settings.deepLinks, AkanAppConfig.#nativeKeys.deepLinks, `${where}.deepLinks`, "deepLinks");
|
|
1054
1077
|
}
|
|
1055
1078
|
static #androidFilePattern = /^(?:res\/[^/]+\/[^/]+|assets\/.+)$/;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
runner,
|
|
4
4
|
script
|
|
5
|
-
} from "./index-
|
|
5
|
+
} from "./index-vpj42xwt.js";
|
|
6
6
|
import {
|
|
7
7
|
ModuleExecutor
|
|
8
|
-
} from "./index-
|
|
8
|
+
} from "./index-3w94e7n3.js";
|
|
9
9
|
import {
|
|
10
10
|
sourceFile,
|
|
11
11
|
moduleSourcePaths,
|
|
@@ -13,10 +13,10 @@ import {
|
|
|
13
13
|
createPassedPrimitiveReport,
|
|
14
14
|
bilingualLabelForField,
|
|
15
15
|
bilingualDescriptionForField
|
|
16
|
-
} from "./index-
|
|
16
|
+
} from "./index-y3mphr1m.js";
|
|
17
17
|
import {
|
|
18
18
|
PageScript
|
|
19
|
-
} from "./index-
|
|
19
|
+
} from "./index-mbxbhay5.js";
|
|
20
20
|
import {
|
|
21
21
|
pluralizeName
|
|
22
22
|
} from "./index-nz8prx9g.js";
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
writeGeneratedSyncState,
|
|
6
6
|
createRepairReport,
|
|
7
7
|
renderRepairReport
|
|
8
|
-
} from "./index-
|
|
8
|
+
} from "./index-y3mphr1m.js";
|
|
9
9
|
import {
|
|
10
10
|
AkanContextAnalyzer
|
|
11
|
-
} from "./index-
|
|
11
|
+
} from "./index-9z771ptz.js";
|
|
12
12
|
import {
|
|
13
13
|
runner
|
|
14
|
-
} from "./index-
|
|
14
|
+
} from "./index-vpj42xwt.js";
|
|
15
15
|
|
|
16
16
|
// pkgs/@akanjs/cli/repair/repair.runner.ts
|
|
17
17
|
var spawnShell = async (workspace, command) => await workspace.spawn("bash", ["-lc", command.startsWith("akan ") ? `bun run ${command}` : command], {
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
isScannedRootEntry,
|
|
9
9
|
AppExecutor,
|
|
10
10
|
LibExecutor
|
|
11
|
-
} from "./index-
|
|
11
|
+
} from "./index-3w94e7n3.js";
|
|
12
12
|
import {
|
|
13
13
|
FileSys2
|
|
14
14
|
} from "./index-52w0fvh8.js";
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
workflowPathsForPlan,
|
|
22
22
|
workflowRunArtifactPath,
|
|
23
23
|
workflowSyncDir
|
|
24
|
-
} from "./index-
|
|
24
|
+
} from "./index-y3mphr1m.js";
|
|
25
25
|
|
|
26
26
|
// pkgs/@akanjs/devkit/akanContext.ts
|
|
27
27
|
import { readdir } from "fs/promises";
|