persona-harness 0.8.6 → 0.8.7

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.
Files changed (51) hide show
  1. package/dist/cli/attach-staging.d.ts +0 -1
  2. package/dist/cli/attach-staging.js +1 -25
  3. package/dist/cli/attach-staging.js.map +1 -1
  4. package/dist/cli/attach.js +12 -6
  5. package/dist/cli/attach.js.map +1 -1
  6. package/dist/cli/bootstrap-attach-enforcement.d.ts +2 -0
  7. package/dist/cli/bootstrap-attach-enforcement.js +36 -0
  8. package/dist/cli/bootstrap-attach-enforcement.js.map +1 -0
  9. package/dist/cli/bootstrap-contract.d.ts +50 -0
  10. package/dist/cli/bootstrap-contract.js +206 -0
  11. package/dist/cli/bootstrap-contract.js.map +1 -0
  12. package/dist/cli/bootstrap-init-ownership.d.ts +18 -0
  13. package/dist/cli/bootstrap-init-ownership.js +63 -0
  14. package/dist/cli/bootstrap-init-ownership.js.map +1 -0
  15. package/dist/cli/bootstrap-output.d.ts +3 -0
  16. package/dist/cli/bootstrap-output.js +48 -0
  17. package/dist/cli/bootstrap-output.js.map +1 -0
  18. package/dist/cli/bootstrap-runner.d.ts +3 -0
  19. package/dist/cli/bootstrap-runner.js +184 -0
  20. package/dist/cli/bootstrap-runner.js.map +1 -0
  21. package/dist/cli/bootstrap-support.d.ts +7 -0
  22. package/dist/cli/bootstrap-support.js +128 -0
  23. package/dist/cli/bootstrap-support.js.map +1 -0
  24. package/dist/cli/bootstrap.d.ts +2 -8
  25. package/dist/cli/bootstrap.js +3 -546
  26. package/dist/cli/bootstrap.js.map +1 -1
  27. package/dist/cli/init-harness-overlay.d.ts +3 -0
  28. package/dist/cli/init-harness-overlay.js +54 -0
  29. package/dist/cli/init-harness-overlay.js.map +1 -0
  30. package/dist/cli/init-manifest.d.ts +1 -0
  31. package/dist/cli/init-manifest.js +13 -10
  32. package/dist/cli/init-manifest.js.map +1 -1
  33. package/dist/cli/init-ownership.d.ts +23 -0
  34. package/dist/cli/init-ownership.js +47 -0
  35. package/dist/cli/init-ownership.js.map +1 -0
  36. package/dist/cli/init-plan.js +46 -36
  37. package/dist/cli/init-plan.js.map +1 -1
  38. package/dist/cli/init-source.js +1 -0
  39. package/dist/cli/init-source.js.map +1 -1
  40. package/dist/cli/init.d.ts +3 -0
  41. package/dist/cli/init.js.map +1 -1
  42. package/docs/current/release/consumer-authority-v087-acceptance.json +1065 -0
  43. package/docs/current/release/v0.8.7-release-notes.md +20 -0
  44. package/package.json +3 -1
  45. package/packages/shared-skills/package.json +1 -1
  46. package/scripts/canonical-package-packer.d.mts +17 -2
  47. package/scripts/canonical-package-packer.mjs +73 -17
  48. package/scripts/consumer-authority-v087-acceptance-schema.d.mts +89 -0
  49. package/scripts/consumer-authority-v087-acceptance-schema.mjs +170 -0
  50. package/scripts/preflight-consumer-authority-external-artifact-transport.mjs +2 -2
  51. package/scripts/preflight-consumer-authority-external-attestation.mjs +2 -2
@@ -1,2 +1 @@
1
1
  export declare function copyAttachContext(projectDir: string, stagingDir: string): void;
2
- export declare function enableAttachEnforcement(stagingDir: string): void;
@@ -1,6 +1,5 @@
1
- import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
1
+ import { cpSync, existsSync, mkdirSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
- import { isRecord, stripJsonComments } from "../config/jsonc.js";
4
3
  const STAGING_CONTEXT = [
5
4
  "README.md",
6
5
  "build.gradle",
@@ -21,27 +20,4 @@ export function copyAttachContext(projectDir, stagingDir) {
21
20
  }
22
21
  }
23
22
  }
