@akanjs/devkit 3.0.0-beta.19 → 3.0.0-beta.20
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/abstractDoc.test.ts +6 -15
- package/abstractDoc.ts +1 -4
- package/agentsIndex.test.ts +4 -7
- package/agentsIndex.ts +6 -22
- package/akanApp/BackendImportGraph.test.ts +8 -22
- package/akanApp/BackendImportGraph.ts +1 -20
- package/akanApp/akanApp.host.test.ts +1 -3
- package/akanApp/akanApp.host.ts +64 -250
- package/akanApp/devHostPolicy.test.ts +10 -34
- package/akanApp/devHostPolicy.ts +12 -98
- package/akanConfig/akanConfig.test.ts +30 -39
- package/akanConfig/akanConfig.ts +40 -136
- package/akanContext.ts +106 -159
- package/akanMcpContract.ts +28 -73
- package/appSelectionMemory.ts +1 -4
- package/applicationBuildReporter.ts +37 -5
- package/applicationBuildRunner.ts +25 -59
- package/applicationReleasePackager.ts +24 -44
- package/applicationTestPreload.ts +3 -12
- package/artifact/implicitRootLayout.test.ts +3 -19
- package/artifact/implicitRootLayout.ts +34 -91
- package/artifact/routeSeedIndex.ts +11 -44
- package/biomeBase.ts +2 -5
- package/capacitorApp.test.ts +4 -14
- package/capacitorApp.ts +86 -235
- package/cloud/cloudApi.test.ts +202 -0
- package/cloud/cloudApi.ts +33 -57
- package/cloud/configLock.test.ts +64 -0
- package/cloud/configLock.ts +96 -0
- package/cloud/constants.ts +3 -2
- package/cloud/globalConfig.ts +64 -31
- package/codeAgent/agent/AkanCodeServices.ts +15 -57
- package/codeAgent/agent/AkanContextFiles.ts +5 -28
- package/codeAgent/agent/CodeAgent.ts +33 -108
- package/codeAgent/agent/CodeAgentAsks.ts +7 -30
- package/codeAgent/agent/CodeAgentEventMapper.ts +9 -52
- package/codeAgent/agent/CodeAgentGate.ts +8 -34
- package/codeAgent/agent/CodeAgentProxy.ts +4 -13
- package/codeAgent/agent/CodeAgentRpcHost.ts +3 -16
- package/codeAgent/agent/CodeAgentRpcListener.ts +2 -10
- package/codeAgent/agent/CodeAgentStreamPrinter.ts +4 -15
- package/codeAgent/agent/CodeAgentSuspended.ts +1 -8
- package/codeAgent/agent/CodeAgentUi.ts +2 -7
- package/codeAgent/agent/CodeMailbox.ts +7 -34
- package/codeAgent/agent/CodeSessionFork.ts +4 -19
- package/codeAgent/agent/CodeSessionIndex.ts +5 -31
- package/codeAgent/agent/SubagentPool.ts +48 -58
- package/codeAgent/agent/akanCodeModel.ts +5 -39
- package/codeAgent/agent/akanCodePaths.ts +4 -24
- package/codeAgent/agent/akanContextFiles.test.ts +0 -2
- package/codeAgent/agent/akanSystemPrompt.ts +1 -9
- package/codeAgent/agent/codeAgent.test.ts +178 -0
- package/codeAgent/agent/codeAgentContract.test.ts +5 -28
- package/codeAgent/agent/codeMailbox.test.ts +0 -4
- package/codeAgent/agent/codeSessionFork.test.ts +0 -2
- package/codeAgent/agent/codeSessionIndex.test.ts +9 -4
- package/codeAgent/agent/consoleToStderr.ts +2 -12
- package/codeAgent/agent/jsonLines.ts +29 -0
- package/codeAgent/agent/stringArg.ts +5 -0
- package/codeAgent/feedback/DevLogFeedback.ts +3 -18
- package/codeAgent/feedback/PreviewChrome.ts +5 -29
- package/codeAgent/feedback/PreviewFeedback.ts +2 -9
- package/codeAgent/feedback/PreviewView.ts +3 -15
- package/codeAgent/feedback/TurnFeedback.ts +2 -17
- package/codeAgent/feedback/VerifyFeedback.ts +1 -7
- package/codeAgent/feedback/previewChrome.test.ts +1 -1
- package/codeAgent/index.ts +2 -10
- package/codeAgent/skills/akan-code/SKILL.md +12 -4
- package/codeAgent/tools/AkanCli.ts +4 -16
- package/codeAgent/tools/AkanCodePlugins.ts +21 -43
- package/codeAgent/tools/AkanEditScope.ts +2 -12
- package/codeAgent/tools/AkanEnvKeys.ts +3 -11
- package/codeAgent/tools/AkanToolPack.ts +6 -28
- package/codeAgent/tools/AkanVerifier.ts +1 -8
- package/codeAgent/tools/AskToolPack.ts +3 -15
- package/codeAgent/tools/MailToolPack.ts +0 -9
- package/codeAgent/tools/McpClient.ts +3 -24
- package/codeAgent/tools/McpOAuth.ts +6 -41
- package/codeAgent/tools/McpOAuthLoopback.ts +2 -15
- package/codeAgent/tools/McpServerConfig.ts +7 -26
- package/codeAgent/tools/McpSignIn.ts +46 -49
- package/codeAgent/tools/McpTokenStore.ts +6 -17
- package/codeAgent/tools/McpToolPack.ts +107 -35
- package/codeAgent/tools/SessionToolPack.ts +1 -11
- package/codeAgent/tools/WebToolPack.ts +1 -7
- package/codeAgent/tools/akanCodePlugins.test.ts +231 -63
- package/codeAgent/tools/askToolPack.test.ts +0 -3
- package/codeAgent/tools/mcpOAuth.test.ts +315 -27
- package/codeAgent/tools/mcpServerConfig.test.ts +21 -14
- package/codegenLock.test.ts +4 -13
- package/codegenLock.ts +3 -17
- package/commandDecorators/argMeta.ts +1 -5
- package/commandDecorators/camelToKebabCase.ts +1 -0
- package/commandDecorators/command.ts +44 -102
- package/commandDecorators/commandBuilder.ts +30 -61
- package/commandDecorators/commandDecorators.test.ts +1 -9
- package/commandDecorators/dependencyBuilder.ts +10 -1
- package/commandDecorators/helpFormatter.ts +66 -144
- package/commandDecorators/index.ts +0 -2
- package/commandDecorators/targetMeta.ts +9 -7
- package/createTunnel.ts +7 -14
- package/dependencyScanner.test.ts +4 -16
- package/dependencyScanner.ts +27 -78
- package/devkitUtils.test.ts +47 -19
- package/executors.test.ts +114 -60
- package/executors.ts +165 -484
- package/fileEditor.ts +9 -37
- package/{getDirname.test.ts → fileSys.test.ts} +1 -1
- package/fileSys.ts +6 -8
- package/formSetterScanner.ts +3 -16
- package/frontendBuild/allRoutesBuilder.ts +7 -21
- package/frontendBuild/autoImportSync.test.ts +14 -38
- package/frontendBuild/autoImportSync.ts +15 -67
- package/frontendBuild/buildRouteClient.test.ts +10 -36
- package/frontendBuild/bundleDefine.ts +12 -0
- package/frontendBuild/clientBuildTypes.ts +5 -36
- package/frontendBuild/clientEntriesBundler.ts +9 -40
- package/frontendBuild/clientEntryDiscovery.ts +6 -41
- package/frontendBuild/csrArtifactBuilder.ts +6 -25
- package/frontendBuild/cssCandidateCache.test.ts +0 -6
- package/frontendBuild/cssCandidateCache.ts +6 -41
- package/frontendBuild/cssCompiler.ts +29 -78
- package/frontendBuild/cssImportResolver.ts +5 -18
- package/frontendBuild/devChangePlanner.ts +7 -10
- package/frontendBuild/devGeneratedIndexSync.test.ts +12 -27
- package/frontendBuild/devGeneratedIndexSync.ts +1 -4
- package/frontendBuild/fontOptimizer.test.ts +5 -13
- package/frontendBuild/fontOptimizer.ts +15 -72
- package/frontendBuild/fontPruner.test.ts +5 -10
- package/frontendBuild/fontPruner.ts +5 -20
- package/frontendBuild/frontendBuild.test.ts +27 -52
- package/frontendBuild/hmrChangeClassifier.ts +2 -2
- package/frontendBuild/hmrWatcher.test.ts +7 -31
- package/frontendBuild/hmrWatcher.ts +14 -71
- package/frontendBuild/pagesBundleBuilder.ts +4 -29
- package/frontendBuild/precompressArtifacts.ts +5 -18
- package/frontendBuild/routeClientBuilder.ts +7 -47
- package/frontendBuild/routesManifestArtifactSerializer.ts +5 -36
- package/frontendBuild/sourceMtimeIndex.test.ts +37 -94
- package/frontendBuild/sourceMtimeIndex.ts +19 -130
- package/frontendBuild/ssrBaseArtifactBuilder.ts +2 -8
- package/frontendBuild/styleContract.ts +1 -8
- package/frontendBuild/themeValidator.ts +4 -26
- package/frontendBuild/watchRootResolver.test.ts +23 -42
- package/frontendBuild/watchRootResolver.ts +5 -27
- package/getRelatedCnsts.ts +12 -92
- package/incrementalBuilder/buildBatch.proc.ts +22 -57
- package/incrementalBuilder/buildBatchProtocol.ts +8 -36
- package/incrementalBuilder/buildBatchRunner.test.ts +34 -0
- package/incrementalBuilder/buildBatchRunner.ts +10 -31
- package/incrementalBuilder/builderChannel.test.ts +24 -49
- package/incrementalBuilder/builderChannel.ts +6 -37
- package/incrementalBuilder/builderRequestRouter.test.ts +0 -8
- package/incrementalBuilder/builderRequestRouter.ts +5 -24
- package/incrementalBuilder/devWatchBatch.test.ts +14 -18
- package/incrementalBuilder/incrementalBuilder.host.test.ts +18 -55
- package/incrementalBuilder/incrementalBuilder.host.ts +18 -76
- package/incrementalBuilder/incrementalBuilder.proc.test.ts +81 -0
- package/incrementalBuilder/incrementalBuilder.proc.ts +48 -161
- package/index.ts +3 -15
- package/integration/devResourceProbe.ts +50 -56
- package/integration/devStability.integration.test.ts +47 -194
- package/integration/devStabilityHarness.test.ts +9 -29
- package/integration/devStabilityHarness.ts +65 -330
- package/integration/ssrMemoryProbe.ts +41 -167
- package/libSource.test.ts +4 -15
- package/libSource.ts +19 -31
- package/lint/gritRules.test.ts +6 -23
- package/linter.test.ts +1 -2
- package/linter.ts +22 -115
- package/mobile/mobileTarget.ts +14 -13
- package/package.json +2 -2
- package/packageExports.test.ts +3 -18
- package/packageExportsMap.ts +3 -19
- package/piDependencyPins.test.ts +3 -14
- package/platformTest/IdleWatchedProcess.test.ts +5 -13
- package/platformTest/IdleWatchedProcess.ts +1 -5
- package/platformTest/LinuxDockerTarget.ts +20 -35
- package/platformTest/PlatformTestRun.test.ts +5 -9
- package/platformTest/PlatformTestTarget.ts +24 -2
- package/platformTest/TestSnapshot.test.ts +6 -14
- package/platformTest/TestSnapshot.ts +1 -5
- package/platformTest/WindowsSshTarget.ts +6 -22
- package/prompter.ts +3 -6
- package/qualityScanner.test.ts +6 -24
- package/qualityScanner.ts +196 -284
- package/recipeScanner.test.ts +7 -12
- package/recipeScanner.ts +9 -38
- package/repoIdentity.ts +2 -9
- package/routeSourceValidator.ts +7 -30
- package/scanInfo.ts +82 -214
- package/selectModel.ts +1 -2
- package/semver.ts +3 -5
- package/slicePlanner.test.ts +6 -24
- package/slicePlanner.ts +11 -32
- package/spinner.test.ts +3 -8
- package/spinner.ts +4 -16
- package/sshTunnel.ts +1 -6
- package/ssrScanner.test.ts +1 -6
- package/ssrScanner.ts +103 -113
- package/subspace.test.ts +6 -25
- package/subspace.ts +31 -109
- package/subspaceConfig.ts +3 -11
- package/testHelpers.ts +49 -34
- package/transforms/asyncDefaultExportDetector.ts +3 -11
- package/transforms/barrelAnalyzer.ts +43 -135
- package/transforms/barrelImportsPlugin.ts +38 -175
- package/transforms/externalizeFrameworkPlugin.test.ts +39 -118
- package/transforms/externalizeFrameworkPlugin.ts +13 -87
- package/transforms/moduleSyntax.ts +32 -0
- package/transforms/rscUseClientTransform.ts +35 -20
- package/transforms/transforms.test.ts +153 -44
- package/transforms/tsconfigPackageResolver.test.ts +6 -24
- package/transforms/useClientBundlePlugin.ts +2 -22
- package/typeChecker.ts +7 -63
- package/uploadRelease.ts +10 -25
- package/workflow/artifacts.ts +18 -0
- package/workflow/executor.test.ts +1 -12
- package/workflow/executor.ts +85 -146
- package/workflow/index.ts +0 -1
- package/workflow/moduleIndex.test.ts +4 -15
- package/workflow/moduleIndex.ts +9 -49
- package/workflow/plan.ts +18 -25
- package/workflow/render.ts +80 -96
- package/workflow/source.ts +33 -56
- package/workflow/sourceAst.ts +50 -0
- package/workspaceLayout.ts +4 -19
- package/commandDecorators/commandMeta.ts +0 -7
- package/commandDecorators/types.ts +0 -10
- package/getDirname.ts +0 -4
- package/local/optimize-resource/ipcprobe/child.ts +0 -1
- package/local/optimize-resource/ipcprobe/parent.ts +0 -11
- package/workflow/primitive.ts +0 -59
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { assertUniqueRoutePatterns, compareRouteSpecificity, parseRouteModuleKey } from "akanjs/common";
|
|
3
|
+
import {
|
|
4
|
+
ROUTE_SEED_INDEX_JSON,
|
|
5
|
+
type RouteSeedEntry,
|
|
6
|
+
type RouteSeedIndex,
|
|
7
|
+
} from "akanjs/server/artifact/routeSeedIndexStore";
|
|
3
8
|
import type { PageEntry } from "./implicitRootLayout";
|
|
4
9
|
|
|
5
|
-
|
|
6
|
-
* Build-time utilities for the route seed index. `computeRouteSeedIndex`
|
|
7
|
-
* takes resolved `PageEntry` rows (`key` plus absolute module path — files
|
|
8
|
-
* under `app/` or the generated implicit root layout) and produces — for every
|
|
9
|
-
* route — the list of source files that seed the `"use client"` graph walk.
|
|
10
|
-
*
|
|
11
|
-
* The result is serialized to `route-seed-index.json` by
|
|
12
|
-
* `saveRouteSeedIndex` so the runtime server can call
|
|
13
|
-
* `loadRouteSeedIndex` to restore it without re-importing `pages.ts`
|
|
14
|
-
* (which no longer exists) or reparsing loader sources.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
export interface RouteSeedEntry {
|
|
18
|
-
routeId: string;
|
|
19
|
-
pattern: string;
|
|
20
|
-
seeds: string[];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface RouteSeedIndex {
|
|
24
|
-
entries: RouteSeedEntry[];
|
|
25
|
-
globalLayoutFiles: string[];
|
|
26
|
-
}
|
|
10
|
+
export { ROUTE_SEED_INDEX_JSON, type RouteSeedEntry, type RouteSeedIndex };
|
|
27
11
|
|
|
28
12
|
export type SerializedRouteSeedEntry = Pick<RouteSeedEntry, "routeId"> &
|
|
29
13
|
Partial<Pick<RouteSeedEntry, "pattern" | "seeds">>;
|
|
@@ -33,10 +17,6 @@ export interface SerializedRouteSeedIndex {
|
|
|
33
17
|
globalLayoutFiles?: string[];
|
|
34
18
|
}
|
|
35
19
|
|
|
36
|
-
/**
|
|
37
|
-
* Compute the route seed index from `PageEntry`s (disk paths or generated
|
|
38
|
-
* implicit root layout absolute paths).
|
|
39
|
-
*/
|
|
40
20
|
export function computeRouteSeedIndex(pageEntries: PageEntry[]): RouteSeedIndex {
|
|
41
21
|
const layoutsByPrefix = new Map<string, string[]>();
|
|
42
22
|
const pagesBySegments: Array<{
|
|
@@ -51,11 +31,8 @@ export function computeRouteSeedIndex(pageEntries: PageEntry[]): RouteSeedIndex
|
|
|
51
31
|
const parsed = parseRouteModuleKey(key);
|
|
52
32
|
const files = [path.resolve(moduleAbsPath), ...(seedAbsPaths ?? []).map((seed) => path.resolve(seed))];
|
|
53
33
|
if (parsed.kind === "layout" || parsed.kind === "overrides") {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const prefix = parsed.routeSegments.join("/");
|
|
57
|
-
const prev = layoutsByPrefix.get(prefix) ?? [];
|
|
58
|
-
layoutsByPrefix.set(prefix, [...prev, ...files]);
|
|
34
|
+
//? Every route under an overrides prefix needs its "use client" wrapper in the client graph, as with a layout.
|
|
35
|
+
layoutsByPrefix.getOrInsert(parsed.routeSegments.join("/"), []).push(...files);
|
|
59
36
|
} else if (parsed.kind === "page") {
|
|
60
37
|
pagesBySegments.push({
|
|
61
38
|
key,
|
|
@@ -68,9 +45,7 @@ export function computeRouteSeedIndex(pageEntries: PageEntry[]): RouteSeedIndex
|
|
|
68
45
|
}
|
|
69
46
|
assertUniqueRoutePatterns(pagesBySegments);
|
|
70
47
|
|
|
71
|
-
const
|
|
72
|
-
const globalLayoutFiles = rootLayouts;
|
|
73
|
-
|
|
48
|
+
const globalLayoutFiles = layoutsByPrefix.get("") ?? [];
|
|
74
49
|
const seedEntries: RouteSeedEntry[] = [];
|
|
75
50
|
for (const { pattern, segments, files, includeOwnLayout } of pagesBySegments) {
|
|
76
51
|
const layouts: string[] = [];
|
|
@@ -84,26 +59,18 @@ export function computeRouteSeedIndex(pageEntries: PageEntry[]): RouteSeedIndex
|
|
|
84
59
|
const routeId = pattern || "/";
|
|
85
60
|
seedEntries.push({ routeId, pattern: routeId, seeds });
|
|
86
61
|
}
|
|
87
|
-
// Static segments must beat `:param` ones
|
|
88
|
-
// `/persona/new` resolves to `[personaId]=new`. Sort once at build time
|
|
89
|
-
// so the runtime matcher can stay first-match-wins.
|
|
62
|
+
// Static segments must beat `:param` ones (`/persona/new` is not `[personaId]=new`); the runtime is first-match-wins.
|
|
90
63
|
seedEntries.sort((a, b) => compareRouteSpecificity(a.pattern, b.pattern));
|
|
91
64
|
return { entries: seedEntries, globalLayoutFiles };
|
|
92
65
|
}
|
|
93
66
|
|
|
94
|
-
export const ROUTE_SEED_INDEX_JSON = "route-seed-index.json";
|
|
95
|
-
|
|
96
67
|
export function serializeRouteSeedIndexForArtifact(
|
|
97
68
|
index: RouteSeedIndex,
|
|
98
69
|
artifactDir: string,
|
|
99
70
|
options: { production?: boolean } = {},
|
|
100
71
|
): SerializedRouteSeedIndex {
|
|
101
72
|
const normalizedArtifactDir = path.resolve(artifactDir);
|
|
102
|
-
if (options.production) {
|
|
103
|
-
return {
|
|
104
|
-
entries: index.entries.map((entry) => ({ routeId: entry.routeId })),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
73
|
+
if (options.production) return { entries: index.entries.map((entry) => ({ routeId: entry.routeId })) };
|
|
107
74
|
return {
|
|
108
75
|
entries: index.entries.map((entry) => ({
|
|
109
76
|
...entry,
|
package/biomeBase.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
/** `extends` target for a workspace `biome.json`; Biome resolves it through node_modules. */
|
|
2
2
|
export const biomeBaseConfig = "@akanjs/devkit/biome.base.json";
|
|
3
3
|
|
|
4
|
-
// Biome moves rules between groups across minors
|
|
5
|
-
// `
|
|
6
|
-
// Biome disagrees with the shipped base config therefore fails to load it at all, which is why the version is
|
|
7
|
-
// pinned here instead of resolved to latest at create time. Bump this and `biome.base.json` in one commit, and run
|
|
8
|
-
// `biome migrate --write` in the workspace root and in `pkgs/@akanjs/devkit` so both configs move together.
|
|
4
|
+
// Pinned: Biome moves rules between groups across minors and a stale position is a hard config error. Bump it with
|
|
5
|
+
// `biome.base.json` in one commit, running `biome migrate --write` in the workspace root and in this package.
|
|
9
6
|
export const biomeVersion = "2.5.12";
|
package/capacitorApp.test.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import os from "node:os";
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { writeFile } from "node:fs/promises";
|
|
4
3
|
import path from "node:path";
|
|
5
4
|
import type { AkanMobileTargetConfig } from "./akanConfig";
|
|
6
5
|
import {
|
|
@@ -27,14 +26,9 @@ import {
|
|
|
27
26
|
toIosInfoPlistUsageDescriptions,
|
|
28
27
|
writeRootCapacitorConfig,
|
|
29
28
|
} from "./capacitorApp";
|
|
29
|
+
import { tempDirs } from "./testHelpers";
|
|
30
30
|
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
const makeTempRoot = async () => {
|
|
34
|
-
const root = await mkdtemp(path.join(os.tmpdir(), "akan-capacitor-app-"));
|
|
35
|
-
tempRoots.push(root);
|
|
36
|
-
return root;
|
|
37
|
-
};
|
|
31
|
+
const makeTempRoot = tempDirs("akan-capacitor-app-");
|
|
38
32
|
|
|
39
33
|
const baseTarget: AkanMobileTargetConfig = {
|
|
40
34
|
name: "default",
|
|
@@ -50,10 +44,6 @@ const baseTarget: AkanMobileTargetConfig = {
|
|
|
50
44
|
files: { android: { "app/google-services.json": "private/google-services.json" } },
|
|
51
45
|
};
|
|
52
46
|
|
|
53
|
-
afterEach(async () => {
|
|
54
|
-
await Promise.all(tempRoots.splice(0).map((root) => rm(root, { recursive: true, force: true })));
|
|
55
|
-
});
|
|
56
|
-
|
|
57
47
|
describe("materializeCapacitorConfig", () => {
|
|
58
48
|
test("writes only Capacitor fields for release config", () => {
|
|
59
49
|
const config = materializeCapacitorConfig(
|