@honua/mcp-server 0.1.2-beta.0 → 0.1.8-beta.0

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 (117) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +232 -9
  3. package/dist/src/certification/admin-parity.d.ts +96 -0
  4. package/dist/src/certification/admin-parity.d.ts.map +1 -0
  5. package/dist/src/certification/admin-parity.js +235 -0
  6. package/dist/src/certification/census-fixture-client.d.ts.map +1 -1
  7. package/dist/src/certification/census-fixture-client.js +5 -0
  8. package/dist/src/certification/certifier.d.ts +1 -1
  9. package/dist/src/certification/certifier.d.ts.map +1 -1
  10. package/dist/src/certification/certifier.js +28 -20
  11. package/dist/src/certification/cli.js +1 -1
  12. package/dist/src/certification/cql2.d.ts +24 -0
  13. package/dist/src/certification/cql2.d.ts.map +1 -0
  14. package/dist/src/certification/cql2.js +354 -0
  15. package/dist/src/certification/fixtures.d.ts +8 -0
  16. package/dist/src/certification/fixtures.d.ts.map +1 -1
  17. package/dist/src/certification/fixtures.js +26 -10
  18. package/dist/src/certification/ogc-data.d.ts +30 -0
  19. package/dist/src/certification/ogc-data.d.ts.map +1 -0
  20. package/dist/src/certification/ogc-data.js +726 -0
  21. package/dist/src/certification/ogc-fixture-client.d.ts +4 -0
  22. package/dist/src/certification/ogc-fixture-client.d.ts.map +1 -0
  23. package/dist/src/certification/ogc-fixture-client.js +190 -0
  24. package/dist/src/certification/target.d.ts +10 -1
  25. package/dist/src/certification/target.d.ts.map +1 -1
  26. package/dist/src/certification/target.js +63 -28
  27. package/dist/src/credential-endpoint.d.ts +3 -0
  28. package/dist/src/credential-endpoint.d.ts.map +1 -0
  29. package/dist/src/credential-endpoint.js +24 -0
  30. package/dist/src/eval/cli.js +6 -3
  31. package/dist/src/eval/corpus.d.ts +7 -0
  32. package/dist/src/eval/corpus.d.ts.map +1 -1
  33. package/dist/src/eval/corpus.js +12 -0
  34. package/dist/src/eval/ogc-corpus.d.ts +3 -0
  35. package/dist/src/eval/ogc-corpus.d.ts.map +1 -0
  36. package/dist/src/eval/ogc-corpus.js +437 -0
  37. package/dist/src/eval/runner.d.ts +6 -0
  38. package/dist/src/eval/runner.d.ts.map +1 -1
  39. package/dist/src/eval/runner.js +21 -7
  40. package/dist/src/helpers.d.ts +8 -13
  41. package/dist/src/helpers.d.ts.map +1 -1
  42. package/dist/src/helpers.js +7 -35
  43. package/dist/src/index.d.ts +36 -8
  44. package/dist/src/index.d.ts.map +1 -1
  45. package/dist/src/index.js +55 -18
  46. package/dist/src/neutral/errors.d.ts +73 -0
  47. package/dist/src/neutral/errors.d.ts.map +1 -0
  48. package/dist/src/neutral/errors.js +112 -0
  49. package/dist/src/neutral/filter.d.ts +108 -0
  50. package/dist/src/neutral/filter.d.ts.map +1 -0
  51. package/dist/src/neutral/filter.js +271 -0
  52. package/dist/src/neutral/query.d.ts +101 -0
  53. package/dist/src/neutral/query.d.ts.map +1 -0
  54. package/dist/src/neutral/query.js +180 -0
  55. package/dist/src/neutral/result.d.ts +33 -0
  56. package/dist/src/neutral/result.d.ts.map +1 -0
  57. package/dist/src/neutral/result.js +38 -0
  58. package/dist/src/neutral/source-ref.d.ts +126 -0
  59. package/dist/src/neutral/source-ref.d.ts.map +1 -0
  60. package/dist/src/neutral/source-ref.js +267 -0
  61. package/dist/src/nl-map-control.d.ts.map +1 -1
  62. package/dist/src/proxy.d.ts.map +1 -1
  63. package/dist/src/proxy.js +29 -14
  64. package/dist/src/release/zero-to-map-checkpoint.d.ts +34 -0
  65. package/dist/src/release/zero-to-map-checkpoint.d.ts.map +1 -0
  66. package/dist/src/release/zero-to-map-checkpoint.js +369 -0
  67. package/dist/src/release/zero-to-map-cli.d.ts +51 -0
  68. package/dist/src/release/zero-to-map-cli.d.ts.map +1 -0
  69. package/dist/src/release/zero-to-map-cli.js +880 -0
  70. package/dist/src/release/zero-to-map-provision.d.ts +37 -0
  71. package/dist/src/release/zero-to-map-provision.d.ts.map +1 -0
  72. package/dist/src/release/zero-to-map-provision.js +177 -0
  73. package/dist/src/release/zero-to-map.d.ts +296 -0
  74. package/dist/src/release/zero-to-map.d.ts.map +1 -0
  75. package/dist/src/release/zero-to-map.js +1069 -0
  76. package/dist/src/tools/admin-install-local.d.ts +30 -0
  77. package/dist/src/tools/admin-install-local.d.ts.map +1 -0
  78. package/dist/src/tools/admin-install-local.js +22 -0
  79. package/dist/src/tools/control-plane-command.d.ts +99 -0
  80. package/dist/src/tools/control-plane-command.d.ts.map +1 -0
  81. package/dist/src/tools/control-plane-command.js +180 -0
  82. package/dist/src/tools/count-features.d.ts +85 -11
  83. package/dist/src/tools/count-features.d.ts.map +1 -1
  84. package/dist/src/tools/count-features.js +49 -31
  85. package/dist/src/tools/describe-layer.d.ts +30 -6
  86. package/dist/src/tools/describe-layer.d.ts.map +1 -1
  87. package/dist/src/tools/describe-layer.js +99 -8
  88. package/dist/src/tools/docs-search.d.ts +100 -0
  89. package/dist/src/tools/docs-search.d.ts.map +1 -0
  90. package/dist/src/tools/docs-search.js +381 -0
  91. package/dist/src/tools/get-extent.d.ts +69 -11
  92. package/dist/src/tools/get-extent.d.ts.map +1 -1
  93. package/dist/src/tools/get-extent.js +28 -46
  94. package/dist/src/tools/list-services.d.ts +7 -0
  95. package/dist/src/tools/list-services.d.ts.map +1 -1
  96. package/dist/src/tools/list-services.js +8 -1
  97. package/dist/src/tools/list-sources.d.ts +44 -0
  98. package/dist/src/tools/list-sources.d.ts.map +1 -0
  99. package/dist/src/tools/list-sources.js +138 -0
  100. package/dist/src/tools/query-features.d.ts +99 -19
  101. package/dist/src/tools/query-features.d.ts.map +1 -1
  102. package/dist/src/tools/query-features.js +38 -45
  103. package/dist/src/tools/statistics.d.ts +80 -12
  104. package/dist/src/tools/statistics.d.ts.map +1 -1
  105. package/dist/src/tools/statistics.js +56 -23
  106. package/package.json +37 -8
  107. package/release/zero-to-map/README.md +174 -0
  108. package/release/zero-to-map/configs/claude-code.mcp.json +11 -0
  109. package/release/zero-to-map/configs/claude-desktop.json +11 -0
  110. package/release/zero-to-map/configs/cursor.json +11 -0
  111. package/release/zero-to-map/contracts/aws-ecs-provision-binding.schema.json +59 -0
  112. package/release/zero-to-map/contracts/checkpoint.schema.json +152 -0
  113. package/release/zero-to-map/contracts/console-receipt.schema.json +150 -0
  114. package/release/zero-to-map/contracts/esri-gp-mcp.v1.json +73 -0
  115. package/release/zero-to-map/fixtures/parcels.geojson +33 -0
  116. package/release/zero-to-map/fixtures/zoning.geojson +24 -0
  117. package/release/zero-to-map/journey.v1.json +1248 -0
