@tpsdev-ai/cli 0.1.0 → 0.3.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.
- package/README.md +46 -60
- package/bin/tps.cjs +22 -0
- package/bin/tps.ts +435 -0
- package/nono-profiles/tps-backup.toml +18 -0
- package/nono-profiles/tps-bootstrap.toml +20 -0
- package/nono-profiles/tps-office-manager.toml +21 -0
- package/nono-profiles/tps-restore.toml +18 -0
- package/nono-profiles/tps-status.toml +19 -0
- package/package.json +19 -15
- package/LICENSE +0 -201
- package/dist/bin/tps.d.ts +0 -3
- package/dist/bin/tps.d.ts.map +0 -1
- package/dist/bin/tps.js +0 -267
- package/dist/bin/tps.js.map +0 -1
- package/dist/src/cli/hire.d.ts +0 -16
- package/dist/src/cli/hire.d.ts.map +0 -1
- package/dist/src/cli/hire.js +0 -176
- package/dist/src/cli/hire.js.map +0 -1
- package/dist/src/cli/office.d.ts +0 -7
- package/dist/src/cli/office.d.ts.map +0 -1
- package/dist/src/cli/office.js +0 -51
- package/dist/src/cli/office.js.map +0 -1
- package/dist/src/cli/review.d.ts +0 -9
- package/dist/src/cli/review.d.ts.map +0 -1
- package/dist/src/cli/review.js +0 -109
- package/dist/src/cli/review.js.map +0 -1
- package/dist/src/cli/roster.d.ts +0 -6
- package/dist/src/cli/roster.d.ts.map +0 -1
- package/dist/src/cli/roster.js +0 -60
- package/dist/src/cli/roster.js.map +0 -1
- package/dist/src/commands/branch.d.ts +0 -14
- package/dist/src/commands/branch.d.ts.map +0 -1
- package/dist/src/commands/branch.js +0 -395
- package/dist/src/commands/branch.js.map +0 -1
- package/dist/src/commands/context.d.ts +0 -9
- package/dist/src/commands/context.d.ts.map +0 -1
- package/dist/src/commands/context.js +0 -57
- package/dist/src/commands/context.js.map +0 -1
- package/dist/src/commands/identity.d.ts +0 -13
- package/dist/src/commands/identity.d.ts.map +0 -1
- package/dist/src/commands/identity.js +0 -231
- package/dist/src/commands/identity.js.map +0 -1
- package/dist/src/commands/mail.d.ts +0 -12
- package/dist/src/commands/mail.d.ts.map +0 -1
- package/dist/src/commands/mail.js +0 -225
- package/dist/src/commands/mail.js.map +0 -1
- package/dist/src/commands/office.d.ts +0 -19
- package/dist/src/commands/office.d.ts.map +0 -1
- package/dist/src/commands/office.js +0 -598
- package/dist/src/commands/office.js.map +0 -1
- package/dist/src/commands/roster.d.ts +0 -10
- package/dist/src/commands/roster.d.ts.map +0 -1
- package/dist/src/commands/roster.js +0 -143
- package/dist/src/commands/roster.js.map +0 -1
- package/dist/src/generators/claude-code.d.ts +0 -17
- package/dist/src/generators/claude-code.d.ts.map +0 -1
- package/dist/src/generators/claude-code.js +0 -80
- package/dist/src/generators/claude-code.js.map +0 -1
- package/dist/src/generators/codex.d.ts +0 -22
- package/dist/src/generators/codex.d.ts.map +0 -1
- package/dist/src/generators/codex.js +0 -78
- package/dist/src/generators/codex.js.map +0 -1
- package/dist/src/generators/ollama.d.ts +0 -18
- package/dist/src/generators/ollama.d.ts.map +0 -1
- package/dist/src/generators/ollama.js +0 -97
- package/dist/src/generators/ollama.js.map +0 -1
- package/dist/src/generators/openclaw.d.ts +0 -15
- package/dist/src/generators/openclaw.d.ts.map +0 -1
- package/dist/src/generators/openclaw.js +0 -103
- package/dist/src/generators/openclaw.js.map +0 -1
- package/dist/src/generators/registry.d.ts +0 -36
- package/dist/src/generators/registry.d.ts.map +0 -1
- package/dist/src/generators/registry.js +0 -99
- package/dist/src/generators/registry.js.map +0 -1
- package/dist/src/schema/manifest.d.ts +0 -140
- package/dist/src/schema/manifest.d.ts.map +0 -1
- package/dist/src/schema/manifest.js +0 -62
- package/dist/src/schema/manifest.js.map +0 -1
- package/dist/src/schema/report.d.ts +0 -166
- package/dist/src/schema/report.d.ts.map +0 -1
- package/dist/src/schema/report.js +0 -90
- package/dist/src/schema/report.js.map +0 -1
- package/dist/src/schema/sanitizer.d.ts +0 -30
- package/dist/src/schema/sanitizer.d.ts.map +0 -1
- package/dist/src/schema/sanitizer.js +0 -97
- package/dist/src/schema/sanitizer.js.map +0 -1
- package/dist/src/soundstage/mock-llm.d.ts +0 -3
- package/dist/src/soundstage/mock-llm.d.ts.map +0 -1
- package/dist/src/soundstage/mock-llm.js +0 -68
- package/dist/src/soundstage/mock-llm.js.map +0 -1
- package/dist/src/utils/agent-info.d.ts +0 -28
- package/dist/src/utils/agent-info.d.ts.map +0 -1
- package/dist/src/utils/agent-info.js +0 -102
- package/dist/src/utils/agent-info.js.map +0 -1
- package/dist/src/utils/archive.d.ts +0 -27
- package/dist/src/utils/archive.d.ts.map +0 -1
- package/dist/src/utils/archive.js +0 -80
- package/dist/src/utils/archive.js.map +0 -1
- package/dist/src/utils/config-inject.d.ts +0 -27
- package/dist/src/utils/config-inject.d.ts.map +0 -1
- package/dist/src/utils/config-inject.js +0 -83
- package/dist/src/utils/config-inject.js.map +0 -1
- package/dist/src/utils/config.d.ts +0 -30
- package/dist/src/utils/config.d.ts.map +0 -1
- package/dist/src/utils/config.js +0 -55
- package/dist/src/utils/config.js.map +0 -1
- package/dist/src/utils/connection-state.d.ts +0 -27
- package/dist/src/utils/connection-state.d.ts.map +0 -1
- package/dist/src/utils/connection-state.js +0 -81
- package/dist/src/utils/connection-state.js.map +0 -1
- package/dist/src/utils/context.d.ts +0 -14
- package/dist/src/utils/context.d.ts.map +0 -1
- package/dist/src/utils/context.js +0 -68
- package/dist/src/utils/context.js.map +0 -1
- package/dist/src/utils/github-webhook.d.ts +0 -3
- package/dist/src/utils/github-webhook.d.ts.map +0 -1
- package/dist/src/utils/github-webhook.js +0 -105
- package/dist/src/utils/github-webhook.js.map +0 -1
- package/dist/src/utils/identity.d.ts +0 -114
- package/dist/src/utils/identity.d.ts.map +0 -1
- package/dist/src/utils/identity.js +0 -341
- package/dist/src/utils/identity.js.map +0 -1
- package/dist/src/utils/internal-mail.d.ts +0 -18
- package/dist/src/utils/internal-mail.d.ts.map +0 -1
- package/dist/src/utils/internal-mail.js +0 -75
- package/dist/src/utils/internal-mail.js.map +0 -1
- package/dist/src/utils/loop-detector.d.ts +0 -27
- package/dist/src/utils/loop-detector.d.ts.map +0 -1
- package/dist/src/utils/loop-detector.js +0 -42
- package/dist/src/utils/loop-detector.js.map +0 -1
- package/dist/src/utils/mail-handler.d.ts +0 -19
- package/dist/src/utils/mail-handler.d.ts.map +0 -1
- package/dist/src/utils/mail-handler.js +0 -94
- package/dist/src/utils/mail-handler.js.map +0 -1
- package/dist/src/utils/mail.d.ts +0 -22
- package/dist/src/utils/mail.d.ts.map +0 -1
- package/dist/src/utils/mail.js +0 -111
- package/dist/src/utils/mail.js.map +0 -1
- package/dist/src/utils/manifest.d.ts +0 -36
- package/dist/src/utils/manifest.d.ts.map +0 -1
- package/dist/src/utils/manifest.js +0 -91
- package/dist/src/utils/manifest.js.map +0 -1
- package/dist/src/utils/noise-ik-transport.d.ts +0 -18
- package/dist/src/utils/noise-ik-transport.d.ts.map +0 -1
- package/dist/src/utils/noise-ik-transport.js +0 -357
- package/dist/src/utils/noise-ik-transport.js.map +0 -1
- package/dist/src/utils/nono.d.ts +0 -72
- package/dist/src/utils/nono.d.ts.map +0 -1
- package/dist/src/utils/nono.js +0 -166
- package/dist/src/utils/nono.js.map +0 -1
- package/dist/src/utils/outbox.d.ts +0 -10
- package/dist/src/utils/outbox.d.ts.map +0 -1
- package/dist/src/utils/outbox.js +0 -29
- package/dist/src/utils/outbox.js.map +0 -1
- package/dist/src/utils/output.d.ts +0 -17
- package/dist/src/utils/output.d.ts.map +0 -1
- package/dist/src/utils/output.js +0 -83
- package/dist/src/utils/output.js.map +0 -1
- package/dist/src/utils/plain-tcp-transport.d.ts +0 -10
- package/dist/src/utils/plain-tcp-transport.d.ts.map +0 -1
- package/dist/src/utils/plain-tcp-transport.js +0 -209
- package/dist/src/utils/plain-tcp-transport.js.map +0 -1
- package/dist/src/utils/provision.d.ts +0 -2
- package/dist/src/utils/provision.d.ts.map +0 -1
- package/dist/src/utils/provision.js +0 -186
- package/dist/src/utils/provision.js.map +0 -1
- package/dist/src/utils/relay.d.ts +0 -30
- package/dist/src/utils/relay.d.ts.map +0 -1
- package/dist/src/utils/relay.js +0 -539
- package/dist/src/utils/relay.js.map +0 -1
- package/dist/src/utils/sandbox.d.ts +0 -37
- package/dist/src/utils/sandbox.d.ts.map +0 -1
- package/dist/src/utils/sandbox.js +0 -126
- package/dist/src/utils/sandbox.js.map +0 -1
- package/dist/src/utils/transport.d.ts +0 -62
- package/dist/src/utils/transport.d.ts.map +0 -1
- package/dist/src/utils/transport.js +0 -75
- package/dist/src/utils/transport.js.map +0 -1
- package/dist/src/utils/wall.d.ts +0 -5
- package/dist/src/utils/wall.d.ts.map +0 -1
- package/dist/src/utils/wall.js +0 -51
- package/dist/src/utils/wall.js.map +0 -1
- package/dist/src/utils/wire-delivery.d.ts +0 -10
- package/dist/src/utils/wire-delivery.d.ts.map +0 -1
- package/dist/src/utils/wire-delivery.js +0 -57
- package/dist/src/utils/wire-delivery.js.map +0 -1
- package/dist/src/utils/wire-frame.d.ts +0 -10
- package/dist/src/utils/wire-frame.d.ts.map +0 -1
- package/dist/src/utils/wire-frame.js +0 -66
- package/dist/src/utils/wire-frame.js.map +0 -1
- package/dist/src/utils/wire-mail.d.ts +0 -54
- package/dist/src/utils/wire-mail.d.ts.map +0 -1
- package/dist/src/utils/wire-mail.js +0 -24
- package/dist/src/utils/wire-mail.js.map +0 -1
- package/dist/src/utils/ws-noise-transport.d.ts +0 -18
- package/dist/src/utils/ws-noise-transport.d.ts.map +0 -1
- package/dist/src/utils/ws-noise-transport.js +0 -356
- package/dist/src/utils/ws-noise-transport.js.map +0 -1
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generator registry — unified interface for all runtime generators.
|
|
3
|
-
* Hire calls the registry instead of if/else chains.
|
|
4
|
-
*/
|
|
5
|
-
import type { TPSReport } from "../schema/report.js";
|
|
6
|
-
export type Runtime = "openclaw" | "claude-code" | "ollama" | "codex";
|
|
7
|
-
export interface GeneratorResult {
|
|
8
|
-
/** Files that were generated (name → content) */
|
|
9
|
-
files: Record<string, string>;
|
|
10
|
-
/** Where the workspace lives */
|
|
11
|
-
workspacePath: string;
|
|
12
|
-
/** Sanitized agent ID */
|
|
13
|
-
agentId: string;
|
|
14
|
-
/** Display name */
|
|
15
|
-
agentName: string;
|
|
16
|
-
/** OpenClaw config entry (only for openclaw runtime) */
|
|
17
|
-
openclawConfig?: Record<string, unknown>;
|
|
18
|
-
/** Ollama model tag (only for ollama runtime) */
|
|
19
|
-
modelTag?: string;
|
|
20
|
-
/** Next steps hint for the user */
|
|
21
|
-
nextSteps: string[];
|
|
22
|
-
}
|
|
23
|
-
export interface GeneratorOptions {
|
|
24
|
-
name?: string;
|
|
25
|
-
workspace?: string;
|
|
26
|
-
branch?: boolean;
|
|
27
|
-
baseModel?: string;
|
|
28
|
-
}
|
|
29
|
-
interface Generator {
|
|
30
|
-
generate(report: TPSReport, options: GeneratorOptions): GeneratorResult;
|
|
31
|
-
write(result: GeneratorResult): void;
|
|
32
|
-
}
|
|
33
|
-
export declare function getGenerator(runtime: Runtime): Generator;
|
|
34
|
-
export declare const VALID_RUNTIMES: Runtime[];
|
|
35
|
-
export {};
|
|
36
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/generators/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMrD,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAAC;IACxE,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CACtC;AA6FD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAMxD;AAED,eAAO,MAAM,cAAc,EAA8B,OAAO,EAAE,CAAC"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { generateWorkspace, writeWorkspace } from "./openclaw.js";
|
|
2
|
-
import { generateClaudeCode, writeClaudeCode } from "./claude-code.js";
|
|
3
|
-
import { generateOllama, writeOllama } from "./ollama.js";
|
|
4
|
-
import { generateCodex, writeCodex } from "./codex.js";
|
|
5
|
-
function makeOpenClawGenerator() {
|
|
6
|
-
return {
|
|
7
|
-
generate(report, options) {
|
|
8
|
-
const gen = generateWorkspace(report, options);
|
|
9
|
-
return {
|
|
10
|
-
files: gen.files,
|
|
11
|
-
workspacePath: gen.workspacePath,
|
|
12
|
-
agentId: String(gen.config.id),
|
|
13
|
-
agentName: String(gen.config.name || gen.config.id),
|
|
14
|
-
openclawConfig: gen.config,
|
|
15
|
-
nextSteps: ["openclaw gateway restart"],
|
|
16
|
-
};
|
|
17
|
-
},
|
|
18
|
-
write(result) {
|
|
19
|
-
// writeWorkspace expects the original GeneratedWorkspace shape
|
|
20
|
-
// We reconstruct it from the result
|
|
21
|
-
writeWorkspace({
|
|
22
|
-
files: result.files,
|
|
23
|
-
workspacePath: result.workspacePath,
|
|
24
|
-
config: result.openclawConfig,
|
|
25
|
-
});
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
function makeClaudeCodeGenerator() {
|
|
30
|
-
return {
|
|
31
|
-
generate(report, options) {
|
|
32
|
-
const gen = generateClaudeCode(report, options);
|
|
33
|
-
return {
|
|
34
|
-
files: gen.files,
|
|
35
|
-
workspacePath: gen.workspacePath,
|
|
36
|
-
agentId: gen.agentId,
|
|
37
|
-
agentName: gen.agentName,
|
|
38
|
-
nextSteps: [`cd ${gen.workspacePath}`, "claude"],
|
|
39
|
-
};
|
|
40
|
-
},
|
|
41
|
-
write(result) {
|
|
42
|
-
writeClaudeCode({ files: result.files, workspacePath: result.workspacePath, agentId: result.agentId, agentName: result.agentName });
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
function makeOllamaGenerator() {
|
|
47
|
-
return {
|
|
48
|
-
generate(report, options) {
|
|
49
|
-
const gen = generateOllama(report, options);
|
|
50
|
-
return {
|
|
51
|
-
files: gen.files,
|
|
52
|
-
workspacePath: gen.workspacePath,
|
|
53
|
-
agentId: gen.agentId,
|
|
54
|
-
agentName: gen.agentName,
|
|
55
|
-
modelTag: gen.modelTag,
|
|
56
|
-
nextSteps: [
|
|
57
|
-
`cd ${gen.workspacePath}`,
|
|
58
|
-
`ollama create ${gen.modelTag} -f Modelfile`,
|
|
59
|
-
`ollama run ${gen.modelTag}`,
|
|
60
|
-
],
|
|
61
|
-
};
|
|
62
|
-
},
|
|
63
|
-
write(result) {
|
|
64
|
-
writeOllama({ files: result.files, workspacePath: result.workspacePath, agentId: result.agentId, agentName: result.agentName, modelTag: result.modelTag });
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function makeCodexGenerator() {
|
|
69
|
-
return {
|
|
70
|
-
generate(report, options) {
|
|
71
|
-
const gen = generateCodex(report, options);
|
|
72
|
-
return {
|
|
73
|
-
files: gen.files,
|
|
74
|
-
workspacePath: gen.workspacePath,
|
|
75
|
-
agentId: gen.agentId,
|
|
76
|
-
agentName: gen.agentName,
|
|
77
|
-
nextSteps: [`cd ${gen.workspacePath}`, "codex"],
|
|
78
|
-
};
|
|
79
|
-
},
|
|
80
|
-
write(result) {
|
|
81
|
-
writeCodex({ files: result.files, workspacePath: result.workspacePath, agentId: result.agentId, agentName: result.agentName });
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
const generators = {
|
|
86
|
-
"openclaw": makeOpenClawGenerator(),
|
|
87
|
-
"claude-code": makeClaudeCodeGenerator(),
|
|
88
|
-
"ollama": makeOllamaGenerator(),
|
|
89
|
-
"codex": makeCodexGenerator(),
|
|
90
|
-
};
|
|
91
|
-
export function getGenerator(runtime) {
|
|
92
|
-
const gen = generators[runtime];
|
|
93
|
-
if (!gen) {
|
|
94
|
-
throw new Error(`Unknown runtime: ${runtime}. Valid: ${Object.keys(generators).join(", ")}`);
|
|
95
|
-
}
|
|
96
|
-
return gen;
|
|
97
|
-
}
|
|
98
|
-
export const VALID_RUNTIMES = Object.keys(generators);
|
|
99
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/generators/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const OfficeAgentSchema: z.ZodObject<{
|
|
3
|
-
name: z.ZodString;
|
|
4
|
-
persona: z.ZodDefault<z.ZodString>;
|
|
5
|
-
role: z.ZodOptional<z.ZodString>;
|
|
6
|
-
tps_report: z.ZodOptional<z.ZodString>;
|
|
7
|
-
}, "strip", z.ZodTypeAny, {
|
|
8
|
-
name: string;
|
|
9
|
-
persona: string;
|
|
10
|
-
role?: string | undefined;
|
|
11
|
-
tps_report?: string | undefined;
|
|
12
|
-
}, {
|
|
13
|
-
name: string;
|
|
14
|
-
persona?: string | undefined;
|
|
15
|
-
role?: string | undefined;
|
|
16
|
-
tps_report?: string | undefined;
|
|
17
|
-
}>;
|
|
18
|
-
export declare const OfficeManifestSchema: z.ZodObject<{
|
|
19
|
-
version: z.ZodDefault<z.ZodString>;
|
|
20
|
-
name: z.ZodString;
|
|
21
|
-
purpose: z.ZodDefault<z.ZodEnum<["development", "research", "adversarial", "ops"]>>;
|
|
22
|
-
manager: z.ZodObject<{
|
|
23
|
-
name: z.ZodString;
|
|
24
|
-
role: z.ZodOptional<z.ZodString>;
|
|
25
|
-
tps_report: z.ZodOptional<z.ZodString>;
|
|
26
|
-
} & {
|
|
27
|
-
persona: z.ZodDefault<z.ZodString>;
|
|
28
|
-
}, "strip", z.ZodTypeAny, {
|
|
29
|
-
name: string;
|
|
30
|
-
persona: string;
|
|
31
|
-
role?: string | undefined;
|
|
32
|
-
tps_report?: string | undefined;
|
|
33
|
-
}, {
|
|
34
|
-
name: string;
|
|
35
|
-
persona?: string | undefined;
|
|
36
|
-
role?: string | undefined;
|
|
37
|
-
tps_report?: string | undefined;
|
|
38
|
-
}>;
|
|
39
|
-
agents: z.ZodArray<z.ZodObject<{
|
|
40
|
-
name: z.ZodString;
|
|
41
|
-
persona: z.ZodDefault<z.ZodString>;
|
|
42
|
-
role: z.ZodOptional<z.ZodString>;
|
|
43
|
-
tps_report: z.ZodOptional<z.ZodString>;
|
|
44
|
-
}, "strip", z.ZodTypeAny, {
|
|
45
|
-
name: string;
|
|
46
|
-
persona: string;
|
|
47
|
-
role?: string | undefined;
|
|
48
|
-
tps_report?: string | undefined;
|
|
49
|
-
}, {
|
|
50
|
-
name: string;
|
|
51
|
-
persona?: string | undefined;
|
|
52
|
-
role?: string | undefined;
|
|
53
|
-
tps_report?: string | undefined;
|
|
54
|
-
}>, "many">;
|
|
55
|
-
wall: z.ZodDefault<z.ZodBoolean>;
|
|
56
|
-
context: z.ZodOptional<z.ZodObject<{
|
|
57
|
-
briefs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
58
|
-
mounts: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
59
|
-
host: z.ZodString;
|
|
60
|
-
target: z.ZodString;
|
|
61
|
-
readonly: z.ZodDefault<z.ZodBoolean>;
|
|
62
|
-
}, "strip", z.ZodTypeAny, {
|
|
63
|
-
host: string;
|
|
64
|
-
target: string;
|
|
65
|
-
readonly: boolean;
|
|
66
|
-
}, {
|
|
67
|
-
host: string;
|
|
68
|
-
target: string;
|
|
69
|
-
readonly?: boolean | undefined;
|
|
70
|
-
}>, "many">>;
|
|
71
|
-
}, "strip", z.ZodTypeAny, {
|
|
72
|
-
briefs?: string[] | undefined;
|
|
73
|
-
mounts?: {
|
|
74
|
-
host: string;
|
|
75
|
-
target: string;
|
|
76
|
-
readonly: boolean;
|
|
77
|
-
}[] | undefined;
|
|
78
|
-
}, {
|
|
79
|
-
briefs?: string[] | undefined;
|
|
80
|
-
mounts?: {
|
|
81
|
-
host: string;
|
|
82
|
-
target: string;
|
|
83
|
-
readonly?: boolean | undefined;
|
|
84
|
-
}[] | undefined;
|
|
85
|
-
}>>;
|
|
86
|
-
}, "strip", z.ZodTypeAny, {
|
|
87
|
-
version: string;
|
|
88
|
-
name: string;
|
|
89
|
-
agents: {
|
|
90
|
-
name: string;
|
|
91
|
-
persona: string;
|
|
92
|
-
role?: string | undefined;
|
|
93
|
-
tps_report?: string | undefined;
|
|
94
|
-
}[];
|
|
95
|
-
purpose: "ops" | "development" | "research" | "adversarial";
|
|
96
|
-
manager: {
|
|
97
|
-
name: string;
|
|
98
|
-
persona: string;
|
|
99
|
-
role?: string | undefined;
|
|
100
|
-
tps_report?: string | undefined;
|
|
101
|
-
};
|
|
102
|
-
wall: boolean;
|
|
103
|
-
context?: {
|
|
104
|
-
briefs?: string[] | undefined;
|
|
105
|
-
mounts?: {
|
|
106
|
-
host: string;
|
|
107
|
-
target: string;
|
|
108
|
-
readonly: boolean;
|
|
109
|
-
}[] | undefined;
|
|
110
|
-
} | undefined;
|
|
111
|
-
}, {
|
|
112
|
-
name: string;
|
|
113
|
-
agents: {
|
|
114
|
-
name: string;
|
|
115
|
-
persona?: string | undefined;
|
|
116
|
-
role?: string | undefined;
|
|
117
|
-
tps_report?: string | undefined;
|
|
118
|
-
}[];
|
|
119
|
-
manager: {
|
|
120
|
-
name: string;
|
|
121
|
-
persona?: string | undefined;
|
|
122
|
-
role?: string | undefined;
|
|
123
|
-
tps_report?: string | undefined;
|
|
124
|
-
};
|
|
125
|
-
version?: string | undefined;
|
|
126
|
-
context?: {
|
|
127
|
-
briefs?: string[] | undefined;
|
|
128
|
-
mounts?: {
|
|
129
|
-
host: string;
|
|
130
|
-
target: string;
|
|
131
|
-
readonly?: boolean | undefined;
|
|
132
|
-
}[] | undefined;
|
|
133
|
-
} | undefined;
|
|
134
|
-
purpose?: "ops" | "development" | "research" | "adversarial" | undefined;
|
|
135
|
-
wall?: boolean | undefined;
|
|
136
|
-
}>;
|
|
137
|
-
export type OfficeManifest = z.infer<typeof OfficeManifestSchema>;
|
|
138
|
-
export type OfficeAgent = z.infer<typeof OfficeAgentSchema>;
|
|
139
|
-
export declare function parseOfficeManifest(filePath: string): OfficeManifest;
|
|
140
|
-
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/schema/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAC;AAaH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAuCpE"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import * as yaml from "js-yaml";
|
|
3
|
-
import { readFileSync } from "node:fs";
|
|
4
|
-
export const OfficeAgentSchema = z.object({
|
|
5
|
-
name: z.string().min(1),
|
|
6
|
-
persona: z.string().default("developer"),
|
|
7
|
-
role: z.string().optional(),
|
|
8
|
-
tps_report: z.string().optional(), // path to a .tps file
|
|
9
|
-
});
|
|
10
|
-
const OfficeContextMountSchema = z.object({
|
|
11
|
-
host: z.string().min(1),
|
|
12
|
-
target: z.string().min(1),
|
|
13
|
-
readonly: z.boolean().default(true),
|
|
14
|
-
});
|
|
15
|
-
const OfficeContextSchema = z.object({
|
|
16
|
-
briefs: z.array(z.string().min(1).max(1024)).max(20).optional(),
|
|
17
|
-
mounts: z.array(OfficeContextMountSchema).max(20).optional(),
|
|
18
|
-
}).optional();
|
|
19
|
-
export const OfficeManifestSchema = z.object({
|
|
20
|
-
version: z.string().default("1"),
|
|
21
|
-
name: z.string().min(1, "Office name is required."),
|
|
22
|
-
purpose: z.enum(["development", "research", "adversarial", "ops"]).default("development"),
|
|
23
|
-
manager: OfficeAgentSchema.extend({
|
|
24
|
-
persona: z.string().default("ops"),
|
|
25
|
-
}),
|
|
26
|
-
agents: z.array(OfficeAgentSchema).min(1, "At least one worker agent is required."),
|
|
27
|
-
wall: z.boolean().default(true),
|
|
28
|
-
context: OfficeContextSchema,
|
|
29
|
-
});
|
|
30
|
-
export function parseOfficeManifest(filePath) {
|
|
31
|
-
let raw;
|
|
32
|
-
try {
|
|
33
|
-
raw = readFileSync(filePath, "utf-8");
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
throw new Error(`PC Load Letter? Couldn't read file: ${filePath}\nWhat does that even mean? Check the path and try again.`);
|
|
37
|
-
}
|
|
38
|
-
// Pre-parse guardrails against YAML anchor expansion DoS (Billion Laughs).
|
|
39
|
-
if (raw.length > 65_536) {
|
|
40
|
-
throw new Error("Office manifest exceeds maximum size (64KB).");
|
|
41
|
-
}
|
|
42
|
-
const aliasRefs = (raw.match(/\*/g) ?? []).length;
|
|
43
|
-
if (aliasRefs > 20) {
|
|
44
|
-
throw new Error("Office manifest contains too many YAML aliases (max 20).");
|
|
45
|
-
}
|
|
46
|
-
let parsed;
|
|
47
|
-
try {
|
|
48
|
-
parsed = yaml.load(raw);
|
|
49
|
-
}
|
|
50
|
-
catch (e) {
|
|
51
|
-
throw new Error(`I'm gonna need you to fix that office manifest. YAML parse error:\n${e.message}`);
|
|
52
|
-
}
|
|
53
|
-
const result = OfficeManifestSchema.safeParse(parsed);
|
|
54
|
-
if (!result.success) {
|
|
55
|
-
const issues = result.error.issues
|
|
56
|
-
.map((i) => ` • ${i.path.join(".")}: ${i.message}`)
|
|
57
|
-
.join("\n");
|
|
58
|
-
throw new Error(`Did you get the memo about the office manifests? Validation failed:\n${issues}`);
|
|
59
|
-
}
|
|
60
|
-
return result.data;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/schema/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export declare const TPSReportSchema: z.ZodObject<{
|
|
3
|
-
version: z.ZodDefault<z.ZodString>;
|
|
4
|
-
name: z.ZodString;
|
|
5
|
-
description: z.ZodString;
|
|
6
|
-
identity: z.ZodObject<{
|
|
7
|
-
default_name: z.ZodString;
|
|
8
|
-
emoji: z.ZodDefault<z.ZodString>;
|
|
9
|
-
personality: z.ZodDefault<z.ZodString>;
|
|
10
|
-
communication_style: z.ZodDefault<z.ZodString>;
|
|
11
|
-
}, "strip", z.ZodTypeAny, {
|
|
12
|
-
default_name: string;
|
|
13
|
-
emoji: string;
|
|
14
|
-
personality: string;
|
|
15
|
-
communication_style: string;
|
|
16
|
-
}, {
|
|
17
|
-
default_name: string;
|
|
18
|
-
emoji?: string | undefined;
|
|
19
|
-
personality?: string | undefined;
|
|
20
|
-
communication_style?: string | undefined;
|
|
21
|
-
}>;
|
|
22
|
-
flair: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
23
|
-
model: z.ZodDefault<z.ZodObject<{
|
|
24
|
-
default: z.ZodDefault<z.ZodString>;
|
|
25
|
-
}, "strip", z.ZodTypeAny, {
|
|
26
|
-
default: string;
|
|
27
|
-
}, {
|
|
28
|
-
default?: string | undefined;
|
|
29
|
-
}>>;
|
|
30
|
-
tools: z.ZodDefault<z.ZodObject<{
|
|
31
|
-
required: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
32
|
-
optional: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
33
|
-
}, "strip", z.ZodTypeAny, {
|
|
34
|
-
required: string[];
|
|
35
|
-
optional: string[];
|
|
36
|
-
}, {
|
|
37
|
-
required?: string[] | undefined;
|
|
38
|
-
optional?: string[] | undefined;
|
|
39
|
-
}>>;
|
|
40
|
-
communication: z.ZodDefault<z.ZodObject<{
|
|
41
|
-
channels: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
42
|
-
handoff_targets: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
43
|
-
}, "strip", z.ZodTypeAny, {
|
|
44
|
-
channels: string[];
|
|
45
|
-
handoff_targets: string[];
|
|
46
|
-
}, {
|
|
47
|
-
channels?: string[] | undefined;
|
|
48
|
-
handoff_targets?: string[] | undefined;
|
|
49
|
-
}>>;
|
|
50
|
-
boundaries: z.ZodDefault<z.ZodObject<{
|
|
51
|
-
can_commit: z.ZodDefault<z.ZodBoolean>;
|
|
52
|
-
can_send_external: z.ZodDefault<z.ZodBoolean>;
|
|
53
|
-
can_spend: z.ZodDefault<z.ZodBoolean>;
|
|
54
|
-
}, "strip", z.ZodTypeAny, {
|
|
55
|
-
can_commit: boolean;
|
|
56
|
-
can_send_external: boolean;
|
|
57
|
-
can_spend: boolean;
|
|
58
|
-
}, {
|
|
59
|
-
can_commit?: boolean | undefined;
|
|
60
|
-
can_send_external?: boolean | undefined;
|
|
61
|
-
can_spend?: boolean | undefined;
|
|
62
|
-
}>>;
|
|
63
|
-
memory: z.ZodDefault<z.ZodObject<{
|
|
64
|
-
private: z.ZodDefault<z.ZodBoolean>;
|
|
65
|
-
shared_read: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
66
|
-
shared_write: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
67
|
-
}, "strip", z.ZodTypeAny, {
|
|
68
|
-
private: boolean;
|
|
69
|
-
shared_read: string[];
|
|
70
|
-
shared_write: string[];
|
|
71
|
-
}, {
|
|
72
|
-
private?: boolean | undefined;
|
|
73
|
-
shared_read?: string[] | undefined;
|
|
74
|
-
shared_write?: string[] | undefined;
|
|
75
|
-
}>>;
|
|
76
|
-
openclaw: z.ZodDefault<z.ZodObject<{
|
|
77
|
-
model: z.ZodDefault<z.ZodString>;
|
|
78
|
-
thinking: z.ZodDefault<z.ZodString>;
|
|
79
|
-
channel: z.ZodDefault<z.ZodString>;
|
|
80
|
-
}, "strip", z.ZodTypeAny, {
|
|
81
|
-
model: string;
|
|
82
|
-
thinking: string;
|
|
83
|
-
channel: string;
|
|
84
|
-
}, {
|
|
85
|
-
model?: string | undefined;
|
|
86
|
-
thinking?: string | undefined;
|
|
87
|
-
channel?: string | undefined;
|
|
88
|
-
}>>;
|
|
89
|
-
}, "strip", z.ZodTypeAny, {
|
|
90
|
-
version: string;
|
|
91
|
-
name: string;
|
|
92
|
-
description: string;
|
|
93
|
-
identity: {
|
|
94
|
-
default_name: string;
|
|
95
|
-
emoji: string;
|
|
96
|
-
personality: string;
|
|
97
|
-
communication_style: string;
|
|
98
|
-
};
|
|
99
|
-
flair: string[];
|
|
100
|
-
model: {
|
|
101
|
-
default: string;
|
|
102
|
-
};
|
|
103
|
-
tools: {
|
|
104
|
-
required: string[];
|
|
105
|
-
optional: string[];
|
|
106
|
-
};
|
|
107
|
-
communication: {
|
|
108
|
-
channels: string[];
|
|
109
|
-
handoff_targets: string[];
|
|
110
|
-
};
|
|
111
|
-
boundaries: {
|
|
112
|
-
can_commit: boolean;
|
|
113
|
-
can_send_external: boolean;
|
|
114
|
-
can_spend: boolean;
|
|
115
|
-
};
|
|
116
|
-
memory: {
|
|
117
|
-
private: boolean;
|
|
118
|
-
shared_read: string[];
|
|
119
|
-
shared_write: string[];
|
|
120
|
-
};
|
|
121
|
-
openclaw: {
|
|
122
|
-
model: string;
|
|
123
|
-
thinking: string;
|
|
124
|
-
channel: string;
|
|
125
|
-
};
|
|
126
|
-
}, {
|
|
127
|
-
name: string;
|
|
128
|
-
description: string;
|
|
129
|
-
identity: {
|
|
130
|
-
default_name: string;
|
|
131
|
-
emoji?: string | undefined;
|
|
132
|
-
personality?: string | undefined;
|
|
133
|
-
communication_style?: string | undefined;
|
|
134
|
-
};
|
|
135
|
-
version?: string | undefined;
|
|
136
|
-
flair?: string[] | undefined;
|
|
137
|
-
model?: {
|
|
138
|
-
default?: string | undefined;
|
|
139
|
-
} | undefined;
|
|
140
|
-
tools?: {
|
|
141
|
-
required?: string[] | undefined;
|
|
142
|
-
optional?: string[] | undefined;
|
|
143
|
-
} | undefined;
|
|
144
|
-
communication?: {
|
|
145
|
-
channels?: string[] | undefined;
|
|
146
|
-
handoff_targets?: string[] | undefined;
|
|
147
|
-
} | undefined;
|
|
148
|
-
boundaries?: {
|
|
149
|
-
can_commit?: boolean | undefined;
|
|
150
|
-
can_send_external?: boolean | undefined;
|
|
151
|
-
can_spend?: boolean | undefined;
|
|
152
|
-
} | undefined;
|
|
153
|
-
memory?: {
|
|
154
|
-
private?: boolean | undefined;
|
|
155
|
-
shared_read?: string[] | undefined;
|
|
156
|
-
shared_write?: string[] | undefined;
|
|
157
|
-
} | undefined;
|
|
158
|
-
openclaw?: {
|
|
159
|
-
model?: string | undefined;
|
|
160
|
-
thinking?: string | undefined;
|
|
161
|
-
channel?: string | undefined;
|
|
162
|
-
} | undefined;
|
|
163
|
-
}>;
|
|
164
|
-
export type TPSReport = z.infer<typeof TPSReportSchema>;
|
|
165
|
-
export declare function parseTPSReport(filePath: string): TPSReport;
|
|
166
|
-
//# sourceMappingURL=report.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/schema/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+D1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAuC1D"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import * as yaml from "js-yaml";
|
|
3
|
-
import { readFileSync } from "node:fs";
|
|
4
|
-
export const TPSReportSchema = z.object({
|
|
5
|
-
version: z
|
|
6
|
-
.string()
|
|
7
|
-
.default("1")
|
|
8
|
-
.describe("TPS report version"),
|
|
9
|
-
name: z
|
|
10
|
-
.string({ required_error: "I'm gonna need you to put a name on that TPS report." })
|
|
11
|
-
.min(1, "The name field is empty. Did you get the memo about filling out all the fields?"),
|
|
12
|
-
description: z
|
|
13
|
-
.string({ required_error: "Description missing. What exactly would you say... this agent does?" })
|
|
14
|
-
.min(1, "Description can't be blank. We need to know what this agent does here."),
|
|
15
|
-
identity: z.object({
|
|
16
|
-
default_name: z
|
|
17
|
-
.string({ required_error: "Every agent needs a name. Even Milton had a name." })
|
|
18
|
-
.min(1),
|
|
19
|
-
emoji: z.string().default("📋"),
|
|
20
|
-
personality: z
|
|
21
|
-
.string()
|
|
22
|
-
.default("Professional and helpful."),
|
|
23
|
-
communication_style: z
|
|
24
|
-
.string()
|
|
25
|
-
.default("Clear and direct."),
|
|
26
|
-
}),
|
|
27
|
-
flair: z
|
|
28
|
-
.array(z.string())
|
|
29
|
-
.default([])
|
|
30
|
-
.describe("Pieces of flair — capabilities this agent brings to the table"),
|
|
31
|
-
model: z.object({
|
|
32
|
-
default: z.string().default("reasoning"),
|
|
33
|
-
}).default({}),
|
|
34
|
-
tools: z.object({
|
|
35
|
-
required: z.array(z.string()).default([]),
|
|
36
|
-
optional: z.array(z.string()).default([]),
|
|
37
|
-
}).default({}),
|
|
38
|
-
communication: z.object({
|
|
39
|
-
channels: z.array(z.string()).default(["direct"]),
|
|
40
|
-
handoff_targets: z.array(z.string()).default([]),
|
|
41
|
-
}).default({}),
|
|
42
|
-
boundaries: z.object({
|
|
43
|
-
can_commit: z.boolean().default(false),
|
|
44
|
-
can_send_external: z.boolean().default(false),
|
|
45
|
-
can_spend: z.boolean().default(false),
|
|
46
|
-
}).default({}),
|
|
47
|
-
memory: z.object({
|
|
48
|
-
private: z.boolean().default(true),
|
|
49
|
-
shared_read: z.array(z.string()).default([]),
|
|
50
|
-
shared_write: z.array(z.string()).default([]),
|
|
51
|
-
}).default({}),
|
|
52
|
-
openclaw: z.object({
|
|
53
|
-
model: z.string().default("anthropic/claude-sonnet-4-20250514"),
|
|
54
|
-
thinking: z.string().default("off"),
|
|
55
|
-
channel: z.string().default("discord"),
|
|
56
|
-
}).default({}),
|
|
57
|
-
});
|
|
58
|
-
export function parseTPSReport(filePath) {
|
|
59
|
-
let raw;
|
|
60
|
-
try {
|
|
61
|
-
raw = readFileSync(filePath, "utf-8");
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
throw new Error(`PC Load Letter? Couldn't read file: ${filePath}\nWhat does that even mean? Check the path and try again.`);
|
|
65
|
-
}
|
|
66
|
-
// Pre-parse guardrails against YAML anchor expansion DoS (Billion Laughs).
|
|
67
|
-
if (raw.length > 65_536) {
|
|
68
|
-
throw new Error("TPS report exceeds maximum size (64KB).");
|
|
69
|
-
}
|
|
70
|
-
const aliasRefs = (raw.match(/\*/g) ?? []).length;
|
|
71
|
-
if (aliasRefs > 20) {
|
|
72
|
-
throw new Error("TPS report contains too many YAML aliases (max 20).");
|
|
73
|
-
}
|
|
74
|
-
let parsed;
|
|
75
|
-
try {
|
|
76
|
-
parsed = yaml.load(raw);
|
|
77
|
-
}
|
|
78
|
-
catch (e) {
|
|
79
|
-
throw new Error(`I'm gonna need you to fix that TPS report. YAML parse error:\n${e.message}`);
|
|
80
|
-
}
|
|
81
|
-
const result = TPSReportSchema.safeParse(parsed);
|
|
82
|
-
if (!result.success) {
|
|
83
|
-
const issues = result.error.issues
|
|
84
|
-
.map((i) => ` • ${i.path.join(".")}: ${i.message}`)
|
|
85
|
-
.join("\n");
|
|
86
|
-
throw new Error(`Did you get the memo about the TPS reports? Validation failed:\n${issues}`);
|
|
87
|
-
}
|
|
88
|
-
return result.data;
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=report.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/schema/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { TPSReport } from "./report.js";
|
|
2
|
-
/**
|
|
3
|
-
* Sanitize an identifier string.
|
|
4
|
-
* Allows only alphanumeric characters, underscores, and hyphens.
|
|
5
|
-
* Replaces invalid characters with hyphens.
|
|
6
|
-
* Truncates to max length (default 64).
|
|
7
|
-
*/
|
|
8
|
-
export declare function sanitizeIdentifier(value: string, maxLength?: number): string;
|
|
9
|
-
/**
|
|
10
|
-
* Sanitize a model identifier string (e.g. provider/model:tag).
|
|
11
|
-
* Allows alphanumeric, underscores, hyphens, slashes, dots, and colons.
|
|
12
|
-
*/
|
|
13
|
-
export declare function sanitizeModelIdentifier(value: string, maxLength?: number): string;
|
|
14
|
-
/**
|
|
15
|
-
* Sanitize free text to prevent shell injection.
|
|
16
|
-
* Escapes characters that have special meaning in shell contexts.
|
|
17
|
-
* Note: This is aggressive and might impact readability in some contexts,
|
|
18
|
-
* but safety is priority.
|
|
19
|
-
*/
|
|
20
|
-
export declare function sanitizeFreeText(value: string): string;
|
|
21
|
-
/**
|
|
22
|
-
* Sanitize an array of strings using the identifier rules.
|
|
23
|
-
*/
|
|
24
|
-
export declare function sanitizeStringArray(arr: string[]): string[];
|
|
25
|
-
/**
|
|
26
|
-
* Main sanitizer function for TPS Reports.
|
|
27
|
-
* Returns a new, sanitized report object.
|
|
28
|
-
*/
|
|
29
|
-
export declare function sanitizeTPSReport(report: TPSReport): TPSReport;
|
|
30
|
-
//# sourceMappingURL=sanitizer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../../src/schema/sanitizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,MAAM,CAYxE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAM9E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAgC9D"}
|