@tiangong-ai/cli 0.0.34 → 0.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/AGENTS.md +18 -6
  2. package/README.md +147 -2
  3. package/dist/research/orchestration.js +651 -24
  4. package/dist/research/orchestration.js.map +1 -1
  5. package/dist/research/workspace/audit-bundle.d.ts +44 -0
  6. package/dist/research/workspace/audit-bundle.js +357 -0
  7. package/dist/research/workspace/audit-bundle.js.map +1 -0
  8. package/dist/research/workspace/input-plan.js +27 -1
  9. package/dist/research/workspace/input-plan.js.map +1 -1
  10. package/dist/research/workspace/preflight.d.ts +34 -2
  11. package/dist/research/workspace/preflight.js +145 -1
  12. package/dist/research/workspace/preflight.js.map +1 -1
  13. package/dist/research/workspace/projects.d.ts +32 -5
  14. package/dist/research/workspace/projects.js +263 -7
  15. package/dist/research/workspace/projects.js.map +1 -1
  16. package/dist/research/workspace/publication-workflow.d.ts +146 -0
  17. package/dist/research/workspace/publication-workflow.js +994 -0
  18. package/dist/research/workspace/publication-workflow.js.map +1 -0
  19. package/dist/research/workspace/publication.d.ts +110 -0
  20. package/dist/research/workspace/publication.js +246 -0
  21. package/dist/research/workspace/publication.js.map +1 -0
  22. package/dist/research/workspace/research-policy-wizard.d.ts +40 -0
  23. package/dist/research/workspace/research-policy-wizard.js +167 -0
  24. package/dist/research/workspace/research-policy-wizard.js.map +1 -0
  25. package/dist/research/workspace/research-policy.d.ts +70 -0
  26. package/dist/research/workspace/research-policy.js +886 -0
  27. package/dist/research/workspace/research-policy.js.map +1 -0
  28. package/dist/research/workspace/runtime.d.ts +17 -0
  29. package/dist/research/workspace/runtime.js +84 -2
  30. package/dist/research/workspace/runtime.js.map +1 -1
  31. package/dist/research/workspace/sanitization.js +9 -3
  32. package/dist/research/workspace/sanitization.js.map +1 -1
  33. package/dist/research/workspace/scientific-design.d.ts +336 -0
  34. package/dist/research/workspace/scientific-design.js +1845 -0
  35. package/dist/research/workspace/scientific-design.js.map +1 -0
  36. package/dist/research/workspace/scientific-review.d.ts +101 -0
  37. package/dist/research/workspace/scientific-review.js +1167 -0
  38. package/dist/research/workspace/scientific-review.js.map +1 -0
  39. package/dist/research/workspace/setup-catalog.js +2 -2
  40. package/dist/research/workspace/setup-wizard.d.ts +18 -1
  41. package/dist/research/workspace/setup-wizard.js +1 -1
  42. package/dist/research/workspace/setup-wizard.js.map +1 -1
  43. package/dist/research/workspace/setup.d.ts +1 -0
  44. package/dist/research/workspace/setup.js +64 -0
  45. package/dist/research/workspace/setup.js.map +1 -1
  46. package/dist/research/workspace/types.d.ts +58 -0
  47. package/dist/research/workspace/workspace.js +25 -7
  48. package/dist/research/workspace/workspace.js.map +1 -1
  49. package/package.json +4 -2