@@ -0,0 +1,37 @@
1
+ export declare const AWS_ECS_PROVISION_BINDING_SCHEMA: "honua.aws-ecs.provision-binding/v1";
2
+ export declare const ZERO_TO_MAP_ACCESS_GRANTS: readonly ["admin:read", "admin:write"];
3
+ export interface ProvisionedAccessCredentialReceipt {
4
+ readonly id: string;
5
+ readonly requestedGrants: readonly string[];
6
+ readonly effectiveGrants: readonly string[];
7
+ readonly status: "active";
8
+ readonly canAuthenticate: true;
9
+ readonly referenceType: "aws-secrets-manager";
10
+ readonly referenceDigestSha256: string;
11
+ }
12
+ export interface AwsEcsProvisionBinding {
13
+ readonly schemaVersion: typeof AWS_ECS_PROVISION_BINDING_SCHEMA;
14
+ readonly target: "aws-ecs";
15
+ readonly status: "ready";
16
+ readonly candidateId: string;
17
+ readonly releaseId: string;
18
+ readonly endpoint: string;
19
+ readonly adminKeySecretRef: string;
20
+ readonly accessCredential: ProvisionedAccessCredentialReceipt;
21
+ readonly serverImage: string;
22
+ readonly components: Readonly<Record<"honua-server" | "honua-devops" | "honua-iac", string>>;
23
+ readonly checks: Readonly<Record<"terraform-plan" | "terraform-apply" | "readiness" | "admin-mcp-handoff", "passed">>;
24
+ readonly evidence: {
25
+ readonly url: string;
26
+ readonly sha256: string;
27
+ };
28
+ }
29
+ /** Strictly parse the producer-owned pre-teardown binding without importing a second provisioner. */
30
+ export declare function parseAwsEcsProvisionBinding(value: unknown): AwsEcsProvisionBinding;
31
+ export declare function assertAwsEcsProvisionBindings(binding: AwsEcsProvisionBinding, expected: {
32
+ readonly candidateId: string;
33
+ readonly releaseId: string;
34
+ readonly mcpUrl: string;
35
+ }): void;
36
+ export declare function publicHttps(value: unknown, path: string): string;
37
+ //# sourceMappingURL=zero-to-map-provision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zero-to-map-provision.d.ts","sourceRoot":"","sources":["../../../src/release/zero-to-map-provision.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gCAAgC,EAAG,oCAA6C,CAAC;AAC9F,eAAO,MAAM,yBAAyB,wCAAyC,CAAC;AAEhF,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,aAAa,EAAE,OAAO,gCAAgC,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,GAAG,cAAc,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7F,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,GAAG,iBAAiB,GAAG,WAAW,GAAG,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtH,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,qGAAqG;AACrG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAkIlF;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9F,IAAI,CAON;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA2BhE"}
@@ -0,0 +1,177 @@
1
+ import { createHash } from "node:crypto";
2
+ export const AWS_ECS_PROVISION_BINDING_SCHEMA = "honua.aws-ecs.provision-binding/v1";
3
+ export const ZERO_TO_MAP_ACCESS_GRANTS = ["admin:read", "admin:write"];
4
+ /** Strictly parse the producer-owned pre-teardown binding without importing a second provisioner. */
5
+ export function parseAwsEcsProvisionBinding(value) {
6
+ const binding = object(value, "AWS ECS provision binding");
7
+ exactKeys(binding, [
8
+ "schemaVersion",
9
+ "target",
10
+ "status",
11
+ "candidateId",
12
+ "releaseId",
13
+ "endpoint",
14
+ "adminKeySecretRef",
15
+ "accessCredential",
16
+ "serverImage",
17
+ "components",
18
+ "checks",
19
+ "evidence",
20
+ ], "AWS ECS provision binding");
21
+ if (binding.schemaVersion !== AWS_ECS_PROVISION_BINDING_SCHEMA) {
22
+ throw new Error(`AWS ECS provision binding schemaVersion must be ${AWS_ECS_PROVISION_BINDING_SCHEMA}`);
23
+ }
24
+ if (binding.target !== "aws-ecs" || binding.status !== "ready") {
25
+ throw new Error("AWS ECS provision binding must target aws-ecs with ready status");
26
+ }
27
+ const candidateId = pattern(binding.candidateId, /^manifest-sha256:[0-9a-f]{64}$/, "AWS ECS provision binding candidateId");
28
+ const releaseId = text(binding.releaseId, "AWS ECS provision binding releaseId");
29
+ const endpoint = publicHttps(binding.endpoint, "AWS ECS provision binding endpoint");
30
+ const adminKeySecretRef = pattern(binding.adminKeySecretRef, /^arn:aws(?:-us-gov|-cn)?:secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:[A-Za-z0-9/_+=.@-]+$/, "AWS ECS provision binding adminKeySecretRef");
31
+ const accessCredential = object(binding.accessCredential, "AWS ECS provision binding accessCredential");
32
+ exactKeys(accessCredential, ["id", "requestedGrants", "effectiveGrants", "status", "canAuthenticate", "referenceType", "referenceDigestSha256"], "AWS ECS provision binding accessCredential");
33
+ const requestedGrants = stringList(accessCredential.requestedGrants, "AWS ECS provision binding accessCredential.requestedGrants");
34
+ const effectiveGrants = stringList(accessCredential.effectiveGrants, "AWS ECS provision binding accessCredential.effectiveGrants");
35
+ if (!sameStrings(requestedGrants, effectiveGrants)) {
36
+ throw new Error("AWS ECS provision binding requested and effective grants must match");
37
+ }
38
+ if (!sameStrings(requestedGrants, ZERO_TO_MAP_ACCESS_GRANTS)) {
39
+ throw new Error("AWS ECS provision binding access credential is not scoped to the required release grants");
40
+ }
41
+ if (accessCredential.status !== "active" || accessCredential.canAuthenticate !== true) {
42
+ throw new Error("AWS ECS provision binding access credential must be active and able to authenticate");
43
+ }
44
+ if (accessCredential.referenceType !== "aws-secrets-manager") {
45
+ throw new Error("AWS ECS provision binding access credential referenceType must be aws-secrets-manager");
46
+ }
47
+ const referenceDigestSha256 = pattern(accessCredential.referenceDigestSha256, /^[0-9a-f]{64}$/, "AWS ECS provision binding accessCredential.referenceDigestSha256");
48
+ const expectedReferenceDigest = createHash("sha256").update(adminKeySecretRef, "utf8").digest("hex");
49
+ if (referenceDigestSha256 !== expectedReferenceDigest) {
50
+ throw new Error("AWS ECS provision binding access credential reference digest does not match its secret reference");
51
+ }
52
+ const serverImage = pattern(binding.serverImage, /^ghcr\.io\/honua-io\/honua-server:[^@]+@sha256:[0-9a-f]{64}$/, "AWS ECS provision binding serverImage");
53
+ const components = object(binding.components, "AWS ECS provision binding components");
54
+ exactKeys(components, ["honua-server", "honua-devops", "honua-iac"], "AWS ECS provision binding components");
55
+ const checks = object(binding.checks, "AWS ECS provision binding checks");
56
+ exactKeys(checks, ["terraform-plan", "terraform-apply", "readiness", "admin-mcp-handoff"], "AWS ECS provision binding checks");
57
+ for (const name of ["terraform-plan", "terraform-apply", "readiness", "admin-mcp-handoff"]) {
58
+ if (checks[name] !== "passed")
59
+ throw new Error(`AWS ECS provision binding check ${name} must be passed`);
60
+ }
61
+ const evidence = object(binding.evidence, "AWS ECS provision binding evidence");
62
+ exactKeys(evidence, ["url", "sha256"], "AWS ECS provision binding evidence");
63
+ return {
64
+ schemaVersion: AWS_ECS_PROVISION_BINDING_SCHEMA,
65
+ target: "aws-ecs",
66
+ status: "ready",
67
+ candidateId,
68
+ releaseId,
69
+ endpoint,
70
+ adminKeySecretRef,
71
+ accessCredential: {
72
+ id: pattern(accessCredential.id, /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i, "AWS ECS provision binding accessCredential.id"),
73
+ requestedGrants,
74
+ effectiveGrants,
75
+ status: "active",
76
+ canAuthenticate: true,
77
+ referenceType: "aws-secrets-manager",
78
+ referenceDigestSha256,
79
+ },
80
+ serverImage,
81
+ components: {
82
+ "honua-server": revision(components["honua-server"], "AWS ECS provision binding honua-server SHA"),
83
+ "honua-devops": revision(components["honua-devops"], "AWS ECS provision binding honua-devops SHA"),
84
+ "honua-iac": revision(components["honua-iac"], "AWS ECS provision binding honua-iac SHA"),
85
+ },
86
+ checks: {
87
+ "terraform-plan": "passed",
88
+ "terraform-apply": "passed",
89
+ readiness: "passed",
90
+ "admin-mcp-handoff": "passed",
91
+ },
92
+ evidence: {
93
+ url: publicHttps(evidence.url, "AWS ECS provision binding evidence.url"),
94
+ sha256: pattern(evidence.sha256, /^[0-9a-f]{64}$/, "AWS ECS provision binding evidence.sha256"),
95
+ },
96
+ };
97
+ }
98
+ export function assertAwsEcsProvisionBindings(binding, expected) {
99
+ if (binding.candidateId !== expected.candidateId)
100
+ throw new Error("AWS ECS provision candidateId mismatch");
101
+ if (binding.releaseId !== expected.releaseId)
102
+ throw new Error("AWS ECS provision releaseId mismatch");
103
+ const expectedMcp = `${binding.endpoint.replace(/\/$/, "")}/mcp`;
104
+ if (normalizeUrl(expected.mcpUrl) !== normalizeUrl(expectedMcp)) {
105
+ throw new Error("AWS ECS provision endpoint does not match --mcp-url");
106
+ }
107
+ }
108
+ function normalizeUrl(value) {
109
+ const url = new URL(value);
110
+ if (url.protocol !== "https:" || url.username || url.password || !url.hostname) {
111
+ throw new Error("AWS ECS --mcp-url must be a public HTTPS URL without credentials");
112
+ }
113
+ url.hash = "";
114
+ return url.toString().replace(/\/$/, "");
115
+ }
116
+ export function publicHttps(value, path) {
117
+ const result = text(value, path);
118
+ const url = new URL(result);
119
+ if (url.protocol !== "https:" || url.username || url.password || !url.hostname) {
120
+ throw new Error(`${path} must be a public HTTPS URL without credentials`);
121
+ }
122
+ const host = url.hostname
123
+ .toLowerCase()
124
+ .replace(/^\[|\]$/g, "")
125
+ .replace(/\.$/, "");
126
+ if (host === "localhost" ||
127
+ host.endsWith(".localhost") ||
128
+ host.endsWith(".local") ||
129
+ host === "0.0.0.0" ||
130
+ host === "::1" ||
131
+ host.startsWith("127.") ||
132
+ host.startsWith("10.") ||
133
+ host.startsWith("169.254.") ||
134
+ host.startsWith("192.168.") ||
135
+ /^172\.(?:1[6-9]|2[0-9]|3[01])\./.test(host) ||
136
+ /^(?:fc|fd)[0-9a-f]{2}:/.test(host) ||
137
+ /^fe[89ab][0-9a-f]:/.test(host)) {
138
+ throw new Error(`${path} must not use a loopback or private endpoint`);
139
+ }
140
+ return result;
141
+ }
142
+ function object(value, path) {
143
+ if (!value || typeof value !== "object" || Array.isArray(value))
144
+ throw new Error(`${path} must be an object`);
145
+ return value;
146
+ }
147
+ function exactKeys(value, allowed, path) {
148
+ const keys = Object.keys(value);
149
+ const missing = allowed.filter((key) => !keys.includes(key));
150
+ const extras = keys.filter((key) => !allowed.includes(key));
151
+ if (missing.length > 0 || extras.length > 0) {
152
+ throw new Error(`${path} fields are not exact (missing: ${missing.join(", ") || "none"}; extra: ${extras.join(", ") || "none"})`);
153
+ }
154
+ }
155
+ function text(value, path) {
156
+ if (typeof value !== "string" || !value)
157
+ throw new Error(`${path} must be a non-empty string`);
158
+ return value;
159
+ }
160
+ function pattern(value, regex, path) {
161
+ const result = text(value, path);
162
+ if (!regex.test(result))
163
+ throw new Error(`${path} has an invalid format`);
164
+ return result;
165
+ }
166
+ function revision(value, path) {
167
+ return pattern(value, /^[0-9a-f]{40}$/, path);
168
+ }
169
+ function stringList(value, path) {
170
+ if (!Array.isArray(value) || value.length === 0 || value.some((item) => typeof item !== "string" || !item)) {
171
+ throw new Error(`${path} must be a non-empty string array`);
172
+ }
173
+ return value;
174
+ }
175
+ function sameStrings(left, right) {
176
+ return [...new Set(left)].sort().join("\n") === [...new Set(right)].sort().join("\n");
177
+ }
@@ -0,0 +1,296 @@
1
+ export declare const ZERO_TO_MAP_PLAN_SCHEMA: "honua.zero-to-map.plan/v1";
2
+ export declare const ZERO_TO_MAP_RECEIPT_SCHEMA: "honua.zero-to-map.receipt/v1";
3
+ export declare const ZERO_TO_MAP_CONSOLE_RECEIPT_SCHEMA: "honua.zero-to-map.console-receipt/v1";
4
+ export declare const ZERO_TO_MAP_CONSOLE_RECEIPT_REQUEST_SCHEMA: "honua.zero-to-map.console-receipt-request/v1";
5
+ export declare const ZERO_TO_MAP_CATALOG_RECEIPT_SCHEMA: "honua.zero-to-map.catalog/v1";
6
+ /**
7
+ * A server MCP profile whose members are additive to the default 432-tool base
8
+ * roster (47 static plus 385 `honua_admin_*` tools).
9
+ *
10
+ * The zero-to-map candidate must advertise `base` plus `analysis` plus
11
+ * `esri-gp`. Each profile is verified independently and the expected catalog
12
+ * total is derived by summing the base roster and the enabled profile rosters;
13
+ * it is never written down as a single magic number, so enabling or retiring a
14
+ * profile cannot silently disagree with the assertion.
15
+ */
16
+ export interface ZeroToMapProfileRoster {
17
+ readonly id: string;
18
+ /** Tools this profile contributes on top of the base roster. */
19
+ readonly memberCount: number;
20
+ /**
21
+ * Members whose exact tool names are proven by an artifact in this
22
+ * repository (the checked-in Esri GP MCP contract and the journey plan).
23
+ * Any further members are counted, digested and reported, but deliberately
24
+ * not name-asserted: naming tools the server has never published would be a
25
+ * fabricated assertion rather than evidence.
26
+ */
27
+ readonly confirmedMembers: readonly string[];
28
+ /**
29
+ * Tool-name prefixes that attribute an advertised additive tool to this
30
+ * profile. A profile with no prefixes is the fallback bucket for additive
31
+ * tools that no other profile claims.
32
+ */
33
+ readonly namePrefixes: readonly string[];
34
+ }
35
+ /** Identifier of the always-required default roster. */
36
+ export declare const ZERO_TO_MAP_BASE_PROFILE_ID = "base";
37
+ /**
38
+ * Additive profiles the zero-to-map journey requires, in receipt order.
39
+ *
40
+ * `analysis` contributes six members; only `honua_buffer_features` - the
41
+ * MCP-native dataset Buffer verb the journey actually executes - is confirmed
42
+ * by an in-repo artifact. `esri-gp` contributes exactly the three tools named
43
+ * by `release/zero-to-map/contracts/esri-gp-mcp.v1.json`.
44
+ */
45
+ export declare const ZERO_TO_MAP_ADDITIVE_PROFILES: readonly ZeroToMapProfileRoster[];
46
+ /** Profiles the candidate must advertise before the journey is executable. */
47
+ export declare const ZERO_TO_MAP_REQUIRED_PROFILES: readonly string[];
48
+ /** Tools the base roster contributes: 47 static + 385 published Admin projections. */
49
+ export declare const ZERO_TO_MAP_BASE_PROFILE_TOOL_COUNT: number;
50
+ /** Derived candidate total. Never hardcode this; it follows from the enabled profiles. */
51
+ export declare const ZERO_TO_MAP_EXPECTED_TOTAL_TOOL_COUNT: number;
52
+ export interface ZeroToMapProfileReceipt {
53
+ readonly id: string;
54
+ readonly expectedMembers: number;
55
+ readonly advertisedMembers: number;
56
+ readonly confirmedMembers: readonly string[];
57
+ /**
58
+ * Advertised names this preflight can attribute to the profile. Empty-prefix
59
+ * profiles cannot be separated from the base static surface by name, so only
60
+ * their confirmed members appear here.
61
+ */
62
+ readonly nameResolvedMembers: readonly string[];
63
+ /** SHA-256 over the sorted advertised names this profile was verified against. */
64
+ readonly rosterSha256: string;
65
+ }
66
+ /** Catalog preflight evidence retained on the journey receipt. */
67
+ export interface ZeroToMapCatalogReceipt {
68
+ readonly schemaVersion: typeof ZERO_TO_MAP_CATALOG_RECEIPT_SCHEMA;
69
+ readonly activeProfiles: readonly string[];
70
+ /** Derived: base roster plus every enabled additive profile roster. */
71
+ readonly expectedTotalTools: number;
72
+ readonly advertisedTotalTools: number;
73
+ readonly baseStaticTools: number;
74
+ readonly baseAdminTools: number;
75
+ readonly auditedExclusions: number;
76
+ readonly profiles: readonly ZeroToMapProfileReceipt[];
77
+ /** SHA-256 over every advertised tool name, sorted. */
78
+ readonly catalogSha256: string;
79
+ /** SHA-256 over the advertised `honua_admin_*` names, sorted. */
80
+ readonly adminRosterSha256: string;
81
+ /**
82
+ * SHA-256 over the advertised non-Admin names that no name-resolvable profile
83
+ * claimed, sorted. This is the base static surface plus the unnamed members
84
+ * of the fallback profile, which the server does not yet let us separate.
85
+ */
86
+ readonly staticRosterSha256: string;
87
+ /** Generated exclusion-roster digest the base roster was audited against. */
88
+ readonly exclusionRosterSha256: string;
89
+ }
90
+ export type JourneyActionKind = "cli" | "mcp" | "mcp-resource" | "gpserver" | "receipt" | "http";
91
+ export type JourneyActionStatus = "passed" | "blocked" | "failed" | "skipped";
92
+ export type JourneyStatus = "passed" | "blocked" | "failed";
93
+ export type JourneyTarget = "local-docker" | "aws-ecs";
94
+ export interface JourneyCapture {
95
+ readonly variable: string;
96
+ /** Candidate JSON pointers, checked in order. */
97
+ readonly pointers: readonly string[];
98
+ /** Optional pointer(s) within a JSON document stored at a candidate pointer. */
99
+ readonly parsedPointers?: readonly string[];
100
+ /** Optional contract value that the captured response must equal. */
101
+ readonly equals?: string | number | boolean;
102
+ }
103
+ interface JourneyActionBase {
104
+ readonly id: string;
105
+ readonly title: string;
106
+ readonly kind: JourneyActionKind;
107
+ readonly captures?: readonly JourneyCapture[];
108
+ /** Response fields that must remain absent (for example pre-approval public URLs). */
109
+ readonly forbiddenPointers?: readonly string[];
110
+ }
111
+ export interface JourneyCliAction extends JourneyActionBase {
112
+ readonly kind: "cli";
113
+ readonly args: readonly string[];
114
+ }
115
+ export interface JourneyMcpAction extends JourneyActionBase {
116
+ readonly kind: "mcp";
117
+ readonly tool: string;
118
+ readonly arguments: Readonly<Record<string, unknown>>;
119
+ }
120
+ export interface JourneyResourceWait {
121
+ /** JSON pointer inside the resource's JSON text body. */
122
+ readonly pointer: string;
123
+ /** The successful terminal value. */
124
+ readonly equals: string;
125
+ /** All terminal values; any terminal value other than equals fails immediately. */
126
+ readonly terminal: readonly string[];
127
+ readonly pollIntervalMs: number;
128
+ readonly deadlineMs: number;
129
+ }
130
+ /** Read or poll one MCP resource and retain the unmodified resources/read envelope. */
131
+ export interface JourneyMcpResourceAction extends JourneyActionBase {
132
+ readonly kind: "mcp-resource";
133
+ readonly uri: string;
134
+ readonly waitFor?: JourneyResourceWait;
135
+ }
136
+ /**
137
+ * An Esri-compatible GPServer invocation through the SDK's unified process
138
+ * runner. Parameters stay schema-driven: the Buffer alias keeps Honua's
139
+ * advertised geometry.buffer parameter contract.
140
+ */
141
+ export interface JourneyGpServerAction extends JourneyActionBase {
142
+ readonly kind: "gpserver";
143
+ readonly serviceId: string;
144
+ readonly taskName: string;
145
+ readonly processId: string;
146
+ readonly parameters: Readonly<Record<string, unknown>>;
147
+ readonly resultNames: readonly string[];
148
+ }
149
+ export interface JourneyReceiptAction extends JourneyActionBase {
150
+ readonly kind: "receipt";
151
+ readonly receiptSchema: string;
152
+ /** Receipt pointer -> journey template equality checks. */
153
+ readonly matches: Readonly<Record<string, string>>;
154
+ /** Receipt pointers that must resolve to non-empty identity/evidence values. */
155
+ readonly requiredPointers: readonly string[];
156
+ /** Pairs of receipt pointers whose values must be identical. */
157
+ readonly equalPointers?: readonly (readonly [string, string])[];
158
+ }
159
+ export interface JourneyHttpAction extends JourneyActionBase {
160
+ readonly kind: "http";
161
+ readonly url: string;
162
+ readonly expectedStatus: number;
163
+ }
164
+ export type JourneyAction = JourneyCliAction | JourneyMcpAction | JourneyMcpResourceAction | JourneyGpServerAction | JourneyReceiptAction | JourneyHttpAction;
165
+ export interface JourneyStage {
166
+ readonly number: number;
167
+ readonly id: string;
168
+ readonly title: string;
169
+ readonly actions: readonly JourneyAction[];
170
+ }
171
+ export interface ZeroToMapPlan {
172
+ readonly schemaVersion: typeof ZERO_TO_MAP_PLAN_SCHEMA;
173
+ readonly journeyId: string;
174
+ readonly releaseContract: string;
175
+ readonly fixtures: readonly string[];
176
+ /** Traceable dependencies; these are not runtime blockers by themselves. */
177
+ readonly dependencyRefs: readonly string[];
178
+ readonly variables?: Readonly<Record<string, unknown>>;
179
+ readonly stages: readonly JourneyStage[];
180
+ }
181
+ export interface JourneyExecutionResult {
182
+ readonly value?: unknown;
183
+ /** Safe, non-secret evidence suitable for the release receipt. */
184
+ readonly evidence?: Readonly<Record<string, unknown>>;
185
+ }
186
+ export interface JourneyMcpToolDescriptor {
187
+ readonly name: string;
188
+ readonly inputSchema: Readonly<Record<string, unknown>>;
189
+ }
190
+ export interface JourneyAdapter {
191
+ runCli(args: readonly string[]): Promise<JourneyExecutionResult>;
192
+ listTools(): Promise<readonly JourneyMcpToolDescriptor[]>;
193
+ callTool(tool: string, args: Readonly<Record<string, unknown>>): Promise<JourneyExecutionResult>;
194
+ readResource(action: JourneyMcpResourceAction): Promise<JourneyExecutionResult>;
195
+ runGpServer(action: JourneyGpServerAction): Promise<JourneyExecutionResult>;
196
+ readReceipt(actionId: string): Promise<JourneyExecutionResult | undefined>;
197
+ checkHttp(url: string, expectedStatus: number): Promise<JourneyExecutionResult>;
198
+ close?(): Promise<void>;
199
+ }
200
+ export interface RunJourneyOptions {
201
+ /** Live mutations are refused unless this is explicitly true. */
202
+ readonly execute: boolean;
203
+ /** Selects the target-specific boundary for checkpoint-safe fixture inputs. */
204
+ readonly target?: JourneyTarget;
205
+ readonly variables?: Readonly<Record<string, unknown>>;
206
+ readonly now?: () => Date;
207
+ /** Previously completed live stages restored from a verified checkpoint. */
208
+ readonly resume?: JourneyResumeState;
209
+ /** Called only at the external Console receipt boundary, before later work is skipped. */
210
+ readonly onExternalReceiptMissing?: (snapshot: JourneyPauseSnapshot) => Promise<void> | void;
211
+ }
212
+ export interface JourneyActionReceipt {
213
+ readonly id: string;
214
+ readonly kind: JourneyActionKind;
215
+ readonly status: JourneyActionStatus;
216
+ readonly startedAt: string;
217
+ readonly finishedAt: string;
218
+ readonly code?: string;
219
+ readonly message?: string;
220
+ readonly evidence?: Readonly<Record<string, unknown>>;
221
+ readonly captures?: Readonly<Record<string, unknown>>;
222
+ }
223
+ export interface JourneyStageReceipt {
224
+ readonly number: number;
225
+ readonly id: string;
226
+ readonly title: string;
227
+ readonly status: JourneyActionStatus;
228
+ readonly actions: readonly JourneyActionReceipt[];
229
+ }
230
+ export interface JourneyResumePoint {
231
+ readonly stageId: string;
232
+ readonly actionId: string;
233
+ }
234
+ export interface JourneyReceiptRequest {
235
+ readonly schemaVersion: typeof ZERO_TO_MAP_CONSOLE_RECEIPT_REQUEST_SCHEMA;
236
+ readonly actionId: string;
237
+ readonly receiptSchema: string;
238
+ readonly matches: Readonly<Record<string, unknown>>;
239
+ readonly requiredPointers: readonly string[];
240
+ readonly equalPointers: readonly (readonly [string, string])[];
241
+ }
242
+ /** Secret-free execution state nested inside the CLI checkpoint. */
243
+ export interface JourneyResumeState {
244
+ readonly startedAt: string;
245
+ readonly capturedVariables: Readonly<Record<string, unknown>>;
246
+ readonly completedStages: readonly JourneyStageReceipt[];
247
+ readonly resumeAt: JourneyResumePoint;
248
+ /**
249
+ * Catalog preflight evidence gathered before the pause.
250
+ *
251
+ * Every successful live journey pauses at the mandatory Console checkpoint
252
+ * and resumes at stage 6, and stages 6 and 7 contain no MCP action -- so the
253
+ * resumed run has nothing to re-derive this from. Without carrying it across
254
+ * the boundary the final receipt, which overwrites the pre-pause one, would
255
+ * silently drop the active-profile and roster-digest evidence from exactly
256
+ * the runs that succeeded.
257
+ */
258
+ readonly catalog?: ZeroToMapCatalogReceipt;
259
+ }
260
+ export interface JourneyPauseSnapshot extends JourneyResumeState {
261
+ readonly consoleReceiptRequest: JourneyReceiptRequest;
262
+ }
263
+ export interface ZeroToMapReceipt {
264
+ readonly schemaVersion: typeof ZERO_TO_MAP_RECEIPT_SCHEMA;
265
+ readonly journeyId: string;
266
+ readonly releaseContract: string;
267
+ readonly mode: "contract" | "live";
268
+ readonly status: JourneyStatus;
269
+ readonly startedAt: string;
270
+ readonly finishedAt: string;
271
+ readonly dependencyRefs: readonly string[];
272
+ /** Runtime blocking receipts only. Always empty when status is passed. */
273
+ readonly blockers: readonly string[];
274
+ /** Catalog preflight evidence: active profiles and roster digests. Live mode only. */
275
+ readonly catalog?: ZeroToMapCatalogReceipt;
276
+ readonly stages: readonly JourneyStageReceipt[];
277
+ }
278
+ export declare class JourneyBlockedError extends Error {
279
+ readonly code: string;
280
+ constructor(message: string, code?: string);
281
+ }
282
+ /** Parse and validate the checked-in release plan without executing it. */
283
+ export declare function parseZeroToMapPlan(value: unknown): ZeroToMapPlan;
284
+ /**
285
+ * Run a plan, recording every blocked/skipped step. Contract mode never calls
286
+ * the adapter and therefore cannot be mistaken for a live release execution.
287
+ */
288
+ export declare function runZeroToMapJourney(plan: ZeroToMapPlan, adapter: JourneyAdapter, options: RunJourneyOptions): Promise<ZeroToMapReceipt>;
289
+ /**
290
+ * Validate that a checkpoint contains exactly the passed stage prefix for this
291
+ * plan. Returning the resume stage index lets the executor preserve the prior
292
+ * receipts without replaying any mutating action.
293
+ */
294
+ export declare function validateJourneyResume(plan: ZeroToMapPlan, resume: JourneyResumeState, executionVariables?: Readonly<Record<string, unknown>>, target?: JourneyTarget): number;
295
+ export {};
296
+ //# sourceMappingURL=zero-to-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zero-to-map.d.ts","sourceRoot":"","sources":["../../../src/release/zero-to-map.ts"],"names":[],"mappings":"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"}