24
- export function enableAttachEnforcement(stagingDir) {
25
- const path = join(stagingDir, ".persona", "harness.jsonc");
26
- const parsed = JSON.parse(stripJsonComments(readFileSync(path, "utf8")));
27
- if (!isRecord(parsed)) {
28
- throw new Error(".persona/harness.jsonc must contain an object.");
29
- }
30
- const features = isRecord(parsed.features) ? parsed.features : {};
31
- const enforce = isRecord(parsed.enforce) ? parsed.enforce : {};
32
- writeFileSync(path, `${JSON.stringify({
33
- ...parsed,
34
- features: { ...features, entrySteering: false, runtimeInjection: false },
35
- enforce: {
36
- ...enforce,
37
- executeVerification: true,
38
- idleContinuation: false,
39
- ralphLoop: {
40
- ...(isRecord(enforce.ralphLoop) ? enforce.ralphLoop : {}),
41
- enabled: false,
42
- },
43
- systemConstitution: false,
44
- },
45
- }, null, 2)}\n`);
46
- }
47
23
  //# sourceMappingURL=attach-staging.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attach-staging.js","sourceRoot":"","sources":["../../src/cli/attach-staging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEhE,MAAM,eAAe,GAAG;IACtB,WAAW;IACX,cAAc;IACd,kBAAkB;IAClB,iBAAiB;IACjB,qBAAqB;IACrB,KAAK;IACL,YAAY;IACZ,yBAAyB;CACjB,CAAA;AAEV,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,UAAkB;IACtE,KAAK,MAAM,YAAY,IAAI,eAAe,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QAC7C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;YAC7C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACjF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACnE,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9D,aAAa,CACX,IAAI,EACJ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChB,GAAG,MAAM;QACT,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE;QACxE,OAAO,EAAE;YACP,GAAG,OAAO;YACV,mBAAmB,EAAE,IAAI;YACzB,gBAAgB,EAAE,KAAK;YACvB,SAAS,EAAE;gBACT,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,OAAO,EAAE,KAAK;aACf;YACD,kBAAkB,EAAE,KAAK;SAC1B;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAChB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"attach-staging.js","sourceRoot":"","sources":["../../src/cli/attach-staging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,eAAe,GAAG;IACtB,WAAW;IACX,cAAc;IACd,kBAAkB;IAClB,iBAAiB;IACjB,qBAAqB;IACrB,KAAK;IACL,YAAY;IACZ,yBAAyB;CACjB,CAAA;AAEV,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,UAAkB;IACtE,KAAK,MAAM,YAAY,IAAI,eAAe,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QAC7C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;YAC7C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { cpSync, existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
1
+ import { cpSync, existsSync, mkdtempSync, readFileSync, rmSync, realpathSync, writeFileSync, } from "node:fs";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join, resolve } from "node:path";
4
4
  import process from "node:process";
@@ -6,7 +6,7 @@ import { fileURLToPath } from "node:url";
6
6
  import { managedBackendAgentInstructions, repairManagedBackendAgentInstructions, } from "./agents-contract.js";
7
7
  import { inferAttachProfile } from "./attach-profile.js";
8
8
  import { existingAttachmentState } from "./attach-installation-state.js";
9
- import { copyAttachContext, enableAttachEnforcement } from "./attach-staging.js";
9
+ import { copyAttachContext } from "./attach-staging.js";
10
10
  import { commitAttachTree } from "./attach-transaction.js";
11
11
  import { attachBlocked, attachUsage, parseAttachArgs, } from "./attach-command-contract.js";
12
12
  import { runBootstrapCommand } from "./bootstrap.js";
