@akanjs/cli 3.0.0-beta.31 → 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-tbdpdjat.js → CodeAgent-2vmp9qe0.js} +2 -2
- package/{CodeTui-my2x5fah.js → CodeTui-5ed6bg2a.js} +1 -1
- package/{agent.command-vz60x05c.js → agent.command-gn73rhe7.js} +5 -5
- package/akanCode.js +2 -2
- package/{application.command-pxqfjrqm.js → application.command-e968t0hw.js} +14 -9
- package/{applicationBuildRunner-shnfyfdy.js → applicationBuildRunner-64taxseg.js} +3 -3
- package/buildBatch.proc.js +3 -3
- package/{cloud.command-9v9tpgps.js → cloud.command-0jm301rr.js} +9 -9
- package/cloud.script-nemnzjpv.js +20 -0
- package/{code.command-13h14j25.js → code.command-18kcm7hq.js} +6 -6
- package/{context.command-x1hbasm5.js → context.command-trd9bn18.js} +13 -13
- package/context.runner-y5hwh673.js +21 -0
- package/{guideline.command-vfk11hpj.js → guideline.command-bdmdn2de.js} +2 -2
- package/guidelines/conventions/conventions.instruction.md +5 -3
- package/guidelines/runtimeRule/runtimeRule.instruction.md +26 -6
- package/incrementalBuilder.proc.js +2 -2
- package/{index-ptshj7y1.js → index-0wpybxtr.js} +3 -3
- package/{index-e52z7psd.js → index-3w94e7n3.js} +18 -2
- package/{index-nhhrjvk1.js → index-4npz05nm.js} +4 -4
- package/{index-9s5zga3q.js → index-6he6gvfg.js} +1 -1
- package/{index-q9q7x4zj.js → index-93j60em0.js} +3 -3
- package/{index-vcdxpmsx.js → index-9z771ptz.js} +2 -2
- package/{index-rqxa9r98.js → index-abxpehf8.js} +7 -7
- package/{index-arnkqb6f.js → index-by9pxkr0.js} +2 -2
- package/{index-947t6zm4.js → index-drehwpdt.js} +2 -2
- package/{index-f50dy7yq.js → index-f3c78nd6.js} +7 -7
- package/{index-f8q701fb.js → index-gbggbqcp.js} +77 -22
- package/{index-7yf7rnjg.js → index-hsmtysz4.js} +2 -2
- package/{index-ksq4t16z.js → index-jmrn54tt.js} +1 -1
- package/{index-ew8dna9s.js → index-kcdj1z5v.js} +2 -2
- package/{index-cxafpw23.js → index-kqabytj7.js} +4 -4
- package/{index-qk9vv9hm.js → index-mbxbhay5.js} +1 -1
- package/{index-zvr7wfyg.js → index-mgxpx3f2.js} +2 -2
- package/{index-zc90rh75.js → index-p993efkq.js} +33 -18
- package/{index-8psse8dw.js → index-pmhqttv3.js} +5 -5
- package/{index-d5yn19ef.js → index-tqm7jjcn.js} +1 -1
- package/{index-1skctzbq.js → index-vpj42xwt.js} +1 -1
- package/{index-smbecayj.js → index-wprnsjms.js} +3 -3
- package/{index-84r80zdx.js → index-y3mphr1m.js} +1 -1
- package/{index-ymnqrsxm.js → index-yg7jhz8x.js} +4 -4
- package/index.js +21 -21
- package/{library.command-m52jqc0s.js → library.command-9h749a1x.js} +3 -3
- package/{localRegistry.command-x5vs1z43.js → localRegistry.command-2bqqhxyz.js} +8 -8
- package/{module.command-ty3k6rwd.js → module.command-nv8nzgft.js} +5 -5
- package/{package.command-hphdh4g4.js → package.command-mq4bggp6.js} +3 -3
- package/package.json +2 -2
- package/{page.command-5aq8mzvq.js → page.command-j639n707.js} +3 -3
- package/{primitive.command-adwj84kx.js → primitive.command-kz6849th.js} +6 -6
- package/{quality.command-y10kea2f.js → quality.command-4hyabwkb.js} +2 -2
- package/{repair.command-v7mwqvjh.js → repair.command-a9awpbqr.js} +5 -5
- package/{scalar.command-pg3gneer.js → scalar.command-ma4fpm9m.js} +4 -4
- package/{subspace.command-ejdmvbq7.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-rz9qf230.js → tunnel.command-xwr46b66.js} +2 -2
- package/{workflow.command-6r809r2z.js → workflow.command-t7wqe4h7.js} +10 -10
- package/{workspace.command-8g3cw7jd.js → workspace.command-4derhzrh.js} +24 -21
- package/cloud.script-baqdthnz.js +0 -20
- package/context.runner-kqbjjea1.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
|
+
};
|
|
@@ -358,11 +358,13 @@ Full contract: `get_guideline` with `runtimeRule`, or `akan guideline show runti
|
|
|
358
358
|
the same shape and overrides the section field by field — objects merge key by key, a list or any other value
|
|
359
359
|
replaces the section's. `akan start-ios` / `start-android` / `start-desktop` run a dev build that loads its pages
|
|
360
360
|
from `akan start`; `build-ios` / `build-android` / `build-desktop` write
|
|
361
|
-
`apps/<app>/.akan/native/<target>/build/<platform>`, a desktop app only for the
|
|
362
|
-
|
|
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
|
|
363
365
|
releases `akan publish-update` makes; `akan update-keygen` makes the key and prints its `publicKey`.
|
|
364
366
|
- **A desktop app that carries its server (`desktop: { server: true }` in `native`, or in one target) gets nothing
|
|
365
|
-
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
|
|
366
368
|
program on the computer can call, so guard its endpoints as a network server's. An executable the app spawns
|
|
367
369
|
goes in `bin` — per platform, a download checked against its `sha256` or a file beside the config, put first on
|
|
368
370
|
the app's PATH so the server's `spawn("ffmpeg")` finds it, and in `ctx.binDir` for a native plugin — and a package
|
|
@@ -243,10 +243,27 @@ const config: AppConfig = {
|
|
|
243
243
|
- **`start-ios` / `start-android` / `start-desktop` run a dev build that loads its pages from `akan start`.** It has
|
|
244
244
|
to be running — except for a desktop app that carries its server, which starts it when none of this checkout
|
|
245
245
|
answers. `--release true` runs a release build of the app's own bundle instead.
|
|
246
|
-
- **A desktop app builds only for the computer that builds it** — a `.app` on macOS,
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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`).
|
|
250
267
|
- **`updates: { url, publicKey }` lets an installed app update itself** — the whole app on a desktop, the web
|
|
251
268
|
bundle on a phone. `akan update-keygen <app>` makes the signing key once
|
|
252
269
|
(`~/.akan/native/keys/<app id>.update.key`, or the path `AKAN_NATIVE_UPDATE_KEY` names) and prints the
|
|
@@ -269,8 +286,11 @@ packages first with `bun install --production --prefer-offline`, before `akan bu
|
|
|
269
286
|
`--release` starts `akan start` beside the app when no dev server of this checkout answers. The setting is the
|
|
270
287
|
app's backend, so it does not change under an installed app: an update whose release carries a server when the app
|
|
271
288
|
has none, or none when it has one, is refused, and switching means a reinstall.
|
|
272
|
-
|
|
273
|
-
|
|
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
|
|
274
294
|
it is free, which is not a guarantee, so a provider that needs an exact redirect URI signs in through a cloud
|
|
275
295
|
server's adapter. It refuses a `Host` other than its own, but any program on the computer can still call that port:
|
|
276
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 })) {
|
|
@@ -961,7 +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 ? {
|
|
964
|
+
...merged.desktop ? {
|
|
965
|
+
desktop: AkanAppConfig.#desktopServer(AkanAppConfig.#platformIndexPath(merged.desktop), `${where}.desktop.server`, configPath)
|
|
966
|
+
} : {},
|
|
965
967
|
appName: merged.appName ?? this.app.name,
|
|
966
968
|
appId: merged.appId ?? appId,
|
|
967
969
|
version: merged.version ?? version,
|
|
@@ -972,6 +974,18 @@ class AkanAppConfig {
|
|
|
972
974
|
}));
|
|
973
975
|
return { appName, appId, ...root.fileName ? { fileName: root.fileName } : {}, version, buildNum, targets };
|
|
974
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
|
+
}
|
|
975
989
|
static #platformIndexPath(section) {
|
|
976
990
|
const { indexPath: rawIndexPath, ...rest } = section;
|
|
977
991
|
const indexPath = normalizeIndexPath(rawIndexPath);
|
|
@@ -1029,7 +1043,8 @@ class AkanAppConfig {
|
|
|
1029
1043
|
"activity",
|
|
1030
1044
|
"files"
|
|
1031
1045
|
],
|
|
1032
|
-
desktop: ["indexPath", "server", "recovery", "window", "screenCapture"],
|
|
1046
|
+
desktop: ["indexPath", "server", "recovery", "window", "screenCapture", "entitlements"],
|
|
1047
|
+
desktopServer: ["omit"],
|
|
1033
1048
|
deepLinks: ["schemes", "domains"]
|
|
1034
1049
|
};
|
|
1035
1050
|
static #movedKeys = {
|
|
@@ -1057,6 +1072,7 @@ class AkanAppConfig {
|
|
|
1057
1072
|
check(settings.ios, AkanAppConfig.#nativeKeys.ios, `${where}.ios`, "ios");
|
|
1058
1073
|
check(settings.android, AkanAppConfig.#nativeKeys.android, `${where}.android`, "android");
|
|
1059
1074
|
check(settings.desktop, AkanAppConfig.#nativeKeys.desktop, `${where}.desktop`, "desktop");
|
|
1075
|
+
check(settings.desktop?.server, AkanAppConfig.#nativeKeys.desktopServer, `${where}.desktop.server`, "desktopServer");
|
|
1060
1076
|
check(settings.deepLinks, AkanAppConfig.#nativeKeys.deepLinks, `${where}.deepLinks`, "deepLinks");
|
|
1061
1077
|
}
|
|
1062
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";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
AppExecutor
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-3w94e7n3.js";
|
|
5
5
|
import {
|
|
6
6
|
jsonText,
|
|
7
7
|
createWorkflowBaselineSummary,
|
|
8
8
|
buildAkanModuleContextIndex,
|
|
9
9
|
toolingRolloutGate
|
|
10
|
-
} from "./index-
|
|
10
|
+
} from "./index-y3mphr1m.js";
|
|
11
11
|
import {
|
|
12
12
|
buildResourceList,
|
|
13
13
|
codexMcpConfigPath,
|
|
@@ -17,25 +17,25 @@ import {
|
|
|
17
17
|
upsertCodexMcpServerBlock,
|
|
18
18
|
renderDoctorText,
|
|
19
19
|
AkanContextAnalyzer
|
|
20
|
-
} from "./index-
|
|
20
|
+
} from "./index-9z771ptz.js";
|
|
21
21
|
import {
|
|
22
22
|
runner
|
|
23
|
-
} from "./index-
|
|
23
|
+
} from "./index-vpj42xwt.js";
|
|
24
24
|
import {
|
|
25
25
|
getMobileTargets,
|
|
26
26
|
appIdsOf,
|
|
27
27
|
NativeApp,
|
|
28
28
|
isPlaceholderAppId
|
|
29
|
-
} from "./index-
|
|
29
|
+
} from "./index-gbggbqcp.js";
|
|
30
30
|
import {
|
|
31
31
|
Prompter2
|
|
32
32
|
} from "./index-zzvvc845.js";
|
|
33
33
|
import {
|
|
34
34
|
RepairRunner
|
|
35
|
-
} from "./index-
|
|
35
|
+
} from "./index-93j60em0.js";
|
|
36
36
|
import {
|
|
37
37
|
WorkflowRunner
|
|
38
|
-
} from "./index-
|
|
38
|
+
} from "./index-f3c78nd6.js";
|
|
39
39
|
|
|
40
40
|
// pkgs/@akanjs/devkit/akanMcpContract.ts
|
|
41
41
|
import path from "path";
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
runner,
|
|
4
4
|
script
|
|
5
|
-
} from "./index-
|
|
5
|
+
} from "./index-vpj42xwt.js";
|
|
6
6
|
import {
|
|
7
7
|
FileSys2
|
|
8
8
|
} from "./index-52w0fvh8.js";
|
|
9
9
|
import {
|
|
10
10
|
PkgExecutor
|
|
11
|
-
} from "./index-
|
|
11
|
+
} from "./index-3w94e7n3.js";
|
|
12
12
|
import {
|
|
13
13
|
TypeScriptDependencyScanner2
|
|
14
14
|
} from "./index-2ahj896a.js";
|