@noodleseed/one 0.113.1 → 0.114.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/dist/agent-command-context.d.ts +7 -0
- package/dist/agent-command-context.d.ts.map +1 -0
- package/dist/agent-command-context.js +44 -0
- package/dist/agent-command-context.js.map +1 -0
- package/dist/agent-product-skill-doctor.d.ts +14 -0
- package/dist/agent-product-skill-doctor.d.ts.map +1 -0
- package/dist/agent-product-skill-doctor.js +159 -0
- package/dist/agent-product-skill-doctor.js.map +1 -0
- package/dist/agent-product-skill-state.d.ts +56 -0
- package/dist/agent-product-skill-state.d.ts.map +1 -0
- package/dist/agent-product-skill-state.js +173 -0
- package/dist/agent-product-skill-state.js.map +1 -0
- package/dist/agent-product-skill.d.ts +57 -0
- package/dist/agent-product-skill.d.ts.map +1 -0
- package/dist/agent-product-skill.js +241 -0
- package/dist/agent-product-skill.js.map +1 -0
- package/dist/agent-skills-state.d.ts +3 -0
- package/dist/agent-skills-state.d.ts.map +1 -1
- package/dist/agent-skills-state.js +12 -12
- package/dist/agent-skills-state.js.map +1 -1
- package/dist/agents-doctor.d.ts +17 -0
- package/dist/agents-doctor.d.ts.map +1 -0
- package/dist/agents-doctor.js +247 -0
- package/dist/agents-doctor.js.map +1 -0
- package/dist/agents.d.ts +4 -13
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +50 -271
- package/dist/agents.js.map +1 -1
- package/dist/commands/auth-ops.d.ts.map +1 -1
- package/dist/commands/auth-ops.js +43 -46
- package/dist/commands/auth-ops.js.map +1 -1
- package/dist/commands/author-loop.d.ts.map +1 -1
- package/dist/commands/author-loop.js +10 -6
- package/dist/commands/author-loop.js.map +1 -1
- package/dist/commands/catalog-data-bootstrap-pre-auth.d.ts.map +1 -1
- package/dist/commands/catalog-data-bootstrap-pre-auth.js +7 -4
- package/dist/commands/catalog-data-bootstrap-pre-auth.js.map +1 -1
- package/dist/commands/shared.d.ts +2 -0
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +11 -0
- package/dist/commands/shared.js.map +1 -1
- package/dist/local-compile.d.ts +31 -0
- package/dist/local-compile.d.ts.map +1 -0
- package/dist/local-compile.js +45 -0
- package/dist/local-compile.js.map +1 -0
- package/dist/project-entrypoint.d.ts +20 -0
- package/dist/project-entrypoint.d.ts.map +1 -0
- package/dist/project-entrypoint.js +71 -0
- package/dist/project-entrypoint.js.map +1 -0
- package/dist/project.d.ts +3 -8
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +20 -26
- package/dist/project.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +11 -46
- package/dist/validate.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.js +3 -3
- package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.js +23 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-agent-guide-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.js +6 -5
- package/node_modules/@noodle-borg/agent-kit/dist/skill-app-playbook-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +5 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js +2 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js +8 -7
- package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentProjectMetadata, AgentTarget } from '@noodle-borg/agent-kit';
|
|
2
|
+
export declare function resolveAgentProjectMetadata(project: string): AgentProjectMetadata;
|
|
3
|
+
export declare function isSkillsUpdateContext(env: NodeJS.ProcessEnv): boolean;
|
|
4
|
+
export declare function pluginRequiredAgentKitVersion(env: NodeJS.ProcessEnv): string | undefined;
|
|
5
|
+
export declare function displayAgentName(target: AgentTarget): string;
|
|
6
|
+
export declare function commandOnPath(command: string, env: NodeJS.ProcessEnv): boolean;
|
|
7
|
+
//# sourceMappingURL=agent-command-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-command-context.d.ts","sourceRoot":"","sources":["../src/agent-command-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMhF,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAgBjF;AAOD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAMrE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAKxF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAM9E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { delimiter, join } from 'node:path';
|
|
3
|
+
import { readPluginCompatibility } from './plugin-mode/compatibility.js';
|
|
4
|
+
import { readProjectLink, readResolvedProjectConfig } from './project.js';
|
|
5
|
+
const SAFE_AGENT_ENVIRONMENT = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
|
|
6
|
+
export function resolveAgentProjectMetadata(project) {
|
|
7
|
+
const projectDefaults = readResolvedProjectConfig(project);
|
|
8
|
+
const link = readProjectLink(project);
|
|
9
|
+
const org = link?.org ?? projectDefaults.org;
|
|
10
|
+
const app = link?.app ?? projectDefaults.app;
|
|
11
|
+
const env = safeAgentEnvironment(projectDefaults.env);
|
|
12
|
+
return Object.assign({}, projectDefaults.name !== undefined ? { name: projectDefaults.name } : {}, projectDefaults.entrypoint !== undefined ? { entrypoint: projectDefaults.entrypoint } : {}, env !== undefined ? { env } : {}, projectDefaults.accessMode !== undefined ? { accessMode: projectDefaults.accessMode } : {}, projectDefaults.template !== undefined ? { template: projectDefaults.template } : {}, org !== undefined ? { org } : {}, app !== undefined ? { app } : {});
|
|
13
|
+
}
|
|
14
|
+
/** Agent instructions accept only the same bounded slug shape as hosted environment identifiers. */
|
|
15
|
+
function safeAgentEnvironment(value) {
|
|
16
|
+
return value !== undefined && SAFE_AGENT_ENVIRONMENT.test(value) ? value : undefined;
|
|
17
|
+
}
|
|
18
|
+
export function isSkillsUpdateContext(env) {
|
|
19
|
+
if (env.NOODLE_DISABLE_UPDATE_CHECK !== undefined && env.NOODLE_DISABLE_UPDATE_CHECK !== '') {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
if (env.CI !== undefined && env.CI !== '')
|
|
23
|
+
return false;
|
|
24
|
+
return process.stderr.isTTY === true;
|
|
25
|
+
}
|
|
26
|
+
export function pluginRequiredAgentKitVersion(env) {
|
|
27
|
+
const compatibilityFile = env.NOODLE_PLUGIN_COMPATIBILITY_FILE;
|
|
28
|
+
if (compatibilityFile === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
const manifest = readPluginCompatibility(compatibilityFile);
|
|
31
|
+
return manifest.schemaVersion === 2 ? manifest.agentKitVersion : undefined;
|
|
32
|
+
}
|
|
33
|
+
export function displayAgentName(target) {
|
|
34
|
+
return target === 'codex' ? 'Codex' : 'Claude Code';
|
|
35
|
+
}
|
|
36
|
+
export function commandOnPath(command, env) {
|
|
37
|
+
const path = env.PATH ?? '';
|
|
38
|
+
for (const dir of path.split(delimiter)) {
|
|
39
|
+
if (dir && existsSync(join(dir, command)))
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=agent-command-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-command-context.js","sourceRoot":"","sources":["../src/agent-command-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,sBAAsB,GAAG,wCAAwC,CAAC;AAExE,MAAM,UAAU,2BAA2B,CAAC,OAAe;IACzD,MAAM,eAAe,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC;IAC7C,MAAM,GAAG,GAAG,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,MAAM,CAClB,EAAE,EACF,eAAe,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EACxE,eAAe,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAC1F,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAChC,eAAe,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAC1F,eAAe,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EACpF,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAChC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,SAAS,oBAAoB,CAAC,KAAyB;IACrD,OAAO,KAAK,KAAK,SAAS,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAsB;IAC1D,IAAI,GAAG,CAAC,2BAA2B,KAAK,SAAS,IAAI,GAAG,CAAC,2BAA2B,KAAK,EAAE,EAAE,CAAC;QAC5F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAsB;IAClE,MAAM,iBAAiB,GAAG,GAAG,CAAC,gCAAgC,CAAC;IAC/D,IAAI,iBAAiB,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAC5D,OAAO,QAAQ,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,GAAsB;IACnE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentTarget } from '@noodle-borg/agent-kit';
|
|
2
|
+
import type { AgentProductSkillCode, ProductSkillCompilation } from './agent-product-skill.js';
|
|
3
|
+
export interface ProductSkillDoctorCheck {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly level: 'PASS' | 'WARN' | 'FAIL';
|
|
6
|
+
readonly message: string;
|
|
7
|
+
readonly code?: AgentProductSkillCode;
|
|
8
|
+
}
|
|
9
|
+
export declare function doctorProjectProductSkill(input: {
|
|
10
|
+
readonly project: string;
|
|
11
|
+
readonly targets: readonly AgentTarget[];
|
|
12
|
+
readonly compilation: ProductSkillCompilation;
|
|
13
|
+
}): readonly ProductSkillDoctorCheck[];
|
|
14
|
+
//# sourceMappingURL=agent-product-skill-doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-product-skill-doctor.d.ts","sourceRoot":"","sources":["../src/agent-product-skill-doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,wBAAwB,CAAC;AAEtF,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAU/F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;CAC/C,GAAG,SAAS,uBAAuB,EAAE,CA0BrC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { assertProductSkillPathsSafe, createProductSkillState, inspectProductSkillStateFiles, readProductSkillState, unexpectedProductSkillPaths, } from './agent-product-skill-state.js';
|
|
4
|
+
export function doctorProjectProductSkill(input) {
|
|
5
|
+
const compilation = input.compilation;
|
|
6
|
+
if (compilation.kind === 'error') {
|
|
7
|
+
return [
|
|
8
|
+
{
|
|
9
|
+
name: 'App product skill compilation',
|
|
10
|
+
level: 'WARN',
|
|
11
|
+
code: 'agent_skill_stale',
|
|
12
|
+
message: compilation.message,
|
|
13
|
+
},
|
|
14
|
+
];
|
|
15
|
+
}
|
|
16
|
+
if (compilation.kind === 'absent' || compilation.kind === 'unguided') {
|
|
17
|
+
return input.targets.flatMap((target) => orphanedDoctorCheck(input.project, target));
|
|
18
|
+
}
|
|
19
|
+
return input.targets.map((target) => inspectTarget({
|
|
20
|
+
project: input.project,
|
|
21
|
+
target,
|
|
22
|
+
artifact: compilation.artifact,
|
|
23
|
+
files: compilation.bundle.files.filter((file) => file.target === target),
|
|
24
|
+
rendererVersion: compilation.bundle.rendererVersion,
|
|
25
|
+
bundleSha256: compilation.bundle.bundleSha256,
|
|
26
|
+
skillSlug: compilation.skillSlug,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
function inspectTarget(input) {
|
|
30
|
+
const name = `${displayName(input.target)} app product skill`;
|
|
31
|
+
if (input.files.length !== 2) {
|
|
32
|
+
return {
|
|
33
|
+
name,
|
|
34
|
+
level: 'FAIL',
|
|
35
|
+
code: 'agent_skill_stale',
|
|
36
|
+
message: 'App Package renderer returned an incomplete target',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
assertProductSkillPathsSafe({
|
|
41
|
+
project: input.project,
|
|
42
|
+
target: input.target,
|
|
43
|
+
paths: input.files.map((file) => file.path),
|
|
44
|
+
});
|
|
45
|
+
const read = readProductSkillState(input.project, input.target);
|
|
46
|
+
if (read.kind === 'invalid') {
|
|
47
|
+
return {
|
|
48
|
+
name,
|
|
49
|
+
level: 'FAIL',
|
|
50
|
+
code: 'agent_skill_invalid_state',
|
|
51
|
+
message: 'ownership record is malformed; preserve local files and review it',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (read.kind === 'absent') {
|
|
55
|
+
const exact = input.files.every((file) => {
|
|
56
|
+
const path = join(input.project, file.path);
|
|
57
|
+
return !existsSync(path) || readFileSync(path, 'utf8') === file.content;
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
name,
|
|
61
|
+
level: 'WARN',
|
|
62
|
+
code: exact ? 'agent_skill_stale' : 'agent_skill_modified',
|
|
63
|
+
message: exact
|
|
64
|
+
? 'app product skill is not installed; run noodle agents setup, then --write'
|
|
65
|
+
: 'unowned app skill files collide; review them before installation',
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const state = read.state;
|
|
69
|
+
assertProductSkillPathsSafe({
|
|
70
|
+
project: input.project,
|
|
71
|
+
target: input.target,
|
|
72
|
+
paths: state.files.map((file) => file.path),
|
|
73
|
+
});
|
|
74
|
+
const extras = unexpectedProductSkillPaths({
|
|
75
|
+
project: input.project,
|
|
76
|
+
target: input.target,
|
|
77
|
+
skillSlug: state.app.skillSlug,
|
|
78
|
+
expectedPaths: state.files.map((file) => file.path),
|
|
79
|
+
});
|
|
80
|
+
const disk = inspectProductSkillStateFiles(input.project, state);
|
|
81
|
+
if (extras.length > 0 || disk.modified) {
|
|
82
|
+
return {
|
|
83
|
+
name,
|
|
84
|
+
level: 'WARN',
|
|
85
|
+
code: 'agent_skill_modified',
|
|
86
|
+
message: 'generated app skill files were modified; local changes were preserved',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (disk.missing) {
|
|
90
|
+
return {
|
|
91
|
+
name,
|
|
92
|
+
level: 'WARN',
|
|
93
|
+
code: 'agent_skill_stale',
|
|
94
|
+
message: 'generated app skill files are missing; preview noodle agents setup before --write',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const expected = createProductSkillState({
|
|
98
|
+
target: input.target,
|
|
99
|
+
artifact: input.artifact,
|
|
100
|
+
bundle: {
|
|
101
|
+
rendererVersion: input.rendererVersion,
|
|
102
|
+
bundleSha256: input.bundleSha256,
|
|
103
|
+
},
|
|
104
|
+
skillSlug: input.skillSlug,
|
|
105
|
+
files: input.files,
|
|
106
|
+
});
|
|
107
|
+
if (!sameState(state, expected)) {
|
|
108
|
+
return {
|
|
109
|
+
name,
|
|
110
|
+
level: 'WARN',
|
|
111
|
+
code: 'agent_skill_stale',
|
|
112
|
+
message: 'source, MCP surface, or renderer changed; preview noodle agents setup before --write',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return { name, level: 'PASS', message: 'current' };
|
|
116
|
+
}
|
|
117
|
+
catch (cause) {
|
|
118
|
+
return {
|
|
119
|
+
name,
|
|
120
|
+
level: 'FAIL',
|
|
121
|
+
code: 'agent_skill_invalid_state',
|
|
122
|
+
message: `unsafe app skill state: ${cause.message}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function orphanedDoctorCheck(project, target) {
|
|
127
|
+
try {
|
|
128
|
+
const state = readProductSkillState(project, target);
|
|
129
|
+
if (state.kind === 'absent')
|
|
130
|
+
return [];
|
|
131
|
+
return [
|
|
132
|
+
{
|
|
133
|
+
name: `${displayName(target)} app product skill`,
|
|
134
|
+
level: state.kind === 'invalid' ? 'FAIL' : 'WARN',
|
|
135
|
+
code: state.kind === 'invalid' ? 'agent_skill_invalid_state' : 'agent_skill_stale',
|
|
136
|
+
message: state.kind === 'invalid'
|
|
137
|
+
? 'ownership record is malformed; preserve local files and review it'
|
|
138
|
+
: 'installed app skill has no current TypeScript agent guide; local files were preserved',
|
|
139
|
+
},
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
catch (cause) {
|
|
143
|
+
return [
|
|
144
|
+
{
|
|
145
|
+
name: `${displayName(target)} app product skill`,
|
|
146
|
+
level: 'FAIL',
|
|
147
|
+
code: 'agent_skill_invalid_state',
|
|
148
|
+
message: `unsafe app skill state: ${cause.message}`,
|
|
149
|
+
},
|
|
150
|
+
];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function sameState(left, right) {
|
|
154
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
155
|
+
}
|
|
156
|
+
function displayName(target) {
|
|
157
|
+
return target === 'codex' ? 'Codex' : 'Claude Code';
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=agent-product-skill-doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-product-skill-doctor.js","sourceRoot":"","sources":["../src/agent-product-skill-doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type AgentTarget, type RenderedProductSkillBundleV1, type RenderedProductSkillFileV1 } from '@noodle-borg/agent-kit';
|
|
2
|
+
import type { AppPackageArtifactV1 } from '@noodle-borg/compiler';
|
|
3
|
+
export interface ProductSkillStateFile {
|
|
4
|
+
readonly path: string;
|
|
5
|
+
readonly sha256: string;
|
|
6
|
+
readonly byteLength: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ProductSkillState {
|
|
9
|
+
readonly schemaVersion: 1;
|
|
10
|
+
readonly target: AgentTarget;
|
|
11
|
+
readonly app: {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly skillSlug: string;
|
|
14
|
+
};
|
|
15
|
+
readonly packageSchemaVersion: '1';
|
|
16
|
+
readonly rendererVersion: string;
|
|
17
|
+
readonly sourceManifestSha256: string;
|
|
18
|
+
readonly mcpSurfaceSha256: string;
|
|
19
|
+
readonly bundleSha256: string;
|
|
20
|
+
readonly files: readonly ProductSkillStateFile[];
|
|
21
|
+
}
|
|
22
|
+
export type ProductSkillStateRead = {
|
|
23
|
+
readonly kind: 'absent';
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'invalid';
|
|
26
|
+
} | {
|
|
27
|
+
readonly kind: 'valid';
|
|
28
|
+
readonly state: ProductSkillState;
|
|
29
|
+
};
|
|
30
|
+
export declare function productSkillStatePath(target: AgentTarget): string;
|
|
31
|
+
export declare function readProductSkillState(project: string, target: AgentTarget): ProductSkillStateRead;
|
|
32
|
+
export declare function writeProductSkillState(project: string, state: ProductSkillState): void;
|
|
33
|
+
export declare function createProductSkillState(input: {
|
|
34
|
+
readonly target: AgentTarget;
|
|
35
|
+
readonly artifact: AppPackageArtifactV1;
|
|
36
|
+
readonly bundle: Pick<RenderedProductSkillBundleV1, 'rendererVersion' | 'bundleSha256'>;
|
|
37
|
+
readonly skillSlug: string;
|
|
38
|
+
readonly files: readonly RenderedProductSkillFileV1[];
|
|
39
|
+
}): ProductSkillState;
|
|
40
|
+
export declare function assertProductSkillPathsSafe(input: {
|
|
41
|
+
readonly project: string;
|
|
42
|
+
readonly target: AgentTarget;
|
|
43
|
+
readonly paths: readonly string[];
|
|
44
|
+
}): void;
|
|
45
|
+
/** Files under the app skill directory that are not declared by its ownership record are conflicts. */
|
|
46
|
+
export declare function unexpectedProductSkillPaths(input: {
|
|
47
|
+
readonly project: string;
|
|
48
|
+
readonly target: AgentTarget;
|
|
49
|
+
readonly skillSlug: string;
|
|
50
|
+
readonly expectedPaths: readonly string[];
|
|
51
|
+
}): readonly string[];
|
|
52
|
+
export declare function inspectProductSkillStateFiles(project: string, state: ProductSkillState): {
|
|
53
|
+
readonly missing: boolean;
|
|
54
|
+
readonly modified: boolean;
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=agent-product-skill-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-product-skill-state.d.ts","sourceRoot":"","sources":["../src/agent-product-skill-state.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AASlE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAClD;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAElE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,qBAAqB,CAYjG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAItF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,4BAA4B,EAAE,iBAAiB,GAAG,cAAc,CAAC,CAAC;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,0BAA0B,EAAE,CAAC;CACvD,GAAG,iBAAiB,CAYpB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,IAAI,CASP;AAED,uGAAuG;AACvG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,GAAG,SAAS,MAAM,EAAE,CAOpB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,GACvB;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAkB3D"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { existsSync, lstatSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { contentSha256, } from '@noodle-borg/agent-kit';
|
|
4
|
+
import { agentSkillRoot, assertProjectPathSafe, atomicWriteProjectFile, } from './agent-skills-state.js';
|
|
5
|
+
const SHA256 = /^[a-f0-9]{64}$/;
|
|
6
|
+
export function productSkillStatePath(target) {
|
|
7
|
+
return `${agentSkillRoot(target)}/.noodle-app-package.json`;
|
|
8
|
+
}
|
|
9
|
+
export function readProductSkillState(project, target) {
|
|
10
|
+
const relativePath = productSkillStatePath(target);
|
|
11
|
+
assertProjectPathSafe(project, relativePath);
|
|
12
|
+
const path = join(project, relativePath);
|
|
13
|
+
if (!existsSync(path))
|
|
14
|
+
return { kind: 'absent' };
|
|
15
|
+
try {
|
|
16
|
+
const value = JSON.parse(readFileSync(path, 'utf8'));
|
|
17
|
+
const state = decodeState(value, target);
|
|
18
|
+
return state === undefined ? { kind: 'invalid' } : { kind: 'valid', state };
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return { kind: 'invalid' };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function writeProductSkillState(project, state) {
|
|
25
|
+
const path = productSkillStatePath(state.target);
|
|
26
|
+
assertProjectPathSafe(project, path);
|
|
27
|
+
atomicWriteProjectFile(join(project, path), `${JSON.stringify(state, null, 2)}\n`);
|
|
28
|
+
}
|
|
29
|
+
export function createProductSkillState(input) {
|
|
30
|
+
return {
|
|
31
|
+
schemaVersion: 1,
|
|
32
|
+
target: input.target,
|
|
33
|
+
app: { name: input.artifact.app.name, skillSlug: input.skillSlug },
|
|
34
|
+
packageSchemaVersion: input.artifact.schemaVersion,
|
|
35
|
+
rendererVersion: input.bundle.rendererVersion,
|
|
36
|
+
sourceManifestSha256: input.artifact.provenance.sourceManifestSha256,
|
|
37
|
+
mcpSurfaceSha256: input.artifact.provenance.mcpSurfaceSha256,
|
|
38
|
+
bundleSha256: input.bundle.bundleSha256,
|
|
39
|
+
files: input.files.map(({ path, sha256, byteLength }) => ({ path, sha256, byteLength })),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export function assertProductSkillPathsSafe(input) {
|
|
43
|
+
assertProjectPathSafe(input.project, agentSkillRoot(input.target));
|
|
44
|
+
assertProjectPathSafe(input.project, productSkillStatePath(input.target));
|
|
45
|
+
for (const path of input.paths) {
|
|
46
|
+
if (!isTargetFilePath(input.target, path)) {
|
|
47
|
+
throw new Error(`invalid app product skill path: ${path}`);
|
|
48
|
+
}
|
|
49
|
+
assertProjectPathSafe(input.project, path);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Files under the app skill directory that are not declared by its ownership record are conflicts. */
|
|
53
|
+
export function unexpectedProductSkillPaths(input) {
|
|
54
|
+
const root = `${agentSkillRoot(input.target)}/${input.skillSlug}`;
|
|
55
|
+
assertProjectPathSafe(input.project, root);
|
|
56
|
+
const fullRoot = join(input.project, root);
|
|
57
|
+
if (!existsSync(fullRoot))
|
|
58
|
+
return [];
|
|
59
|
+
const expected = new Set(input.expectedPaths);
|
|
60
|
+
return collectFiles(fullRoot, root).filter((path) => !expected.has(path));
|
|
61
|
+
}
|
|
62
|
+
export function inspectProductSkillStateFiles(project, state) {
|
|
63
|
+
let missing = false;
|
|
64
|
+
let modified = false;
|
|
65
|
+
for (const file of state.files) {
|
|
66
|
+
const path = join(project, file.path);
|
|
67
|
+
if (!existsSync(path)) {
|
|
68
|
+
missing = true;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const content = readFileSync(path, 'utf8');
|
|
72
|
+
if (contentSha256(content) !== file.sha256 ||
|
|
73
|
+
Buffer.byteLength(content, 'utf8') !== file.byteLength) {
|
|
74
|
+
modified = true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return { missing, modified };
|
|
78
|
+
}
|
|
79
|
+
function collectFiles(fullDir, relativeDir) {
|
|
80
|
+
const stats = lstatSync(fullDir);
|
|
81
|
+
if (stats.isSymbolicLink())
|
|
82
|
+
throw new Error(`refusing app skill symbolic link: ${fullDir}`);
|
|
83
|
+
if (!stats.isDirectory())
|
|
84
|
+
return [relativeDir];
|
|
85
|
+
const files = [];
|
|
86
|
+
for (const entry of readdirSync(fullDir, { withFileTypes: true })) {
|
|
87
|
+
const full = join(fullDir, entry.name);
|
|
88
|
+
const relative = `${relativeDir}/${entry.name}`;
|
|
89
|
+
if (entry.isSymbolicLink())
|
|
90
|
+
throw new Error(`refusing app skill symbolic link: ${full}`);
|
|
91
|
+
if (entry.isDirectory())
|
|
92
|
+
files.push(...collectFiles(full, relative));
|
|
93
|
+
else
|
|
94
|
+
files.push(relative);
|
|
95
|
+
}
|
|
96
|
+
return files;
|
|
97
|
+
}
|
|
98
|
+
function decodeState(value, target) {
|
|
99
|
+
if (!isRecord(value) ||
|
|
100
|
+
!hasExactKeys(value, [
|
|
101
|
+
'schemaVersion',
|
|
102
|
+
'target',
|
|
103
|
+
'app',
|
|
104
|
+
'packageSchemaVersion',
|
|
105
|
+
'rendererVersion',
|
|
106
|
+
'sourceManifestSha256',
|
|
107
|
+
'mcpSurfaceSha256',
|
|
108
|
+
'bundleSha256',
|
|
109
|
+
'files',
|
|
110
|
+
]) ||
|
|
111
|
+
value.schemaVersion !== 1 ||
|
|
112
|
+
value.target !== target ||
|
|
113
|
+
value.packageSchemaVersion !== '1' ||
|
|
114
|
+
typeof value.rendererVersion !== 'string' ||
|
|
115
|
+
value.rendererVersion.trim() === '' ||
|
|
116
|
+
!validDigest(value.sourceManifestSha256) ||
|
|
117
|
+
!validDigest(value.mcpSurfaceSha256) ||
|
|
118
|
+
!validDigest(value.bundleSha256) ||
|
|
119
|
+
!isRecord(value.app) ||
|
|
120
|
+
!hasExactKeys(value.app, ['name', 'skillSlug']) ||
|
|
121
|
+
typeof value.app.name !== 'string' ||
|
|
122
|
+
typeof value.app.skillSlug !== 'string' ||
|
|
123
|
+
!Array.isArray(value.files)) {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
const files = [];
|
|
127
|
+
const paths = new Set();
|
|
128
|
+
for (const file of value.files) {
|
|
129
|
+
if (!isRecord(file) ||
|
|
130
|
+
!hasExactKeys(file, ['path', 'sha256', 'byteLength']) ||
|
|
131
|
+
typeof file.path !== 'string' ||
|
|
132
|
+
!isTargetFilePath(target, file.path) ||
|
|
133
|
+
paths.has(file.path) ||
|
|
134
|
+
!validDigest(file.sha256) ||
|
|
135
|
+
typeof file.byteLength !== 'number' ||
|
|
136
|
+
!Number.isSafeInteger(file.byteLength) ||
|
|
137
|
+
file.byteLength < 0) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
paths.add(file.path);
|
|
141
|
+
files.push({ path: file.path, sha256: file.sha256, byteLength: file.byteLength });
|
|
142
|
+
}
|
|
143
|
+
if (files.length !== 2)
|
|
144
|
+
return undefined;
|
|
145
|
+
return {
|
|
146
|
+
schemaVersion: 1,
|
|
147
|
+
target,
|
|
148
|
+
app: { name: value.app.name, skillSlug: value.app.skillSlug },
|
|
149
|
+
packageSchemaVersion: '1',
|
|
150
|
+
rendererVersion: value.rendererVersion,
|
|
151
|
+
sourceManifestSha256: value.sourceManifestSha256,
|
|
152
|
+
mcpSurfaceSha256: value.mcpSurfaceSha256,
|
|
153
|
+
bundleSha256: value.bundleSha256,
|
|
154
|
+
files,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function isTargetFilePath(target, path) {
|
|
158
|
+
const root = `${agentSkillRoot(target)}/`;
|
|
159
|
+
return (path.startsWith(root) &&
|
|
160
|
+
path !== productSkillStatePath(target) &&
|
|
161
|
+
!path.includes('\\') &&
|
|
162
|
+
path.split('/').every((part) => part !== '' && part !== '.' && part !== '..'));
|
|
163
|
+
}
|
|
164
|
+
function validDigest(value) {
|
|
165
|
+
return typeof value === 'string' && SHA256.test(value);
|
|
166
|
+
}
|
|
167
|
+
function hasExactKeys(value, keys) {
|
|
168
|
+
return Object.keys(value).length === keys.length && keys.every((key) => key in value);
|
|
169
|
+
}
|
|
170
|
+
function isRecord(value) {
|
|
171
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=agent-product-skill-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-product-skill-state.js","sourceRoot":"","sources":["../src/agent-product-skill-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type AgentTarget, type RenderedProductSkillBundleV1 } from '@noodle-borg/agent-kit';
|
|
2
|
+
import type { AppPackageArtifactV1 } from '@noodle-borg/compiler';
|
|
3
|
+
export type AgentProductSkillCode = 'agent_skill_invalid_state' | 'agent_skill_modified' | 'agent_skill_stale';
|
|
4
|
+
export interface ProductSkillFileAction {
|
|
5
|
+
readonly path: string;
|
|
6
|
+
readonly action: 'created' | 'updated' | 'unchanged' | 'skipped';
|
|
7
|
+
readonly reason?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ProductSkillTargetReport {
|
|
10
|
+
readonly target: AgentTarget;
|
|
11
|
+
readonly status: 'created' | 'updated' | 'unchanged' | 'modified' | 'stale';
|
|
12
|
+
readonly statePath: string;
|
|
13
|
+
readonly files: readonly ProductSkillFileAction[];
|
|
14
|
+
readonly issue?: {
|
|
15
|
+
readonly code: AgentProductSkillCode;
|
|
16
|
+
readonly message: string;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface ProductSkillSetupReport {
|
|
20
|
+
readonly ok: boolean;
|
|
21
|
+
readonly app?: {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly skillSlug: string;
|
|
24
|
+
};
|
|
25
|
+
readonly sourceManifestSha256?: string;
|
|
26
|
+
readonly mcpSurfaceSha256?: string;
|
|
27
|
+
readonly rendererVersion?: string;
|
|
28
|
+
readonly bundleSha256?: string;
|
|
29
|
+
readonly targets: readonly ProductSkillTargetReport[];
|
|
30
|
+
readonly issues: readonly {
|
|
31
|
+
readonly code: AgentProductSkillCode;
|
|
32
|
+
readonly message: string;
|
|
33
|
+
readonly target?: AgentTarget;
|
|
34
|
+
}[];
|
|
35
|
+
}
|
|
36
|
+
export type ProductSkillCompilation = {
|
|
37
|
+
readonly kind: 'absent';
|
|
38
|
+
} | {
|
|
39
|
+
readonly kind: 'unguided';
|
|
40
|
+
} | {
|
|
41
|
+
readonly kind: 'error';
|
|
42
|
+
readonly message: string;
|
|
43
|
+
} | {
|
|
44
|
+
readonly kind: 'ready';
|
|
45
|
+
readonly artifact: AppPackageArtifactV1;
|
|
46
|
+
readonly bundle: RenderedProductSkillBundleV1;
|
|
47
|
+
readonly skillSlug: string;
|
|
48
|
+
};
|
|
49
|
+
/** Compile the local TypeScript project without auth or network, then invoke the pure Agent Kit renderer. */
|
|
50
|
+
export declare function compileProjectProductSkill(project: string): Promise<ProductSkillCompilation>;
|
|
51
|
+
export declare function setupProjectProductSkill(input: {
|
|
52
|
+
readonly project: string;
|
|
53
|
+
readonly targets: readonly AgentTarget[];
|
|
54
|
+
readonly write: boolean;
|
|
55
|
+
readonly compilation: ProductSkillCompilation;
|
|
56
|
+
}): ProductSkillSetupReport | undefined;
|
|
57
|
+
//# sourceMappingURL=agent-product-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-product-skill.d.ts","sourceRoot":"","sources":["../src/agent-product-skill.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,4BAA4B,EAGlC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAelE,MAAM,MAAM,qBAAqB,GAC7B,2BAA2B,GAC3B,sBAAsB,GACtB,mBAAmB,CAAC;AAExB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,SAAS;QACxB,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;QACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;KAC/B,EAAE,CAAC;CACL;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEN,6GAA6G;AAC7G,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC,CA0BlC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;CAC/C,GAAG,uBAAuB,GAAG,SAAS,CAmCtC"}
|