@@ -44,7 +44,11 @@ function runFreshAttach(projectDir, options) {
44
44
  const stagingDir = mkdtempSync(join(tmpdir(), "persona-attach-stage-"));
45
45
  try {
46
46
  copyAttachContext(projectDir, stagingDir);
47
- const bootstrap = runBootstrapCommand(["backend"], { projectDir: stagingDir, packageRoot }, "ph");
47
+ const bootstrap = runBootstrapCommand(["backend"], {
48
+ attachStagingOwnership: { kind: "fresh", projectRealPath: realpathSync(projectDir) },
49
+ projectDir: stagingDir,
50
+ packageRoot,
51
+ }, "ph");
48
52
  if (bootstrap.status !== 0) {
49
53
  return attachBlocked(bootstrap.stderr.trim() || "staging bootstrap failed.", "Resolve the reported project configuration problem, then retry attach.", "npx ph attach --yes");
50
54
  }
@@ -52,7 +56,6 @@ function runFreshAttach(projectDir, options) {
52
56
  if (inference.status !== 0) {
53
57
  return attachBlocked(inference.stderr.trim() || "instruction inference failed.", "Resolve the reported project inference problem, then retry attach.", "npx ph attach --yes");
54
58
  }
55
- enableAttachEnforcement(stagingDir);
56
59
  writeManagedAgents(stagingDir);
57
60
  commitAttachTree(projectDir, stagingDir, [".gitignore", ".opencode/opencode.json", ".persona", "AGENTS.md"], { onAfterCommitFile: options.onAfterCommitFile });
58
61
  return {
@@ -88,7 +91,11 @@ function runRepair(projectDir, options) {
88
91
  try {
89
92
  copyAttachContext(projectDir, stagingDir);
90
93
  cpSync(join(projectDir, ".persona"), join(stagingDir, ".persona"), { recursive: true });
91
- const bootstrap = runBootstrapCommand(["backend"], { projectDir: stagingDir, packageRoot: options.packageRoot }, "ph");
94
+ const bootstrap = runBootstrapCommand(["backend"], {
95
+ attachStagingOwnership: { kind: "repair", projectRealPath: realpathSync(projectDir) },
96
+ projectDir: stagingDir,
97
+ packageRoot: options.packageRoot,
98
+ }, "ph");
92
99
  if (bootstrap.status !== 0) {
93
100
  return attachBlocked(bootstrap.stderr.trim() || "staging repair failed.", "Resolve the reported project configuration problem, then retry repair.", "npx ph attach --repair --yes");
94
101
  }
@@ -96,7 +103,6 @@ function runRepair(projectDir, options) {
96
103
  if (inference.status !== 0) {
97
104
  return attachBlocked(inference.stderr.trim() || "instruction inference failed.", "Resolve the reported project inference problem, then retry repair.", "npx ph attach --repair --yes");
98
105
  }
99
- enableAttachEnforcement(stagingDir);
100
106
  const agentsPath = join(projectDir, "AGENTS.md");
101
107
  writeFileSync(join(stagingDir, "AGENTS.md"), existsSync(agentsPath)
102
108
  ? repairManagedBackendAgentInstructions(readFileSync(agentsPath, "utf8"))
@@ -1 +1 @@
1
- {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/cli/attach.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/cli/attach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { BootstrapWriteBoundary } from "../io/bootstrap-write-boundary.js";
2
+ export declare function enableAttachEnforcement(boundary: BootstrapWriteBoundary): void;
@@ -0,0 +1,36 @@
1
+ import { isRecord, stripJsonComments } from "../config/jsonc.js";
2
+ import { InitManifestError } from "./init-manifest.js";
3
+ const HARNESS_CONFIG_PATH = ".persona/harness.jsonc";
4
+ export function enableAttachEnforcement(boundary) {
5
+ const bytes = boundary.readProjectFile(HARNESS_CONFIG_PATH);
6
+ if (bytes === undefined) {
7
+ throw new InitManifestError(`${HARNESS_CONFIG_PATH} is missing; no files were changed.`);
8
+ }
9
+ let parsed;
10
+ try {
11
+ parsed = JSON.parse(stripJsonComments(bytes.toString("utf8")));
12
+ }
13
+ catch {
14
+ throw new InitManifestError(`${HARNESS_CONFIG_PATH} is malformed; no files were changed.`);
15
+ }
16
+ if (!isRecord(parsed)) {
17
+ throw new InitManifestError(`${HARNESS_CONFIG_PATH} must contain a JSON object; no files were changed.`);
18
+ }
19
+ const features = isRecord(parsed.features) ? parsed.features : {};
20
+ const enforce = isRecord(parsed.enforce) ? parsed.enforce : {};
21
+ boundary.writeProjectFileAtomically(HARNESS_CONFIG_PATH, `${JSON.stringify({
22
+ ...parsed,
23
+ features: { ...features, entrySteering: false, runtimeInjection: false },
24
+ enforce: {
25
+ ...enforce,
26
+ executeVerification: true,
27
+ idleContinuation: false,
28
+ ralphLoop: {
29
+ ...(isRecord(enforce.ralphLoop) ? enforce.ralphLoop : {}),
30
+ enabled: false,
31
+ },
32
+ systemConstitution: false,
33
+ },
34
+ }, null, 2)}\n`);
35
+ }
36
+ //# sourceMappingURL=bootstrap-attach-enforcement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-attach-enforcement.js","sourceRoot":"","sources":["../../src/cli/bootstrap-attach-enforcement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,mBAAmB,GAAG,wBAAwB,CAAA;AAEpD,MAAM,UAAU,uBAAuB,CAAC,QAAgC;IACtE,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAA;IAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,iBAAiB,CAAC,GAAG,mBAAmB,qCAAqC,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAiB,CAAC,GAAG,mBAAmB,uCAAuC,CAAC,CAAA;IAC5F,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,iBAAiB,CAAC,GAAG,mBAAmB,qDAAqD,CAAC,CAAA;IAC1G,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9D,QAAQ,CAAC,0BAA0B,CACjC,mBAAmB,EACnB,GAAG,IAAI,CAAC,SAAS,CAAC;QAChB,GAAG,MAAM;QACT,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE;QACxE,OAAO,EAAE;YACP,GAAG,OAAO;YACV,mBAAmB,EAAE,IAAI;YACzB,gBAAgB,EAAE,KAAK;YACvB,SAAS,EAAE;gBACT,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,OAAO,EAAE,KAAK;aACf;YACD,kBAAkB,EAAE,KAAK;SAC1B;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAChB,CAAA;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ export type BootstrapOptions = {
2
+ readonly attachStagingOwnership?: {
3
+ readonly kind: "fresh";
4
+ readonly projectRealPath: string;
5
+ } | {
6
+ readonly kind: "repair";
7
+ readonly projectRealPath: string;
8
+ };
9
+ readonly env?: Readonly<Record<string, string | undefined>>;
10
+ readonly projectDir?: string;
11
+ readonly packageRoot?: string;
12
+ };
13
+ export type BackendBootstrapFlags = {
14
+ readonly codeGraphEnabled: boolean;
15
+ readonly codeGraphPreview: boolean;
16
+ readonly codeNavPreview: boolean;
17
+ readonly developerMcpEnabled: boolean;
18
+ readonly force: boolean;
19
+ readonly lspPreview: boolean;
20
+ readonly multiAgentPreview: boolean;
21
+ readonly runtimeInjectionPreview: boolean;
22
+ readonly strict: boolean;
23
+ };
24
+ export type ParsedBootstrapArgs = ({
25
+ readonly kind: "backend";
26
+ } & BackendBootstrapFlags) | {
27
+ readonly kind: "help";
28
+ } | {
29
+ readonly kind: "invalid";
30
+ readonly message: string;
31
+ };
32
+ export declare const PERSONA_DIR = ".persona";
33
+ export declare const HARNESS_CONFIG_PATH = ".persona/harness.jsonc";
34
+ export declare const CONVENTIONS_DIR_PATH = ".persona/conventions/";
35
+ export declare const RULES_DIR_PATH = ".persona/rules/";
36
+ export declare const OPENCODE_CONFIG_PATH = ".opencode/opencode.json";
37
+ export declare const GITIGNORE_PATH = ".gitignore";
38
+ export declare const POLICY_OVERLAY_PATH = ".persona/policies/overlay.jsonc";
39
+ export declare const ROOT_AGENT_INSTRUCTIONS_PATH = "AGENTS.md";
40
+ export declare const BOOTSTRAP_PERSONA_FILES: readonly [".ph-init-manifest.json", "harness.jsonc", "project-profile.jsonc", "policies/overlay.jsonc", "policies/company/backend.md", "policies/personal/backend.md"];
41
+ export declare const BOOTSTRAP_WORKFLOW_FILES: readonly ["plan.md", "implementation-report.md", "review-report.md", "roles.md", "workflow-loop-state.json", "ralph-loop-state.json"];
42
+ export declare const BOOTSTRAP_TRANSACTION_OUTPUT_MANIFEST: readonly [".gitignore", ".opencode/opencode.json", "AGENTS.md", ".persona/.ph-init-manifest.json", ".persona/harness.jsonc", ".persona/conventions/**", ".persona/rules/**", ".persona/project-profile.jsonc", ".persona/policies/overlay.jsonc", ".persona/policies/company/backend.md", ".persona/policies/personal/backend.md", ".persona/workflow/plan.md", ".persona/workflow/implementation-report.md", ".persona/workflow/review-report.md", ".persona/workflow/roles.md", ".persona/workflow/workflow-loop-state.json", ".persona/workflow/ralph-loop-state.json", "temporary: .<leaf>.<uuid>.tmp", "temporary: Persona staging directory"];
43
+ export declare function strictModeSummaryLines(): readonly string[];
44
+ export declare function runtimeInjectionPreviewSummaryLines(): readonly string[];
45
+ export declare function multiAgentPreviewSummaryLines(): readonly string[];
46
+ export declare function codeNavPreviewSummaryLines(): readonly string[];
47
+ export declare function lspPreviewSummaryLines(): readonly string[];
48
+ export declare function developerMcpSummaryLines(flags: Pick<BackendBootstrapFlags, "codeGraphEnabled" | "developerMcpEnabled">): readonly string[];
49
+ export declare function bootstrapUsage(invocation?: string): string;
50
+ export declare function parseBootstrapArgs(args: readonly string[]): ParsedBootstrapArgs;
@@ -0,0 +1,206 @@
1
+ import { PROFILE_PATH } from "./intake-profile.js";
2
+ import { IMPLEMENTATION_REPORT_PATH, PLAN_PATH, REVIEW_REPORT_PATH } from "./plan.js";
3
+ export const PERSONA_DIR = ".persona";
4
+ export const HARNESS_CONFIG_PATH = ".persona/harness.jsonc";
5
+ export const CONVENTIONS_DIR_PATH = ".persona/conventions/";
6
+ export const RULES_DIR_PATH = ".persona/rules/";
7
+ export const OPENCODE_CONFIG_PATH = ".opencode/opencode.json";
8
+ export const GITIGNORE_PATH = ".gitignore";
9
+ export const POLICY_OVERLAY_PATH = ".persona/policies/overlay.jsonc";
10
+ export const ROOT_AGENT_INSTRUCTIONS_PATH = "AGENTS.md";
11
+ export const BOOTSTRAP_PERSONA_FILES = [
12
+ ".ph-init-manifest.json",
13
+ "harness.jsonc",
14
+ "project-profile.jsonc",
15
+ "policies/overlay.jsonc",
16
+ "policies/company/backend.md",
17
+ "policies/personal/backend.md",
18
+ ];
19
+ export const BOOTSTRAP_WORKFLOW_FILES = [
20
+ "plan.md",
21
+ "implementation-report.md",
22
+ "review-report.md",
23
+ "roles.md",
24
+ "workflow-loop-state.json",
25
+ "ralph-loop-state.json",
26
+ ];
27
+ export const BOOTSTRAP_TRANSACTION_OUTPUT_MANIFEST = [
28
+ ".gitignore",
29
+ ".opencode/opencode.json",
30
+ "AGENTS.md",
31
+ ".persona/.ph-init-manifest.json",
32
+ ".persona/harness.jsonc",
33
+ ".persona/conventions/**",
34
+ ".persona/rules/**",
35
+ ".persona/project-profile.jsonc",
36
+ ".persona/policies/overlay.jsonc",
37
+ ".persona/policies/company/backend.md",
38
+ ".persona/policies/personal/backend.md",
39
+ ".persona/workflow/plan.md",
40
+ ".persona/workflow/implementation-report.md",
41
+ ".persona/workflow/review-report.md",
42
+ ".persona/workflow/roles.md",
43
+ ".persona/workflow/workflow-loop-state.json",
44
+ ".persona/workflow/ralph-loop-state.json",
45
+ "temporary: .<leaf>.<uuid>.tmp",
46
+ "temporary: Persona staging directory",
47
+ ];
48
+ export function strictModeSummaryLines() {
49
+ return [
50
+ "Strict mode:",
51
+ "- sets enforce.executeVerification: true, so PH runs the project verification command during closure/finish; expect toolchain command cost",
52
+ "- does not enable features.runtimeInjection or enforce.systemConstitution; each remains independently opt-in",
53
+ "- does not enable enforce.writeDeny, enforce.idleContinuation, or enforce.ralphLoop; those stay explicit opt-ins",
54
+ "- still no generated app product-quality certification or closure guarantee",
55
+ ];
56
+ }
57
+ export function runtimeInjectionPreviewSummaryLines() {
58
+ return [
59
+ "Runtime injection preview:",
60
+ "- opt-in only via --runtime-injection-preview; default init/bootstrap keeps PH as gate-first CLI/evidence tooling",
61
+ "- enables model-facing PH guidance such as target-file injection, workflow prompt rails, continuation text, and system constitution where supported",
62
+ "- parked after the Stage 9 banner-only H1 measurement; resume only with an approved long-session post-compaction rail-retention measurement",
63
+ "- measured 10-pair OpenCode A/B was worse for runtime injection on the bounded fixture set; keep this as guidance preview, not a token-saving or product-efficacy claim",
64
+ "- closure/check/archive/finish gates remain authoritative whether runtime injection is on or off",
65
+ ];
66
+ }
67
+ export function multiAgentPreviewSummaryLines() {
68
+ return [
69
+ "Role Checklist Relay preview:",
70
+ "- opt-in only via --multi-agent-preview; the flag/config name is kept as a compatibility alias",
71
+ "- default bootstrap stays single-session and does not add relay guidance",
72
+ "- writes role checklist guidance for test-writer, implementer, and reviewer",
73
+ "- writes OpenCode subagent config entries as optional host capability when OpenCode chooses to use them",
74
+ "- does not guarantee or enforce host subagent invocation, auto-fill reports, auto-archive tickets, or weaken finish",
75
+ "- if host subagent invocation is unavailable, the main session completes the current role checklist and records the limitation",
76
+ ];
77
+ }
78
+ export function codeNavPreviewSummaryLines() {
79
+ return [
80
+ "Code-nav MCP preview:",
81
+ "- opt-in only via --code-nav-preview; default bootstrap does not register the PH code-nav MCP server",
82
+ "- writes OpenCode mcp.persona-harness-code-nav for the packaged PH code-nav MCP server",
83
+ "- exposes bounded lookup tools as persona-harness-code-nav_search_text, persona-harness-code-nav_status, and persona-harness-code-nav_ast_grep_availability",
84
+ "- no codegraph/indexer and no token-saving claim",
85
+ ];
86
+ }
87
+ export function lspPreviewSummaryLines() {
88
+ return [
89
+ "LSP MCP preview:",
90
+ "- opt-in only via --lsp-preview; default bootstrap does not register the PH LSP wrapper",
91
+ "- writes OpenCode mcp.persona-harness-lsp for the packaged PH LSP MCP wrapper",
92
+ "- proxies to a real external LSP MCP only when @theupsider/lsp-mcp and a Java LSP binary are available",
93
+ "- otherwise keeps MCP protocol alive with an honest lsp_status unavailable facade",
94
+ "- no auto-install, no code-nav relabeling, and no token-saving or product-quality claim",
95
+ ];
96
+ }
97
+ export function developerMcpSummaryLines(flags) {
98
+ if (!flags.developerMcpEnabled)
99
+ return [];
100
+ const codeGraphLine = flags.codeGraphEnabled
101
+ ? "- codegraph is opt-in via --codegraph-preview and registered through the PH wrapper; if CodeGraph is unavailable, the wrapper keeps MCP protocol alive with an honest status-only MCP facade"
102
+ : "- codegraph is not registered by default; use --codegraph-preview only when you explicitly want the PH CodeGraph wrapper";
103
+ return [
104
+ "Developer MCP bundle:",
105
+ "- remote grep_app and context7 are registered by default for backend bootstrap; disable all bundle entries with --no-developer-mcp",
106
+ "- registers remote grep_app and context7 MCP entries using OpenCode remote URL config",
107
+ codeGraphLine,
108
+ "- PH does not run codegraph init; create .codegraph intentionally when you want an index",
109
+ "- git_bash and lsp are not registered: PH has no packaged OpenCode-compatible MCP surface for them in this release",
110
+ "- external developer tooling only; no PH-owned codegraph, OMO replacement, or token-saving claim",
111
+ ];
112
+ }
113
+ export function bootstrapUsage(invocation = "ph") {
114
+ return [
115
+ `Usage: ${invocation} bootstrap backend [--force] [--strict] [--runtime-injection-preview] [--multi-agent-preview] [--code-nav-preview] [--lsp-preview] [--codegraph-preview] [--no-codegraph] [--no-developer-mcp]`,
116
+ "",
117
+ "Prepares the backend Persona Harness workflow for AI implementation.",
118
+ "",
119
+ "What it fills when missing:",
120
+ `- ${HARNESS_CONFIG_PATH}`,
121
+ `- ${CONVENTIONS_DIR_PATH}`,
122
+ `- ${RULES_DIR_PATH}`,
123
+ `- ${OPENCODE_CONFIG_PATH}`,
124
+ `- ${GITIGNORE_PATH}`,
125
+ `- ${ROOT_AGENT_INSTRUCTIONS_PATH}`,
126
+ `- ${PROFILE_PATH}`,
127
+ `- ${POLICY_OVERLAY_PATH}`,
128
+ `- ${PLAN_PATH}`,
129
+ `- ${IMPLEMENTATION_REPORT_PATH}`,
130
+ `- ${REVIEW_REPORT_PATH}`,
131
+ "",
132
+ "Scope:",
133
+ "- Java/Spring backend workflow convenience",
134
+ "- no generated app product-quality certification",
135
+ "- no frontend/infra workflow",
136
+ "",
137
+ ...strictModeSummaryLines(),
138
+ "",
139
+ ...runtimeInjectionPreviewSummaryLines(),
140
+ "",
141
+ ...multiAgentPreviewSummaryLines(),
142
+ "",
143
+ ...codeNavPreviewSummaryLines(),
144
+ "",
145
+ ...lspPreviewSummaryLines(),
146
+ "",
147
+ ...developerMcpSummaryLines({ codeGraphEnabled: false, developerMcpEnabled: true }),
148
+ ].join("\n");
149
+ }
150
+ export function parseBootstrapArgs(args) {
151
+ if (args.length === 0 || args[0] === "--help" || args[0] === "-h" || args[0] === "help")
152
+ return { kind: "help" };
153
+ if (args[0] !== "backend")
154
+ return { kind: "invalid", message: `Unknown bootstrap command: ${args[0]}` };
155
+ let force = false;
156
+ let strict = false;
157
+ let multiAgentPreview = false;
158
+ let codeNavPreview = false;
159
+ let codeGraphEnabled = false;
160
+ let codeGraphPreview = false;
161
+ let developerMcpEnabled = true;
162
+ let lspPreview = false;
163
+ let runtimeInjectionPreview = false;
164
+ for (const arg of args.slice(1)) {
165
+ if (arg === "--force")
166
+ force = true;
167
+ else if (arg === "--strict")
168
+ strict = true;
169
+ else if (arg === "--runtime-injection-preview")
170
+ runtimeInjectionPreview = true;
171
+ else if (arg === "--multi-agent-preview")
172
+ multiAgentPreview = true;
173
+ else if (arg === "--code-nav-preview")
174
+ codeNavPreview = true;
175
+ else if (arg === "--lsp-preview")
176
+ lspPreview = true;
177
+ else if (arg === "--codegraph-preview") {
178
+ developerMcpEnabled = true;
179
+ codeGraphEnabled = true;
180
+ codeGraphPreview = true;
181
+ }
182
+ else if (arg === "--no-codegraph") {
183
+ codeGraphEnabled = false;
184
+ codeGraphPreview = false;
185
+ }
186
+ else if (arg === "--no-developer-mcp") {
187
+ developerMcpEnabled = false;
188
+ codeGraphPreview = false;
189
+ }
190
+ else
191
+ return { kind: "invalid", message: `Unknown option: ${arg}` };
192
+ }
193
+ return {
194
+ kind: "backend",
195
+ codeGraphEnabled,
196
+ codeGraphPreview,
197
+ codeNavPreview,
198
+ developerMcpEnabled,
199
+ force,
200
+ lspPreview,
201
+ multiAgentPreview,
202
+ runtimeInjectionPreview,
203
+ strict,
204
+ };
205
+ }
206
+ //# sourceMappingURL=bootstrap-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-contract.js","sourceRoot":"","sources":["../../src/cli/bootstrap-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { BootstrapWriteBoundary } from "../io/bootstrap-write-boundary.js";
2
+ import { type VerifiedInitOwnership } from "./init-ownership.js";
3
+ export type BootstrapInitOwnershipChanges = {
4
+ readonly harness: boolean;
5
+ readonly openCode: boolean;
6
+ readonly profile: boolean;
7
+ };
8
+ export type BootstrapInitOwnershipContext = {
9
+ readonly kind: "attach-fresh-staging";
10
+ readonly projectRealPath: string;
11
+ } | {
12
+ readonly kind: "attach-repair-staging";
13
+ readonly projectRealPath: string;
14
+ } | {
15
+ readonly kind: "current-project";
16
+ };
17
+ export declare function prepareBootstrapInitOwnership(boundary: BootstrapWriteBoundary, changes: BootstrapInitOwnershipChanges, context: BootstrapInitOwnershipContext): VerifiedInitOwnership;
18
+ export declare function finalizeBootstrapInitOwnership(boundary: BootstrapWriteBoundary, verified: VerifiedInitOwnership, changes: BootstrapInitOwnershipChanges, context: BootstrapInitOwnershipContext): void;
@@ -0,0 +1,63 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { createInitManifest, INIT_MANIFEST_RELATIVE_PATH, InitManifestError, parseInitManifestBytes, serializeInitManifest, sha256Bytes, } from "./init-manifest.js";
3
+ import { verifyInitOwnership } from "./init-ownership.js";
4
+ import { PROFILE_PATH } from "./intake-profile.js";
5
+ const HARNESS_CONFIG_PATH = ".persona/harness.jsonc";
6
+ const OPENCODE_CONFIG_PATH = ".opencode/opencode.json";
7
+ export function prepareBootstrapInitOwnership(boundary, changes, context) {
8
+ const manifestBytes = boundary.readProjectFile(INIT_MANIFEST_RELATIVE_PATH);
9
+ if (manifestBytes === undefined) {
10
+ throw new InitManifestError("Init ownership manifest is missing; no files were changed.");
11
+ }
12
+ const profileBytes = boundary.readProjectFile(PROFILE_PATH);
13
+ const verified = verifyInitOwnership(parseInitManifestBytes(manifestBytes), {
14
+ ownedFileCheck: context.kind === "attach-repair-staging"
15
+ ? { kind: "attach-repair-staging" }
16
+ : { kind: "exact" },
17
+ profileBinding: changes.profile
18
+ ? { kind: "replacement-authorized" }
19
+ : { kind: "exact", digest: profileBytes === undefined ? null : sha256Bytes(profileBytes) },
20
+ projectRealPath: context.kind === "attach-repair-staging"
21
+ ? context.projectRealPath
22
+ : realpathSync("."),
23
+ readOwnedFile: (relativePath) => boundary.readProjectFile(relativePath),
24
+ });
25
+ for (const path of [
26
+ ...(changes.harness ? [HARNESS_CONFIG_PATH] : []),
27
+ ...(changes.openCode ? [OPENCODE_CONFIG_PATH] : []),
28
+ ]) {
29
+ if (!verified.ownedFiles.has(path)) {
30
+ throw new InitManifestError(`Init ownership manifest does not own bootstrap target ${path}.`);
31
+ }
32
+ }
33
+ return verified;
34
+ }
35
+ export function finalizeBootstrapInitOwnership(boundary, verified, changes, context) {
36
+ const allowedChanges = new Set([
37
+ ...(changes.harness ? [HARNESS_CONFIG_PATH] : []),
38
+ ...(changes.openCode ? [OPENCODE_CONFIG_PATH] : []),
39
+ ]);
40
+ const files = verified.manifest.files.map((entry) => {
41
+ const current = boundary.readProjectFile(entry.path);
42
+ if (current === undefined) {
43
+ throw new InitManifestError(`Init ownership conflict at ${entry.path}; no files were changed.`);
44
+ }
45
+ const digest = sha256Bytes(current);
46
+ if (digest !== entry.digest && !allowedChanges.has(entry.path)) {
47
+ throw new InitManifestError(`Init ownership conflict at ${entry.path}; no files were changed.`);
48
+ }
49
+ return { ...entry, digest };
50
+ });
51
+ const profileBytes = boundary.readProjectFile(PROFILE_PATH);
52
+ const profileDigest = profileBytes === undefined ? null : sha256Bytes(profileBytes);
53
+ if (!changes.profile && profileDigest !== verified.manifest.project.profileDigest) {
54
+ throw new InitManifestError("Project profile binding mismatch; no files were changed.");
55
+ }
56
+ const manifest = createInitManifest(verified.manifest.package, {
57
+ ...verified.manifest.project,
58
+ profileDigest,
59
+ realPath: context.kind === "current-project" ? verified.manifest.project.realPath : context.projectRealPath,
60
+ }, files);
61
+ boundary.writeProjectFileAtomically(INIT_MANIFEST_RELATIVE_PATH, serializeInitManifest(manifest));
62
+ }
63
+ //# sourceMappingURL=bootstrap-init-ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-init-ownership.js","sourceRoot":"","sources":["../../src/cli/bootstrap-init-ownership.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliRunResult } from "./bearshell.js";
2
+ import { type BackendBootstrapFlags } from "./bootstrap-contract.js";
3
+ export declare function backendBootstrapSuccess(flags: BackendBootstrapFlags, actions: readonly string[], skipped: readonly string[]): CliRunResult;
@@ -0,0 +1,48 @@
1
+ import { codeNavPreviewSummaryLines, CONVENTIONS_DIR_PATH, developerMcpSummaryLines, GITIGNORE_PATH, HARNESS_CONFIG_PATH, lspPreviewSummaryLines, multiAgentPreviewSummaryLines, OPENCODE_CONFIG_PATH, POLICY_OVERLAY_PATH, ROOT_AGENT_INSTRUCTIONS_PATH, RULES_DIR_PATH, runtimeInjectionPreviewSummaryLines, strictModeSummaryLines, } from "./bootstrap-contract.js";
2
+ import { PROFILE_PATH } from "./intake-profile.js";
3
+ import { IMPLEMENTATION_REPORT_PATH, PLAN_PATH, REVIEW_REPORT_PATH } from "./plan.js";
4
+ export function backendBootstrapSuccess(flags, actions, skipped) {
5
+ return {
6
+ status: 0,
7
+ stdout: [
8
+ "Persona Harness backend bootstrap complete.",
9
+ "",
10
+ "Actions:",
11
+ ...(actions.length > 0 ? actions.map((action) => `- ${action}`) : ["- no changes needed"]),
12
+ "",
13
+ "Skipped:",
14
+ ...(skipped.length > 0 ? skipped.map((item) => `- ${item}`) : ["- none"]),
15
+ "",
16
+ ...(flags.strict ? [...strictModeSummaryLines(), ""] : []),
17
+ ...(flags.runtimeInjectionPreview ? [...runtimeInjectionPreviewSummaryLines(), ""] : []),
18
+ ...(flags.multiAgentPreview ? [...multiAgentPreviewSummaryLines(), ""] : []),
19
+ ...(flags.codeNavPreview ? [...codeNavPreviewSummaryLines(), ""] : []),
20
+ ...(flags.lspPreview ? [...lspPreviewSummaryLines(), ""] : []),
21
+ ...(flags.developerMcpEnabled ? [...developerMcpSummaryLines(flags), ""] : []),
22
+ "Ready backend bootstrap files:",
23
+ `- ${HARNESS_CONFIG_PATH}`,
24
+ `- ${CONVENTIONS_DIR_PATH}`,
25
+ `- ${RULES_DIR_PATH}`,
26
+ `- ${OPENCODE_CONFIG_PATH}`,
27
+ `- ${GITIGNORE_PATH}`,
28
+ `- ${ROOT_AGENT_INSTRUCTIONS_PATH}`,
29
+ `- ${PROFILE_PATH}`,
30
+ `- ${POLICY_OVERLAY_PATH}`,
31
+ `- ${PLAN_PATH}`,
32
+ `- ${IMPLEMENTATION_REPORT_PATH}`,
33
+ `- ${REVIEW_REPORT_PATH}`,
34
+ "- .persona/workflow/workflow-loop-state.json",
35
+ "- .persona/workflow/ralph-loop-state.json",
36
+ "",
37
+ "Next:",
38
+ "- Ask the AI agent to run `npx ph workflow implement` before implementation.",
39
+ "- Short TUI requests like `README.md 보고 구현해줘` should use the workflow rail, not ad hoc commands.",
40
+ "",
41
+ "Scope:",
42
+ "- workflow convenience only",
43
+ "- no generated app product-quality certification",
44
+ ].join("\n") + "\n",
45
+ stderr: "",
46
+ };
47
+ }
48
+ //# sourceMappingURL=bootstrap-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-output.js","sourceRoot":"","sources":["../../src/cli/bootstrap-output.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,6BAA6B,EAC7B,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,EAC5B,cAAc,EACd,mCAAmC,EACnC,sBAAsB,GAEvB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAErF,MAAM,UAAU,uBAAuB,CACrC,KAA4B,EAC5B,OAA0B,EAC1B,OAA0B;IAE1B,OAAO;QACL,MAAM,EAAE,CAAC;QACT,MAAM,EAAE;YACN,6CAA6C;YAC7C,EAAE;YACF,UAAU;YACV,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;YAC1F,EAAE;YACF,UAAU;YACV,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzE,EAAE;YACF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAAG,mCAAmC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,6BAA6B,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,0BAA0B,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,gCAAgC;YAChC,KAAK,mBAAmB,EAAE;YAC1B,KAAK,oBAAoB,EAAE;YAC3B,KAAK,cAAc,EAAE;YACrB,KAAK,oBAAoB,EAAE;YAC3B,KAAK,cAAc,EAAE;YACrB,KAAK,4BAA4B,EAAE;YACnC,KAAK,YAAY,EAAE;YACnB,KAAK,mBAAmB,EAAE;YAC1B,KAAK,SAAS,EAAE;YAChB,KAAK,0BAA0B,EAAE;YACjC,KAAK,kBAAkB,EAAE;YACzB,8CAA8C;YAC9C,2CAA2C;YAC3C,EAAE;YACF,OAAO;YACP,8EAA8E;YAC9E,kGAAkG;YAClG,EAAE;YACF,QAAQ;YACR,6BAA6B;YAC7B,kDAAkD;SACnD,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;QACnB,MAAM,EAAE,EAAE;KACX,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CliRunResult } from "./bearshell.js";
2
+ import { type BackendBootstrapFlags, type BootstrapOptions } from "./bootstrap-contract.js";
3
+ export declare function runBackendBootstrap(options: BootstrapOptions, flags: BackendBootstrapFlags): CliRunResult;