@cleocode/cleo 2026.4.112 → 2026.4.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -42721,6 +42721,7 @@ var logCommand2 = defineCommand({
42721
42721
  });
42722
42722
 
42723
42723
  // packages/cleo/src/cli/commands/manifest.ts
42724
+ import { buildManifestEntryFromShorthand } from "@cleocode/core/memory/manifest-builder.js";
42724
42725
  init_cli();
42725
42726
  var showCommand7 = defineCommand({
42726
42727
  meta: {
@@ -42863,24 +42864,32 @@ var statsCommand3 = defineCommand({
42863
42864
  var appendCommand = defineCommand({
42864
42865
  meta: {
42865
42866
  name: "append",
42866
- description: "Append a new manifest entry"
42867
+ description: "Append a new manifest entry (pipeline_manifest table). Accepts either a full --entry JSON blob / --file / stdin, OR the shorthand --task + --type + --content flags which build a valid entry with sensible defaults for id/file/title/date/etc."
42867
42868
  },
42868
42869
  args: {
42869
42870
  entry: {
42870
42871
  type: "string",
42871
- description: "JSON string of entry fields"
42872
+ description: "JSON string of entry fields (full ManifestEntry shape)"
42872
42873
  },
42873
42874
  task: {
42874
42875
  type: "string",
42875
- description: "Task ID to associate (shorthand for entry.task_id)"
42876
+ description: "Task ID to associate \u2014 becomes linked_tasks[0] + id prefix (shorthand)"
42876
42877
  },
42877
42878
  type: {
42878
42879
  type: "string",
42879
- description: "Entry type (shorthand for entry.type)"
42880
+ description: "Entry type \u2014 becomes agent_type (e.g. research, implementation, decomposition) (shorthand)"
42880
42881
  },
42881
42882
  content: {
42882
42883
  type: "string",
42883
- description: "Entry content string (shorthand for entry.content)"
42884
+ description: "One-paragraph summary \u2014 becomes key_findings[0] and title (first line) (shorthand)"
42885
+ },
42886
+ title: {
42887
+ type: "string",
42888
+ description: "Explicit title override for shorthand mode"
42889
+ },
42890
+ status: {
42891
+ type: "string",
42892
+ description: "Entry status: completed (default) | partial | blocked (shorthand)"
42884
42893
  },
42885
42894
  file: {
42886
42895
  type: "string",
@@ -42889,6 +42898,7 @@ var appendCommand = defineCommand({
42889
42898
  },
42890
42899
  async run({ args }) {
42891
42900
  let entry;
42901
+ const hasShorthand = Boolean(args.task || args.type || args.content);
42892
42902
  if (args.entry) {
42893
42903
  try {
42894
42904
  entry = JSON.parse(args.entry);
@@ -42905,10 +42915,22 @@ var appendCommand = defineCommand({
42905
42915
  console.error(`Error: failed to read or parse ${args.file}`);
42906
42916
  process.exit(1);
42907
42917
  }
42918
+ } else if (hasShorthand) {
42919
+ entry = {
42920
+ ...buildManifestEntryFromShorthand({
42921
+ task: args.task,
42922
+ type: args.type,
42923
+ content: args.content,
42924
+ title: args.title,
42925
+ status: args.status
42926
+ })
42927
+ };
42908
42928
  } else {
42909
42929
  const stdinData = await readStdin();
42910
42930
  if (!stdinData) {
42911
- console.error("Error: must provide --entry, --file, or stdin with JSON entry data");
42931
+ console.error(
42932
+ "Error: must provide --entry JSON, --file path, stdin, or shorthand (--task + --type + --content)"
42933
+ );
42912
42934
  process.exit(1);
42913
42935
  }
42914
42936
  try {
@@ -42918,14 +42940,22 @@ var appendCommand = defineCommand({
42918
42940
  process.exit(1);
42919
42941
  }
42920
42942
  }
42921
- if (args.task) {
42922
- entry.task_id = args.task;
42923
- }
42924
- if (args.type) {
42925
- entry.type = args.type;
42926
- }
42927
- if (args.content) {
42928
- entry.content = args.content;
42943
+ if ((args.entry || args.file) && hasShorthand) {
42944
+ if (args.task) {
42945
+ entry.linked_tasks = Array.isArray(entry.linked_tasks) ? [args.task, ...entry.linked_tasks.filter((t) => t !== args.task)] : [args.task];
42946
+ }
42947
+ if (args.type) {
42948
+ entry.agent_type = args.type;
42949
+ }
42950
+ if (args.content && !entry.key_findings) {
42951
+ entry.key_findings = [args.content];
42952
+ }
42953
+ if (args.title) {
42954
+ entry.title = args.title;
42955
+ }
42956
+ if (args.status) {
42957
+ entry.status = args.status;
42958
+ }
42929
42959
  }
42930
42960
  await dispatchFromCli(
42931
42961
  "mutate",