@privos_ai/app-server 0.10.2 → 0.10.3
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/dist/cli/commands/lint.d.ts +4 -1
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +18 -4
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/manifest-lint-cli.js +4 -1
- package/dist/manifest-lint-cli.js.map +1 -1
- package/dist/manifest-lint-instant.d.ts +55 -0
- package/dist/manifest-lint-instant.d.ts.map +1 -0
- package/dist/manifest-lint-instant.js +174 -0
- package/dist/manifest-lint-instant.js.map +1 -0
- package/package.json +1 -1
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* `privos-app lint [manifestPath]` — identical behavior to the original
|
|
3
3
|
* `privos-app-lint` binary (byte-identical stdout/stderr and exit code).
|
|
4
4
|
* `src/manifest-lint-cli.ts` delegates here so the compatibility alias never
|
|
5
|
-
* drifts from this implementation.
|
|
5
|
+
* drifts from this implementation. Runs the base manifest lint plus, when
|
|
6
|
+
* the manifest declares `executionMode: "INSTANT"`, the Phase 11 INSTANT
|
|
7
|
+
* rule set (`manifest-lint-instant.ts`) — dispatched here, the single call
|
|
8
|
+
* site both bins share, so the alias can never drift out of sync with it.
|
|
6
9
|
*/
|
|
7
10
|
export declare function runLint(argv: readonly string[]): number;
|
|
8
11
|
//# sourceMappingURL=lint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lint.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAuBvD"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { lintInstantManifest } from '../../manifest-lint-instant.js';
|
|
3
4
|
import { lintManifest } from '../../manifest-tools.js';
|
|
4
5
|
/**
|
|
5
6
|
* `privos-app lint [manifestPath]` — identical behavior to the original
|
|
6
7
|
* `privos-app-lint` binary (byte-identical stdout/stderr and exit code).
|
|
7
8
|
* `src/manifest-lint-cli.ts` delegates here so the compatibility alias never
|
|
8
|
-
* drifts from this implementation.
|
|
9
|
+
* drifts from this implementation. Runs the base manifest lint plus, when
|
|
10
|
+
* the manifest declares `executionMode: "INSTANT"`, the Phase 11 INSTANT
|
|
11
|
+
* rule set (`manifest-lint-instant.ts`) — dispatched here, the single call
|
|
12
|
+
* site both bins share, so the alias can never drift out of sync with it.
|
|
9
13
|
*/
|
|
10
14
|
export function runLint(argv) {
|
|
11
15
|
const manifestPath = path.resolve(argv[0] || 'privos-app.json');
|
|
@@ -17,8 +21,18 @@ export function runLint(argv) {
|
|
|
17
21
|
console.error(JSON.stringify({ valid: false, errors: [`Unable to read valid JSON from ${manifestPath}`] }, null, 2));
|
|
18
22
|
return 1;
|
|
19
23
|
}
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
const base = lintManifest(manifest);
|
|
25
|
+
const instant = lintInstantManifest(manifest, { manifestDir: path.dirname(manifestPath) });
|
|
26
|
+
const errors = [...base.errors, ...instant.errors];
|
|
27
|
+
const valid = base.valid && instant.errors.length === 0;
|
|
28
|
+
const output = {
|
|
29
|
+
manifestPath,
|
|
30
|
+
...base,
|
|
31
|
+
errors,
|
|
32
|
+
valid,
|
|
33
|
+
...(instant.warnings.length ? { warnings: instant.warnings } : {}),
|
|
34
|
+
};
|
|
35
|
+
console.log(JSON.stringify(output, null, 2));
|
|
36
|
+
return valid ? 0 : 1;
|
|
23
37
|
}
|
|
24
38
|
//# sourceMappingURL=lint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/cli/commands/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/cli/commands/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,IAAuB;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC;IAChE,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,kCAAkC,YAAY,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACrH,OAAO,CAAC,CAAC;IACV,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG;QACd,YAAY;QACZ,GAAG,IAAI;QACP,MAAM;QACN,KAAK;QACL,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -45,6 +45,8 @@ export { createPinnedPortalJwksResolverV3, createPublisherRuntimeTrustProvisioni
|
|
|
45
45
|
export type { PublisherPortalJwksResolutionV3, PublisherPortalJwksResolverV3, PublisherRuntimeTrustActiveEvidenceV3, PublisherRuntimeTrustDurableStoreV3, PublisherRuntimeTrustEvidenceV3, PublisherRuntimeTrustOperationV3, PublisherRuntimeTrustPreparedEvidenceV3, PublisherRuntimeTrustProvisioningRequestV3, PublisherRuntimeTrustProvisioningRouterOptionsV3, PublisherRuntimeTrustStoreMutationV3, } from './workload/publisher-runtime-trust.js';
|
|
46
46
|
export { canonicalJson, canonicalJsonValue, lintManifest, lintManifestV2, sha256CanonicalJson, SUPPORTED_MANIFEST_SCHEMA_VERSIONS, } from './manifest-tools.js';
|
|
47
47
|
export type { ManifestLintResult } from './manifest-tools.js';
|
|
48
|
+
export { INSTANT_EXECUTION_MODE, INSTANT_UI_ENTRY_POINT_SLOTS, lintInstantManifest, } from './manifest-lint-instant.js';
|
|
49
|
+
export type { InstantManifestAgent, InstantManifestLintResult, InstantManifestUi, InstantUiEntryPoint, InstantUiEntryPointSlot, } from './manifest-lint-instant.js';
|
|
48
50
|
export { serveBuiltUi } from './ui/serve-built-ui.js';
|
|
49
51
|
export type { ServeBuiltUi, ServeBuiltUiOptions } from './ui/serve-built-ui.js';
|
|
50
52
|
export { MCP_UI_ASSET_FILENAME_RE, MCP_UI_ASSET_EXTENSIONS, deriveAssetUriPrefix, } from './ui/asset-filename-rule.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,7 @@ export { DEFAULT_WORKLOAD_SOCKET, WorkloadIdentityClient, WorkloadIdentityError,
|
|
|
23
23
|
export { dispatchRejectionCode, dispatchRejectionReason, BoundedRuntimeDispatchReplayConsumerV3, assertRuntimeDispatchRelayAffinityV3, assertRuntimeDispatchTrustConfigurationV3, extractRuntimeDispatchRelayEnvelopeV3, isExactRuntimeReadinessRpcV3, isUnsignedRuntimeReadinessRpcV3, parseRuntimeDispatchTrustV3Json, sha256RuntimeDispatchBodyV3, verifyClusterDispatchAssertionV3, verifyDispatchAssertion, verifyRuntimeDispatchAssertionV3, } from './workload/dispatch-assertion.js';
|
|
24
24
|
export { createPinnedPortalJwksResolverV3, createPublisherRuntimeTrustProvisioningRouterV3, SingleProcessFilePublisherRuntimeTrustStoreV3, } from './workload/publisher-runtime-trust.js';
|
|
25
25
|
export { canonicalJson, canonicalJsonValue, lintManifest, lintManifestV2, sha256CanonicalJson, SUPPORTED_MANIFEST_SCHEMA_VERSIONS, } from './manifest-tools.js';
|
|
26
|
+
export { INSTANT_EXECUTION_MODE, INSTANT_UI_ENTRY_POINT_SLOTS, lintInstantManifest, } from './manifest-lint-instant.js';
|
|
26
27
|
export { serveBuiltUi } from './ui/serve-built-ui.js';
|
|
27
28
|
export { MCP_UI_ASSET_FILENAME_RE, MCP_UI_ASSET_EXTENSIONS, deriveAssetUriPrefix, } from './ui/asset-filename-rule.js';
|
|
28
29
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// Compatibility alias for `privos-app lint`: kept as its own bin entry
|
|
3
3
|
// (`privos-app-lint`) with byte-identical output and exit code, delegating
|
|
4
|
-
// to the same implementation so the two can never drift.
|
|
4
|
+
// to the same implementation so the two can never drift. That includes the
|
|
5
|
+
// Phase 11 executionMode: "INSTANT" rule set — `runLint` (cli/commands/lint.ts)
|
|
6
|
+
// dispatches to `lintInstantManifest` (manifest-lint-instant.ts), so both this
|
|
7
|
+
// alias and the `privos-app lint` subcommand pick it up identically.
|
|
5
8
|
import { runLint } from './cli/commands/lint.js';
|
|
6
9
|
process.exit(runLint(process.argv.slice(2)));
|
|
7
10
|
//# sourceMappingURL=manifest-lint-cli.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-lint-cli.js","sourceRoot":"","sources":["../src/manifest-lint-cli.ts"],"names":[],"mappings":";AACA,uEAAuE;AACvE,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"manifest-lint-cli.js","sourceRoot":"","sources":["../src/manifest-lint-cli.ts"],"names":[],"mappings":";AACA,uEAAuE;AACvE,2EAA2E;AAC3E,2EAA2E;AAC3E,gFAAgF;AAChF,+EAA+E;AAC/E,qEAAqE;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lint rules for `executionMode: "INSTANT"` manifests — frontend-only PrivOS
|
|
3
|
+
* apps with no runtime (Phase 11: "Instant MCP Apps"). Every check here is
|
|
4
|
+
* enforced only when the manifest declares `executionMode: "INSTANT"`; any
|
|
5
|
+
* other manifest is untouched by this module.
|
|
6
|
+
*
|
|
7
|
+
* The optional `agent` section caps mirror the size caps privos-hub's
|
|
8
|
+
* `sanitizeAgentData` enforces server-side
|
|
9
|
+
* (`server/services/agent-export-import/sanitize-agent-data.ts`), which
|
|
10
|
+
* *truncates* silently. Here a cap breach is a publish-time lint error naming
|
|
11
|
+
* the field instead — a publisher should never discover a truncated persona
|
|
12
|
+
* only after install. The two repos do not share a package, so the numbers
|
|
13
|
+
* below are kept in sync by hand.
|
|
14
|
+
*/
|
|
15
|
+
export declare const INSTANT_EXECUTION_MODE: "INSTANT";
|
|
16
|
+
/** The three room surfaces the Hub models a UI-only entry point for. */
|
|
17
|
+
export declare const INSTANT_UI_ENTRY_POINT_SLOTS: readonly ["roomTab", "sidebar", "standalone"];
|
|
18
|
+
export type InstantUiEntryPointSlot = (typeof INSTANT_UI_ENTRY_POINT_SLOTS)[number];
|
|
19
|
+
export type InstantUiEntryPoint = Readonly<{
|
|
20
|
+
title: string;
|
|
21
|
+
/** `ui://<appId>/<file>.html` — `<appId>` must equal the manifest's `name`. */
|
|
22
|
+
resourceUri: string;
|
|
23
|
+
}>;
|
|
24
|
+
export type InstantManifestUi = Readonly<{
|
|
25
|
+
entryPoints: Readonly<Partial<Record<InstantUiEntryPointSlot, InstantUiEntryPoint>>>;
|
|
26
|
+
}>;
|
|
27
|
+
export type InstantManifestAgent = Readonly<{
|
|
28
|
+
purpose: string;
|
|
29
|
+
instructions?: string;
|
|
30
|
+
personality?: string;
|
|
31
|
+
knowledge?: readonly string[];
|
|
32
|
+
/**
|
|
33
|
+
* Bounded at install time by the Hub against the workspace's bot
|
|
34
|
+
* permission catalog (`buildBotKeyCatalogPatterns`) minus
|
|
35
|
+
* `BOT_BEARER_DENIED_V1_PREFIXES` — a manifest can only narrow. Not part
|
|
36
|
+
* of `sanitizeAgentData`'s fixed field set, so no length cap applies here.
|
|
37
|
+
*/
|
|
38
|
+
hubTools?: readonly string[];
|
|
39
|
+
}>;
|
|
40
|
+
export type InstantManifestLintResult = Readonly<{
|
|
41
|
+
errors: readonly string[];
|
|
42
|
+
warnings: readonly string[];
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Lints the INSTANT-only rules on top of `lintManifest`'s base checks. A
|
|
46
|
+
* no-op (empty errors/warnings) for any manifest that does not declare
|
|
47
|
+
* `executionMode: "INSTANT"`. `options.manifestDir` — the directory holding
|
|
48
|
+
* `privos-app.json` — enables the Dockerfile-presence warning; omit it to
|
|
49
|
+
* skip that check (e.g. when linting an in-memory manifest with no project
|
|
50
|
+
* directory on disk).
|
|
51
|
+
*/
|
|
52
|
+
export declare function lintInstantManifest(manifest: unknown, options?: {
|
|
53
|
+
manifestDir?: string;
|
|
54
|
+
}): InstantManifestLintResult;
|
|
55
|
+
//# sourceMappingURL=manifest-lint-instant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-lint-instant.d.ts","sourceRoot":"","sources":["../src/manifest-lint-instant.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,sBAAsB,EAAG,SAAkB,CAAC;AAEzD,wEAAwE;AACxE,eAAO,MAAM,4BAA4B,+CAAgD,CAAC;AAC1F,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACxC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;CACrF,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAChD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC;AA4IH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,yBAAyB,CAYxH"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Lint rules for `executionMode: "INSTANT"` manifests — frontend-only PrivOS
|
|
5
|
+
* apps with no runtime (Phase 11: "Instant MCP Apps"). Every check here is
|
|
6
|
+
* enforced only when the manifest declares `executionMode: "INSTANT"`; any
|
|
7
|
+
* other manifest is untouched by this module.
|
|
8
|
+
*
|
|
9
|
+
* The optional `agent` section caps mirror the size caps privos-hub's
|
|
10
|
+
* `sanitizeAgentData` enforces server-side
|
|
11
|
+
* (`server/services/agent-export-import/sanitize-agent-data.ts`), which
|
|
12
|
+
* *truncates* silently. Here a cap breach is a publish-time lint error naming
|
|
13
|
+
* the field instead — a publisher should never discover a truncated persona
|
|
14
|
+
* only after install. The two repos do not share a package, so the numbers
|
|
15
|
+
* below are kept in sync by hand.
|
|
16
|
+
*/
|
|
17
|
+
export const INSTANT_EXECUTION_MODE = 'INSTANT';
|
|
18
|
+
/** The three room surfaces the Hub models a UI-only entry point for. */
|
|
19
|
+
export const INSTANT_UI_ENTRY_POINT_SLOTS = ['roomTab', 'sidebar', 'standalone'];
|
|
20
|
+
/**
|
|
21
|
+
* Fields a runtime app may declare that an INSTANT app never may — there is
|
|
22
|
+
* no container, no relay, no OCI image, so nothing configures one.
|
|
23
|
+
*/
|
|
24
|
+
const FORBIDDEN_INSTANT_FIELDS = [
|
|
25
|
+
'tools',
|
|
26
|
+
'serverUrl',
|
|
27
|
+
'runtimeTrustProvisioningUrl',
|
|
28
|
+
'port',
|
|
29
|
+
'resources',
|
|
30
|
+
'volumes',
|
|
31
|
+
'stateless',
|
|
32
|
+
];
|
|
33
|
+
// Kept identical to privos-hub's sanitizeAgentData caps by hand (see module
|
|
34
|
+
// doc comment above) — a lint pass here must reject exactly what the Hub
|
|
35
|
+
// would otherwise truncate silently.
|
|
36
|
+
const AGENT_PURPOSE_MAX_LEN = 2000;
|
|
37
|
+
const AGENT_PERSONALITY_MAX_LEN = 2000;
|
|
38
|
+
const AGENT_INSTRUCTIONS_MAX_LEN = 5000;
|
|
39
|
+
const AGENT_KNOWLEDGE_MAX_ITEMS = 20;
|
|
40
|
+
const AGENT_KNOWLEDGE_ITEM_MAX_LEN = 500;
|
|
41
|
+
const ENTRY_POINT_RESOURCE_URI_RE = /^ui:\/\/([A-Za-z0-9][A-Za-z0-9._-]*)\/([A-Za-z0-9][A-Za-z0-9._-]*\.html)$/;
|
|
42
|
+
function isRecord(value) {
|
|
43
|
+
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
44
|
+
}
|
|
45
|
+
function collectForbiddenFieldErrors(manifest) {
|
|
46
|
+
return FORBIDDEN_INSTANT_FIELDS
|
|
47
|
+
.filter((field) => manifest[field] !== undefined)
|
|
48
|
+
.map((field) => `${field} is forbidden for executionMode: "INSTANT" (frontend-only apps have no runtime to configure)`);
|
|
49
|
+
}
|
|
50
|
+
function collectUiEntryPointErrors(manifest) {
|
|
51
|
+
const errors = [];
|
|
52
|
+
const ui = manifest.ui;
|
|
53
|
+
const entryPointsRaw = isRecord(ui) ? ui.entryPoints : undefined;
|
|
54
|
+
if (!isRecord(entryPointsRaw)) {
|
|
55
|
+
errors.push('ui.entryPoints is required for executionMode: "INSTANT"');
|
|
56
|
+
return errors;
|
|
57
|
+
}
|
|
58
|
+
const entryPoints = entryPointsRaw;
|
|
59
|
+
if (entryPoints.roomTab === undefined) {
|
|
60
|
+
errors.push('ui.entryPoints.roomTab is required for executionMode: "INSTANT"');
|
|
61
|
+
}
|
|
62
|
+
const appId = typeof manifest.name === 'string' && manifest.name.trim() ? manifest.name : undefined;
|
|
63
|
+
for (const [slot, rawSlot] of Object.entries(entryPoints)) {
|
|
64
|
+
if (!INSTANT_UI_ENTRY_POINT_SLOTS.includes(slot)) {
|
|
65
|
+
errors.push(`ui.entryPoints.${slot} is not a supported slot (expected one of ${INSTANT_UI_ENTRY_POINT_SLOTS.join(', ')})`);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (!isRecord(rawSlot)) {
|
|
69
|
+
errors.push(`ui.entryPoints.${slot} must be an object`);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (typeof rawSlot.title !== 'string' || !rawSlot.title.trim()) {
|
|
73
|
+
errors.push(`ui.entryPoints.${slot}.title must be a non-empty string`);
|
|
74
|
+
}
|
|
75
|
+
const resourceUri = rawSlot.resourceUri;
|
|
76
|
+
const match = typeof resourceUri === 'string' ? ENTRY_POINT_RESOURCE_URI_RE.exec(resourceUri) : null;
|
|
77
|
+
if (!match) {
|
|
78
|
+
errors.push(`ui.entryPoints.${slot}.resourceUri must match "ui://<appId>/<file>.html"`);
|
|
79
|
+
}
|
|
80
|
+
else if (appId && match[1] !== appId) {
|
|
81
|
+
errors.push(`ui.entryPoints.${slot}.resourceUri must be namespaced under this manifest's "name" (expected host "${appId}")`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return errors;
|
|
85
|
+
}
|
|
86
|
+
function collectAgentSectionErrors(manifest) {
|
|
87
|
+
const agent = manifest.agent;
|
|
88
|
+
if (agent === undefined)
|
|
89
|
+
return [];
|
|
90
|
+
if (!isRecord(agent))
|
|
91
|
+
return ['agent must be an object'];
|
|
92
|
+
const errors = [];
|
|
93
|
+
const purpose = agent.purpose;
|
|
94
|
+
if (typeof purpose !== 'string' || !purpose.trim()) {
|
|
95
|
+
errors.push('agent.purpose must be a non-empty string');
|
|
96
|
+
}
|
|
97
|
+
else if (purpose.length > AGENT_PURPOSE_MAX_LEN) {
|
|
98
|
+
errors.push(`agent.purpose exceeds the maximum length of ${AGENT_PURPOSE_MAX_LEN} characters`);
|
|
99
|
+
}
|
|
100
|
+
const instructions = agent.instructions;
|
|
101
|
+
if (instructions !== undefined) {
|
|
102
|
+
if (typeof instructions !== 'string')
|
|
103
|
+
errors.push('agent.instructions must be a string');
|
|
104
|
+
else if (instructions.length > AGENT_INSTRUCTIONS_MAX_LEN) {
|
|
105
|
+
errors.push(`agent.instructions exceeds the maximum length of ${AGENT_INSTRUCTIONS_MAX_LEN} characters`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const personality = agent.personality;
|
|
109
|
+
if (personality !== undefined) {
|
|
110
|
+
if (typeof personality !== 'string')
|
|
111
|
+
errors.push('agent.personality must be a string');
|
|
112
|
+
else if (personality.length > AGENT_PERSONALITY_MAX_LEN) {
|
|
113
|
+
errors.push(`agent.personality exceeds the maximum length of ${AGENT_PERSONALITY_MAX_LEN} characters`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const knowledge = agent.knowledge;
|
|
117
|
+
if (knowledge !== undefined) {
|
|
118
|
+
if (!Array.isArray(knowledge) || knowledge.some((item) => typeof item !== 'string')) {
|
|
119
|
+
errors.push('agent.knowledge must be an array of strings');
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
if (knowledge.length > AGENT_KNOWLEDGE_MAX_ITEMS) {
|
|
123
|
+
errors.push(`agent.knowledge exceeds the maximum of ${AGENT_KNOWLEDGE_MAX_ITEMS} items`);
|
|
124
|
+
}
|
|
125
|
+
knowledge.forEach((item, index) => {
|
|
126
|
+
if (item.length > AGENT_KNOWLEDGE_ITEM_MAX_LEN) {
|
|
127
|
+
errors.push(`agent.knowledge[${index}] exceeds the maximum length of ${AGENT_KNOWLEDGE_ITEM_MAX_LEN} characters`);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const hubTools = agent.hubTools;
|
|
133
|
+
if (hubTools !== undefined) {
|
|
134
|
+
if (!Array.isArray(hubTools) || hubTools.some((item) => typeof item !== 'string' || !item.trim())) {
|
|
135
|
+
errors.push('agent.hubTools must be an array of non-empty strings');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return errors;
|
|
139
|
+
}
|
|
140
|
+
function collectDockerfileWarning(manifestDir) {
|
|
141
|
+
if (!manifestDir)
|
|
142
|
+
return [];
|
|
143
|
+
try {
|
|
144
|
+
if (fs.existsSync(path.join(manifestDir, 'Dockerfile'))) {
|
|
145
|
+
return ['Dockerfile is present alongside executionMode: "INSTANT" — it is ignored (no image is ever built for a frontend-only app)'];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Best-effort only; an unreadable directory must not fail the lint.
|
|
150
|
+
}
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Lints the INSTANT-only rules on top of `lintManifest`'s base checks. A
|
|
155
|
+
* no-op (empty errors/warnings) for any manifest that does not declare
|
|
156
|
+
* `executionMode: "INSTANT"`. `options.manifestDir` — the directory holding
|
|
157
|
+
* `privos-app.json` — enables the Dockerfile-presence warning; omit it to
|
|
158
|
+
* skip that check (e.g. when linting an in-memory manifest with no project
|
|
159
|
+
* directory on disk).
|
|
160
|
+
*/
|
|
161
|
+
export function lintInstantManifest(manifest, options = {}) {
|
|
162
|
+
const value = isRecord(manifest) ? manifest : {};
|
|
163
|
+
if (value.executionMode !== INSTANT_EXECUTION_MODE) {
|
|
164
|
+
return Object.freeze({ errors: Object.freeze([]), warnings: Object.freeze([]) });
|
|
165
|
+
}
|
|
166
|
+
const errors = [
|
|
167
|
+
...collectForbiddenFieldErrors(value),
|
|
168
|
+
...collectUiEntryPointErrors(value),
|
|
169
|
+
...collectAgentSectionErrors(value),
|
|
170
|
+
];
|
|
171
|
+
const warnings = collectDockerfileWarning(options.manifestDir);
|
|
172
|
+
return Object.freeze({ errors: Object.freeze(errors), warnings: Object.freeze(warnings) });
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=manifest-lint-instant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-lint-instant.js","sourceRoot":"","sources":["../src/manifest-lint-instant.ts"],"names":[],"mappings":"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"}
|