@interf/compiler 0.1.10 → 0.1.11
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 +23 -7
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +1 -8
- package/dist/commands/benchmark.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/create-workflow-wizard.d.ts +65 -0
- package/dist/commands/create-workflow-wizard.d.ts.map +1 -0
- package/dist/commands/create-workflow-wizard.js +299 -0
- package/dist/commands/create-workflow-wizard.js.map +1 -0
- package/dist/commands/create.d.ts +1 -37
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +11 -313
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/reset.js +3 -3
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +9 -0
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-skills.d.ts +21 -0
- package/dist/lib/agent-skills.d.ts.map +1 -0
- package/dist/lib/agent-skills.js +215 -0
- package/dist/lib/agent-skills.js.map +1 -0
- package/dist/lib/agents.d.ts +11 -13
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/agents.js +12 -212
- package/dist/lib/agents.js.map +1 -1
- package/dist/lib/filesystem.d.ts +0 -1
- package/dist/lib/filesystem.d.ts.map +1 -1
- package/dist/lib/filesystem.js +0 -5
- package/dist/lib/filesystem.js.map +1 -1
- package/dist/lib/interf-bootstrap.d.ts +13 -0
- package/dist/lib/interf-bootstrap.d.ts.map +1 -0
- package/dist/lib/interf-bootstrap.js +215 -0
- package/dist/lib/interf-bootstrap.js.map +1 -0
- package/dist/lib/interf-detect.d.ts +31 -0
- package/dist/lib/interf-detect.d.ts.map +1 -0
- package/dist/lib/interf-detect.js +146 -0
- package/dist/lib/interf-detect.js.map +1 -0
- package/dist/lib/interf-scaffold.d.ts +15 -0
- package/dist/lib/interf-scaffold.d.ts.map +1 -0
- package/dist/lib/interf-scaffold.js +592 -0
- package/dist/lib/interf-scaffold.js.map +1 -0
- package/dist/lib/interf.d.ts +4 -36
- package/dist/lib/interf.d.ts.map +1 -1
- package/dist/lib/interf.js +5 -1103
- package/dist/lib/interf.js.map +1 -1
- package/dist/lib/local-workflows.d.ts +7 -0
- package/dist/lib/local-workflows.d.ts.map +1 -1
- package/dist/lib/local-workflows.js +83 -10
- package/dist/lib/local-workflows.js.map +1 -1
- package/dist/lib/obsidian.d.ts +6 -0
- package/dist/lib/obsidian.d.ts.map +1 -0
- package/dist/lib/obsidian.js +166 -0
- package/dist/lib/obsidian.js.map +1 -0
- package/dist/lib/runtime.d.ts.map +1 -1
- package/dist/lib/runtime.js +1 -1
- package/dist/lib/runtime.js.map +1 -1
- package/dist/lib/schema.d.ts +1 -0
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +1 -1
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/state.d.ts +2 -4
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +1 -1
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/util.d.ts +4 -0
- package/dist/lib/util.d.ts.map +1 -0
- package/dist/lib/util.js +14 -0
- package/dist/lib/util.js.map +1 -0
- package/dist/lib/validate.js +5 -8
- package/dist/lib/validate.js.map +1 -1
- package/dist/lib/workflow-definitions.d.ts.map +1 -1
- package/dist/lib/workflow-definitions.js +8 -0
- package/dist/lib/workflow-definitions.js.map +1 -1
- package/dist/lib/workflow-helpers.d.ts +41 -0
- package/dist/lib/workflow-helpers.d.ts.map +1 -0
- package/dist/lib/workflow-helpers.js +189 -0
- package/dist/lib/workflow-helpers.js.map +1 -0
- package/dist/lib/workflows-interface.d.ts +79 -0
- package/dist/lib/workflows-interface.d.ts.map +1 -0
- package/dist/lib/workflows-interface.js +625 -0
- package/dist/lib/workflows-interface.js.map +1 -0
- package/dist/lib/workflows-kb.d.ts +50 -0
- package/dist/lib/workflows-kb.d.ts.map +1 -0
- package/dist/lib/workflows-kb.js +282 -0
- package/dist/lib/workflows-kb.js.map +1 -0
- package/dist/lib/workflows.d.ts +10 -114
- package/dist/lib/workflows.d.ts.map +1 -1
- package/dist/lib/workflows.js +14 -1072
- package/dist/lib/workflows.js.map +1 -1
- package/package.json +8 -3
- package/skills/knowledge-base/compile/references/stage-entities.md +2 -2
- package/templates/knowledge-base/README.md +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { loadState, saveState, initKnowledgeBaseState, initInterfaceState, loadK
|
|
|
3
3
|
export { readInterfConfig, detectInterf, resolveKnowledgeBase, resolveInterfaceKnowledgeBasePath, createKnowledgeBase as createKnowledgeBaseScaffold, createInterface as createInterfaceScaffold, } from "./lib/interf.js";
|
|
4
4
|
export { discoverSourceFiles, loadIgnorePatterns } from "./lib/discovery.js";
|
|
5
5
|
export { listBenchmarkSpecs, loadBenchmarkSpec, loadBenchmarkSpecFromFile, writeBenchmarkSpec, listKnowledgeBaseBenchmarkTargets, listInterfaceBenchmarkTargets, listBenchmarkTargets, runBenchmark, saveBenchmarkRun, } from "./lib/benchmark.js";
|
|
6
|
-
export { isWorkflowId, workflowDefinitionPath, listLocalWorkflowDefinitions, loadLocalWorkflowDefinition, writeLocalWorkflowDefinition, } from "./lib/local-workflows.js";
|
|
6
|
+
export { isWorkflowId, workflowDefinitionPath, listLocalWorkflowDefinitions, loadLocalWorkflowDefinition, writeLocalWorkflowDefinition, validateWorkflowPackage, } from "./lib/local-workflows.js";
|
|
7
7
|
export { detectAgents, installSkills, resolveAgent, spawnAgent, inspectInterfSkills, buildAgentPreflightPrompt, runAgentPreflight, ensureAgentAutomatedRunReady, } from "./lib/agents.js";
|
|
8
8
|
export { InterfConfigSchema, KnowledgeBaseStateSchema, InterfaceStateSchema, KnowledgeBaseHealthSchema, InterfaceHealthSchema, KnowledgeBaseViewSpecSchema, InterfaceViewSpecSchema, KnowledgeBaseSourceAccessSchema, BenchmarkCaseExpectSchema, BenchmarkCaseSchema, BenchmarkSpecSchema, BenchmarkCheckResultSchema, BenchmarkCaseResultSchema, BenchmarkTargetResultSchema, BenchmarkRunResultSchema, KnowledgeBaseWorkflowIdSchema, InterfaceWorkflowIdSchema, RuntimeExecutorInfoSchema, RuntimeStageAcceptanceSchema, RuntimeStageInstructionsSchema, RuntimeStageContractSchema, RuntimeRunSchema, KnowledgeBaseInventorySchema, InterfaceRelevantSchema, InterfaceCoverageSchema, InterfUserConfigSchema, } from "./lib/schema.js";
|
|
9
9
|
export { KNOWLEDGE_BASE_WORKFLOWS, INTERFACE_WORKFLOWS, getKnowledgeBaseWorkflow, getInterfaceWorkflow, resolveKnowledgeBaseWorkflowId, resolveInterfaceWorkflowId, } from "./lib/workflow-definitions.js";
|
|
@@ -19,7 +19,7 @@ export type { RuntimeInstructionMode, LocalInstructionMode, RuntimeStage, Knowle
|
|
|
19
19
|
export type { InterfConfig, ResolvedKnowledgeBase } from "./lib/interf.js";
|
|
20
20
|
export type { DiscoveryResult } from "./lib/discovery.js";
|
|
21
21
|
export type { BenchmarkTargetType, BenchmarkCaseExpect, BenchmarkCase, BenchmarkSpec, LoadedBenchmarkSpec, BenchmarkTargetCandidate, BenchmarkCheckResult, BenchmarkCaseResult, BenchmarkTargetResult, BenchmarkRunResult, } from "./lib/benchmark.js";
|
|
22
|
-
export type { LocalWorkflowDefinition, LocalWorkflowStarterDoc, WorkflowTargetType, } from "./lib/local-workflows.js";
|
|
22
|
+
export type { LocalWorkflowDefinition, LocalWorkflowStarterDoc, WorkflowTargetType, WorkflowValidationResult, } from "./lib/local-workflows.js";
|
|
23
23
|
export type { Agent, InterfSkillHealth, AgentPreflightResult, AgentPreflightOptions, AgentAutomationReadiness, } from "./lib/agents.js";
|
|
24
24
|
export type { InterfTargetKind, InterfCheck, DetectedInterfTarget, WorkflowReporter, WorkflowStageResult, KnowledgeBaseSummarizeResult, KnowledgeBaseCompileResult, InterfaceRetrieveResult, InterfaceAnalyzeResult, InterfaceCompileStageResult, InterfaceCompileResult, InterfacePlanOptions, } from "./lib/workflows.js";
|
|
25
25
|
export type { WorkflowExecutor, WorkflowExecutorKind, WorkflowExecutionProfile, RuntimeExecutorInfo, } from "./lib/executors.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,4BAA4B,EAC5B,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACpB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,iCAAiC,EACjC,mBAAmB,IAAI,2BAA2B,EAClD,eAAe,IAAI,uBAAuB,GAC3C,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,iCAAiC,EACjC,6BAA6B,EAC7B,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { loadState, saveState, initKnowledgeBaseState, initInterfaceState, loadK
|
|
|
5
5
|
export { readInterfConfig, detectInterf, resolveKnowledgeBase, resolveInterfaceKnowledgeBasePath, createKnowledgeBase as createKnowledgeBaseScaffold, createInterface as createInterfaceScaffold, } from "./lib/interf.js";
|
|
6
6
|
export { discoverSourceFiles, loadIgnorePatterns } from "./lib/discovery.js";
|
|
7
7
|
export { listBenchmarkSpecs, loadBenchmarkSpec, loadBenchmarkSpecFromFile, writeBenchmarkSpec, listKnowledgeBaseBenchmarkTargets, listInterfaceBenchmarkTargets, listBenchmarkTargets, runBenchmark, saveBenchmarkRun, } from "./lib/benchmark.js";
|
|
8
|
-
export { isWorkflowId, workflowDefinitionPath, listLocalWorkflowDefinitions, loadLocalWorkflowDefinition, writeLocalWorkflowDefinition, } from "./lib/local-workflows.js";
|
|
8
|
+
export { isWorkflowId, workflowDefinitionPath, listLocalWorkflowDefinitions, loadLocalWorkflowDefinition, writeLocalWorkflowDefinition, validateWorkflowPackage, } from "./lib/local-workflows.js";
|
|
9
9
|
export { detectAgents, installSkills, resolveAgent, spawnAgent, inspectInterfSkills, buildAgentPreflightPrompt, runAgentPreflight, ensureAgentAutomatedRunReady, } from "./lib/agents.js";
|
|
10
10
|
export { InterfConfigSchema, KnowledgeBaseStateSchema, InterfaceStateSchema, KnowledgeBaseHealthSchema, InterfaceHealthSchema, KnowledgeBaseViewSpecSchema, InterfaceViewSpecSchema, KnowledgeBaseSourceAccessSchema, BenchmarkCaseExpectSchema, BenchmarkCaseSchema, BenchmarkSpecSchema, BenchmarkCheckResultSchema, BenchmarkCaseResultSchema, BenchmarkTargetResultSchema, BenchmarkRunResultSchema, KnowledgeBaseWorkflowIdSchema, InterfaceWorkflowIdSchema, RuntimeExecutorInfoSchema, RuntimeStageAcceptanceSchema, RuntimeStageInstructionsSchema, RuntimeStageContractSchema, RuntimeRunSchema, KnowledgeBaseInventorySchema, InterfaceRelevantSchema, InterfaceCoverageSchema, InterfUserConfigSchema, } from "./lib/schema.js";
|
|
11
11
|
export { KNOWLEDGE_BASE_WORKFLOWS, INTERFACE_WORKFLOWS, getKnowledgeBaseWorkflow, getInterfaceWorkflow, resolveKnowledgeBaseWorkflowId, resolveInterfaceWorkflowId, } from "./lib/workflow-definitions.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,8DAA8D;AAE9D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,4BAA4B,EAC5B,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACpB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,iCAAiC,EACjC,mBAAmB,IAAI,2BAA2B,EAClD,eAAe,IAAI,uBAAuB,GAC3C,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,iCAAiC,EACjC,6BAA6B,EAC7B,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,8DAA8D;AAE9D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,4BAA4B,EAC5B,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACpB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,iCAAiC,EACjC,mBAAmB,IAAI,2BAA2B,EAClD,eAAe,IAAI,uBAAuB,GAC3C,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,iCAAiC,EACjC,6BAA6B,EAC7B,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,+BAA+B,EAC/B,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,8BAA8B,EAC9B,0BAA0B,EAC1B,gBAAgB,EAChB,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,+BAA+B,GAChC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,8BAA8B,EAC9B,4BAA4B,EAC5B,8BAA8B,EAC9B,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Agent } from "./agents.js";
|
|
2
|
+
export interface InstalledSkill {
|
|
3
|
+
name: string;
|
|
4
|
+
agents?: string[];
|
|
5
|
+
path?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface InterfSkillHealth {
|
|
8
|
+
missing: string[];
|
|
9
|
+
stale: string[];
|
|
10
|
+
wrongAgent: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function installSkills(agents: Agent[]): {
|
|
13
|
+
agent: string;
|
|
14
|
+
skill: string;
|
|
15
|
+
success: boolean;
|
|
16
|
+
}[];
|
|
17
|
+
export declare function refreshInterfSkills(agent: Agent): boolean;
|
|
18
|
+
export declare function inspectInterfSkills(agent: Agent): InterfSkillHealth;
|
|
19
|
+
export declare function ensureRequiredSkill(agent: Agent, skillName: string | null): string | null;
|
|
20
|
+
export declare function extractRequiredSkill(prompt: string): string | null;
|
|
21
|
+
//# sourceMappingURL=agent-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-skills.d.ts","sourceRoot":"","sources":["../../src/lib/agent-skills.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,CAuBnG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAczD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAiDnE;AAiDD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAoBzF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASlE"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import { SKILLS_DIR } from "./config.js";
|
|
7
|
+
let installedSkillsCache = null;
|
|
8
|
+
const autoRefreshAttemptedAgents = new Set();
|
|
9
|
+
const SKILLS_LIST_ARGS = ["-y", "skills", "list", "-g", "--json"];
|
|
10
|
+
export function installSkills(agents) {
|
|
11
|
+
const results = [];
|
|
12
|
+
if (!existsSync(SKILLS_DIR))
|
|
13
|
+
return results;
|
|
14
|
+
installedSkillsCache = null;
|
|
15
|
+
const skills = listBundledInterfSkills();
|
|
16
|
+
for (const skill of skills) {
|
|
17
|
+
for (const agent of agents) {
|
|
18
|
+
try {
|
|
19
|
+
const target = join(agent.skillsDir, skill);
|
|
20
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
21
|
+
cpSync(join(SKILLS_DIR, skill), target, { recursive: true });
|
|
22
|
+
results.push({ agent: agent.displayName, skill, success: true });
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
results.push({ agent: agent.displayName, skill, success: false });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
export function refreshInterfSkills(agent) {
|
|
32
|
+
installedSkillsCache = null;
|
|
33
|
+
try {
|
|
34
|
+
execFileSync("npx", ["-y", "skills", "add", "--global", "--yes", SKILLS_DIR], { stdio: "ignore" });
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Ignore and fall back to direct installation below.
|
|
38
|
+
}
|
|
39
|
+
installSkills([agent]);
|
|
40
|
+
installedSkillsCache = null;
|
|
41
|
+
const health = inspectInterfSkills(agent);
|
|
42
|
+
return health.missing.length === 0 && health.stale.length === 0 && health.wrongAgent.length === 0;
|
|
43
|
+
}
|
|
44
|
+
export function inspectInterfSkills(agent) {
|
|
45
|
+
const health = { missing: [], stale: [], wrongAgent: [] };
|
|
46
|
+
const bundledSkills = listBundledInterfSkills();
|
|
47
|
+
if (bundledSkills.length === 0)
|
|
48
|
+
return health;
|
|
49
|
+
const installed = listInstalledSkills();
|
|
50
|
+
for (const skillName of bundledSkills) {
|
|
51
|
+
const localStatus = getAgentLocalSkillStatus(agent, skillName);
|
|
52
|
+
if (localStatus.current) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (localStatus.present) {
|
|
56
|
+
health.stale.push(skillName);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (installed) {
|
|
60
|
+
const entry = installed.find((item) => item.name === skillName);
|
|
61
|
+
if (!entry) {
|
|
62
|
+
health.missing.push(skillName);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const agents = entry.agents ?? [];
|
|
66
|
+
if (agents.length > 0 && !agents.includes(agent.displayName)) {
|
|
67
|
+
health.wrongAgent.push(skillName);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (!entry.path || !bundledSkillMatchesInstalledPath(skillName, join(entry.path, "SKILL.md"))) {
|
|
71
|
+
health.stale.push(skillName);
|
|
72
|
+
}
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const candidatePaths = installedSkillCandidatePaths(agent, skillName);
|
|
76
|
+
if (candidatePaths.length === 0) {
|
|
77
|
+
health.missing.push(skillName);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const hasCurrentCopy = candidatePaths.some((path) => bundledSkillMatchesInstalledPath(skillName, path));
|
|
81
|
+
if (!hasCurrentCopy) {
|
|
82
|
+
health.stale.push(skillName);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return health;
|
|
86
|
+
}
|
|
87
|
+
function validateInstalledSkill(agent, skillName) {
|
|
88
|
+
if (!skillName)
|
|
89
|
+
return null;
|
|
90
|
+
const localStatus = getAgentLocalSkillStatus(agent, skillName);
|
|
91
|
+
if (localStatus.current)
|
|
92
|
+
return null;
|
|
93
|
+
if (localStatus.present) {
|
|
94
|
+
return `Skill "${skillName}" is installed, but outdated. Run \`interf init\` and refresh Interf skills before syncing.`;
|
|
95
|
+
}
|
|
96
|
+
const installed = listInstalledSkills();
|
|
97
|
+
const bundledPath = join(SKILLS_DIR, skillName, "SKILL.md");
|
|
98
|
+
if (installed) {
|
|
99
|
+
const entry = installed.find((item) => item.name === skillName);
|
|
100
|
+
if (!entry) {
|
|
101
|
+
return `Skill "${skillName}" is not installed. Run \`interf init\` to install current Interf skills before syncing.`;
|
|
102
|
+
}
|
|
103
|
+
const agents = entry.agents ?? [];
|
|
104
|
+
if (agents.length > 0 && !agents.includes(agent.displayName)) {
|
|
105
|
+
return `Skill "${skillName}" is installed, but not for ${agent.displayName}. Run \`interf init\` and install skills for that agent before syncing.`;
|
|
106
|
+
}
|
|
107
|
+
if (existsSync(bundledPath)) {
|
|
108
|
+
const installedPath = entry.path ? join(entry.path, "SKILL.md") : null;
|
|
109
|
+
if (!installedPath || !bundledSkillMatchesInstalledPath(skillName, installedPath)) {
|
|
110
|
+
return `Skill "${skillName}" is installed, but outdated. Run \`interf init\` and refresh Interf skills before syncing.`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const fallbackPaths = installedSkillCandidatePaths(agent, skillName);
|
|
116
|
+
if (fallbackPaths.length === 0) {
|
|
117
|
+
return `Skill "${skillName}" is not installed for ${agent.displayName}. Run \`interf init\` to install current Interf skills before syncing.`;
|
|
118
|
+
}
|
|
119
|
+
if (existsSync(bundledPath)) {
|
|
120
|
+
const hasCurrentCopy = fallbackPaths.some((path) => bundledSkillMatchesInstalledPath(skillName, path));
|
|
121
|
+
if (!hasCurrentCopy) {
|
|
122
|
+
return `Skill "${skillName}" is installed, but outdated. Run \`interf init\` and refresh Interf skills before syncing.`;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
export function ensureRequiredSkill(agent, skillName) {
|
|
128
|
+
const initialError = validateInstalledSkill(agent, skillName);
|
|
129
|
+
if (!initialError || !skillName)
|
|
130
|
+
return initialError;
|
|
131
|
+
if (autoRefreshAttemptedAgents.has(agent.name)) {
|
|
132
|
+
return initialError;
|
|
133
|
+
}
|
|
134
|
+
autoRefreshAttemptedAgents.add(agent.name);
|
|
135
|
+
console.log(chalk.dim(` Refreshing Interf skills for ${agent.displayName}...`));
|
|
136
|
+
if (!refreshInterfSkills(agent)) {
|
|
137
|
+
return validateInstalledSkill(agent, skillName) ?? initialError;
|
|
138
|
+
}
|
|
139
|
+
const finalError = validateInstalledSkill(agent, skillName);
|
|
140
|
+
if (!finalError) {
|
|
141
|
+
console.log(chalk.dim(" Interf skills refreshed."));
|
|
142
|
+
}
|
|
143
|
+
return finalError;
|
|
144
|
+
}
|
|
145
|
+
export function extractRequiredSkill(prompt) {
|
|
146
|
+
for (const line of prompt.split("\n")) {
|
|
147
|
+
const trimmed = line.trim();
|
|
148
|
+
if (!trimmed)
|
|
149
|
+
continue;
|
|
150
|
+
if (!trimmed.startsWith("/"))
|
|
151
|
+
return null;
|
|
152
|
+
return trimmed.slice(1);
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
function listInstalledSkills() {
|
|
157
|
+
if (installedSkillsCache)
|
|
158
|
+
return installedSkillsCache;
|
|
159
|
+
try {
|
|
160
|
+
const output = execFileSync("npx", SKILLS_LIST_ARGS, { encoding: "utf-8" });
|
|
161
|
+
installedSkillsCache = JSON.parse(output);
|
|
162
|
+
return installedSkillsCache;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function listBundledInterfSkills() {
|
|
169
|
+
if (!existsSync(SKILLS_DIR))
|
|
170
|
+
return [];
|
|
171
|
+
return walkBundledInterfSkills(SKILLS_DIR);
|
|
172
|
+
}
|
|
173
|
+
function walkBundledInterfSkills(rootPath, prefix = "") {
|
|
174
|
+
const skills = [];
|
|
175
|
+
for (const entry of readdirSync(rootPath)) {
|
|
176
|
+
const dirPath = join(rootPath, entry);
|
|
177
|
+
if (!statSync(dirPath).isDirectory())
|
|
178
|
+
continue;
|
|
179
|
+
const skillName = prefix ? `${prefix}/${entry}` : entry;
|
|
180
|
+
if (existsSync(join(dirPath, "SKILL.md"))) {
|
|
181
|
+
skills.push(skillName);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
skills.push(...walkBundledInterfSkills(dirPath, skillName));
|
|
185
|
+
}
|
|
186
|
+
return skills.sort();
|
|
187
|
+
}
|
|
188
|
+
function installedSkillCandidatePaths(agent, skillName) {
|
|
189
|
+
const candidates = new Set();
|
|
190
|
+
candidates.add(join(agent.skillsDir, skillName, "SKILL.md"));
|
|
191
|
+
candidates.add(join(homedir(), ".agents", "skills", skillName, "SKILL.md"));
|
|
192
|
+
return Array.from(candidates).filter((path) => existsSync(path));
|
|
193
|
+
}
|
|
194
|
+
function bundledSkillMatchesInstalledPath(skillName, installedSkillPath) {
|
|
195
|
+
const bundledSkillPath = join(SKILLS_DIR, skillName, "SKILL.md");
|
|
196
|
+
if (!existsSync(bundledSkillPath) || !existsSync(installedSkillPath))
|
|
197
|
+
return false;
|
|
198
|
+
const bundled = normalizeSkillDoc(readFileSync(bundledSkillPath, "utf-8"));
|
|
199
|
+
const installed = normalizeSkillDoc(readFileSync(installedSkillPath, "utf-8"));
|
|
200
|
+
return bundled === installed;
|
|
201
|
+
}
|
|
202
|
+
function normalizeSkillDoc(content) {
|
|
203
|
+
return content.replace(/\r\n/g, "\n").trim();
|
|
204
|
+
}
|
|
205
|
+
function getAgentLocalSkillStatus(agent, skillName) {
|
|
206
|
+
const localSkillPath = join(agent.skillsDir, skillName, "SKILL.md");
|
|
207
|
+
if (!existsSync(localSkillPath)) {
|
|
208
|
+
return { present: false, current: false };
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
present: true,
|
|
212
|
+
current: bundledSkillMatchesInstalledPath(skillName, localSkillPath),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=agent-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-skills.js","sourceRoot":"","sources":["../../src/lib/agent-skills.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/agents.d.ts
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import type { WorkflowExecutionProfile } from "./executors.js";
|
|
3
|
+
export { refreshInterfSkills, inspectInterfSkills, ensureRequiredSkill, extractRequiredSkill, } from "./agent-skills.js";
|
|
4
|
+
export type { InterfSkillHealth } from "./agent-skills.js";
|
|
5
|
+
/**
|
|
6
|
+
* Install bundled Interf skills to the given agents (or all detected agents).
|
|
7
|
+
* Wrapper preserves the optional-agents API from the original single-module surface.
|
|
8
|
+
*/
|
|
9
|
+
export declare function installSkills(agents?: Agent[]): {
|
|
10
|
+
agent: string;
|
|
11
|
+
skill: string;
|
|
12
|
+
success: boolean;
|
|
13
|
+
}[];
|
|
3
14
|
export interface Agent {
|
|
4
15
|
name: string;
|
|
5
16
|
displayName: string;
|
|
6
17
|
skillsDir: string;
|
|
7
18
|
command: string;
|
|
8
19
|
}
|
|
9
|
-
export interface InterfSkillHealth {
|
|
10
|
-
missing: string[];
|
|
11
|
-
stale: string[];
|
|
12
|
-
wrongAgent: string[];
|
|
13
|
-
}
|
|
14
20
|
export interface AgentPreflightResult {
|
|
15
21
|
ok: boolean;
|
|
16
22
|
code: number | null;
|
|
@@ -34,19 +40,11 @@ export interface SpawnAgentOptions {
|
|
|
34
40
|
completionCheck?: (() => boolean) | null;
|
|
35
41
|
}
|
|
36
42
|
export declare function detectAgents(): Agent[];
|
|
37
|
-
export declare function commandExists(command: string): boolean;
|
|
38
43
|
export declare function supportsAutomatedRuns(agent: Agent): boolean;
|
|
39
44
|
export declare function resolveAgent(): {
|
|
40
45
|
agent: Agent | null;
|
|
41
46
|
error?: string;
|
|
42
47
|
};
|
|
43
|
-
export declare function installSkills(agents?: Agent[]): {
|
|
44
|
-
agent: string;
|
|
45
|
-
skill: string;
|
|
46
|
-
success: boolean;
|
|
47
|
-
}[];
|
|
48
|
-
export declare function refreshInterfSkills(agent: Agent): boolean;
|
|
49
|
-
export declare function inspectInterfSkills(agent: Agent): InterfSkillHealth;
|
|
50
48
|
export declare function spawnAgent(agent: Agent, dirPath: string, prompt: string, options?: SpawnAgentOptions): Promise<number>;
|
|
51
49
|
export declare function buildAgentArgs(agent: Agent, prompt: string, executionProfile?: WorkflowExecutionProfile): string[];
|
|
52
50
|
export declare function buildAgentPreflightPrompt(): string;
|
package/dist/lib/agents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/lib/agents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAG/D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,CAEpG;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AA+BD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;IAC5C,eAAe,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C;AAID,wBAAgB,YAAY,IAAI,KAAK,EAAE,CAKtC;AAWD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE3D;AAED,wBAAgB,YAAY,IAAI;IAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAkDtE;AAkED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAsKjB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,gBAAgB,GAAE,wBAA6B,GAC9C,MAAM,EAAE,CA0CV;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAQlD;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CAsCtB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,iBAAiB,CAAC;CACpC,GACL,wBAAwB,CAiB1B;AAmJD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAyBvF"}
|
package/dist/lib/agents.js
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import { appendFileSync, existsSync, mkdirSync,
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, mkdtempSync, rmSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { homedir, tmpdir } from "node:os";
|
|
4
4
|
import { execFileSync, spawn, spawnSync } from "node:child_process";
|
|
5
|
-
import { SKILLS_DIR } from "./config.js";
|
|
6
5
|
import { loadUserConfig } from "./user-config.js";
|
|
6
|
+
import { ensureRequiredSkill, extractRequiredSkill, installSkills as installSkillsCore, } from "./agent-skills.js";
|
|
7
7
|
import chalk from "chalk";
|
|
8
|
+
// Re-export skill functions so existing imports from "./agents.js" still resolve.
|
|
9
|
+
export { refreshInterfSkills, inspectInterfSkills, ensureRequiredSkill, extractRequiredSkill, } from "./agent-skills.js";
|
|
10
|
+
/**
|
|
11
|
+
* Install bundled Interf skills to the given agents (or all detected agents).
|
|
12
|
+
* Wrapper preserves the optional-agents API from the original single-module surface.
|
|
13
|
+
*/
|
|
14
|
+
export function installSkills(agents) {
|
|
15
|
+
return installSkillsCore(agents ?? detectAgents());
|
|
16
|
+
}
|
|
8
17
|
const SHOW_AGENT_TOOL_EVENTS = process.env.INTERF_DEBUG_AGENT_TOOLS === "1";
|
|
9
18
|
const AGENTS = [
|
|
10
19
|
{
|
|
@@ -30,10 +39,7 @@ const CODEX_NOISE_PATTERNS = [
|
|
|
30
39
|
/codex_core_skills::loader: failed to stat skills entry .*\/(interf-[^ ]+|knowledge-base\/[^ ]+|interface\/[^ ]+) \(symlink\): No such file or directory/,
|
|
31
40
|
/codex_core::codex: failed to load skill .*\/gstack\/SKILL\.md: invalid description: exceeds maximum length of 1024 characters/,
|
|
32
41
|
];
|
|
33
|
-
const SKILLS_LIST_ARGS = ["-y", "skills", "list", "-g", "--json"];
|
|
34
42
|
const VISIBLE_STATUS_PREFIXES = ["STATUS:", "DONE:", "BLOCKED:", "ERROR:"];
|
|
35
|
-
let installedSkillsCache = null;
|
|
36
|
-
const autoRefreshAttemptedAgents = new Set();
|
|
37
43
|
const successfulPreflightAgents = new Set();
|
|
38
44
|
export function detectAgents() {
|
|
39
45
|
return AGENTS.filter((a) => {
|
|
@@ -41,7 +47,7 @@ export function detectAgents() {
|
|
|
41
47
|
return existsSync(dir);
|
|
42
48
|
});
|
|
43
49
|
}
|
|
44
|
-
|
|
50
|
+
function commandExists(command) {
|
|
45
51
|
try {
|
|
46
52
|
execFileSync("which", [command], { stdio: "ignore" });
|
|
47
53
|
return true;
|
|
@@ -94,84 +100,6 @@ export function resolveAgent() {
|
|
|
94
100
|
}
|
|
95
101
|
return { agent: detected[0] };
|
|
96
102
|
}
|
|
97
|
-
export function installSkills(agents) {
|
|
98
|
-
const targets = agents ?? detectAgents();
|
|
99
|
-
const results = [];
|
|
100
|
-
if (!existsSync(SKILLS_DIR))
|
|
101
|
-
return results;
|
|
102
|
-
installedSkillsCache = null;
|
|
103
|
-
const skills = listBundledInterfSkills();
|
|
104
|
-
for (const skill of skills) {
|
|
105
|
-
for (const agent of targets) {
|
|
106
|
-
try {
|
|
107
|
-
const target = join(agent.skillsDir, skill);
|
|
108
|
-
mkdirSync(dirname(target), { recursive: true });
|
|
109
|
-
cpSync(join(SKILLS_DIR, skill), target, { recursive: true });
|
|
110
|
-
results.push({ agent: agent.displayName, skill, success: true });
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
results.push({ agent: agent.displayName, skill, success: false });
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return results;
|
|
118
|
-
}
|
|
119
|
-
export function refreshInterfSkills(agent) {
|
|
120
|
-
installedSkillsCache = null;
|
|
121
|
-
try {
|
|
122
|
-
execFileSync("npx", ["-y", "skills", "add", "--global", "--yes", SKILLS_DIR], { stdio: "ignore" });
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
// Ignore and fall back to direct installation below.
|
|
126
|
-
}
|
|
127
|
-
installSkills([agent]);
|
|
128
|
-
installedSkillsCache = null;
|
|
129
|
-
const health = inspectInterfSkills(agent);
|
|
130
|
-
return health.missing.length === 0 && health.stale.length === 0 && health.wrongAgent.length === 0;
|
|
131
|
-
}
|
|
132
|
-
export function inspectInterfSkills(agent) {
|
|
133
|
-
const health = { missing: [], stale: [], wrongAgent: [] };
|
|
134
|
-
const bundledSkills = listBundledInterfSkills();
|
|
135
|
-
if (bundledSkills.length === 0)
|
|
136
|
-
return health;
|
|
137
|
-
const installed = listInstalledSkills();
|
|
138
|
-
for (const skillName of bundledSkills) {
|
|
139
|
-
const localStatus = getAgentLocalSkillStatus(agent, skillName);
|
|
140
|
-
if (localStatus.current) {
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
if (localStatus.present) {
|
|
144
|
-
health.stale.push(skillName);
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
if (installed) {
|
|
148
|
-
const entry = installed.find((item) => item.name === skillName);
|
|
149
|
-
if (!entry) {
|
|
150
|
-
health.missing.push(skillName);
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
const agents = entry.agents ?? [];
|
|
154
|
-
if (agents.length > 0 && !agents.includes(agent.displayName)) {
|
|
155
|
-
health.wrongAgent.push(skillName);
|
|
156
|
-
continue;
|
|
157
|
-
}
|
|
158
|
-
if (!entry.path || !bundledSkillMatchesInstalledPath(skillName, join(entry.path, "SKILL.md"))) {
|
|
159
|
-
health.stale.push(skillName);
|
|
160
|
-
}
|
|
161
|
-
continue;
|
|
162
|
-
}
|
|
163
|
-
const candidatePaths = installedSkillCandidatePaths(agent, skillName);
|
|
164
|
-
if (candidatePaths.length === 0) {
|
|
165
|
-
health.missing.push(skillName);
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
const hasCurrentCopy = candidatePaths.some((path) => bundledSkillMatchesInstalledPath(skillName, path));
|
|
169
|
-
if (!hasCurrentCopy) {
|
|
170
|
-
health.stale.push(skillName);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
return health;
|
|
174
|
-
}
|
|
175
103
|
function appendAgentEventLog(eventLogPath, event) {
|
|
176
104
|
if (!eventLogPath)
|
|
177
105
|
return;
|
|
@@ -629,132 +557,4 @@ function sanitizeAgentStderr(stderr) {
|
|
|
629
557
|
.join("\n")
|
|
630
558
|
.trim();
|
|
631
559
|
}
|
|
632
|
-
function validateInstalledSkill(agent, skillName) {
|
|
633
|
-
if (!skillName)
|
|
634
|
-
return null;
|
|
635
|
-
const localStatus = getAgentLocalSkillStatus(agent, skillName);
|
|
636
|
-
if (localStatus.current)
|
|
637
|
-
return null;
|
|
638
|
-
if (localStatus.present) {
|
|
639
|
-
return `Skill "${skillName}" is installed, but outdated. Run \`interf init\` and refresh Interf skills before syncing.`;
|
|
640
|
-
}
|
|
641
|
-
const installed = listInstalledSkills();
|
|
642
|
-
const bundledPath = join(SKILLS_DIR, skillName, "SKILL.md");
|
|
643
|
-
if (installed) {
|
|
644
|
-
const entry = installed.find((item) => item.name === skillName);
|
|
645
|
-
if (!entry) {
|
|
646
|
-
return `Skill "${skillName}" is not installed. Run \`interf init\` to install current Interf skills before syncing.`;
|
|
647
|
-
}
|
|
648
|
-
const agents = entry.agents ?? [];
|
|
649
|
-
if (agents.length > 0 && !agents.includes(agent.displayName)) {
|
|
650
|
-
return `Skill "${skillName}" is installed, but not for ${agent.displayName}. Run \`interf init\` and install skills for that agent before syncing.`;
|
|
651
|
-
}
|
|
652
|
-
if (existsSync(bundledPath)) {
|
|
653
|
-
const installedPath = entry.path ? join(entry.path, "SKILL.md") : null;
|
|
654
|
-
if (!installedPath || !bundledSkillMatchesInstalledPath(skillName, installedPath)) {
|
|
655
|
-
return `Skill "${skillName}" is installed, but outdated. Run \`interf init\` and refresh Interf skills before syncing.`;
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
return null;
|
|
659
|
-
}
|
|
660
|
-
const fallbackPaths = installedSkillCandidatePaths(agent, skillName);
|
|
661
|
-
if (fallbackPaths.length === 0) {
|
|
662
|
-
return `Skill "${skillName}" is not installed for ${agent.displayName}. Run \`interf init\` to install current Interf skills before syncing.`;
|
|
663
|
-
}
|
|
664
|
-
if (existsSync(bundledPath)) {
|
|
665
|
-
const hasCurrentCopy = fallbackPaths.some((path) => bundledSkillMatchesInstalledPath(skillName, path));
|
|
666
|
-
if (!hasCurrentCopy) {
|
|
667
|
-
return `Skill "${skillName}" is installed, but outdated. Run \`interf init\` and refresh Interf skills before syncing.`;
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
return null;
|
|
671
|
-
}
|
|
672
|
-
function ensureRequiredSkill(agent, skillName) {
|
|
673
|
-
const initialError = validateInstalledSkill(agent, skillName);
|
|
674
|
-
if (!initialError || !skillName)
|
|
675
|
-
return initialError;
|
|
676
|
-
if (autoRefreshAttemptedAgents.has(agent.name)) {
|
|
677
|
-
return initialError;
|
|
678
|
-
}
|
|
679
|
-
autoRefreshAttemptedAgents.add(agent.name);
|
|
680
|
-
console.log(chalk.dim(` Refreshing Interf skills for ${agent.displayName}...`));
|
|
681
|
-
if (!refreshInterfSkills(agent)) {
|
|
682
|
-
return validateInstalledSkill(agent, skillName) ?? initialError;
|
|
683
|
-
}
|
|
684
|
-
const finalError = validateInstalledSkill(agent, skillName);
|
|
685
|
-
if (!finalError) {
|
|
686
|
-
console.log(chalk.dim(" Interf skills refreshed."));
|
|
687
|
-
}
|
|
688
|
-
return finalError;
|
|
689
|
-
}
|
|
690
|
-
function listInstalledSkills() {
|
|
691
|
-
if (installedSkillsCache)
|
|
692
|
-
return installedSkillsCache;
|
|
693
|
-
try {
|
|
694
|
-
const output = execFileSync("npx", SKILLS_LIST_ARGS, { encoding: "utf-8" });
|
|
695
|
-
installedSkillsCache = JSON.parse(output);
|
|
696
|
-
return installedSkillsCache;
|
|
697
|
-
}
|
|
698
|
-
catch {
|
|
699
|
-
return null;
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
|
-
function extractRequiredSkill(prompt) {
|
|
703
|
-
for (const line of prompt.split("\n")) {
|
|
704
|
-
const trimmed = line.trim();
|
|
705
|
-
if (!trimmed)
|
|
706
|
-
continue;
|
|
707
|
-
if (!trimmed.startsWith("/"))
|
|
708
|
-
return null;
|
|
709
|
-
return trimmed.slice(1);
|
|
710
|
-
}
|
|
711
|
-
return null;
|
|
712
|
-
}
|
|
713
|
-
function listBundledInterfSkills() {
|
|
714
|
-
if (!existsSync(SKILLS_DIR))
|
|
715
|
-
return [];
|
|
716
|
-
return walkBundledInterfSkills(SKILLS_DIR);
|
|
717
|
-
}
|
|
718
|
-
function walkBundledInterfSkills(rootPath, prefix = "") {
|
|
719
|
-
const skills = [];
|
|
720
|
-
for (const entry of readdirSync(rootPath)) {
|
|
721
|
-
const dirPath = join(rootPath, entry);
|
|
722
|
-
if (!statSync(dirPath).isDirectory())
|
|
723
|
-
continue;
|
|
724
|
-
const skillName = prefix ? `${prefix}/${entry}` : entry;
|
|
725
|
-
if (existsSync(join(dirPath, "SKILL.md"))) {
|
|
726
|
-
skills.push(skillName);
|
|
727
|
-
continue;
|
|
728
|
-
}
|
|
729
|
-
skills.push(...walkBundledInterfSkills(dirPath, skillName));
|
|
730
|
-
}
|
|
731
|
-
return skills.sort();
|
|
732
|
-
}
|
|
733
|
-
function installedSkillCandidatePaths(agent, skillName) {
|
|
734
|
-
const candidates = new Set();
|
|
735
|
-
candidates.add(join(agent.skillsDir, skillName, "SKILL.md"));
|
|
736
|
-
candidates.add(join(homedir(), ".agents", "skills", skillName, "SKILL.md"));
|
|
737
|
-
return Array.from(candidates).filter((path) => existsSync(path));
|
|
738
|
-
}
|
|
739
|
-
function bundledSkillMatchesInstalledPath(skillName, installedSkillPath) {
|
|
740
|
-
const bundledSkillPath = join(SKILLS_DIR, skillName, "SKILL.md");
|
|
741
|
-
if (!existsSync(bundledSkillPath) || !existsSync(installedSkillPath))
|
|
742
|
-
return false;
|
|
743
|
-
const bundled = normalizeSkillDoc(readFileSync(bundledSkillPath, "utf-8"));
|
|
744
|
-
const installed = normalizeSkillDoc(readFileSync(installedSkillPath, "utf-8"));
|
|
745
|
-
return bundled === installed;
|
|
746
|
-
}
|
|
747
|
-
function normalizeSkillDoc(content) {
|
|
748
|
-
return content.replace(/\r\n/g, "\n").trim();
|
|
749
|
-
}
|
|
750
|
-
function getAgentLocalSkillStatus(agent, skillName) {
|
|
751
|
-
const localSkillPath = join(agent.skillsDir, skillName, "SKILL.md");
|
|
752
|
-
if (!existsSync(localSkillPath)) {
|
|
753
|
-
return { present: false, current: false };
|
|
754
|
-
}
|
|
755
|
-
return {
|
|
756
|
-
present: true,
|
|
757
|
-
current: bundledSkillMatchesInstalledPath(skillName, localSkillPath),
|
|
758
|
-
};
|
|
759
|
-
}
|
|
760
560
|
//# sourceMappingURL=agents.js.map
|