@@ -0,0 +1,167 @@
1
+ import { resolve } from "node:path";
2
+ import { CliError } from "../../errors.js";
3
+ import { stringifyJson, write } from "../../io.js";
4
+ import { createResearchSetupWizardTheme, shouldUseResearchSetupWizardColor, TextResearchSetupWizardPrompt, } from "./setup-wizard.js";
5
+ import { resolveVerifiedResearchSetupSkillDirectory } from "./setup.js";
6
+ import { approveResearchPolicy, completeResearchExactJournalPolicy, completeResearchPublicationBrief, initializeResearchPolicy, inspectResearchPolicyCatalog, inspectResearchPolicyStatus, } from "./research-policy.js";
7
+ const ORCHESTRATOR_SKILL_ID = "tiangong.auto-research";
8
+ export async function resolveInstalledResearchPolicySource(rootInput, environment = process.env) {
9
+ const root = resolve(rootInput);
10
+ try {
11
+ return await resolveVerifiedResearchSetupSkillDirectory(root, ORCHESTRATOR_SKILL_ID, environment);
12
+ }
13
+ catch (error) {
14
+ const code = typeof error === "object" && error !== null && "code" in error
15
+ ? String(error.code)
16
+ : "RESEARCH_POLICY_SOURCE_REQUIRED";
17
+ throw new CliError("A verified project-installed tiangong-auto-research orchestrator is required for Research Policy defaults.", {
18
+ code: "RESEARCH_POLICY_SOURCE_REQUIRED",
19
+ exitCode: code === "RESEARCH_SETUP_CLI_DRIFT" ? 3 : 2,
20
+ details: {
21
+ reasonCode: code,
22
+ minimumAction: "Run research setup, select the tiangong.auto-research orchestrator for project scope, apply the reviewed plan, and reach READY.",
23
+ retryCommand: `tiangong-ai research setup --workspace ${root}`,
24
+ },
25
+ });
26
+ }
27
+ }
28
+ export async function executeResearchPolicyWizard(input) {
29
+ const root = resolve(input.root);
30
+ const sourceRoot = input.sourceRoot ??
31
+ (await resolveInstalledResearchPolicySource(root, input.environment ?? process.env));
32
+ const catalog = await inspectResearchPolicyCatalog(sourceRoot);
33
+ input.prompt.note("Top-journal Research Policy", "brand");
34
+ input.prompt.note("The bundled policies are generic defaults, not evidence of target-journal fit or acceptance. Review and customize them for the field, article type, and current official journal guidance.", "warning");
35
+ const articleType = await selectCatalogValue(input.prompt, "Article type", catalog.categories.articleTypes);
36
+ const field = await selectCatalogValue(input.prompt, "Research field", catalog.categories.fields);
37
+ const journalClass = await selectCatalogValue(input.prompt, "Target journal class", catalog.categories.journalClasses);
38
+ const includeExactJournal = await input.prompt.confirm("Add and fully customize an exact target-journal policy now?", false);
39
+ await initializeResearchPolicy({
40
+ root,
41
+ projectId: input.projectId,
42
+ sourceRoot,
43
+ articleType,
44
+ field,
45
+ journalClass,
46
+ includeExactJournalTemplate: includeExactJournal,
47
+ });
48
+ const centralQuestion = await requiredPolicyInput(input.prompt, "Central research question", 8);
49
+ const centralClaim = await requiredPolicyInput(input.prompt, "Central claim", 8);
50
+ const centralOutcome = await requiredPolicyInput(input.prompt, "Central outcome", 3);
51
+ const contributionType = await requiredPolicyInput(input.prompt, "Contribution type", 3);
52
+ let targetJournal = null;
53
+ if (includeExactJournal) {
54
+ targetJournal = await requiredPolicyInput(input.prompt, "Exact target journal", 2);
55
+ const officialGuidelinesUrl = await requiredPolicyInput(input.prompt, "Official journal guidelines HTTPS URL", 10);
56
+ const officialGuidelinesRetrievedAt = await requiredPolicyInput(input.prompt, "Official guidelines retrieval date (YYYY-MM-DD)", 10, new Date().toISOString().slice(0, 10));
57
+ await completeResearchExactJournalPolicy(root, input.projectId, {
58
+ journalName: targetJournal,
59
+ officialGuidelinesUrl,
60
+ officialGuidelinesRetrievedAt,
61
+ scope: await requiredPolicyInput(input.prompt, "Journal scope and audience", 12),
62
+ editorialSignificance: await requiredPolicyInput(input.prompt, "Journal editorial significance threshold", 12),
63
+ evidenceExpectations: await requiredPolicyInput(input.prompt, "Journal evidence expectations", 12),
64
+ methodsAndValidation: await requiredPolicyInput(input.prompt, "Journal methods and validation requirements", 12),
65
+ reproducibility: await requiredPolicyInput(input.prompt, "Journal reproducibility requirements", 12),
66
+ deskRejectTriggers: await requiredPolicyInput(input.prompt, "Journal desk-reject triggers", 12),
67
+ requiredReviewerQuestions: await requiredPolicyInput(input.prompt, "Journal-specific reviewer questions", 12),
68
+ permittedPivots: await requiredPolicyInput(input.prompt, "Permitted research or journal pivots", 12),
69
+ });
70
+ }
71
+ let status = await completeResearchPublicationBrief(root, input.projectId, {
72
+ centralQuestion,
73
+ centralClaim,
74
+ centralOutcome,
75
+ contributionType,
76
+ targetJournal,
77
+ });
78
+ input.prompt.note(`Draft created at ${status.policyDirectory}. Review every policy document before approval.`, "summary");
79
+ let approved = false;
80
+ const acknowledgeDefaults = await input.prompt.confirm("I acknowledge that the remaining bundled defaults are generic and do not establish journal acceptance", false);
81
+ if (acknowledgeDefaults) {
82
+ approved = await input.prompt.confirm("Approve this exact Research Policy hash for top-journal execution?", false);
83
+ }
84
+ if (approved) {
85
+ status = await approveResearchPolicy(root, input.projectId, {
86
+ confirm: true,
87
+ acknowledgeDefaults: true,
88
+ });
89
+ input.prompt.note(`Approved exact policy hash ${status.resolvedPolicySha256}. Any later edit invalidates this approval.`, "success");
90
+ }
91
+ else {
92
+ status = await inspectResearchPolicyStatus(root, input.projectId);
93
+ input.prompt.note("Policy remains a draft. Customize it, then approve the exact changed hash before project initialization.", "warning");
94
+ }
95
+ return {
96
+ schemaVersion: 1,
97
+ projectId: input.projectId,
98
+ sourceRoot,
99
+ defaultsInUse: status.defaultDocuments > 0,
100
+ approved,
101
+ status,
102
+ next: approved
103
+ ? {
104
+ action: "initialize-top-journal-project",
105
+ minimumAction: "Initialize the project with --goal top-journal and this policy project ID.",
106
+ retryCommand: `tiangong-ai research project init ${input.projectId} --question <research-question> --goal top-journal --workspace ${root} --help`,
107
+ }
108
+ : {
109
+ action: "customize-and-approve",
110
+ minimumAction: "Review the policy directory and approve the exact resulting hash.",
111
+ retryCommand: `tiangong-ai research policy approve ${input.projectId} --confirm --acknowledge-defaults --workspace ${root}`,
112
+ },
113
+ };
114
+ }
115
+ export async function runInteractiveResearchPolicyWizard(input) {
116
+ const sourceRoot = await resolveInstalledResearchPolicySource(input.root, input.io.env);
117
+ if (!input.io.stdin?.isTTY) {
118
+ throw new CliError("Interactive Research Policy setup requires a TTY.", {
119
+ code: "RESEARCH_POLICY_TTY_REQUIRED",
120
+ exitCode: 2,
121
+ details: {
122
+ minimumAction: "Run the Policy Wizard in a terminal, or use policy catalog/init/status/approve for automation.",
123
+ retryCommand: "tiangong-ai research policy wizard --help",
124
+ },
125
+ });
126
+ }
127
+ const prompt = new TextResearchSetupWizardPrompt(input.io.stdin, input.io.stderr, createResearchSetupWizardTheme(shouldUseResearchSetupWizardColor({
128
+ outputIsTTY: Boolean(input.io.stderr.isTTY),
129
+ json: input.json,
130
+ environment: input.io.env,
131
+ })));
132
+ try {
133
+ const result = await executeResearchPolicyWizard({
134
+ root: input.root,
135
+ projectId: input.projectId,
136
+ prompt,
137
+ sourceRoot,
138
+ environment: input.io.env,
139
+ });
140
+ write(input.io.stdout, stringifyJson(result, input.json));
141
+ return 0;
142
+ }
143
+ finally {
144
+ prompt.close();
145
+ }
146
+ }
147
+ async function selectCatalogValue(prompt, label, values) {
148
+ if (!values.length) {
149
+ throw new CliError(`Research Policy catalog has no ${label.toLowerCase()} options.`, {
150
+ code: "RESEARCH_POLICY_SOURCE_INVALID",
151
+ exitCode: 2,
152
+ });
153
+ }
154
+ return prompt.select(label, values.map((value) => ({ value, label: value })), values[0]);
155
+ }
156
+ async function requiredPolicyInput(prompt, label, minimumBytes, defaultValue = "") {
157
+ const value = (await prompt.input(label, defaultValue)).trim();
158
+ if (Buffer.byteLength(value, "utf8") < minimumBytes) {
159
+ throw new CliError(`${label} is required and must be explicit.`, {
160
+ code: "RESEARCH_POLICY_INVALID",
161
+ exitCode: 2,
162
+ details: { field: label },
163
+ });
164
+ }
165
+ return value;
166
+ }
167
+ //# sourceMappingURL=research-policy-wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-policy-wizard.js","sourceRoot":"","sources":["../../../src/research/workspace/research-policy-wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { ResearchPolicyBinding, ResearchVerdictCeiling } from "./types.js";
2
+ export type ResearchPolicyStatusKind = "missing" | "default-unapproved" | "default-approved" | "custom-draft" | "custom-approved" | "conflict" | "stale" | "changed" | "invalid";
3
+ export interface ResearchPolicyStatus {
4
+ schemaVersion: 1;
5
+ projectId: string;
6
+ status: ResearchPolicyStatusKind;
7
+ policyDirectory: string;
8
+ defaultDocuments: number;
9
+ customDocuments: number;
10
+ invalidDocuments: string[];
11
+ conflicts: string[];
12
+ approvedAt: string | null;
13
+ expiresAt: string | null;
14
+ resolvedPolicySha256: string | null;
15
+ verdictCeiling: ResearchVerdictCeiling | null;
16
+ targetJournal: string | null;
17
+ guidance: string;
18
+ }
19
+ export declare function inspectResearchPolicyCatalog(sourceRoot: string): Promise<{
20
+ schemaVersion: 1;
21
+ sourceTreeSha256: string;
22
+ categories: {
23
+ articleTypes: string[];
24
+ fields: string[];
25
+ journalClasses: string[];
26
+ };
27
+ defaults: {
28
+ baseline: string;
29
+ reviewers: string[];
30
+ publicationBrief: string;
31
+ };
32
+ }>;
33
+ export declare function initializeResearchPolicy(input: {
34
+ root: string;
35
+ projectId: string;
36
+ sourceRoot: string;
37
+ articleType: string;
38
+ field: string;
39
+ journalClass: string;
40
+ includeExactJournalTemplate?: boolean;
41
+ }): Promise<ResearchPolicyStatus>;
42
+ export declare function completeResearchPublicationBrief(rootInput: string, projectId: string, input: {
43
+ centralQuestion: string;
44
+ centralClaim: string;
45
+ centralOutcome: string;
46
+ contributionType: string;
47
+ targetJournal?: string | null;
48
+ }): Promise<ResearchPolicyStatus>;
49
+ export declare function completeResearchExactJournalPolicy(rootInput: string, projectId: string, input: {
50
+ journalName: string;
51
+ officialGuidelinesUrl: string;
52
+ officialGuidelinesRetrievedAt: string;
53
+ scope: string;
54
+ editorialSignificance: string;
55
+ evidenceExpectations: string;
56
+ methodsAndValidation: string;
57
+ reproducibility: string;
58
+ deskRejectTriggers: string;
59
+ requiredReviewerQuestions: string;
60
+ permittedPivots: string;
61
+ }): Promise<ResearchPolicyStatus>;
62
+ export declare function inspectResearchPolicyStatus(rootInput: string, projectId: string, options?: {
63
+ now?: Date;
64
+ }): Promise<ResearchPolicyStatus>;
65
+ export declare function approveResearchPolicy(rootInput: string, projectId: string, options: {
66
+ confirm: boolean;
67
+ acknowledgeDefaults?: boolean;
68
+ }): Promise<ResearchPolicyStatus>;
69
+ export declare function loadApprovedResearchPolicy(root: string, projectId: string): Promise<ResearchPolicyBinding>;
70
+ export declare function assertResearchPolicyBinding(root: string, binding: ResearchPolicyBinding): Promise<void>;